*** 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 @tex
48
49
50 @end tex
51
52 @titlepage
53 @title September Gnus Manual
54
55 @author by Lars Magne Ingebrigtsen
56 @page
57 @vskip 0pt plus 1filll
58 Copyright @copyright{} 1995 Free Software Foundation, Inc. 
59
60 Permission is granted to make and distribute verbatim copies of
61 this manual provided the copyright notice and this permission notice
62 are preserved on all copies.
63
64 Permission is granted to copy and distribute modified versions of this
65 manual under the conditions for verbatim copying, provided that the
66 entire resulting derived work is distributed under the terms of a
67 permission notice identical to this one.
68
69 Permission is granted to copy and distribute translations of this manual
70 into another language, under the above conditions for modified versions.
71
72 Cover art by Etienne Suvasa.
73 @end titlepage
74 @page
75
76 @end iftex
77
78 @node Top
79 @top The Gnus Newsreader
80
81 You can read news (and mail) from within Emacs by using Gnus.  The news
82 can be gotten by any nefarious means you can think of---@sc{nntp}, local
83 spool or your mbox file.  All at the same time, if you want to push your
84 luck.
85
86 @menu
87 * History::                 How Gnus got where it is today.
88 * Terminology::             We use really difficult, like, words here.
89 * Starting Up::             Finding news can be a pain.
90 * The Group Buffer::        Selecting, subscribing and killing groups.
91 * The Summary Buffer::      Reading, saving and posting articles.
92 * The Article Buffer::      Displaying and handling articles.
93 * The Server Buffer::       Making and editing virtual servers.
94 * Scoring::                 Assigning values to articles.
95 * Various::                 General purpose settings.
96 * Customization::           Tailoring Gnus to your needs.
97 * Troubleshooting::         What you might try if things do not work.
98 * The End::                 Farewell and goodbye.
99 * Appendices::              Technical stuff, Emacs intro, FAQ
100 * Index::                   Variable, function and concept index.
101 * Key Index::               Key Index.
102 @end menu
103
104 @node History
105 @chapter History
106
107 @cindex history
108 @sc{gnus} was written by Masanobu UMEDA.  When autumn crept up in '94,
109 Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
110
111 If you want to investigate the person responsible for this outrage, you
112 can point your (feh!) web browser to
113 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
114 distribution point for the new and spiffy versions of Gnus, also know as
115 The Site That Destroys Newsrcs And Drives People Mad.
116
117 During the first extended alpha period of develpment, the new Gnus was
118 called "(ding) Gnus".  @dfn{(ding)}, is, of course, short for @dfn{ding
119 is not Gnus}, which is a total and utter lie, but who cares? (Besides,
120 the "Gnus" in this abbreviation should probably be pronounced "news" as
121 UMEDA intended, which makes it a more appropriate name, don't you
122 think?)
123
124 In any case, after spending all that energy with coming up with a new
125 and spiffy name, we decided that the name was @emph{too} spiffy, so we
126 renamamed it back again to "Gnus".  But in mixed case.  "Gnus" vs.
127 "@sc{gnus}".  New vs. old.
128
129 Incidentally, the next Gnus generation will be called "September Gnus",
130 and won't be released until February.  Confused?  You will be.
131
132 @menu
133 * Why?::                What's the point of Gnus?
134 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
135 * Conformity::          Gnus tries to conform to all standards.
136 * Emacsen::             Gnus can be run on a few modern Emacsen.
137 * Contributors::        Oodles of people.  
138 * New Features::        Pointers to some of the new stuff in Gnus.
139 * Newest Features::     Features so new that they haven't been written yet.
140 @end menu
141
142 @node Why?
143 @section Why?
144
145 What's the point of Gnus?  
146
147 I want to provide a "rad", "happening", "way cool" and "hep" newsreader,
148 that lets you do anything you can think of.  That was my original
149 motivation, but while working on Gnus, it has become clear to me that
150 this generation of newsreaders really belong in the stone age.
151 Newsreaders haven't developed much since the infancy of the net.  If the
152 volume continues to rise with the current rate of increase, all current
153 newsreaders will be pretty much useless.  How do you deal with
154 newsgroups that have hundreds (or thousands) of new articles each day? 
155
156 Gnus offer no real solutions to these questions, but I would very much
157 like to see Gnus being used as a testing ground for new methods of
158 reading and fetching news.  Expanding on Umeda-san's wise decision to
159 separate the newsreader from the backends, Gnus now offers a simple
160 interface for anybody who wants to write new backends for fetching mail
161 and news from different sources.  I have added hooks for customizations
162 everywhere I can imagine useful.  By doing so, I'm inviting every one of
163 you to explore and invent new ways of reading news.
164
165 May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
166
167 @node Compatibility
168 @section Compatibility
169
170 @cindex compatibility
171 Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
172 bindings have been kept.  More key bindings have been added, of course,
173 but only in one or two obscure cases have old bindings been changed.
174
175 Our motto is:
176 @quotation
177 @cartouche
178 @center In a cloud bones of steel.
179 @end cartouche
180 @end quotation
181
182 All commands have kept their names.  Some internal functions have changed
183 their names.
184
185 The @code{gnus-uu} package has changed drastically. @xref{Decoding
186 Articles}. 
187
188 One major compatibility question is the presence of several summary
189 buffers.  All variables that are relevant while reading a group are
190 buffer-local to the summary buffer they belong in.  Although most
191 important variables have their values copied into their global
192 counterparts whenever a command is executed in the summary buffer, this
193 change might lead to incorrect values being used unless you are careful.
194
195 All code that relies on knowledge of @sc{gnus} internals will probably
196 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
197 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
198 maintains a hash table that points to the entries in this assoc (which
199 speeds up many functions), and changing the assoc directly will lead to
200 peculiar results.
201
202 @cindex hilit19
203 @cindex highlighting
204 Old hilit19 code does not work at all.  In fact, you should probably
205 remove all hilit code from all Gnus hooks
206 (@code{gnus-group-prepare-hook}, @code{gnus-summary-prepare-hook} and
207 @code{gnus-summary-article-hook}).  (Well, at the very least the first
208 two.)  Gnus provides various integrated functions for highlighting.
209 These are faster and more accurate.  To make life easier for everybody,
210 Gnus will by default remove all hilit calls from all hilit hooks.
211 Uncleanliness!  Away!
212
213 Packages like @code{expire-kill} will no longer work.  As a matter of
214 fact, you should probably remove all old @sc{gnus} packages (and other
215 code) when you start using Gnus.  More likely than not, Gnus already
216 does what you have written code to make @sc{gnus} do.  (Snicker.)
217
218 Even though old methods of doing things are still supported, only the
219 new methods are documented in this manual.  If you detect a new method of
220 doing something while reading this manual, that does not mean you have
221 to stop doing it the old way.
222
223 Gnus understands all @sc{gnus} startup files.
224
225 @kindex M-x gnus-bug
226 Overall, a casual user who hasn't written much code that depends on
227 @sc{gnus} internals should suffer no problems.  If problems occur,
228 please let me know (@kbd{M-x gnus-bug}).
229
230
231 @node Conformity
232 @section Conformity
233
234 No rebels without a clue here, ma'am.  We conform to all standards known
235 to (wo)man.  Except for those standards and/or conventions we disagree
236 with, of course.
237
238 @table @strong
239
240 @item RFC 822
241 There are no known breaches of this standard.
242
243 @item RFC 1036
244 There are no known breaches of this standard, either.
245
246 @item Usenet Seal of Approval
247 Gnus hasn't been formally through the Seal process, but I have read
248 through the Seal text and I think Gnus would pass.
249
250 @item Son-of-RFC 1036
251 We do have some breaches to this one.
252
253 @table @emph
254
255 @item MIME
256 Gnus does no MIME handling, and this standard-to-be seems to think that
257 MIME is the bees' knees, so we have major breakage here.
258
259 @item X-Newsreader
260 This is considered to be a "vanity header", while I consider it to be
261 consumer information.  After seeing so many badly formatted articles
262 coming from @code{tin} and @code{Netscape} I know not to use either of
263 those for posting articles.  I would not have known that if it wasn't
264 for the @code{X-Newsreader} header.
265
266 @item References
267 Gnus breaks lines if this header is long.  I infer from RFC1036 that
268 being conservative in what you output is not creating 5000-character
269 lines, so it seems like a good idea to me.  However, this standard-to-be
270 says that whitespace in the @code{References} header is to be preserved,
271 so...  It doesn't matter one way or the other to Gnus, so if somebody
272 tells me what The Way is, I'll change it.  Or not.
273 @end table
274
275 @end table
276
277 If you ever see Gnus act noncompliantly to the texts mentioned above,
278 don't hesitate to drop a note to Gnus Towers and let us know.
279
280
281 @node Emacsen
282 @section Emacsen
283 @cindex Emacsen
284 @cindex XEmacs
285 @cindex Mule
286 @cindex Emacs
287
288 Gnus should work on :
289
290 @itemize @bullet 
291
292 @item
293 Emacs 19.30 and up.
294
295 @item
296 XEmacs 19.13 and up.
297
298 @item 
299 Mule versions based on Emacs 19.30 and up.
300
301 @end itemize
302
303 Gnus will absolutely not work on any Emacsen older than that.  Not
304 reliably, at least. 
305
306 There are some vague differences in what Gnus does, though:
307
308 @itemize @bullet
309
310 @item
311 The mouse-face on Gnus lines under Emacs and Mule is delimited to
312 certain parts of the lines while they cover the entire line under
313 XEmacs. 
314
315 @item 
316 The same with current-article marking---XEmacs puts an underline under
317 the entire summary line while Emacs and Mule are nicer and kinder.
318
319 @item
320 XEmacs features more graphics---a logo and a toolbar.
321
322 @item
323 Citation highlighting us better under Emacs and Mule than under XEmacs.
324
325 @item
326 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
327 confusing. 
328
329 @end itemize
330
331
332 @node Contributors
333 @section Contributors
334 @cindex contributors
335
336 The new Gnus version couldn't have been done without the help of all the
337 people on the (ding) mailing list.  Every day for months I have gotten
338 tens of nice bug reports from them, filling me with joy, every single
339 one of them.  Smooches.  The people on the list have been tried beyond
340 endurance, what with my "oh, that's a neat idea <type type>, yup, I'll
341 release it right away <ship off> no wait, that doesn't work at all <type
342 type>, yup, I'll ship that one off right away <ship off> no, wait, that
343 absolutely does not work" policy for releases.  Micro$oft---bah.
344 Amateurs.  I'm @emph{much} worse.  (Or is that "worser"? "much worser"?
345 "worsest"?)
346
347 I would like to take this opportunity to thank the Academy for...  oops,
348 wrong show.
349
350 @itemize @bullet
351 @item
352 Of course, GNUS was written by Masanobu UMEDA.
353 @item 
354 Many excellent functions, especially dealing with scoring and
355 highlighting (as well as the @sc{soup} support) was written
356 by Per Abrahamsen.
357 @item
358 Innumerable bug fixes were written by Sudish Joseph.
359 @item 
360 @code{gnus-topic} was written by Ilja Weis.
361 @item 
362 Lots and lots of bugs were found and fixed by Steven L. Baur. 
363 @item
364 The refcard was written by Vladimir Alexiev.
365 @item
366 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
367 @item 
368 @code{nnfolder} has been much enhanced by Scott Byer.
369 @item
370 The orphan scoring was written by Peter Mutsaers.
371 @item 
372 GNU XEmacs support has been added by Fabrice Popineau. 
373 @item 
374 POP mail support was written by Ken Raeburn.
375 @item 
376 Various bits and pieces, especially dealing with .newsrc files, were
377 suggested and added by Hallvard B Furuseth.
378 @item 
379 Brian Edmonds has written @code{gnus-bbdb}.
380 @item 
381 Ricardo Nassif did the proof-reading.
382 @item
383 Kevin Davidson came up with the name @dfn{ding}, so blame him.
384 @item 
385 Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel
386 Quinlan, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have
387 all contributed code and suggestions.
388 @end itemize
389
390
391 @node New Features
392 @section New Features
393 @cindex new features
394
395 @itemize @bullet
396
397 @item
398 The look of all buffers can be changed by setting format-like variables
399 (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). 
400  
401 @item 
402 Local spool and several @sc{nntp} servers can be used at once
403 (@pxref{Foreign Groups}).  
404
405 @item 
406 You can combine groups into virtual groups (@pxref{nnvirtual}). 
407
408 @item 
409 You can read a number of different mail formats (@pxref{Reading Mail}).
410 All the mail backends implement a convenient mail expiry scheme
411 (@pxref{Expiring Old Mail Articles}). 
412
413 @item
414 Gnus can use various strategies for gathering threads that have lost
415 their roots (thereby gathering loose sub-threads into one thread) or it
416 can go back and retrieve enough headers to build a complete thread
417 (@pxref{Customizing Threading}).
418
419 @item 
420 Killed groups can be displayed in the group buffer, and you can read
421 them as well.
422
423 @item 
424 Gnus can do partial group updates---you do not have to retrieve the
425 entire active file just to check for new articles in a few groups
426 (@pxref{The Active File}).
427
428 @item 
429 Gnus implements a sliding scale of subscribedness to groups
430 (@pxref{Group Levels}).
431
432 @item 
433 You can score articles according to any number of criteria
434 (@pxref{Scoring}).  You can even get Gnus to find out how to score
435 articles for you (@pxref{Adaptive Scoring}).
436
437 @item 
438 Gnus maintains a dribble buffer that is auto-saved the normal Emacs
439 manner, so it should be difficult to lose much data on what you have
440 read if your machine should go down (@pxref{Auto Save}). 
441
442 @item 
443 Gnus now has its own startup file to avoid cluttering up the
444 @file{.emacs} file.
445
446 @item 
447 You can set the process mark on both groups and articles and perform
448 operations on all the marked items (@pxref{Process/Prefix}).
449
450 @item 
451 You can grep through a subset of groups and create a group from the
452 results (@pxref{nnkiboze}). 
453
454 @item 
455 You can list subsets of groups according to, well, anything
456 (@pxref{Listing Groups}). 
457
458 @item 
459 You can browse foreign servers and subscribe to groups from those
460 servers (@pxref{Browse Foreign Server}). 
461
462 @item 
463 Gnus can fetch articles asynchronously on a second connection to the
464 server (@pxref{Asynchronous Fetching}).
465
466 @item 
467 You can cache articles locally (@pxref{Article Caching}). 
468
469 @item 
470 The uudecode functions have been expanded and generalized
471 (@pxref{Decoding Articles}). 
472
473 @item
474 You can still post uuencoded articles, which was a little-known feature
475 of @sc{gnus}' past (@pxref{Uuencoding & Posting}).
476
477 @item
478 Fetching parents (and other articles) now actually works without
479 glitches (@pxref{Finding the Parent}). 
480
481 @item
482 Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
483
484 @item
485 Digests (and other files) can be used as the basis for groups
486 (@pxref{nndoc}).
487
488 @item 
489 Articles can be highlighted and customized (@pxref{Customizing
490 Articles}). 
491
492 @item 
493 URLs and other external references can be buttonized (@pxref{Article
494 Buttons}). 
495
496 @item
497 All Gnus buffers can be customized in a difficult fashion
498 (@pxref{Windows Configuration}). 
499
500 @item
501 You can click on buttons instead of using the keyboard
502 (@pxref{Buttons}). 
503
504 @item 
505 Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}). 
506
507 @end itemize
508
509 This is, of course, just a @emph{short} overview of the @emph{most}
510 important new features.  No, really.  There are tons more.  Yes, we have
511 feeping creaturism in full effect, but nothing too gratuitous, I would
512 hope. 
513
514
515 @node Newest Features
516 @section Newest Features
517 @cindex todo
518
519 Also known as the @dfn{todo list}.  Sure to be implemented before the
520 next millennium. 
521
522 Be afraid.  Be very afraid.
523
524 @itemize @bullet
525 @item
526 Native @sc{mime} support is something that should be done.  
527 @item
528 A better and simpler method for specifying mail composing methods. 
529 @item
530 Allow posting through mail-to-news gateways.
531 @item
532 Really do unbinhexing.
533 @end itemize
534
535 And much, much, much more.  There is more to come than has already been
536 implemented.  (But that's always true, isn't it?)
537
538 @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
539 up-to-the-second todo list is located, so if you're really curious, you
540 could point your Web browser over that-a-way.
541
542
543 @node Terminology
544 @chapter Terminology
545
546 @cindex terminology
547 @table @dfn
548
549 @item news
550 @cindex news
551 This is what you are supposed to use this thing for---reading news.
552 News is generally fetched from a nearby @sc{nntp} server, and is
553 generally publicly available to everybody.  If you post news, the entire
554 world is likely to read just what you have written, and they'll all
555 snigger mischievously.  Behind your back.
556
557 @item mail
558 @cindex mail
559 Everything that's delivered to you personally is mail.  Some news/mail
560 readers (like Gnus) blur the distinction between mail and news, but
561 there is a difference.  Mail is private.  News is public.  Mailing is
562 not posting, and replying is not following up.
563
564 @item reply
565 Send a mail to the person who has written what you are reading.
566
567 @item follow up
568 Post an article to the current newsgroup responding to the article you
569 are reading.
570
571 @item backend
572 Gnus gets fed articles from a number of backends, both news and mail
573 backends.  Gnus does not handle the underlying media, so to speak---this
574 is all done by the backends.
575
576 @item native
577 Gnus will always use one method (and backend) as the @dfn{native}, or
578 default, way of getting news.
579
580 @item foreign
581 You can also have any number of foreign groups at the same time.  These
582 are groups that use different backends for getting news.
583
584 @item head
585 @cindex head
586 The top part of an article, where administration information (etc.) is
587 put. 
588
589 @item body
590 @cindex body
591 The rest of an article.  Everything that is not in the head is in the
592 body. 
593
594 @item header
595 @cindex header
596 A line from the head of an article. 
597
598 @item headers
599 @cindex headers
600 A collection of such lines, or a collection of heads.  Or even a
601 collection of @sc{nov} lines.
602
603 @item @sc{nov}
604 @cindex nov
605 When Gnus enters a group, it asks the backend for the headers for all
606 the unread articles in the group.  Most servers support the News OverView
607 format, which is much smaller and much faster to read than the normal
608 HEAD format. 
609
610 @item level
611 @cindex levels
612 Each group is subscribed at some @dfn{level} or other (1-9).  The ones
613 that have a lower level are "more" subscribed than the groups with a
614 higher level.  In fact, groups on levels 1-5 are considered
615 @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
616 are @dfn{killed}.  Commands for listing groups and scanning for new
617 articles will all use the numeric prefix as @dfn{working level}.
618
619 @item killed groups
620 @cindex killed groups
621 No information on killed groups is stored or updated, which makes killed
622 groups much easier to handle than subscribed groups.
623
624 @item zombie groups
625 @cindex zombie groups
626 Just like killed groups, only slightly less dead.
627
628 @item active file
629 @cindex active file
630 The news server has to keep track of what articles it carries, and what
631 groups exist.  All this information in stored in the active file, which
632 is rather large, as you might surmise.
633
634 @item bogus groups
635 @cindex bogus groups
636 A group that exists in the @file{.newsrc} file, but isn't known to the
637 server (i. e.,  it isn't in the active file), is a @emph{bogus group}.
638 This means that the group probably doesn't exist (any more).
639 @end table
640
641
642 @node Starting Up
643 @chapter Starting Gnus
644 @cindex starting up
645
646 @kindex M-x gnus
647 @findex gnus
648 If your system administrator has set things up properly, starting Gnus
649 and reading news is extremely easy---you just type @kbd{M-x gnus}.
650
651 @findex gnus-other-frame
652 @kindex M-x gnus-other-frame
653 If you want to start Gnus in a different frame, you can use the command
654 @kbd{M-x gnus-other-frame} instead.
655
656 If things do not go smoothly at startup, you have to twiddle some
657 variables. 
658
659 @menu
660 * Finding the News::    Choosing a method for getting news.
661 * The First Time::      What does Gnus do the first time you start it?
662 * The Server is Down::  How can I read my mail then?
663 * Slave Gnusii::        You can have more than one Gnus active at a time.
664 * Fetching a Group::    Starting Gnus just to read a group.
665 * New Groups::          What is Gnus supposed to do with new groups?
666 * Startup Files::       Those pesky startup files---@file{.newsrc}.
667 * Auto Save::           Recovering from a crash.
668 * The Active File::     Reading the active file over a slow line Takes Time.
669 * Startup Variables::   Other variables you might change.
670 @end menu
671
672 @node Finding the News
673 @section Finding the News
674
675 @vindex gnus-select-method
676 The @code{gnus-select-method} variable controls how Gnus finds news.
677 This variable should be a list where the first element says @dfn{how}
678 and the second element says @dfn{where}.  This method is your native
679 method.  All groups that are not fetched with this method are foreign
680 groups.
681
682 For instance, if you want to get your daily dosage of news from the
683 @samp{news.somewhere.edu} @sc{nntp} server, you'd say:
684
685 @lisp
686 (setq gnus-select-method '(nntp "news.somewhere.edu"))
687 @end lisp
688
689 If you want to read directly from the local spool, say:
690
691 @lisp
692 (setq gnus-select-method '(nnspool ""))
693 @end lisp
694
695 If you can use a local spool, you probably should, as it will almost
696 certainly be much faster.
697
698 @vindex gnus-nntpserver-file
699 @cindex NNTPSERVER
700 @cindex @sc{nntp} server
701 If this variable is not set, Gnus will take a look at the
702 @code{NNTPSERVER} environment variable.  If that variable isn't set,
703 Gnus will see whether @code{gnus-nntpserver-file} (default
704 @file{/etc/nntpserver}) has any opinions in the matter.  It that fails
705 as well, Gnus will will try to use the machine that is running Emacs as
706 an @sc{nntp} server.  That's a longshot, though.
707
708 @vindex gnus-nntp-server
709 If @code{gnus-nntp-server} is set, this variable will override
710 @code{gnus-select-method}.  You should therefore set
711 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
712
713 @vindex gnus-secondary-servers
714 You can also make Gnus prompt you interactively for the name of an
715 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
716 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
717 in the @code{gnus-secondary-servers} list (if any).  You can also just
718 type in the name of any server you feel like visiting.
719
720 However, if you use one @sc{nntp} server regularly, and are just
721 interested in a couple of groups from a different server, you would be
722 better served by using the @code{gnus-group-browse-foreign-server}
723 command from the group buffer.  It will let you have a look at what
724 groups are available, and you can subscribe to any of the groups you
725 want to.  This also makes @file{.newsrc} maintenance much tidier.
726 @xref{Foreign Groups}.
727
728 @vindex gnus-secondary-select-methods
729 A slightly different approach to foreign groups is to set the
730 @code{gnus-secondary-select-methods} variable.  The select methods
731 listed in this variable are in many ways just as native as the
732 @code{gnus-select-method} server.  They will also be queried for active
733 files during startup (if that's required), and new newsgroups that
734 appear on these servers will be subscribed (or not) just as native
735 groups are.
736
737 For instance, if you use the @code{nnmbox} backend to read you mail, you
738 would typically set this variable to
739
740 @lisp
741 (setq gnus-secondary-select-methods '((nnmbox "")))
742 @end lisp
743
744 @node The First Time
745 @section The First Time
746 @cindex first time usage
747
748 If no startup files exist, Gnus will try to determine what groups should
749 be subscribed by default.
750
751 @vindex gnus-default-subscribed-newsgroups
752 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
753 will subscribe you to just those groups in that list, leaving the rest
754 killed.  Your system administrator should have set this variable to
755 something useful.
756
757 Since she hasn't, Gnus will just subscribe you to a few randomly picked
758 groups (i.e., @samp{*.newusers}).  (@dfn{Random} is here defined as
759 "whatever Lars thinks you should read".)
760
761 You'll also be subscribed to the Gnus documentation group, which should
762 help you with most common problems.  
763
764 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
765 use the normal functions for handling new groups, and not do anything
766 special.
767
768 @node The Server is Down
769 @section The Server is Down
770 @cindex server errors
771
772 If the default server is down, Gnus will understandably have some
773 problems starting.  However, if you have some mail groups in addition to
774 the news groups, you may want to start Gnus anyway.
775
776 Gnus, being the trusting sort of program, will ask whether to proceed
777 without a native select method if that server can't be contacted.  This
778 will happen whether the server doesn't actually exist (i.e., you have
779 given the wrong address) or the server has just momentarily taken ill
780 for some reason or other.  
781
782 If Gnus says "nntp server on <your server> can't be opened.  Continue?",
783 you do not want to continue unless you have some foreign groups that you
784 want to read.  Even if you don't, Gnus will let you continue, but you'll
785 find it difficult to actually do anything in the group buffer.  But,
786 hey, that's your problem.  Blllrph!
787
788 @findex gnus-no-server
789 If you know that the server is definitely down, or you just want to read
790 your mail without bothering with the server at all, you can use the
791 @code{gnus-no-server} command to start Gnus.  That might come in handy
792 if you're in a hurry as well.
793
794
795 @node Slave Gnusii
796 @section Slave Gnusiï
797 @cindex slave
798
799 You might want to run more than one Emacs with more than one Gnus at the
800 same time.  If you are using different @file{.newsrc} files (eg., if you
801 are using the two different Gnusiï to read from two different servers),
802 that is no problem whatsoever.  You just do it.
803
804 The problem appears when you want to run two Gnusiï that use the same
805 @code{.newsrc} file.
806
807 To work around that problem some, we here at the Think-Tank at the Gnus
808 Towers have come up with a new concept: @dfn{Masters} and
809 @dfn{servants}.  (We have applied for a patent on this concept, and have
810 taken out a copyright on those words.  If you wish to use those words in
811 conjunction with each other, you have to send $1 per usage instance to
812 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
813 Applications}) will be much more expensive, of course.)
814
815 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
816 however you do it).  Each subsequent slave Gnusiï should be started with
817 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
818 files, but some slave files that contains information only on what
819 groups have been read in the slave session.  When a master Gnus starts,
820 it will read (and delete) these slave files, incorporating all
821 information from all of them.  (The slave files will be read in the
822 sequence they were created, so the latest changes will have precedence.)
823
824 Information from the slave files has, of course, presedence over the
825 information in the normal (i. e., master) @code{.newsrc} file.
826
827
828 @node Fetching a Group
829 @section Fetching a Group
830
831 @findex gnus-fetch-group
832 It it sometime convenient to be able to just say "I want to read this
833 group and I don't care whether Gnus has been started or not".  This is
834 perhaps more useful for people who write code than for users, but the
835 command @code{gnus-fetch-group} provides this functionality in any
836 case.  It takes the group name as a paramenter.
837
838
839 @node New Groups
840 @section New Groups
841 @cindex new groups
842
843 @vindex gnus-subscribe-newsgroup-method
844 What Gnus does when it encounters a new group is determined by the
845 @code{gnus-subscribe-newsgroup-method} variable.
846
847 This variable should contain a function.  Some handy pre-fab values
848 are:
849
850 @table @code
851
852 @item gnus-subscribe-randomly
853 @vindex gnus-subscribe-randomly
854 Subscribe all new groups randomly.
855
856 @item gnus-subscribe-alphabetically
857 @vindex gnus-subscribe-alphabetically
858 Subscribe all new groups alphabetically.
859
860 @item gnus-subscribe-hierarchically
861 @vindex gnus-subscribe-hierarchically
862 Subscribe all new groups hierarchically.
863
864 @item gnus-subscribe-interactively
865 @vindex gnus-subscribe-interactively
866 Subscribe new groups interactively.  This means that Gnus will ask
867 you about @strong{all} new groups.
868
869 @item gnus-subscribe-killed
870 @vindex gnus-subscribe-killed
871 Kill all new groups.
872
873 @item gnus-subscribe-zombies
874 @vindex gnus-subscribe-zombies
875 Make all new groups zombies.  You can browse the zombies later (with
876 @kbd{A z}) and either kill them all off properly, or subscribe to them.
877 This is the default.
878 @end table
879
880 @vindex gnus-subscribe-hierarchical-interactive
881 A closely related variable is
882 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
883 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
884 hierarchical fashion whether to subscribe to new groups or not.  Gnus
885 will ask you for each sub-hierarchy whether you want to descend the
886 hierarchy or not.
887
888 One common way to control which new newsgroups should be subscribed or
889 ignored is to put an @dfn{options} line at the start of the
890 @file{.newsrc} file.  Here's an example:
891
892 @example
893 options -n !alt.all !rec.all sci.all
894 @end example
895
896 @vindex gnus-subscribe-options-newsgroup-method
897 This line obviously belongs to a serious-minded intellectual scientific
898 person (or she may just be plain old boring), because it says that all
899 groups that have names beginning with @samp{alt} and @samp{rec} should
900 be ignored, and all groups with names beginning with @samp{sci} should
901 be subscribed.  Gnus will not use the normal subscription method for
902 subscribing these groups.
903 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
904 variable defaults to @code{gnus-subscribe-alphabetically}.
905
906 @vindex gnus-options-not-subscribe
907 @vindex gnus-options-subscribe
908 If you don't want to mess with your @file{.newsrc} file, you can just
909 set the two variables @code{gnus-options-subscribe} and
910 @code{gnus-options-not-subscribe}.  These two variables do exactly the
911 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
912 the the new group matches the first, it will be unconditionally
913 subscribed, and if it matches the latter, it will be ignored.
914
915 @vindex gnus-auto-subscribed-groups
916 Yet another variable that meddles here is
917 @code{gnus-auto-subscribed-groups}.  It works exactly like
918 @code{gnus-options-subscribe}, and is therefore really superfluos, but I
919 thought it would be nice to have two of these.  This variable is more
920 meant for setting some ground rules, while the other variable is used
921 more for user fiddling.  By default this variable makes all new groups
922 that come from mail backends (@code{nnml}, @code{nnbabyl},
923 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
924 don't like that, just set this variable to @code{nil}.
925
926 @vindex gnus-check-new-newsgroups
927 If you are satisfied that you really never want to see any new groups,
928 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
929 also save you some time at startup.  Even if this variable is
930 @code{nil}, you can always subscribe to the new groups just by pressing
931 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
932 is @code{t} by default.
933
934 Gnus normally determines whether a group is new or not by comparing the
935 list of groups from the active file(s) with the lists of subscribed and
936 dead groups.  This isn't a particularly fast method.  If
937 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
938 server for new groups since the last time.  This is both faster &
939 cheaper.  This also means that you can get rid of the list of killed
940 groups altogether, so you may set @code{gnus-save-killed-list} to
941 @code{nil}, which will save time both at startup, at exit, and all over.
942 Saves disk space, too.  Why isn't this the default, then?
943 Unfortunately, not all servers support this function. 
944
945 I bet I know what you're thinking now:  How do I find out whether my
946 server supports @code{ask-server}?  No?  Good, because I don't have a
947 fail-safe answer.  I would suggest just setting this variable to
948 @code{ask-server} and see whether any new groups appear after a few
949 days.  If they do, then it works.  If they don't, then it doesn't work.
950 I could write a function to make Gnus guess whether the server supports
951 @code{ask-server}, but it would just be a guess.  So I won't.  You could
952 @code{telnet} to the server and say @samp{HELP} and see whether it lists
953 @samp{NEWGROUPS} among the commands it understands.  If it does, then it
954 might work.  (But there are servers that lists @samp{NEWGROUPS} without
955 supporting the function properly.)
956
957 This variable can also be a list of select methods.  If so, Gnus will
958 issue an @code{ask-server} command to each of the select methods, and
959 subscribe them (or not) using the normal methods.  This might be handy
960 if you are monitoring a few servers for new groups.  A side effect is
961 that startup will take much longer, so you can meditate while waiting.
962 Use the mantra "dingnusdingnusdingnus" to achieve permanent happiness.
963
964 @node Startup Files
965 @section Startup Files
966 @cindex startup files
967 @cindex .newsrc
968
969 Now, you all know about the @file{.newsrc} file.  All subscription
970 information is traditionally stored in this file.
971
972 Things got a bit more complicated with @sc{gnus}.  In addition to
973 keeping the @file{.newsrc} file updated, it also used a file called
974 @file{.newsrc.el} for storing all the information that didn't fit into
975 the @file{.newsrc} file.  (Actually, it duplicated everything in the
976 @file{.newsrc} file.)  @sc{gnus} would read whichever one of these files
977 that were the most recently saved, which enabled people to swap between
978 @sc{gnus} and other newsreaders.
979
980 That was kinda silly, so Gnus went one better: In addition to the
981 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
982 @file{.newsrc.eld}.  It will read whichever of these files that are most
983 recent, but it will never write a @file{.newsrc.el} file.
984
985 @vindex gnus-save-newsrc-file
986 You can also turn off writing the @file{.newsrc} file by setting
987 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
988 the file and save some space, as well as making exit from Gnus faster.
989 However, this will make it impossible to use other newsreaders than
990 Gnus.  But hey, who would want to, right?
991
992 @vindex gnus-save-killed-list
993 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
994 list of killed groups to the startup file.  This will save both time
995 (when starting and quitting) and space (on disk).  It will also means
996 that Gnus has no record of what groups are new or old, so the automatic
997 new groups subscription methods become meaningless.  You should always
998 set @code{gnus-check-new-newsgroups} to @code{nil} or @code{ask-server}
999 if you set this variable to @code{nil} (@pxref{New Groups}).
1000
1001 @vindex gnus-startup-file
1002 The @code{gnus-startup-file} variable says where the startup files are.
1003 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1004 file being whatever that one is with a @samp{.eld} appended.
1005
1006 @vindex gnus-save-newsrc-hook
1007 @vindex gnus-save-quick-newsrc-hook
1008 @vindex gnus-save-standard-newsrc-hook
1009 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1010 files, while @code{gnus-save-quick-newsrc-hook} is called just before
1011 saving the @file{.newsrc.eld} file, and
1012 @code{gnus-save-standard-newsrc-hook} is called just before saving the
1013 @file{.newsrc} file.  The latter two are commonly used to turn version
1014 control on or off.  Version control is off by default when saving.
1015
1016 @node Auto Save
1017 @section Auto Save
1018 @cindex dribble file
1019 @cindex auto-save
1020
1021 Whenever you do something that changes the Gnus data (reading articles,
1022 catching up, killing/subscribing groups), the change is added to a
1023 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
1024 Emacs way.  If your Emacs should crash before you have saved the
1025 @file{.newsrc} files, all changes you have made can be recovered from
1026 this file.
1027
1028 If Gnus detects this file at startup, it will ask the user whether to
1029 read it.  The auto save file is deleted whenever the real startup file is
1030 saved.
1031
1032 @vindex gnus-use-dribble-file
1033 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1034 maintain a dribble buffer.  The default is @code{t}.
1035
1036 @vindex gnus-dribble-directory
1037 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
1038 this variable is @code{nil}, which it is by default, Gnus will dribble
1039 into the same directory as the @file{.newsrc} file is located.  (This is
1040 normally the user's home directory.)
1041
1042 @node The Active File
1043 @section The Active File
1044 @cindex active file
1045 @cindex ignored groups
1046
1047 When Gnus starts, or indeed whenever it tries to determine whether new
1048 articles have arrived, it reads the active file.  This is a very large
1049 file that lists all the active groups and articles on the @sc{nntp}
1050 server.
1051
1052 @vindex gnus-ignored-newsgroups
1053 Before examining the active file, Gnus deletes all lines that match the
1054 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
1055 any groups with bogus names, but you can use this variable to make Gnus
1056 ignore hierarchies you aren't ever interested in.  
1057 @c This variable is
1058 @c @code{nil} by default, and will slow down active file handling somewhat
1059 @c if you set it to anything else.
1060
1061 @vindex gnus-read-active-file
1062 The active file can be rather Huge, so if you have a slow network, you
1063 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1064 reading the active file.  This variable is @code{t} by default.
1065
1066 Gnus will try to make do by just getting information on the groups
1067 that you actually subscribe to.
1068
1069 Note that if you subscribe to lots and lots of groups, setting this
1070 variable to @code{nil} will probably make Gnus slower, not faster.  At
1071 present, having this variable @code{nil} will slow Gnus down
1072 considerably, unless you read news over a 2400 baud modem.  
1073
1074 This variable can also have the value @code{some}.  Gnus will then
1075 attempt to read active info only on the subscribed groups.  On some
1076 servers this is quite fast (on sparkling, brand new INN servers that
1077 support the @samp{LIST ACTIVE group} command), on others this is not
1078 fast at all.  In any case, @code{some} should be faster than @code{nil},
1079 and is certainly faster than @code{t} over slow lines.
1080
1081 If this variable is @code{nil}, Gnus will as for group info in total
1082 lock-step, which isn't very fast.  If it is @code{some} and you use an
1083 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
1084 read all the replies in one swoop.  This will normally result in better
1085 performance, but if the server does not support the aforementioned
1086 @samp{LIST ACTIVE group} command, this isn't very nice to the server.
1087
1088 In any case, if you use @code{some} or @code{nil}, you should kill all
1089 groups that you aren't interested in.
1090
1091 @node Startup Variables
1092 @section Startup Variables
1093
1094 @table @code
1095
1096 @item gnus-load-hook
1097 @vindex gnus-load-hook
1098 A hook that is run while Gnus is being loaded.  Note that this hook will
1099 normally be run just once in each Emacs session, no matter how many
1100 times you start Gnus.
1101
1102 @item gnus-startup-hook
1103 @vindex gnus-startup-hook
1104 A hook that is run after starting up Gnus successfully.
1105
1106 @item gnus-check-bogus-newsgroups
1107 @vindex gnus-check-bogus-newsgroups
1108 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1109 startup.  A @dfn{bogus group} is a group that you have in your
1110 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1111 bogus groups isn't very quick, so to save time and resources, it's best
1112 to leave this option off, and instead do the checking for bogus groups
1113 once in a while from the group buffer (@pxref{Group Maintenance}).
1114
1115 @item gnus-inhibit-startup-message
1116 @vindex gnus-inhibit-startup-message
1117 If non-@code{nil}, the startup message won't be displayed.  That way,
1118 your boss might not notice that you are reading news instead of doing
1119 your job.
1120
1121 @item gnus-no-groups-message
1122 @vindex gnus-no-groups-message
1123 Message displayed by Gnus when no groups are available.
1124 @end table
1125
1126 @node The Group Buffer
1127 @chapter The Group Buffer
1128 @cindex group buffer
1129
1130 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1131 is the first buffer shown when Gnus starts, and will never be killed as
1132 long as Gnus is active.
1133
1134 @menu
1135 * Group Buffer Format::    Information listed and how you can change it.
1136 * Group Maneuvering::      Commands for moving in the group buffer.
1137 * Selecting a Group::      Actually reading news.
1138 * Subscription Commands::  Unsubscribing, killing, subscribing.
1139 * Group Levels::           Levels? What are those, then?
1140 * Group Score::            A mechanism for finding out what groups you like.
1141 * Marking Groups::         You can mark groups for later processing.
1142 * Foreign Groups::         How to create foreign groups.
1143 * Group Parameters::       Each group may have different parameters set.
1144 * Listing Groups::         Gnus can list various subsets of the groups.
1145 * Sorting Groups::         Re-arrange the group order.
1146 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1147 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
1148 * Exiting Gnus::           Stop reading news and get some work done.
1149 * Group Topics::           A folding group mode divided into topics.
1150 * Misc Group Stuff::       Other stuff that you can to do.
1151 @end menu
1152
1153 @node Group Buffer Format
1154 @section Group Buffer Format
1155 @cindex group buffer format
1156
1157 The default format of the group buffer is nice and dull, but you can
1158 make it as exciting and ugly as you feel like.
1159
1160 Here's a couple of example group lines:
1161
1162 @example
1163      25: news.announce.newusers
1164  *    0: alt.fan.andrea-dworkin
1165 @end example
1166
1167 Quite simple, huh?
1168
1169 You can see that there are 25 unread articles in
1170 @samp{news.announce.newusers}.  There are no unread articles, but some
1171 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1172 asterisk at the beginning of the line?)
1173
1174 @vindex gnus-group-line-format
1175 You can fuck that up to your heart's delight by fiddling with the
1176 @code{gnus-group-line-format} variable.  This variable works along the
1177 lines of a @code{format} specification, which is pretty much the same as
1178 a @code{printf} specifications, for those of you who use (feh!) C.
1179 @xref{Formatting Variables}. 
1180
1181 The default value that produced those lines above is 
1182 @samp{"%M%S%5y: %(%g%)\n"}.
1183
1184 There should always be a colon on the line; the cursor always moves to
1185 the colon after performing an operation.  Nothing else is required---not
1186 even the group name.  All displayed text is just window dressing, and is
1187 never examined by Gnus.  Gnus stores all real information it needs using
1188 text properties.
1189
1190 (Note that if you make a really strange, wonderful, spreadsheet-like
1191 layout, everybody will believe you are hard at work with the accounting
1192 instead of wasting time reading news.)
1193
1194 Here's a list of all available format characters:
1195
1196 @table @samp
1197
1198 @item M    
1199 Only marked articles.
1200
1201 @item S
1202 Whether the group is subscribed.
1203
1204 @item L    
1205 Level of subscribedness.
1206
1207 @item N
1208 Number of unread articles.
1209
1210 @item I
1211 Number of dormant articles.
1212
1213 @item T
1214 Number of ticked articles.
1215
1216 @item R
1217 Number of read articles.
1218
1219 @item t
1220 Total number of articles.
1221
1222 @item y
1223 Number of unread, unticked, non-dormant articles.
1224
1225 @item i
1226 Number of ticked and dormant articles.
1227
1228 @item g
1229 Full group name.
1230
1231 @item G
1232 Group name.
1233
1234 @item D
1235 Newsgroup description.
1236
1237 @item o
1238 Moderated.
1239
1240 @item O
1241 Moderated.
1242
1243 @item s
1244 Select method.
1245
1246 @item n
1247 Select from where.
1248
1249 @item z
1250 A string that looks like @samp{<%s:%n>} if a foreign select method is
1251 used.
1252
1253 @item c
1254 @vindex gnus-group-uncollapsed-levels
1255 Short (collapsed) group name.  The @code{gnus-group-uncollapsed-levels}
1256 variable says how many levels to leave at the end of the group name.
1257 The default is @samp{1}.
1258
1259 @item u
1260 User defined specifier.  The next character in the format string should
1261 be a letter.  @sc{gnus} will call the function
1262 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1263 following @samp{%u}.  The function will be passed the current headers as
1264 argument.  The function should return a string, which will be inserted
1265 into the buffer just like information from any other specifier.
1266 @end table
1267
1268 @cindex *
1269 All the "number-of" specs will be filled with an asterisk (@samp{*}) if
1270 no info is available---for instance, if it is a non-activated foreign
1271 group, or a bogus (or semi-bogus) native group.
1272
1273 @vindex gnus-group-mode-line-format
1274 The mode line can be changed by setting
1275 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
1276 format specifiers:
1277
1278 @table @samp
1279 @item S
1280 The native news server.
1281 @item M
1282 The native select method.
1283 @end table
1284
1285 @node Group Maneuvering
1286 @section Group Maneuvering
1287 @cindex group movement
1288
1289 All movement commands understand the numeric prefix and will behave as
1290 expected, hopefully. 
1291
1292 @table @kbd
1293
1294 @item n
1295 @kindex n (Group)
1296 @findex gnus-group-next-unread-group
1297 Go to the next group that has unread articles
1298 (@code{gnus-group-next-unread-group}).
1299
1300 @item p
1301
1302 @itemx DEL
1303 @kindex DEL (Group)
1304 @kindex p (Group)
1305 @findex gnus-group-prev-unread-group
1306 Go to the previous group group that has unread articles
1307 (@code{gnus-group-prev-unread-group}).
1308
1309 @item N
1310 @kindex N (Group)
1311 @findex gnus-group-next-group
1312 Go to the next group (@code{gnus-group-next-group}).
1313
1314 @item P
1315 @kindex P (Group)
1316 @findex gnus-group-prev-group
1317 Go to the previous group (@code{gnus-group-prev-group}).
1318
1319 @item M-p
1320 @kindex M-p (Group)
1321 @findex gnus-group-next-unread-group-same-level
1322 Go to the next unread group on the same level (or lower)
1323 (@code{gnus-group-next-unread-group-same-level}). 
1324
1325 @item M-n
1326 @kindex M-n (Group)
1327 @findex gnus-group-prev-unread-group-same-level
1328 Go to the previous unread group on the same level (or lower)
1329 (@code{gnus-group-prev-unread-group-same-level}). 
1330 @end table
1331
1332 Three commands for jumping to groups:
1333
1334 @table @kbd
1335
1336 @item j
1337 @kindex j (Group)
1338 @findex gnus-group-jump-to-group
1339 Jump to a group (and make it visible if it isn't already)
1340 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1341 like living groups.
1342
1343 @item ,
1344 @kindex , (Group)
1345 @findex gnus-group-best-unread-group
1346 Jump to the unread group with the lowest level
1347 (@code{gnus-group-best-unread-group}). 
1348
1349 @item .
1350 @kindex . (Group)
1351 @findex gnus-group-first-unread-group
1352 Jump to the first group with unread articles
1353 (@code{gnus-group-first-unread-group}).  
1354 @end table
1355
1356 @vindex gnus-group-goto-unread
1357 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1358 commands will move to the next group, not the next unread group.  Even
1359 the commands that say they move to the next unread group.  The default
1360 is @code{t}.
1361
1362
1363 @node Selecting a Group
1364 @section Selecting a Group
1365 @cindex group selection
1366
1367 @table @kbd
1368
1369 @item SPACE
1370 @kindex SPACE (Group)
1371 @findex gnus-group-read-group
1372 Select the current group, switch to the summary buffer and display the
1373 first unread article (@code{gnus-group-read-group}).  If there are no
1374 unread articles in the group, or if you give a non-numerical prefix to
1375 this command, Gnus will offer to fetch all the old articles in this
1376 group from the server.  If you give a numerical prefix @var{N}, Gnus
1377 will fetch @var{N} number of articles.  If @var{N} is positive, fetch
1378 the @var{N} newest articles, if @var{N} is negative, fetch the
1379 @var{abs(N)} oldest articles.
1380
1381 @item RET
1382 @kindex RET (Group)
1383 @findex gnus-group-select-group
1384 Select the current group and switch to the summary buffer
1385 (@code{gnus-group-select-group}).  Takes the same arguments as
1386 @code{gnus-group-read-group}---the only difference is that this command
1387 does not display the first unread article automatically upon group
1388 entry. 
1389
1390 @item M-RET
1391 @kindex M-RET (Group)
1392 @findex gnus-group-quick-select-group
1393 This does the same as the command above, but tries to do it with the
1394 minimum amount off fuzz (@code{gnus-group-quick-select-group}).  No
1395 scoring/killing will be performed, there will be no highlights and no
1396 expunging.  This might be useful if you're in a real hurry and have to
1397 enter some humongous groups.
1398
1399 @item M-SPACE
1400 @kindex M-RET (Group)
1401 @findex gnus-group-visible-select-group
1402 This is yet one more command that does the same as the one above, but
1403 this one does it without expunging and hiding dormants
1404 (@code{gnus-group-visible-select-group}).  
1405
1406 @item c
1407 @kindex c (Group)
1408 @findex gnus-group-catchup-current
1409 Mark all unticked articles in this group as read
1410 (@code{gnus-group-catchup-current}). 
1411
1412 @item C
1413 @kindex C (Group)
1414 @findex gnus-group-catchup-current-all
1415 Mark all articles in this group, even the ticked ones, as read
1416 (@code{gnus-group-catchup-current-all}). 
1417 @end table
1418
1419 @vindex gnus-large-newsgroup
1420 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1421 to be a big group.  This is 200 by default.  If the group has more
1422 unread articles than this, Gnus will query the user before entering the
1423 group.  The user can then specify how many articles should be fetched
1424 from the server.  If the user specifies a negative number (@samp{-n}),
1425 the @samp{n} oldest articles will be fetched.  If it is positive, the
1426 @samp{n} articles that have arrived most recently will be fetched.
1427
1428 @vindex gnus-select-group-hook
1429 @vindex gnus-auto-select-first
1430 @code{gnus-auto-select-first} control whether any articles are selected
1431 automatically when entering a group.  
1432
1433 @table @code
1434
1435 @item nil
1436 Don't select any articles when entering the group.  Just display the
1437 full summary buffer.
1438
1439 @item t
1440 Select the first unread article when entering the group.  
1441
1442 @item best
1443 Select the most high-scored article in the group when entering the
1444 group. 
1445 @end table
1446         
1447 If you want to prevent automatic selection in some group (say, in a
1448 binary group with Huge articles) you can set this variable to @code{nil}
1449 in @code{gnus-select-group-hook}, which is called when a group is
1450 selected.
1451
1452 @findex gnus-thread-sort-by-total-score
1453 @findex gnus-thread-sort-by-date
1454 @findex gnus-thread-sort-by-score
1455 @findex gnus-thread-sort-by-subject
1456 @findex gnus-thread-sort-by-author
1457 @findex gnus-thread-sort-by-number
1458 @vindex gnus-thread-sort-functions
1459 If you are using a threaded summary display, you can sort the threads by
1460 setting @code{gnus-thread-sort-functions}, which is a list of functions.
1461 By default, sorting is done on article numbers.  Ready-made sorting
1462 predicate functions include @code{gnus-thread-sort-by-number},
1463 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
1464 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
1465 @code{gnus-thread-sort-by-total-score}.
1466
1467 Each function takes two threads and return non-@code{nil} if the first
1468 thread should be sorted before the other.  Note that sorting really is
1469 normally done by looking only at the roots of each thread.  If you use
1470 more than one function, the primary sort key should be the last function
1471 in the list.  You should probably always include
1472 @code{gnus-thread-sort-by-number} in the list of sorting
1473 functions---preferably first.  This will ensure that threads that are
1474 equal with respect to the other sort criteria will be displayed in
1475 ascending article order.
1476
1477 If you would like to sort by score, then by subject, and finally by
1478 number, you could do something like:
1479
1480 @lisp
1481 (setq gnus-thread-sort-functions 
1482       '(gnus-thread-sort-by-number
1483         gnus-thread-sort-by-subject
1484         gnus-thread-sort-by-score))
1485 @end lisp
1486
1487 The threads that have highest score will be displayed first in the
1488 summary buffer.  When threads have the same score, they will be sorted
1489 alphabetically.  The threads that have the same score and the same
1490 subject will be sorted by number, which is (normally) the sequence in
1491 which the articles arrived.
1492
1493 If you want to sort by score and then reverse arrival order, you could
1494 say something like:
1495
1496 @lisp
1497 (setq gnus-thread-sort-functions
1498       '((lambda (t1 t2) 
1499           (not (gnus-thread-sort-by-number t1 t2)))
1500         gnus-thread-sort-by-score))
1501 @end lisp
1502
1503 @vindex gnus-thread-score-function
1504 The function in the @code{gnus-thread-score-function} variable (default
1505 @code{+}) is used for calculating the total score of a thread.  Useful
1506 functions might be @code{max}, @code{min}, or squared means, or whatever
1507 tickles your fancy.
1508
1509 @findex gnus-article-sort-functions
1510 @findex gnus-article-sort-by-date
1511 @findex gnus-article-sort-by-score
1512 @findex gnus-article-sort-by-subject
1513 @findex gnus-article-sort-by-author
1514 @findex gnus-article-sort-by-number
1515 If you are using an unthreaded display for some strange reason or other,
1516 you have to fiddle with the @code{gnus-article-sort-functions} variable.
1517 It is very similar to the @code{gnus-thread-sort-functions}, except that
1518 is uses slightly different functions for article comparison.  Available
1519 sorting predicate functions are @code{gnus-article-sort-by-number},
1520 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
1521 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
1522
1523 If you want to sort an unthreaded summary display by subject, you could
1524 say something like:
1525
1526 @lisp
1527 (setq gnus-article-sort-functions 
1528       '(gnus-article-sort-by-number
1529         gnus-article-sort-by-subject))
1530 @end lisp
1531
1532
1533 @node Subscription Commands
1534 @section Subscription Commands
1535 @cindex subscribing
1536
1537 @table @kbd
1538
1539 @item S t
1540 @itemx u
1541 @kindex S t (Group)
1542 @kindex u (Group)
1543 @findex gnus-group-unsubscribe-current-group
1544 Toggle subscription to the current group
1545 (@code{gnus-group-unsubscribe-current-group}).  
1546
1547 @item S s
1548 @itemx U
1549 @kindex S s (Group)
1550 @kindex U (Group)
1551 @findex gnus-group-unsubscribe-group
1552 Prompt for a group to subscribe, and then subscribe it.  If it was
1553 subscribed already, unsubscribe it instead
1554 (@code{gnus-group-unsubscribe-group}).
1555
1556 @item S k
1557 @itemx C-k
1558 @kindex S k (Group)
1559 @kindex C-k (Group)
1560 @findex gnus-group-kill-group
1561 Kill the current group (@code{gnus-group-kill-group}).
1562
1563 @item S y
1564 @itemx C-y
1565 @kindex S y (Group)
1566 @kindex C-y (Group)
1567 @findex gnus-group-yank-group
1568 Yank the last killed group (@code{gnus-group-yank-group}).
1569
1570 @item S w
1571 @itemx C-w
1572 @kindex S w (Group)
1573 @kindex C-w (Group)
1574 @findex gnus-group-kill-region
1575 Kill all groups in the region (@code{gnus-group-kill-region}). 
1576
1577 @item S z
1578 @kindex S z (Group)
1579 @findex gnus-group-kill-all-zombies
1580 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1581
1582 @item S C-k
1583 @kindex S C-k (Group)
1584 @findex gnus-group-kill-level
1585 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1586 These groups can't be yanked back after killing, so this command should
1587 be used with some caution.  The only thing where this command comes in
1588 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1589 groups that you want to get rid off.  @kbd{S C-k} on level @code{7} will
1590 kill off all unsubscribed groups that do not have message numbers in the
1591 @file{.newsrc} file.  
1592
1593 @end table
1594
1595 Also @xref{Group Levels}.
1596
1597 @node Group Levels
1598 @section Group Levels
1599 @cindex group level
1600
1601 All groups have a level of @dfn{subscribedness}.  For instance, if a
1602 group is on level 2, it is more subscribed than a group on level 5.  You
1603 can ask Gnus to just list groups on a given level or lower
1604 (@pxref{Listing Groups}), or to just check for new articles in groups on
1605 a given level or lower (@pxref{Misc Group Stuff}).
1606
1607 @table @kbd
1608
1609 @item S l
1610 @kindex S l (Group)
1611 @findex gnus-group-set-current-level
1612 Set the level of the current group.  If a numeric prefix is given, the
1613 next @var{n} groups will have their levels set.  The user will be
1614 prompted for a level.
1615 @end table
1616
1617 @vindex gnus-level-killed
1618 @vindex gnus-level-zombie
1619 @vindex gnus-level-unsubscribed
1620 @vindex gnus-level-subscribed
1621 Gnus considers groups on between levels 1 and
1622 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1623 @code{gnus-level-subscribed} (exclusive) and
1624 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1625 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1626 (default 8) and @code{gnus-level-killed} to be killed (default 9),
1627 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
1628 the same, but zombie and killed groups have no information on what
1629 articles you have read, etc, stored.  This distinction between dead and
1630 living groups isn't done because it is nice or clever, it is done purely
1631 for reasons of efficiency.
1632
1633 It is recommended that you keep all your mail groups (if any) on quite
1634 low levels (eg. 1 or 2).
1635
1636 If you want to play with the level variables, you should show some care.
1637 Set them once, and don't touch them ever again.  Better yet, don't touch
1638 them at all unless you know exactly what you're doing.
1639
1640 @vindex gnus-level-default-unsubscribed
1641 @vindex gnus-level-default-subscribed
1642 Two closely related variables are @code{gnus-level-default-subscribed}
1643 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1644 which are the levels that new groups will be put on if they are
1645 (un)subscribed.  These two variables should, of course, be inside the
1646 relevant legal ranges.
1647
1648 @vindex gnus-keep-same-level
1649 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1650 will only move to groups that are of the same level (or lower).  In
1651 particular, going from the last article in one group to the next group
1652 will go to the next group of the same level (or lower).  This might be
1653 handy if you want to read the most important groups before you read the
1654 rest.
1655
1656 @vindex gnus-group-default-list-level
1657 All groups with a level less than or equal to
1658 @code{gnus-group-default-list-level} will be listed in the group buffer
1659 by default.
1660
1661 @vindex gnus-group-list-inactive-groups
1662 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1663 groups will be listed along with the unread groups.  This variable is
1664 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1665 listed. 
1666
1667 @vindex gnus-group-use-permament-levels
1668 If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you
1669 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1670 use this level as the "work" level.
1671
1672 @vindex gnus-activate-level
1673 Gnus will normally just activate groups that are on level
1674 @code{gnus-activate-level} or less.  If you don't want to activate
1675 unsubscribed groups, for instance, you might set this variable to
1676 @samp{5}. 
1677
1678
1679 @node Group Score
1680 @section Group Score
1681 @cindex group score
1682
1683 You would normally keep important groups on high levels, but that scheme
1684 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1685 group buffer according to how often you read groups, perhaps?  Within
1686 reason?  
1687
1688 This is what @dfn{group score} is for.  You can assign a score to each
1689 group.  You can then sort the group buffer based on this score.
1690 Alternatively, you can sort on score and then level.  (Taken together,
1691 the level and the score is called the @dfn{rank} of the group.  A group
1692 that is on level 4 and has a score of 1 has a higher rank than a group
1693 on level 5 that has a score of 300.  (The level is the most significant
1694 part and the score is the least significant part.)
1695
1696 @findex gnus-summary-bubble-group
1697 If you want groups you read often to get higher scores than groups you
1698 read seldom you can add the @code{gnus-summary-bubble-group} function to
1699 the @code{gnus-summary-exit-hook} hook.  This will result (after
1700 sorting) in a bubbling sort of action.  If you want to see that in
1701 action after each summary exit, you can add
1702 @code{gnus-group-sort-groups-by-rank} or
1703 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1704 slow things down somewhat.
1705
1706
1707 @node Marking Groups
1708 @section Marking Groups
1709 @cindex marking groups
1710
1711 If you want to perform some command on several groups, and they appear
1712 subsequently in the group buffer, you would normally just give a
1713 numerical prefix to the command.  Most group commands will then do your
1714 bidding on those groups.
1715
1716 However, if the groups are not in sequential order, you can still
1717 perform a command on several groups.  You simply mark the groups first
1718 with the process mark and then execute the command.
1719
1720 @table @kbd
1721
1722 @item #
1723 @kindex # (Group)
1724 @itemx M m
1725 @kindex M m (Group)
1726 @findex gnus-group-mark-group
1727 Set the mark on the current group (@code{gnus-group-mark-group}). 
1728
1729 @item M-#
1730 @kindex M-# (Group)
1731 @itemx < u
1732 @kindex M u (Group)
1733 @findex gnus-group-unmark-group
1734 Remove the mark from the current group
1735 (@code{gnus-group-unmark-group}). 
1736
1737 @item M U
1738 @kindex M U (Group)
1739 @findex gnus-group-unmark-all-groups
1740 Remove the mark from all groups (@code{gnus-group-unmark-all-groups}). 
1741
1742 @item M w
1743 @kindex M w (Group)
1744 @findex gnus-group-mark-region
1745 Mark all groups between point and mark (@code{gnus-group-mark-region}). 
1746
1747 @item M b
1748 @kindex M b (Group)
1749 @findex gnus-group-mark-buffer
1750 Mark all groups in the buffer (@code{gnus-group-mark-buffer}). 
1751
1752 @item M r
1753 @kindex M r (Group)
1754 @findex gnus-group-mark-regexp
1755 Mark all groups that match some regular expression
1756 (@code{gnus-group-mark-regexp}).  
1757 @end table
1758
1759 Also @xref{Process/Prefix}.
1760
1761 If you want to execute some command on all groups that have been marked
1762 with the process mark, you can use the @kbd{M-&}
1763 (@code{gnus-group-universal-argument}) command.  It will prompt you for
1764 the command to be executed.
1765
1766
1767
1768 @node Foreign Groups
1769 @section Foreign Groups
1770 @cindex foreign groups
1771
1772 A @dfn{foreign group} is a group that is not read by the usual (or
1773 default) means.  It could be, for instance, a group from a different
1774 @sc{nntp} server, it could be a virtual group, or it could be your own
1775 personal mail group.
1776
1777 A foreign group (or any group, really) is specified by a @dfn{name} and
1778 a @dfn{select method}.  To take the latter first, a select method is a
1779 list where the first element says what backend to use (eg. @code{nntp},
1780 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
1781 name}.  There may be additional elements in the select method, where the
1782 value may have special meaning for the backend in question.
1783
1784 One could say that a select method defines a @dfn{virtual server}---so
1785 we do just that (@pxref{The Server Buffer}).
1786
1787 The @dfn{name} of the group is the name the backend will recognize the
1788 group as.
1789
1790 For instance, the group @samp{soc.motss} on the @sc{nntp} server
1791 @samp{some.where.edu} will have the name @samp{soc.motss} and select
1792 method @code{(nntp "some.where.edu")}.  Gnus will call this group, in
1793 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
1794 @code{nntp} backend just knows this group as @samp{soc.motss}.
1795
1796 Here are some commands for making and editing general foreign groups,
1797 and some commands to ease the creation of some special-purpose groups:
1798
1799 @table @kbd
1800
1801 @item G m
1802 @kindex G m (Group)
1803 @findex gnus-group-make-group
1804 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1805 for a name, a method and possibly an @dfn{address}.  For an easier way
1806 to subscribe to @sc{nntp} groups, @xref{Browse Foreign Server}.
1807
1808 @item G r
1809 @kindex G m (Group)
1810 @findex gnus-group-rename-group
1811 Rename the current group to something else
1812 (@code{gnus-group-rename-group}).  This is legal only on some groups --
1813 mail groups mostly.  This command might very well be quite slow on some
1814 backends. 
1815
1816 @item G e
1817 @kindex G e (Group)
1818 @findex gnus-group-edit-group-method
1819 Enter a buffer where you can edit the select method of the current
1820 group (@code{gnus-group-edit-group-method}).
1821
1822 @item G p
1823 @kindex G p (Group)
1824 @findex gnus-group-edit-group-parameters
1825 Enter a buffer where you can edit the group parameters
1826 (@code{gnus-group-edit-group-parameters}). 
1827
1828 @item G E
1829 @kindex G E (Group)
1830 @findex gnus-group-edit-group
1831 Enter a buffer where you can edit the group info
1832 (@code{gnus-group-edit-group}).
1833
1834 @item G d
1835 @kindex G d (Group)
1836 @findex gnus-group-make-directory-group
1837 Make a directory group.  You will be prompted for a directory name
1838 (@code{gnus-group-make-directory-group}).  
1839
1840 @item G h 
1841 @kindex G h (Group)
1842 @findex gnus-group-make-help-group
1843 Make the Gnus help group (@code{gnus-group-make-help-group}).
1844
1845 @item G a
1846 @kindex G a (Group)
1847 @findex gnus-group-make-archive-group
1848 @vindex gnus-group-archive-directory
1849 @vindex gnus-group-recent-archive-directory
1850 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1851 default a group pointing to the most recent articles will be created
1852 (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
1853 group will be created from from @code{gnus-group-archive-directory}.
1854
1855 @item G k
1856 @kindex G k (Group)
1857 @findex gnus-group-make-kiboze-group
1858 Make a kiboze group.  You will be prompted for a name, for a regexp to
1859 match groups to be "included" in the kiboze group, and a series of
1860 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1861
1862 @item G D
1863 @kindex G D (Group)
1864 @findex gnus-group-enter-directory
1865 Read a random directory as if with were a newsgroup with the
1866 @code{nneething} backend (@code{gnus-group-enter-directory}).
1867
1868 @item G f
1869 @kindex G f (Group)
1870 @findex gnus-group-make-doc-group
1871 Make a group based on some file or other
1872 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1873 command, you will be prompted for a file name and a file type.
1874 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1875 @code{mmdf}, @code{news}, @code{rnews}, and @code{forward}.  If you run
1876 this command without a prefix, Gnus will guess at the file type.
1877
1878 @item G DEL
1879 @kindex G DEL (Group)
1880 @findex gnus-group-delete-group
1881 This function will delete the current group
1882 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1883 actually delete all the articles in the group, and forcibly remove the
1884 group itself from the face of the Earth.  Use a prefix only if you are
1885 sure of what you are doing.  
1886
1887 @item G V
1888 @kindex G V (Group)
1889 @findex gnus-group-make-empty-virtual
1890 Make a new, fresh, empty @code{nnvirtual} group
1891 (@code{gnus-group-make-empty-virtual}).
1892
1893 @item G v
1894 @kindex G v (Group)
1895 @findex gnus-group-add-to-virtual
1896 Add the current group to an @code{nnvirtual} group
1897 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1898 @end table
1899
1900 The different methods all have their peculiarities, of course.
1901
1902 @menu
1903 * nntp::             Reading news from a different @sc{nntp} server.
1904 * nnspool::          Reading news from the local spool.
1905 * nnvirtual::        Combining articles from many groups.
1906 * nnkiboze::         Looking through parts of the newsfeed for articles.
1907 * nndir::            You can read a directory as if it was a newsgroup.
1908 * nneething::        Dired?  Who needs dired?
1909 * nndoc::            Single files can be the basis of a group.
1910 * SOUP::             Reading @sc{SOUP} packets "offline".
1911 * Reading Mail::     Reading your personal mail with Gnus.
1912 @end menu
1913
1914 @vindex gnus-activate-foreign-newsgroups
1915 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1916 Gnus will check all foreign groups with this level or lower at startup.
1917 This might take quite a while, especially if you subscribe to lots of
1918 groups from different @sc{nntp} servers.
1919
1920 @node nntp
1921 @subsection nntp
1922 @cindex @sc{nntp}
1923
1924 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
1925 You just specify @code{nntp} as method and the address of the @sc{nntp}
1926 server as the, uhm, address.
1927
1928 If the @sc{nntp} server is located at a non-standard port, setting the
1929 third element of the select method to this port number should allow you
1930 to connect to the right port.  You'll have to edit the group info for
1931 that (@pxref{Foreign Groups}).
1932
1933 The name of the foreign group can be the same as a native group.  In
1934 fact, you can subscribe to the same group from as many different servers
1935 you feel like.  There will be no name collisions.
1936
1937 The following variables can be used to create a virtual @code{nntp}
1938 server: 
1939
1940 @table @code
1941
1942 @item nntp-server-opened-hook
1943 @vindex nntp-server-opened-hook
1944 @cindex @sc{mode reader}
1945 @cindex authinfo
1946 @cindex authentification
1947 @cindex nntp authentification
1948 @findex nntp-send-authinfo
1949 @findex nntp-send-mode-reader
1950 @code{nntp-server-opened-hook} is run after a connection has been made.
1951 It can be used to send commands to the @sc{nntp} server after it has
1952 been contacted.  By default is sends the command @samp{MODE READER} to
1953 the server with the @code{nntp-send-mode-reader} function.  Another
1954 popular function is @code{nntp-send-authinfo}, which will prompt you for
1955 an @sc{nntp} password and stuff.
1956
1957 @item nntp-server-action-alist 
1958 @vindex nntp-server-action-alist 
1959 This is an list of regexps to match on server types and actions to be
1960 taken when matches are made.  For instance, if you want Gnus to beep
1961 every time you connect to innd, you could say something like:
1962
1963 @lisp
1964 (setq nntp-server-action-alist
1965       '(("innd" (ding))))
1966 @end lisp
1967
1968 You probably don't want to do that, though.
1969
1970 The default value is
1971
1972 @lisp
1973   '(("nntpd 1\\.5\\.11t" 
1974      (remove-hook 'nntp-server-opened-hook nntp-send-mode-reader)))
1975 @end lisp
1976
1977 This ensures that Gnus doesn't send the @samp{MODE READER} command to
1978 nntpd 1.5.11t, since that command chokes that server, I've been told. 
1979
1980 @item nntp-maximum-request
1981 @vindex nntp-maximum-request
1982 If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
1983 will collect headers by sending a series of @code{head} commands.  To
1984 speed things up, the backend sends lots of these commands without
1985 waiting for reply, and then reads all the replies.  This is controlled
1986 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
1987 your network is buggy, you should set this to 1.
1988
1989 @item nntp-connection-timeout
1990 @vindex nntp-connection-timeout
1991 If you have lots of foreign @code{nntp} groups that you connect to
1992 regularly, you're sure to have problems with @sc{nntp} servers not
1993 responding properly, or being too loaded to reply within reasonable
1994 time.  This is can lead to awkward problems, which can be helped
1995 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
1996 that says how many seconds the @code{nntp} backend should wait for a
1997 connection before giving up.  If it is @code{nil}, which is the default,
1998 no timeouts are done.
1999
2000 @item nntp-server-hook
2001 @vindex nntp-server-hook
2002 This hook is run as the last step when connecting to an @sc{nntp}
2003 server.
2004
2005 @c @findex nntp-open-rlogin
2006 @c @findex nntp-open-network-stream
2007 @c @item nntp-open-server-function
2008 @c @vindex nntp-open-server-function
2009 @c This function is used to connect to the remote system.  Two pre-made
2010 @c functions are @code{nntp-open-network-stream}, which is the default, and
2011 @c simply connects to some port or other on the remote system.  The other
2012 @c is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
2013 @c and then does a telnet to the @sc{nntp} server available there.
2014 @c 
2015 @c @item nntp-rlogin-parameters
2016 @c @vindex nntp-rlogin-parameters
2017 @c If you use @code{nntp-open-rlogin} as the
2018 @c @code{nntp-open-server-function}, this list will be used as the
2019 @c parameter list given to @code{rsh}.
2020 @c 
2021 @c @item nntp-rlogin-user-name
2022 @c @vindex nntp-rlogin-user-name
2023 @c User name on the remote system when using the @code{rlogin} connect
2024 @c function. 
2025
2026 @item nntp-address
2027 @vindex nntp-address
2028 The address of the remote system running the @sc{nntp} server.
2029
2030 @item nntp-port-number
2031 @vindex nntp-port-number
2032 Port number to connect to when using the @code{nntp-open-network-stream}
2033 connect function.
2034
2035 @item nntp-buggy-select
2036 @vindex nntp-buggy-select
2037 Set this to non-@code{nil} if your select routine is buggy.
2038
2039 @item nntp-nov-is-evil 
2040 @vindex nntp-nov-is-evil 
2041 If the @sc{nntp} server does not support @sc{nov}, you could set this
2042 variable to @code{t}, but @code{nntp} usually checks whether @sc{nov}
2043 can be used automatically.
2044
2045 @item nntp-xover-commands
2046 @vindex nntp-xover-commands
2047 List of strings that are used as commands to fetch @sc{nov} lines from a
2048 server.  The default value of this variable is @code{("XOVER"
2049 "XOVERVIEW")}. 
2050
2051 @item nntp-nov-gap
2052 @vindex nntp-nov-gap
2053 @code{nntp} normally sends just one big request for @sc{nov} lines to
2054 the server.  The server responds with one huge list of lines.  However,
2055 if you have read articles 2-5000 in the group, and only want to read
2056 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
2057 lines that you do not want, and will not use.  This variable says how
2058 big a gap between two consecutive articles is allowed to be before the
2059 @code{XOVER} request is split into several request.  Note that if your
2060 network is fast, setting this variable to a really small number means
2061 that fetching will probably be slower.  If this variable is @code{nil},
2062 @code{nntp} will never split requests.
2063
2064 @item nntp-prepare-server-hook
2065 @vindex nntp-prepare-server-hook
2066 A hook run before attempting to connect to an @sc{nntp} server.
2067
2068 @item nntp-async-number
2069 @vindex nntp-async-number
2070 How many articles should be pre-fetched when in asynchronous mode.  If
2071 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
2072 that it can without bound.  If it is @code{nil}, no pre-fetching will be
2073 made.
2074
2075 @item nntp-warn-about-losing-connection
2076 @vindex nntp-warn-about-losing-connection
2077 If this variable is non-@code{nil}, some noise will be made when a
2078 server closes connection.
2079
2080
2081 @end table
2082
2083 @node nnspool
2084 @subsection nnspool
2085 @cindex @code{nnspool}
2086 @cindex news spool
2087
2088 Subscribing to a foreign group from the local spool is extremely easy,
2089 and might be useful, for instance, to speed up reading groups like
2090 @samp{alt.binaries.pictures.furniture}.
2091
2092 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
2093 anything else) as the address.
2094
2095 If you have access to a local spool, you should probably use that as the
2096 native select method (@pxref{Finding the News}).  It is normally faster
2097 than using an @code{nntp} select method, but might not be.  It depends.
2098 You just have to try to find out what's best at your site.
2099
2100 @table @code
2101
2102 @item nnspool-inews-program
2103 @vindex nnspool-inews-program
2104 Program used to post an article.
2105
2106 @item nnspool-inews-switches
2107 @vindex nnspool-inews-switches
2108 Parameters given to the inews program when posting an article. 
2109
2110 @item nnspool-spool-directory
2111 @vindex nnspool-spool-directory
2112 Where @code{nnspool} looks for the articles.  This is normally
2113 @file{/usr/spool/news/}.
2114
2115 @item nnspool-nov-directory 
2116 @vindex nnspool-nov-directory 
2117 Where @code{nnspool} will look for @sc{nov} files.  This is normally
2118 @file{/usr/spool/news/over.view/}.
2119
2120 @item nnspool-lib-dir
2121 @vindex nnspool-lib-dir
2122 Where the news lib dir is (@file{/usr/lib/news/} by default).
2123
2124 @item nnspool-active-file
2125 @vindex nnspool-active-file
2126 The path of the active file.
2127
2128 @item nnspool-newsgroups-file
2129 @vindex nnspool-newsgroups-file
2130 The path of the group descriptions file.
2131
2132 @item nnspool-history-file
2133 @vindex nnspool-history-file
2134 The path of the news history file.
2135
2136 @item nnspool-active-times-file
2137 @vindex nnspool-active-times-file
2138 The path of the active date file.
2139
2140 @item nnspool-nov-is-evil
2141 @vindex nnspool-nov-is-evil
2142 If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
2143 that it finds.
2144
2145 @item nnspool-sift-nov-with-sed
2146 @vindex nnspool-sift-nov-with-sed
2147 If non-@code{nil}, which is the default, use @code{sed} to get the
2148 relevant portion from the overview file.  If nil, @code{nnspool} will
2149 load the entire file into a buffer and process it there.
2150
2151 @end table
2152
2153
2154 @node nnvirtual
2155 @subsection nnvirtual
2156 @cindex @code{nnvirtual}
2157 @cindex virtual groups
2158
2159 An @dfn{nnvirtual group} is really nothing more than a collection of
2160 other groups.
2161
2162 For instance, if you are tired of reading many small group, you can
2163 put them all in one big group, and then grow tired of reading one
2164 big, unwieldy group.  The joys of computing!
2165
2166 You specify @code{nnvirtual} as the method.  The address should be a
2167 regexp to match component groups.
2168
2169 All marks in the virtual group will stick to the articles in the
2170 component groups.  So if you tick an article in a virtual group, the
2171 article will also be ticked in the component group from whence it came.
2172 (And vice versa---marks from the component groups will also be shown in
2173 the virtual group.)
2174
2175 Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
2176 newsgroups into one, big, happy newsgroup:
2177
2178 @lisp
2179 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
2180 @end lisp
2181
2182 The component groups can be native or foreign; everything should work
2183 smoothly, but if your computer explodes, it was probably my fault.
2184
2185 Collecting the same group from several servers might actually be a good
2186 idea if users have set the Distribution header to limit distribution.
2187 If you would like to read @samp{soc.motss} both from a server in Japan
2188 and a server in Norway, you could use the following as the group regexp:
2189
2190 @example
2191 "^nntp+some.server.jp:soc.motss$\\|^nntp+some.server.no:soc.motss$"
2192 @end example
2193
2194 This should work kinda smoothly---all articles from both groups should
2195 end up in this one, and there should be no duplicates.  Threading (and
2196 the rest) will still work as usual, but there might be problems with the
2197 sequence of articles.  Sorting on date might be an option here
2198 (@pxref{Selecting a Group}.
2199
2200 One limitation, however---all groups that are included in a virtual
2201 group has to be alive (i.e., subscribed or unsubscribed).  Killed or
2202 zombie groups can't be component groups for @code{nnvirtual} groups.
2203
2204 @vindex nnvirtual-always-rescan
2205 If the @code{nnvirtual-always-rescan} is non-@code{nil},
2206 @code{nnvirtual} will always scan groups for unread articles when
2207 entering a virtual group.  If this variable is @code{nil} (which is the
2208 default) and you read articles in a component group after the virtual
2209 group has been activated, the read articles from the component group
2210 will show up when you enter the virtual group.  You'll also see this
2211 effect if you have two virtual groups that contain the same component
2212 group.  If that's the case, you should set this variable to @code{t}.
2213 Or you can just tap @code{M-g} on the virtual group every time before
2214 you enter it---it'll have much the same effect.
2215
2216
2217 @node nnkiboze
2218 @subsection nnkiboze
2219 @cindex @code{nnkiboze}
2220 @cindex kibozing
2221
2222 @dfn{Kibozing} is defined by @sc{oed} as "grepping through (parts of)
2223 the news feed".  @code{nnkiboze} is a backend that will do this for you.  Oh
2224 joy!  Now you can grind any @sc{nntp} server down to a halt with useless
2225 requests!  Oh happiness!
2226
2227 The address field of the @code{nnkiboze} method is, as with
2228 @code{nnvirtual}, a regexp to match groups to be "included" in the
2229 @code{nnkiboze} group.  There most similarities between @code{nnkiboze}
2230 and @code{nnvirtual} ends.
2231
2232 In addition to this regexp detailing component groups, an @code{nnkiboze} group
2233 must have a score file to say what articles that are to be included in
2234 the group (@pxref{Scoring}).
2235
2236 @kindex M-x nnkiboze-generate-groups
2237 @findex nnkiboze-generate-groups
2238 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
2239 @code{nnkiboze} groups you want to have.  This command will take time.  Lots of
2240 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
2241 all the articles in all the components groups and run them through the
2242 scoring process to determine if there are any articles in the groups
2243 that are to be part of the @code{nnkiboze} groups.
2244
2245 Please limit the number of component groups by using restrictive
2246 regexps.  Otherwise your sysadmin may become annoyed with you, and the
2247 @sc{nntp} site may throw you off and never let you back in again.
2248 Stranger things have happened.
2249
2250 @code{nnkiboze} component groups do not have to be alive---they can be dead,
2251 and they can be foreign.  No restrictions.
2252
2253 @vindex nnkiboze-directory
2254 The generation of an @code{nnkiboze} group means writing two files in
2255 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
2256 contains the @sc{nov} header lines for all the articles in the group,
2257 and the other is an additional @file{.newsrc} file to store information
2258 on what groups that have been searched through to find component
2259 articles.
2260
2261 Articles that are marked as read in the @code{nnkiboze} group will have their
2262 @sc{nov} lines removed from the @sc{nov} file.
2263
2264
2265 @node nndir
2266 @subsection nndir
2267 @cindex @code{nndir}
2268 @cindex directory groups
2269
2270 If you have a directory that has lots of articles in separate files in
2271 it, you might treat it as a newsgroup.  The files have to have numerical
2272 names, of course.
2273
2274 This might be an opportune moment to mention @code{ange-ftp}, that most
2275 wonderful of all wonderful Emacs packages.  When I wrote @code{nndir}, I
2276 didn't think much about it---a backend to read directories.  Big deal.
2277
2278 @code{ange-ftp} changes that picture dramatically.  For instance, if you
2279 enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the
2280 directory name, ange-ftp will actually allow you to read this directory
2281 over at @samp{sina} as a newsgroup.  Distributed news ahoy!
2282
2283 @code{nndir} will use @sc{nov} files if they are present.
2284
2285 @code{nndir} is a "read-only" backend---you can't delete or expire
2286 articles with this method.  You can use @code{nnmh} or @code{nnml} for
2287 whatever you use @code{nndir} for, so you could switch to any of those
2288 methods if you feel the need to have a non-read-only @code{nndir}.
2289
2290
2291 @node nneething
2292 @subsection nneething
2293 @cindex @code{nneething}
2294
2295 From the @code{nndir} backend (which reads a single spool-like
2296 directory), it's just a hop and a skip to @code{nneething}, which
2297 pretends that any random directory is a newsgroup.  Strange, but true.
2298
2299 When @code{nneething} is presented with a directory, it will scan this
2300 directory and assign article numbers to each file.  When you enter such a
2301 group, @code{nneething} must create "headers" that Gnus can use.  After
2302 all, Gnus is a newsreader, in case you're forgetting. @code{nneething}
2303 does this in a two-step process.  First, it snoops each file in question.
2304 If the file looks like an article (i.e., the first few lines look like
2305 headers), it will use this as the head.  If this is just some random file
2306 without a head (eg. a C source file), @code{nneething} will cobble up a
2307 header out of thin air.  It will use file ownership, name and date and do
2308 whatever it can with these elements.
2309
2310 All this should happen automatically for you, and you will be presented
2311 with something that looks very much like a newsgroup.  Totally like a
2312 newsgroup, to be precise.  If you select an article, it will be displayed
2313 in the article buffer, just as usual.
2314
2315 If you select a line that represents a directory, Gnus will pop you into
2316 a new summary buffer for this @code{nneething} group.  And so on.  You can
2317 traverse the entire disk this way, if you feel like, but remember that
2318 Gnus is not dired, really, and does not intend to be, either.
2319
2320 There are two overall modes to this action---ephemeral or solid.  When
2321 doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
2322 will not store information on what files you have read, and what files
2323 are new, and so on.  If you create a solid @code{nneething} group the
2324 normal way with @kbd{G m}, Gnus will store a mapping table between
2325 article numbers and file names, and you can treat this group like any
2326 other groups.  When you activate a solid @code{nneething} group, you will
2327 be told how many unread articles it contains, etc., etc.
2328
2329 Some variables:
2330
2331 @table @code
2332 @item nneething-map-file-directory
2333 @vindex nneething-map-file-directory
2334 All the mapping files for solid @code{nneething} groups will be stored
2335 in this directory, which defaults to @file{~/.nneething/}.
2336
2337 @item nneething-exclude-files
2338 @vindex nneething-exclude-files
2339 All files that match this regexp will be ignored.  Nice to use to exclude
2340 auto-save files and the like, which is what it does by default.
2341
2342 @item nneething-map-file
2343 @vindex nneething-map-file
2344 Name of the map files.
2345 @end table
2346
2347
2348 @node nndoc
2349 @subsection nndoc
2350 @cindex @code{nndoc}
2351 @cindex documentation group
2352 @cindex help group
2353
2354 @code{nndoc} is a cute little thing that will let you read a single file
2355 as a newsgroup.  Several files types are supported:
2356
2357 @table @code
2358 @cindex babyl
2359 @cindex rmail mbox
2360
2361 @item babyl
2362 The babyl (rmail) mail box.
2363 @cindex mbox
2364 @cindex Unix mbox
2365
2366 @item mbox
2367 The standard Unix mbox file.
2368 @cindex MMDF mail box
2369
2370 @item mmdf
2371 The MMDF mail box format.
2372
2373 @item news
2374 Several news articles appended into a file.
2375
2376 @item rnews
2377 @cindex rnews batch files
2378 The rnews batch transport format.
2379 @cindex forwarded messages
2380
2381 @item forward
2382 Forwarded articles.
2383
2384 @item mime-digest
2385 @cindex digest
2386 @cindex MIME digest
2387 @cindex 1153 digest
2388 @cindex RFC 1153 digest
2389 @cindex RFC 341 digest
2390 MIME (RFC 1341) digest format.
2391
2392 @item standard-digest
2393 The standard (RFC 1153) digest format.
2394
2395 @item slack-digest
2396 Non-standard digest format---matches most things, but does it badly. 
2397 @end table
2398
2399 You can also use the special "file type" @code{guess}, which means that
2400 @code{nndoc} will try to guess what file type it is looking at.
2401 @code{digest} means that @code{nndoc} should guess what digest type the
2402 file is. 
2403
2404 @code{nndoc} will not try to change the file or insert any extra headers into
2405 it---it will simply, like, let you use the file as the basis for a
2406 group.  And that's it.
2407
2408 If you have some old archived articles that you want to insert into your
2409 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
2410 that.  Say you have an old @file{RMAIL} file with mail that you now want
2411 to split into your new @code{nnml} groups.  You look at that file using
2412 @code{nndoc}, set the process mark on all the articles in the buffer
2413 (@kbd{M P b}, for instance), and then respool (@kbd{B r}) using
2414 @code{nnml}.  If all goes well, all the mail in the @file{RMAIL} file is
2415 now also stored in lots of @code{nnml} directories, and you can delete
2416 that pesky @file{RMAIL} file.  If you have the guts!  
2417
2418 Virtual server variables:
2419
2420 @table @code
2421 @item nndoc-article-type
2422 @vindex nndoc-article-type
2423 This should be one of @code{mbox}, @code{babyl}, @code{digest},
2424 @code{mmdf}, @code{forward}, or @code{guess}.
2425 @end table
2426
2427
2428 @node SOUP
2429 @subsection @sc{soup}
2430 @cindex @sc{SOUP}
2431 @cindex offline
2432
2433 In the PC world people often talk about "offline" newsreaders.  These
2434 are thingies that are combined reader/news transport monstrosities.
2435 With built-in modem programs.  Yecchh!  
2436
2437 Of course, us Unix Weenie types of human beans use things like
2438 @code{uucp} and, like, @code{nntpd} and set up proper news and mail
2439 transport things like Ghod inteded.  And then we just use normal
2440 newsreaders.  
2441
2442 However, it can sometimes be convenient to do something a that's a bit
2443 easier on the brain if you have a very slow modem, and you're not really
2444 that interested in doing things properly.  
2445
2446 A file format called @sc{soup} has been developed for transporting news
2447 and mail from servers to home machines and back again.  It can be a bit
2448 fiddly.
2449
2450 @enumerate
2451
2452 @item
2453 You log in on the server and create a @sc{soup} packet.  You can either
2454 use a dedicated @sc{soup} thingie, or you can use Gnus to create the
2455 packet with the @kbd{O s} command.
2456
2457 @item 
2458 You transfer the packet home.  Rail, boat, car or modem will do fine.
2459
2460 @item
2461 You put the packet in your home directory.
2462
2463 @item
2464 You fire up Gnus using the @code{nnsoup} backend as the native server.
2465
2466 @item
2467 You read articles and mail and answer and followup to the things you
2468 want.
2469
2470 @item 
2471 You do the @kbd{G s r} command to pack these replies into a @sc{soup}
2472 packet.
2473
2474 @item 
2475 You transfer this packet to the server.  
2476
2477 @item
2478 You use Gnus to mail this packet out with the @kbd{G s s} command.
2479
2480 @item
2481 You then repeat until you die.
2482
2483 @end enumerate
2484
2485 So you basically have a bipartite system---you use @code{nnsoup} for
2486 reading and Gnus for packing/sending these @sc{soup} packets.
2487
2488 @menu
2489 * SOUP Commands::     Commands for creating and sending @sc{soup} packets
2490 * nnsoup::            A backend for reading @sc{soup} packets.
2491 * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
2492 @end menu
2493
2494
2495 @node SOUP Commands
2496 @subsubsection @sc{soup} Commands
2497
2498 @table @kbd
2499 @item G s b
2500 @kindex G s b (Group)
2501 @findex gnus-group-brew-soup
2502 Pack all unread articles in the current group
2503 (@code{gnus-group-brew-soup}).  This command understands the
2504 process/prefix convention.
2505
2506 @item G s w
2507 @kindex G s w (Group)
2508 @findex gnus-soup-save-areas
2509 Save all data files (@code{gnus-soup-save-areas}).
2510
2511 @item G s s
2512 @kindex G s s (Group)
2513 @findex gnus-soup-send-replies
2514 Send all replies from the replies packet
2515 (@code{gnus-soup-send-replies}). 
2516
2517 @item G s p
2518 @kindex G s p (Group)
2519 @findex gnus-soup-pack-packet
2520 Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}). 
2521
2522 @item G s r
2523 @kindex G s r (Group)
2524 @findex nnsoup-pack-replies
2525 Pack all replies into a replies packet (@code{nnsoup-pack-replies}). 
2526
2527 @item O s
2528 @kindex O s (Summary)
2529 @findex gnus-soup-add-article
2530 This summary-mode command adds the current article to a @sc{soup} packet
2531 (@code{gnus-soup-add-article}).  It understands the process/prefix
2532 convention. 
2533
2534 @end table
2535
2536
2537 There are a few variables to customize where Gnus will put all these
2538 thingies:  
2539
2540 @table @code
2541
2542 @item gnus-soup-directory
2543 @vindex gnus-soup-directory
2544 Directory where Gnus will save intermediate files while composing
2545 @sc{soup} packets.  The default is @file{~/SoupBrew/}. 
2546
2547 @item gnus-soup-replies-directory
2548 @vindex gnus-soup-replies-directory
2549 This is what Gnus will use as a temporary directory while sending our
2550 reply packets.  The default is @file{~/SoupBrew/SoupReplies/}. 
2551
2552 @item gnus-soup-prefix-file
2553 @vindex gnus-soup-prefix-file
2554 Name of the file where Gnus stores the last used prefix.  The default is
2555 @samp{"gnus-prefix"}. 
2556
2557 @item gnus-soup-packer
2558 @vindex gnus-soup-packer
2559 A format string command for packing a @sc{soup} packet.  The default is
2560 @samp{ "tar cf - %s | gzip > $HOME/Soupout%d.tgz"}. 
2561
2562 @item gnus-soup-unpacker
2563 @vindex gnus-soup-unpacker
2564 Format string command for unpacking a @sc{soup} packet.  The default is
2565 @samp{"gunzip -c %s | tar xvf -"}.
2566
2567 @item gnus-soup-packet-directory
2568 @vindex gnus-soup-packet-directory
2569 Wehre Gnus will look for reply packets.  The default is @file{~/}. 
2570
2571 @item gnus-soup-packet-regexp
2572 @vindex gnus-soup-packet-regexp
2573 Regular expression matching @sc{soup} reply packets in
2574 @code{gnus-soup-packet-directory}. 
2575
2576 @end table
2577  
2578
2579 @node nnsoup
2580 @subsubsection nnsoup
2581 @cindex @code{nnsoup}
2582
2583 @code{nnsoup} is the backend for reading @sc{soup} packets.  It will
2584 read incoming packets, unpack them, and put them in a directory where
2585 you can read them at leisure.
2586
2587 These are the variables you can use to customize its behavior:
2588
2589 @table @code
2590
2591 @item nnsoup-directory
2592 @vindex nnsoup-directory
2593 @code{nnsoup} will move all incoming @sc{soup} packets to this directory
2594 and unpack them there.  The default is @file{~/SOUP/}.
2595
2596 @item nnsoup-replies-directory 
2597 @vindex nnsoup-replies-directory 
2598 All replies will stored in this directory before being packed into a
2599 reply packet.  The default is @file{~/SOUP/replies/"}.
2600
2601 @item nnsoup-replies-format-type
2602 @vindex nnsoup-replies-format-type
2603 The @sc{soup} format of the replies packets.  The default is @samp{?n}
2604 (rnews), and I don't think you should touch that variable.  I probaly
2605 shouldn't even have documented it.  Drats!  Too late!
2606
2607 @item nnsoup-replies-index-type
2608 @vindex nnsoup-replies-index-type
2609 The index type of the replies packet.  The is @samp{?n}, which means
2610 "none".  Don't fiddle with this one either!
2611
2612 @item nnsoup-active-file
2613 @vindex nnsoup-active-file
2614 Where @code{nnsoup} stores lots of information.  This is not an "active
2615 file" in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
2616 this file or mess it up in any way, you're dead.  The default is
2617 @file{~/SOUP/active}.
2618
2619 @item nnsoup-packer
2620 @vindex nnsoup-packer
2621 Format string command for packing a reply @sc{soup} packet.  The default
2622 is @samp{"tar cf - %s | gzip > $HOME/Soupin%d.tgz"}. 
2623
2624 @item nnsoup-unpacker
2625 @vindex nnsoup-unpacker
2626 Format string command for unpacking incoming @sc{soup} packets.  The
2627 default is @samp{"gunzip -c %s | tar xvf -"}. 
2628
2629 @item nnsoup-packet-directory
2630 @vindex nnsoup-packet-directory
2631 Where @code{nnsoup} will look for incoming packets.  The default is
2632 @file{~/}.  
2633
2634 @item nnsoup-packet-regexp
2635 @vindex nnsoup-packet-regexp
2636 Regular expression matching incoming @sc{soup} packets.  The default is
2637 @samp{Soupout}. 
2638
2639 @end table
2640
2641
2642 @node SOUP Replies
2643 @subsubsection @sc{SOUP} Replies
2644
2645 Just using @code{nnsoup} won't mean that your postings and mailings end
2646 up in @sc{soup} reply packets automagically.  You have to work a bit
2647 more for that to happen.
2648
2649 @findex nnsoup-set-variables
2650 The @code{nnsoup-set-variables} command will set the appropriate
2651 variables to ensure that all your followups and replies end up in the
2652 @sc{soup} system.
2653
2654 In specific, this is what it does:
2655
2656 @lisp
2657 (setq gnus-inews-article-function 'nnsoup-request-post)
2658 (setq send-mail-function 'nnsoup-request-mail)
2659 @end lisp
2660
2661 And that's it, really.  If you only want news to go into the @sc{soup}
2662 system you just use the first line.  If you only want mail to be
2663 @sc{soup}ed you use the second.
2664
2665
2666 @node Reading Mail
2667 @subsection Reading Mail
2668 @cindex reading mail
2669 @cindex mail
2670
2671 Reading mail with a newsreader---isn't that just plain WeIrD? But of
2672 course.
2673
2674 Gnus will read the mail spool when you activate a mail group.  The mail
2675 file is first copied to your home directory.  What happens after that
2676 depends on what format you want to store your mail in.
2677
2678 @menu
2679 * Creating Mail Groups::         How to create mail groups.
2680 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
2681 * Mail & Procmail::              Reading mail groups that procmail create.
2682 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
2683 * Not Reading Mail::             Using mail backends for reading other files.
2684 * nnmbox::                       Using the (quite) standard Un*x mbox.
2685 * nnbabyl::                      Emacs programs use the rmail babyl format.
2686 * nnml::                         Store your mail in a private spool?
2687 * nnmh::                         An mhspool-like backend.
2688 * nnfolder::                     Having one file for each group.
2689 @end menu
2690
2691 @vindex nnmail-read-incoming-hook
2692 The mail backends all call @code{nnmail-read-incoming-hook} after
2693 reading new mail.  You can use this hook to notify any mail watch
2694 programs, if you want to.
2695
2696 @vindex nnmail-spool-file
2697 @cindex POP mail
2698 @cindex MAILHOST
2699 @code{nnmail-spool-file} says where to look for new mail.  If this
2700 variable is @code{nil}, the mail backends will never attempt to fetch
2701 mail by themselves.  If you are using a POP mail server and your name is
2702 @samp{"larsi"}, you should set this variable to @samp{"po:larsi"}.  If
2703 your name is not @samp{"larsi"}, you should probably modify that
2704 slightly, but you may have guessed that already, you smart & handsome
2705 devil!  You can also set this variable to @code{pop}, and Gnus will try
2706 to figure out the POP mail string by itself.  In any case, Gnus will
2707 call @code{movemail} which will contact the POP server named in the
2708 @samp{MAILHOST} environment variable.
2709
2710 When you use a mail backend, Gnus will slurp all your mail from your
2711 inbox and plonk it down in your home directory.  Gnus doesn't move any
2712 mail if you're not using a mail backend---you have to do a lot of magic
2713 invocations first.  At the time when you have finished drawing the
2714 pentagram, lightened the candles, and sacrificed the goat, you really
2715 shouldn't be too suprised when Gnus moves your mail.
2716
2717 @vindex nnmail-use-procmail
2718 If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will
2719 look in @code{nnmail-procmail-directory} for incoming mail.  All the
2720 files in that directory that have names ending in
2721 @code{gnus-procmail-suffix} will be considered incoming mailboxes, and
2722 will be searched for new mail.
2723
2724 @vindex nnmail-prepare-incoming-hook
2725 @code{nnmail-prepare-incoming-hook} is run in a buffer that holds all
2726 the new incoming mail, and can be used for, well, anything, really.
2727
2728 @vindex nnmail-pre-get-new-mail-hook
2729 @vindex nnmail-post-get-new-mail-hook
2730 There are two more useful hooks executed when treating new incoming
2731 mail---@code{nnmail-pre-get-new-mail-hook} (which is called just before
2732 starting to handle the new mail) and
2733 @code{nnmail-post-get-new-mail-hook} (which is called when the mail
2734 handling is done).  Here's and example of using these two hooks to
2735 change the default file modes the new mail files get:
2736
2737 @lisp
2738 (add-hook 'gnus-pre-get-new-mail-hook 
2739           (lambda () (set-default-file-modes 511)))
2740
2741 (add-hook 'gnus-post-get-new-mail-hook 
2742           (lambda () (set-default-file-modes 551)))
2743 @end lisp
2744
2745 @vindex nnmail-tmp-directory
2746 @code{nnmail-tmp-directory} says where to move the incoming mail to
2747 while processing it.  This is usually done in the same directory that
2748 the mail backend inhabits (i.e., @file{~/Mail/}), but if this variable is
2749 non-@code{nil}, it will be used instead.
2750
2751 @vindex nnmail-movemail-program
2752 @code{nnmail-movemail-program} is executed to move mail from the user's
2753 inbox to her home directory.  The default is @samp{"movemail"}.
2754
2755 @vindex nnmail-delete-incoming
2756 If @code{nnmail-delete-incoming} is non-@code{nil}, the mail backends
2757 will delete the temporary incoming file after splitting mail into the
2758 proper groups.  This is @code{nil} by default for reasons of security. 
2759
2760 @vindex nnmail-use-long-file-names
2761 If @code{nnmail-use-long-file-names} is non-@code{nil} the mail backends
2762 will use long file and directory names.  Groups like @samp{mail.misc}
2763 will end up in directories like @file{mail.misc/}.  If it is @code{nil},
2764 the same group will end up in @file{mail/misc/}.
2765
2766 @vindex nnmail-message-id-cache-length
2767 @vindex nnmail-message-id-cache-file
2768 @vindex nnmail-treat-duplicates
2769 @cindex duplicate mails
2770 If you are a member of a couple of mailing list, you will sometime
2771 receive two copies of the same mail.  This can be quite annoying, so
2772 @code{nnmail} checks for and treats any duplicates it might find.  To do
2773 this, it keeps a cache of old @code{Message-ID}s -
2774 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
2775 default.  The approximate maximum number of @code{Message-ID}s stored
2776 there is controlled by the @code{nnmail-message-id-cache-length}
2777 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
2778 stored.) If all this sounds scary to you, you can set
2779 @code{nnmail-delete-duplicates} to @code{warn} (which is what it is by
2780 default), and @code{nnmail} won't delete duplicate mails.  Instead it
2781 will generate a brand new @code{Message-ID} for the mail and insert a
2782 warning into the head of the mail saying that it thinks that this is a
2783 duplicate of a different message.  
2784
2785 This variable can also be a function.  If that's the case, the function
2786 will be called from a buffer narrowed to the message in question with
2787 the @code{Message-ID} as a parameter.  The function must return either
2788 @code{nil}, @code{warn}, or @code{delete}.
2789
2790 You can turn this feature off completely by setting the variable to
2791 @code{nil}.
2792
2793 Here's a neat feature: If you know that the recipient reads her mail
2794 with Gnus, and that she has @code{nnmail-treat-duplicates} set to
2795 @code{delete}, you can send her as many insults as you like, just by
2796 using a @code{Message-ID} of a mail that you know that she's already
2797 received.  Think of all the fun!  She'll never see any of it!  Whee!
2798
2799 Gnus gives you all the opportunity you could possibly want for shooting
2800 yourself in the foot.  Let's say you create a group that will contain
2801 all the mail you get from your boss.  And then you accidentally
2802 unsubscribe from the group.  Gnus will still put all the mail from your
2803 boss in the unsubscribed group, and so, when your boss mails you "Have
2804 that report ready by Monday or you're fired!", you'll never see it and,
2805 come Tuesday, you'll still believe that you're gainfully employed while
2806 you really should be out collecting empty bottles to save up for next
2807 month's rent money.
2808
2809 @node Creating Mail Groups
2810 @subsubsection Creating Mail Groups
2811 @cindex creating mail groups
2812
2813 You can make Gnus read your personal, private, secret mail.
2814
2815 You should first set @code{gnus-secondary-select-methods} to, for
2816 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
2817 this backend for what groups it carries (@samp{mail.misc} by default)
2818 and subscribe it the normal way.  (Which means you may have to look for
2819 it among the zombie groups, I guess, all depending on your
2820 @code{gnus-subscribe-newsgroup-method} variable.)
2821
2822 @vindex nnmail-split-methods
2823 Then you should set the variable @code{nnmail-split-methods} to specify
2824 how the incoming mail is to be split into groups.
2825
2826 @lisp
2827 (setq nnmail-split-methods
2828   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
2829     ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
2830     ("mail.other" "")))
2831 @end lisp
2832
2833 This variable is a list of lists, where the first element of each of
2834 these lists is the name of the mail group (they do not have to be called
2835 something beginning with @samp{mail}, by the way), and the second
2836 element is a regular expression used on the header of each mail to
2837 determine if it belongs in this mail group.
2838
2839 The second element can also be a function.  In that case, it will be
2840 called narrowed to the headers with the first element of the rule as the
2841 argument.  It should return a non-@code{nil} value if it thinks that the
2842 mail belongs in that group.
2843
2844 The last of these groups should always be a general one, and the regular
2845 expression should @emph{always} be @samp{""} so that it matches any
2846 mails that haven't been matched by any of the other regexps.
2847
2848 If you like to tinker with this yourself, you can set this variable to a
2849 function of your choice.  This function will be called without any
2850 arguments in a buffer narrowed to the headers of an incoming mail
2851 message.  The function should return a list of groups names that it
2852 thinks should carry this mail message.
2853
2854 Note that the mail backends are free to maul the poor, innocent
2855 incoming headers all they want to.  They all add @code{Lines} headers;
2856 some add @code{X-Gnus-Group} headers; most rename the Unix mbox
2857 @code{From<SPC>} line to something else.
2858
2859 @vindex nnmail-crosspost
2860 The mail backends all support cross-posting.  If several regexps match,
2861 the mail will be "cross-posted" to all those groups.
2862 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
2863 that no articles are crossposted to the general (@samp{""}) group. 
2864
2865 @vindex nnmail-crosspost-link-function
2866 @cindex crosspost
2867 @cindex links
2868 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to
2869 the crossposted articles.  However, not all files systems support hard
2870 links.  If that's the case for you, set
2871 @code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
2872 variable is @code{add-name-to-file} by default.)  
2873
2874
2875 @node Fancy Mail Splitting
2876 @subsubsection Fancy Mail Splitting
2877 @cindex mail splitting
2878 @cindex fancy mail splitting
2879
2880 @vindex nnmail-split-fancy
2881 @findex nnmail-split-fancy
2882 If the rather simple, standard method for specifying how to split mail
2883 doesn't allow you to do what you want, you can set
2884 @code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
2885 play with the @code{nnmail-split-fancy} variable. 
2886
2887 Let's look at an example value of this variable first:
2888
2889 @lisp
2890 ;; Messages from the mailer daemon are not crossposted to any of
2891 ;; the ordinary groups.  Warnings are put in a separate group
2892 ;; from real errors.
2893 (| ("from" mail (| ("subject" "warn.*" "mail.warning")
2894                    "mail.misc"))
2895    ;; Non-error messages are crossposted to all relevant
2896    ;; groups, but we don't crosspost between the group for the
2897    ;; (ding) list and the group for other (ding) related mail.
2898    (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
2899          ("subject" "ding" "ding.misc"))
2900       ;; Other mailing lists...
2901       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
2902       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
2903       ;; People...
2904       (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
2905    ;; Unmatched mail goes to the catch all group.
2906    "misc.misc"))")
2907 @end lisp
2908
2909 This variable has the format of a @dfn{split}.  A split is a (possibly)
2910 recursive structure where each split may contain other splits.  Here are
2911 the four possible split syntaxes:
2912
2913 @table @dfn
2914
2915 @item GROUP 
2916 If the split is a string, that will be taken as a group name. 
2917
2918 @item (FIELD VALUE SPLIT)
2919 If the split is a list, and the first element is a string, then that
2920 means that if header FIELD (a regexp) contains VALUE (also a regexp),
2921 then store the message as specified by SPLIT.
2922
2923 @item (| SPLIT...)
2924 If the split is a list, and the first element is @code{|} (vertical
2925 bar), then process each SPLIT until one of them matches.  A SPLIT is
2926 said to match if it will cause the mail message to be stored in one or
2927 more groups.
2928
2929 @item (& SPLIT...)
2930 If the split is a list, and the first element is @code{&}, then process
2931 all SPLITs in the list.
2932 @end table
2933
2934 In these splits, FIELD must match a complete field name.  VALUE must
2935 match a complete word according to the fundamental mode syntax table.
2936 You can use @code{.*} in the regexps to match partial field names or
2937 words.
2938
2939 @vindex nnmail-split-abbrev-alist
2940 FIELD and VALUE can also be lisp symbols, in that case they are expanded
2941 as specified by the variable @code{nnmail-split-abbrev-alist}.  This is
2942 an alist of cons cells, where the car of the cells contains the key, and
2943 the cdr contains a string.
2944
2945 @node Mail & Procmail
2946 @subsubsection Mail & Procmail
2947 @cindex procmail
2948
2949 Many people use @code{procmail} to split incoming mail into groups.  If
2950 you do that, you should set @code{nnmail-spool-file} to @code{procmail}
2951 to ensure that the mail backends never ever try to fetch mail by
2952 themselves.
2953
2954 This also means that you probably don't want to set
2955 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
2956 side effects.
2957
2958 When a mail backend is queried for what groups it carries, it replies
2959 with the contents of that variable, along with any groups it has figured
2960 out that it carries by other means.  None of the backends (except
2961 @code{nnmh}) actually go out to the disk and check what groups actually
2962 exist.  (It's not trivial to distinguish between what the user thinks is
2963 a basis for a newsgroup and what is just a plain old file or directory.)
2964
2965 This means that you have to tell Gnus (and the backends) what groups
2966 exist by hand.
2967
2968 Let's take the @code{nnmh} backend as an example. 
2969
2970 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
2971 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
2972
2973 Go to the group buffer and type @kbd{G m}.  When prompted, answer
2974 @samp{foo} for the name and @samp{nnmh} for the method.  Repeat
2975 twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
2976 to include all your mail groups.
2977
2978 That's it.  You are now set to read your mail.  An active file for this
2979 method will be created automatically.
2980
2981 @vindex nnmail-procmail-suffix
2982 @vindex nnmail-procmail-directory
2983 If you use @code{nnfolder} or any other backend that store more than a
2984 single article in each file, you should never have procmail add mails to
2985 the file that Gnus sees.  Instead, procmail should put all incoming mail
2986 in @code{nnmail-procmail-directory}.  To arrive at the file name to put
2987 the incoming mail in, append @code{nnmail-procmail-suffix} to the group
2988 name.  The mail backends will read the mail from these files.
2989
2990 @vindex nnmail-resplit-incoming
2991 When Gnus reads a file called @file{mail.misc.spool}, this mail will be
2992 put in the @code{mail.misc}, as one would expect.  However, if you want
2993 Gnus to split the mail the normal way, you could set
2994 @code{nnmail-resplit-incoming} to @code{t}.
2995
2996 @vindex nnmail-keep-last-article
2997 If you use @code{procmail} to split things directory into an @code{nnmh}
2998 directory (which you shouldn't do), you should set
2999 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
3000 ever expiring the final article in a mail newsgroup.  This is quite,
3001 quite important.
3002
3003
3004 @node Expiring Old Mail Articles
3005 @subsubsection Expiring Old Mail Articles
3006 @cindex article expiry
3007
3008 Traditional mail readers have a tendency to remove mail articles when
3009 you mark them as read, in some way.  Gnus takes a fundamentally
3010 different approach to mail reading.
3011
3012 Gnus basically considers mail just to be news that has been received in
3013 a rather peculiar manner.  It does not think that it has the power to
3014 actually change the mail, or delete any mail messages.  If you enter a
3015 mail group, and mark articles as "read", or kill them in some other
3016 fashion, the mail articles will still exist on the system.  I repeat:
3017 Gnus will not delete your old, read mail.  Unless you ask it to, of
3018 course.
3019
3020 To make Gnus get rid of your unwanted mail, you have to mark the
3021 articles as @dfn{expirable}.  This does not mean that the articles will
3022 disappear right away, however.  In general, a mail article will be
3023 deleted from your system if, 1) it is marked as expirable, AND 2) it is
3024 more than one week old.  If you do not mark an article as expirable, it
3025 will remain on your system until hell freezes over.  This bears
3026 repeating one more time, with some spurious capitalizations: IF you do
3027 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
3028
3029 @vindex gnus-auto-expirable-newsgroups
3030 You do not have to mark articles as expirable by hand.  Groups that
3031 match the regular expression @code{gnus-auto-expirable-newsgroups} will
3032 have all articles that you read marked as expirable automatically.  All
3033 articles that are marked as expirable have an @samp{E} in the first
3034 column in the summary buffer.
3035
3036 Let's say you subscribe to a couple of mailing lists, and you want the
3037 articles you have read to disappear after a while:
3038
3039 @lisp
3040 (setq gnus-auto-expirable-newsgroups 
3041       "mail.nonsense-list\\|mail.nice-list")
3042 @end lisp
3043
3044 Another way to have auto-expiry happen is to have the element
3045 @code{auto-expire} in the select method of the group. 
3046
3047 @vindex nnmail-expiry-wait
3048 The @code{nnmail-expiry-wait} variable supplies the default time an
3049 expirable article has to live.  The default is seven days.  
3050
3051 Gnus also supplies a function that lets you fine-tune how long articles
3052 are to live, based on what group they are in.  Let's say you want to
3053 have one month expiry period in the @samp{mail.private} group, a one day
3054 expiry period in the @samp{mail.junk} group, and a six day expiry period
3055 everywhere else:
3056
3057 @lisp
3058 (setq nnmail-expiry-wait-function
3059       (lambda (group)
3060        (cond ((string= group "mail.private")
3061                31)
3062              ((string= group "mail.junk")
3063                1)
3064              ((string= group "important")
3065                'never)
3066              (t
3067                6))))
3068 @end lisp
3069
3070 The group names that this function is fed are "unadorned" group
3071 names---no @samp{"nnml:"} prefixes and the like.
3072
3073 The @code{nnmail-expiry-wait} variable and
3074 @code{nnmail-expiry-wait-function} function can be either a number (not
3075 necessarily an integer) or the symbols @code{immediate} or
3076 @code{never}. 
3077
3078 @vindex nnmail-keep-last-article
3079 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
3080 expire the final article in a mail newsgroup.  This is to make life
3081 easier for procmail users.
3082
3083 @vindex gnus-total-expirable-newsgroups
3084 By the way, that line up there about Gnus never expiring non-expirable
3085 articles is a lie.  If you put @code{total-expire} in the group
3086 parameters, articles will not be marked as expirable, but all read
3087 articles will be put through the expiry process.  Use with extreme
3088 caution.  Even more dangerous is the
3089 @code{gnus-total-expirable-newsgroups} variable.  All groups that match
3090 this regexp will have all read articles put through the expiry process,
3091 which means that @emph{all} old mail articles in the groups in question
3092 will be deleted after a while.  Use with extreme caution, and don't come
3093 crying to me when you discover that the regexp you used matched the
3094 wrong group and all your important mail has disappeared.  Be a
3095 @emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
3096 with!  So there!
3097
3098
3099 @node Not Reading Mail
3100 @subsubsection Not Reading Mail
3101
3102 If you start using any of the mail backends, they have the annoying
3103 habit of assuming that you want to read mail with them.  This might not
3104 be unreasonable, but it might not be what you want.
3105
3106 If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
3107 will ever attempt to read incoming mail, which should help.
3108
3109 @vindex nnbabyl-get-new-mail
3110 @vindex nnmbox-get-new-mail
3111 @vindex nnml-get-new-mail
3112 @vindex nnmh-get-new-mail
3113 @vindex nnfolder-get-new-mail
3114 This might be too much, if, for instance, you are reading mail quite
3115 happily with @code{nnml} and just want to peek at some old @sc{rmail}
3116 file you have stashed away with @code{nnbabyl}.  All backends have
3117 variables called backend-@code{get-new-mail}.  If you want to disable
3118 the @code{nnbabyl} mail reading, you edit the virtual server for the
3119 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
3120
3121 All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
3122 narrowed to the article to be saved before saving it when reading
3123 incoming mail.
3124
3125 @node nnmbox
3126 @subsubsection nnmbox
3127 @cindex @code{nnmbox}
3128 @cindex unix mail box
3129
3130 @vindex nnmbox-active-file
3131 @vindex nnmbox-mbox-file
3132 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
3133 mail.  @code{nnmbox} will add extra headers to each mail article to say
3134 which group it belongs in.
3135
3136 Virtual server settings:
3137
3138 @table @code
3139 @item nnmbox-mbox-file
3140 @vindex nnmbox-mbox-file
3141 The name of the mail box in the user's home directory. 
3142
3143 @item nnmbox-active-file
3144 @vindex nnmbox-active-file
3145 The name of the active file for the mail box.
3146
3147 @item nnmbox-get-new-mail
3148 @vindex nnmbox-get-new-mail
3149 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
3150 into groups.
3151 @end table
3152
3153 @node nnbabyl
3154 @subsubsection nnbabyl
3155 @cindex @code{nnbabyl}
3156 @cindex rmail mbox
3157
3158 @vindex nnbabyl-active-file
3159 @vindex nnbabyl-mbox-file
3160 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
3161 mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
3162 article to say which group it belongs in.
3163
3164 Virtual server settings:
3165
3166 @table @code
3167 @item nnbabyl-mbox-file
3168 @vindex nnbabyl-mbox-file
3169 The name of the rmail mbox file.
3170
3171 @item nnbabyl-active-file
3172 @vindex nnbabyl-active-file
3173 The name of the active file for the rmail box.
3174
3175 @item nnbabyl-get-new-mail
3176 @vindex nnbabyl-get-new-mail
3177 If non-@code{nil}, @code{nnbabyl} will read incoming mail. 
3178 @end table
3179
3180 @node nnml
3181 @subsubsection nnml
3182 @cindex @code{nnml}
3183 @cindex mail @sc{nov} spool
3184
3185 The @dfn{nnml} spool mail format isn't compatible with any other known
3186 format.  It should be used with some caution.
3187
3188 @vindex nnml-directory
3189 If you use this backend, Gnus will split all incoming mail into files;
3190 one file for each mail, and put the articles into the correct
3191 directories under the directory specified by the @code{nnml-directory}
3192 variable.  The default value is @file{~/Mail/}.
3193
3194 You do not have to create any directories beforehand; Gnus will take
3195 care of all that.
3196
3197 If you have a strict limit as to how many files you are allowed to store
3198 in your account, you should not use this backend.  As each mail gets its
3199 own file, you might very well occupy thousands of inodes within a few
3200 weeks.  If this is no problem for you, and it isn't a problem for you
3201 having your friendly systems administrator walking around, madly,
3202 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
3203 know that this is probably the fastest format to use.  You do not have
3204 to trudge through a big mbox file just to read your new mail.
3205
3206 @code{nnml} is probably the slowest backend when it comes to article
3207 splitting.  It has to create lots of files, and it also generates
3208 @sc{nov} databases for the incoming mails.  This makes is the fastest
3209 backend when it comes to reading mail.
3210
3211 Virtual server settings:
3212
3213 @table @code
3214 @item nnml-directory
3215 @vindex nnml-directory
3216 All @code{nnml} directories will be placed under this directory. 
3217
3218 @item nnml-active-file
3219 @vindex nnml-active-file
3220 The active file for the @code{nnml} server.
3221
3222 @item nnml-newsgroups-file
3223 @vindex nnml-newsgroups-file
3224 The @code{nnml} group descriptions file.  @xref{Newsgroups File
3225 Format}. 
3226
3227 @item nnml-get-new-mail
3228 @vindex nnml-get-new-mail
3229 If non-@code{nil}, @code{nnml} will read incoming mail.
3230
3231 @item nnml-nov-is-evil
3232 @vindex nnml-nov-is-evil
3233 If non-@code{nil}, this backend will ignore any @sc{nov} files.  
3234
3235 @item nnml-nov-file-name
3236 @vindex nnml-nov-file-name
3237 The name of the @sc{nov} files.  The default is @file{.overview}. 
3238
3239 @end table
3240
3241 @findex nnml-generate-nov-databases
3242 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
3243 you can do a complete update by typing @kbd{M-x
3244 nnml-generate-nov-databases}.  This command will trawl through the
3245 entire @code{nnml} hierarchy, looking at each and every article, so it
3246 might take a while to complete.
3247
3248 @node nnmh
3249 @subsubsection nnmh
3250 @cindex @code{nnmh}
3251 @cindex mh-e mail spool
3252
3253 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
3254 @sc{nov} databases and it doesn't keep an active file.  This makes
3255 @code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
3256 makes it easier to write procmail scripts for.
3257
3258 Virtual server settings:
3259
3260 @table @code
3261 @item nnmh-directory
3262 @vindex nnmh-directory
3263 All @code{nnmh} directories will be located under this directory.
3264
3265 @item nnmh-get-new-mail
3266 @vindex nnmh-get-new-mail
3267 If non-@code{nil}, @code{nnmh} will read incoming mail.
3268
3269 @item nnmh-be-safe
3270 @vindex nnmh-be-safe
3271 If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
3272 sure that the articles in the folder are actually what Gnus thinks they
3273 are.  It will check date stamps and stat everything in sight, so
3274 setting this to @code{t} will mean a serious slow-down.  If you never
3275 use anything but Gnus to read the @code{nnmh} articles, you do not have
3276 to set this variable to @code{t}.
3277 @end table
3278
3279
3280 @node nnfolder
3281 @subsubsection nnfolder
3282 @cindex @code{nnfolder}
3283 @cindex mbox folders
3284
3285 @code{nnfolder} is a backend for storing each mail group in a separate
3286 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
3287 will add extra headers to keep track of article numbers and arrival
3288 dates.
3289
3290 Virtual server settings:
3291
3292 @table @code
3293 @item nnfolder-directory
3294 @vindex nnfolder-directory
3295 All the @code{nnfolder} mail boxes will be stored under this directory. 
3296
3297 @item nnfolder-active-file
3298 @vindex nnfolder-active-file
3299 The name of the active file.
3300
3301 @item nnfolder-newsgroups-file
3302 @vindex nnfolder-newsgroups-file
3303 The name of the group descriptions file.  @xref{Newsgroups File Format}.
3304
3305 @item nnfolder-get-new-mail
3306 @vindex nnfolder-get-new-mail
3307 If non-@code{nil}, @code{nnfolder} will read incoming mail.
3308 @end table
3309
3310 @findex nnfolder-generate-active-file
3311 @kindex M-x nnfolder-generate-active-file
3312 If you have lots of @code{nnfolder}-like files you'd like to read with
3313 @code{nnfolder}, you can use the @key{M-x nnfolder-generate-active-file}
3314 command to make @code{nnfolder} aware of all likely files in
3315 @code{nnfolder-directory}.
3316
3317
3318 @node Group Parameters
3319 @section Group Parameters
3320 @cindex group parameters
3321
3322 Gnus stores all information on a group in a list that is usually known
3323 as the @dfn{group info}.  This list has from three to six elements.
3324 Here's an example info.
3325
3326 @lisp
3327 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
3328                   (nnml "private") ((to-address . "ding@@ifi.uio.no")))
3329 @end lisp
3330
3331 The first element is the @dfn{group name}, as Gnus knows the group,
3332 anyway.  The second element is the @dfn{subscription level}, which
3333 normally is a small integer.  The third element is a list of ranges of
3334 read articles.  The fourth element is a list of lists of article marks
3335 of various kinds.  The fifth element is the select method (or virtual
3336 server, if you like).  The sixth element is a list of @dfn{group
3337 parameters}, which is what this section is about.
3338
3339 Any of the last three elements may be missing if they are not required.
3340 In fact, the vast majority of groups will normally only have the first
3341 three elements, which saves quite a lot of cons cells.
3342
3343 The group parameters store information local to a particular group:
3344
3345 @table @code
3346 @item to-address
3347 @cindex to-address
3348 If the group parameter list contains an element that looks like
3349 @samp{(to-address .  "some@@where.com")}, that address will be used by
3350 the backend when doing followups and posts.  This is primarily useful in
3351 mail groups that represent closed mailing lists---mailing lists where
3352 it's expected that everybody that writes to the mailing list is
3353 subscribed to it.  Since using this parameter ensures that the mail only
3354 goes to the mailing list itself, it means that members won't receive two
3355 copies of your followups.
3356
3357 Using @code{to-address} will actually work whether the group is foreign
3358 or not.  Let's say there's a group on the server that is called
3359 @samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
3360 the articles from a mail-to-news gateway.  Posting directly to this
3361 group is therefore impossible---you have to send mail to the mailing
3362 list address instead.  Also @xref{Mail & Post}.
3363
3364 @item to-list
3365 @cindex to-list
3366 If the group parameter list has an element that looks like
3367 @code{(to-list . "some@@where.com")}, that address will be used when
3368 doing a @kbd{a} in any group.  It is totally ignored when doing a
3369 followup---except that if it is present in a news group, you'll get mail
3370 group semantics when doing @kbd{f}.
3371
3372 @item broken-reply-to
3373 @cindex broken-reply-to
3374 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
3375 headers in this group are to be ignored.  This can be useful if you're
3376 reading a mailing list group where the listserv has inserted
3377 @code{Reply-To} headers that point back to the listserv itself.  This is
3378 broken behavior.  So there!
3379
3380 @item to-group
3381 @cindex to-group
3382 If the group parameter list contains an element like @code{(to-group
3383 . "some.group.name")}, all posts will be sent to that group.
3384
3385 @item auto-expire
3386 @cindex auto-expire
3387 If this symbol is present in the group parameter list, all articles that
3388 are read will be marked as expirable.  For an alternative approach,
3389 @xref{Expiring Old Mail Articles}.
3390
3391 @item total-expire
3392 @cindex total-expire
3393 If this symbol is present, all read articles will be put through the
3394 expiry process, even if they are not marked as expirable.  Use with
3395 caution. 
3396
3397 @item expiry-wait
3398 @cindex expiry-wait
3399 If the group parameter has an element that looks like @samp{(expiry-wait
3400 . 10)}, this value will override any @code{nnmail-expiry-wait} and
3401 @code{nnmail-expiry-wait-functions} when expiring expirable messages.
3402 The value can either be a number of days (not necessarily an integer) or
3403 the symbols @code{never} or @code{immediate}.
3404
3405 @item score-file
3406 Elements that look like @samp{(score-file . "file")} will make
3407 @samp{file} into the current score file for the group in question.  This
3408 means that all score commands you issue will end up in that file. 
3409
3410 @item admin-address
3411 When unsubscribing to a mailing list you should never send the
3412 unsubscription notice to the mailing list itself.  Instead, you'd send
3413 messages to the administrative address.  This parameter allows you to
3414 put the admin address somewhere convenient.
3415
3416 @item comment
3417 This parameter allows you to enter a random comment on the group.
3418
3419 @item @var{(variable form)}
3420 You can use the group parameters to set variables local to the group you
3421 are entering.  Say you want to turn threading off in
3422 @samp{news.answers}.  You'd then put @code{(gnus-show-threads nil)} in
3423 the group parameters of that group.  @code{gnus-show-threads} will be
3424 made into a local variable in the summary buffer you enter, and the form
3425 @code{nil} will be @code{eval}ed there.  
3426
3427 This can also be used as a group-specific hook function, if you'd like.
3428 If you want to hear a beep when you enter the group
3429 @samp{alt.binaries.pictures.furniture}, you could put something like
3430 @code{(dummy-variable (ding))} in the parameters of that group.
3431 @code{dummy-variable} will be set to the result of the @code{(ding)}
3432 form, but who cares?
3433
3434 @end table
3435
3436 If you want to change the group info you can use the @kbd{G E} command
3437 to enter a buffer where you can edit it.
3438
3439 You usually don't want to edit the entire group info, so you'd be better
3440 off using the @kbd{G p} command to just edit the group parameters.
3441
3442 @node Listing Groups
3443 @section Listing Groups
3444 @cindex group listing
3445
3446 These commands all list various slices of the groups that are available.
3447
3448 @table @kbd
3449
3450 @item l
3451 @itemx A s
3452 @kindex A s (Group)
3453 @kindex l (Group)
3454 @findex gnus-group-list-groups
3455 List all groups that have unread articles
3456 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
3457 command will list only groups of level ARG and lower.  By default, it
3458 only lists groups of level five or lower (i.e., just subscribed groups).
3459
3460 @item L
3461 @itemx A u
3462 @kindex A u (Group)
3463 @kindex L (Group)
3464 @findex gnus-group-list-all-groups
3465 List all groups, whether they have unread articles or not
3466 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
3467 this command will list only groups of level ARG and lower.  By default,
3468 it lists groups of level seven or lower (i.e., just subscribed and
3469 unsubscribed groups).
3470
3471 @item A l
3472 @kindex A l (Group)
3473 @findex gnus-group-list-level
3474 List all unread groups on a specific level
3475 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
3476 with no unread articles.
3477
3478 @item A k
3479 @kindex A k (Group)
3480 @findex gnus-group-list-killed
3481 List all killed groups (@code{gnus-group-list-killed}).  If given a
3482 prefix argument, really list all groups that are available, but aren't
3483 currently (un)subscribed.  This could entail reading the active file
3484 from the server.
3485
3486 @item A z
3487 @kindex A z (Group)
3488 @findex gnus-group-list-zombies
3489 List all zombie groups (@code{gnus-group-list-zombies}).
3490
3491 @item A m
3492 @kindex A m (Group)
3493 @findex gnus-group-list-matching
3494 List all subscribed groups with unread articles that match a regexp
3495 (@code{gnus-group-list-matching}). 
3496
3497 @item A M
3498 @kindex A M (Group)
3499 @findex gnus-group-list-all-matching
3500 List groups that match a regexp (@code{gnus-group-list-all-matching}).
3501
3502 @item A A
3503 @kindex A A (Group)
3504 @findex gnus-group-list-active
3505 List absolutely all groups that are in the active file(s) of the
3506 server(s) you are connected to (@code{gnus-group-list-active}).  This
3507 might very well take quite a while.  It might actually be a better idea
3508 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
3509 thing to match on.
3510
3511 @end table
3512
3513 @vindex gnus-permanently-visible-groups
3514 @cindex visible group paramenter
3515 Groups that match the @code{gnus-permanently-visible-groups} regexp will
3516 always be shown, whether they have unread articles or not.  You can also
3517 add the @code{visible} element to the group parameters in question to
3518 get the same effect.
3519
3520 @vindex gnus-list-groups-with-ticked-articles
3521 Groups that have just ticked articles in it are normally listed in the
3522 group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
3523 @code{nil}, these groups will be treated just like totally empty
3524 groups.  It is @code{t} by default.
3525
3526
3527 @node Sorting Groups
3528 @section Sorting Groups
3529 @cindex sorting groups
3530
3531 @kindex C-c C-s (Group)
3532 @findex gnus-group-sort-groups
3533 @vindex gnus-group-sort-function
3534 The @kbd{C-c C-s} (@code{gnus-group-srot-groups}) command sorts the
3535 group buffer according to the function(s) given by the
3536 @code{gnus-group-sort-function} variable.  Available sorting functions
3537 include: 
3538
3539 @table @code
3540
3541 @item gnus-group-sort-by-alphabet
3542 @findex gnus-group-sort-by-alphabet
3543 Sort the group names alphabetically.  This is the default.
3544
3545 @item gnus-group-sort-by-level
3546 @findex gnus-group-sort-by-level
3547 Sort by group level.
3548
3549 @item gnus-group-sort-by-score
3550 @findex gnus-group-sort-by-score
3551 Sort by group score.
3552
3553 @item gnus-group-sort-by-rank
3554 @findex gnus-group-sort-by-rank
3555 Sort by group score and then the group level.  The level and the score
3556 are, when taken together, the group's @dfn{rank}. 
3557
3558 @item gnus-group-sort-by-unread
3559 @findex gnus-group-sort-by-unread
3560 Sort by number of unread articles.
3561
3562 @item gnus-group-sort-by-method
3563 @findex gnus-group-sort-by-method
3564 Sort by alphabetically on the select method.
3565
3566
3567 @end table
3568
3569 @code{gnus-group-sort-function} can also be a list of sorting
3570 functions.  In that case, the most significant sort key function must be
3571 the last one.
3572
3573
3574 There are also a number of commands for sorting directly according to
3575 some sorting criteria:
3576
3577 @table @kbd
3578 @item G S a
3579 @kindex G S a (Group)
3580 @findex gnus-group-sort-groups-by-alphabet
3581 Sort the group buffer alphabetically by group name
3582 (@code{gnus-group-sort-groups-by-alphabet}). 
3583
3584 @item G S u
3585 @kindex G S u (Group)
3586 @findex gnus-group-sort-groups-by-unread
3587 Sort the group buffer by the number of unread articles
3588 (@code{gnus-group-sort-groups-by-unread}).
3589
3590 @item G S l
3591 @kindex G S l (Group)
3592 @findex gnus-group-sort-groups-by-level
3593 Sort the group buffer by group level
3594 (@code{gnus-group-sort-groups-by-level}). 
3595
3596 @item G S v
3597 @kindex G S v (Group)
3598 @findex gnus-group-sort-groups-by-score
3599 Sort the group buffer by group score
3600 (@code{gnus-group-sort-groups-by-score}). 
3601
3602 @item G S r
3603 @kindex G S r (Group)
3604 @findex gnus-group-sort-groups-by-rank
3605 Sort the group buffer by group level
3606 (@code{gnus-group-sort-groups-by-rank}). 
3607
3608 @item G S m
3609 @kindex G S m (Group)
3610 @findex gnus-group-sort-groups-by-method
3611 Sort the group buffer alphabetically by backend name
3612 (@code{gnus-group-sort-groups-by-method}). 
3613
3614 @end table
3615
3616 When given a prefix, all these commands will sort in reverse order. 
3617
3618
3619
3620 @node Group Maintenance
3621 @section Group Maintenance
3622 @cindex bogus groups
3623
3624 @table @kbd
3625 @item b
3626 @kindex b (Group)
3627 @findex gnus-group-check-bogus-groups
3628 Find bogus groups and delete them
3629 (@code{gnus-group-check-bogus-groups}).
3630
3631 @item F
3632 @kindex F (Group)
3633 @findex gnus-find-new-newsgroups
3634 Find new groups and process them (@code{gnus-find-new-newsgroups}).  If
3635 given a prefix, use the @code{ask-server} method to query the server for
3636 new groups.
3637
3638 @item C-c C-x
3639 @kindex C-c C-x (Group)
3640 @findex gnus-group-expire-articles
3641 Run all expirable articles in the current group through the expiry
3642 process (if any) (@code{gnus-group-expire-articles}).
3643
3644 @item C-c M-C-x
3645 @kindex C-c M-C-x (Group)
3646 @findex gnus-group-expire-all-groups
3647 Run all articles in all groups through the expiry process
3648 (@code{gnus-group-expire-all-groups}).
3649
3650 @end table
3651
3652
3653 @node Browse Foreign Server
3654 @section Browse Foreign Server
3655 @cindex foreign servers
3656 @cindex browsing servers
3657
3658 @table @kbd
3659 @item B
3660 @kindex B (Group)
3661 @findex gnus-group-browse-foreign-server
3662 You will be queried for a select method and a server name.  Gnus will
3663 then attempt to contact this server and let you browse the groups there
3664 (@code{gnus-group-browse-foreign-server}).
3665 @end table
3666
3667 @findex gnus-browse-server-mode
3668 A new buffer with a list of available groups will appear.  This buffer
3669 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
3670 (well, a lot) like a normal group buffer, but with one major difference
3671 - you can't enter any of the groups.  If you want to read any of the
3672 news available on that server, you have to subscribe to the groups you
3673 think may be interesting, and then you have to exit this buffer.  The
3674 new groups will be added to the group buffer, and then you can read them
3675 as you would any other group.
3676
3677 Future versions of Gnus may possibly permit reading groups straight from
3678 the browse buffer.
3679
3680 Here's a list of keystrokes available in the browse mode:
3681
3682 @table @kbd
3683 @item n
3684 @kindex n (Browse)
3685 @findex gnus-group-next-group
3686 Go to the next group (@code{gnus-group-next-group}).
3687
3688 @item p
3689 @kindex p (Browse)
3690 @findex gnus-group-prev-group
3691 Go to the previous group (@code{gnus-group-prev-group}).
3692
3693 @item SPACE
3694 @kindex SPACE (Browse)
3695 @findex gnus-browse-read-group
3696 Enter the current group and display the first article
3697 (@code{gnus-browse-read-group}). 
3698
3699 @item RET
3700 @kindex RET (Browse)
3701 @findex gnus-browse-select-group
3702 Enter the current group (@code{gnus-browse-select-group}). 
3703
3704 @item u
3705 @kindex u (Browse)
3706 @findex gnus-browse-unsubscribe-current-group
3707 Unsubscribe to the current group, or, as will be the case here,
3708 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
3709
3710 @item l
3711 @itemx q
3712 @kindex q (Browse)
3713 @kindex l (Browse)
3714 @findex gnus-browse-exit
3715 Exit browse mode (@code{gnus-browse-exit}).
3716
3717 @item ?
3718 @kindex ? (Browse)
3719 @findex gnus-browse-describe-briefly
3720 Describe browse mode briefly (well, there's not much to describe, is
3721 there) (@code{gnus-browse-describe-briefly}).
3722 @end table
3723
3724 @node Exiting Gnus
3725 @section Exiting Gnus
3726 @cindex exiting Gnus
3727
3728 Yes, Gnus is ex(c)iting.
3729
3730 @table @kbd
3731 @item z
3732 @kindex z (Group)
3733 @findex gnus-group-suspend
3734 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
3735 but it kills all buffers except the Group buffer.  I'm not sure why this
3736 is a gain, but then who am I to judge?
3737
3738 @item q
3739 @kindex q (Group)
3740 @findex gnus-group-exit
3741 Quit Gnus (@code{gnus-group-exit}).
3742
3743 @item Q
3744 @kindex Q (Group)
3745 @findex gnus-group-quit
3746 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
3747 @end table
3748
3749 @vindex gnus-exit-gnus-hook
3750 @vindex gnus-suspend-gnus-hook
3751 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3752 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
3753
3754 @findex gnus-unload
3755 @cindex unloading
3756 If you wish to completely unload Gnus and all its adherents, you can use
3757 the @code{gnus-unload} command.  This command is also very handy when
3758 trying to custoize meta-variables.
3759
3760 Note:
3761
3762 @quotation
3763 Miss Lisa Cannifax, while sitting in English class, feels her feet go
3764 numbly heavy and herself fall into a hazy trance as the boy sitting
3765 behind her drew repeated lines with his pencil across the back of her
3766 plastic chair.
3767 @end quotation
3768
3769
3770 @node Group Topics
3771 @section Group Topics
3772 @cindex topics
3773
3774 If you read lots and lots of groups, it might be convenient to group
3775 them hierarchically according to topics.  You put your Emacs groups over
3776 here, your sex groups over there, and the rest (what, two groups or so?)
3777 you put in some misc section that you never bother with anyway.  You can
3778 even group the Emacs sex groups as a sub-topic to either the Emacs
3779 groups or the sex groups---or both!  Go wild!
3780
3781 @findex gnus-topic-mode
3782 @kindex t (Group)
3783 To get this @emph{fab} functionality you simply turn on (ooh!) the
3784 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
3785 is a toggling command.)
3786
3787 Go ahead, just try it.  I'll still be here when you get back.  La de
3788 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
3789 press @kbd{l}.  There.  All your groups are now listed under
3790 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
3791 bothered?
3792
3793 If you want this permanently enabled, you should add that minor mode to
3794 the hook for the group mode:
3795
3796 @lisp
3797 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3798 @end lisp
3799
3800 @menu 
3801 * Topic Variables::    How to customize the topics the Lisp Way.
3802 * Topic Commands::     Interactive E-Z commands.
3803 * Topic Topology::     A map of the world.
3804 @end menu
3805
3806
3807 @node Topic Variables
3808 @subsection Topic Variables
3809 @cindex topic variables
3810
3811
3812 @vindex gnus-group-topic-topics-only
3813 Whoo, this is complicated.  If @code{gnus-group-topic-topics-only} is
3814 @code{nil}, all groups and topics will be listed, as you would expect.
3815 If this variable is non-@code{nil}, only the topics will be listed, and
3816 the groups will not be listed.  This makes the group buffer much shorter,
3817 I'm sure you'll agree.  This is all modified on a topic-by-topic basis
3818 by the @var{show} parameter.   It makes perfect sense, really.
3819
3820 @vindex gnus-topic-unique
3821 If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
3822 of (tops) one topic each.  If this is @code{nil}, each group might end
3823 up being a member of several topics.
3824
3825 Now, if you select a topic, if will fold/unfold that topic, which is
3826 really neat, I think.
3827
3828 @vindex gnus-topic-line-format
3829 The topic lines themselves are created according to the
3830 @code{gnus-topic-line-format} variable.  @xref{Formatting Variables}.
3831 Elements allowed are:
3832
3833 @table @samp
3834 @item i
3835 Indentation.
3836 @item n
3837 Topic name.
3838 @item v
3839 Visibility.
3840 @item l
3841 Level.
3842 @item g
3843 Number of groups in the topic.
3844 @item a
3845 Number of unread articles in the topic.
3846 @end table
3847
3848
3849 @node Topic Commands
3850 @subsection Topic Commands
3851 @cindex topic commands
3852
3853 When the topic minor mode is turned on, a new @kbd{T} submap will be
3854 available.  In addition, a few of the standard keys change their
3855 definitions slightly.
3856
3857 @table @kbd
3858
3859 @item T n
3860 @kindex T n (Group)
3861 @findex gnus-topic-create-topic
3862 Create a new topic (@code{gnus-topic-create-subtopic}).  You will be
3863 prompted for a topic name and the name of the parent topic.
3864
3865 @item T m
3866 @kindex T m (Group)
3867 @findex gnus-topic-move-group
3868 Move the current group to some other topic
3869 (@code{gnus-topic-move-group}).  This command understands the
3870 process/prefix convention (@pxref{Process/Prefix}).
3871
3872 @item T c
3873 @kindex T c (Group)
3874 @findex gnus-topic-copy-group
3875 Copy the current group to some other topic
3876 (@code{gnus-topic-copy-group}).  This command understands the
3877 process/prefix convention (@pxref{Process/Prefix}).
3878
3879 @item T M
3880 @kindex T M (Group)
3881 @findex gnus-topic-move-matching
3882 Move all groups that match some regular expression to a topic
3883 (@code{gnus-topic-move-matching}). 
3884
3885 @item T C
3886 @kindex T C (Group)
3887 @findex gnus-topic-copy-matching
3888 Copy all groups that match some regular expression to a topic
3889 (@code{gnus-topic-copy-matching}). 
3890
3891 @item RET
3892 @kindex RET (Group)
3893 @findex gnus-topic-select-group
3894 @itemx SPACE
3895 Either select a group or fold a topic (@code{gnus-topic-select-group}).
3896 When you perform this command on a group, you'll enter the group, as
3897 usual.  When done on a topic line, the topic will be folded (if it was
3898 visible) or unfolded (if it was folded already).  So it's basically a
3899 toggling command on topics.  In addition, if you give a numerical
3900 prefix, group on that level (and lower) will be displayed.
3901
3902 @item C-k
3903 @kindex C-k (Group)
3904 @findex gnus-topic-kill-group
3905 Kill a group or topic (@code{gnus-topic-kill-group}).  
3906
3907 @item C-y
3908 @kindex C-y (Group)
3909 @findex gnus-topic-yank-group
3910 Yank the previosuly killed group or topic (@code{gnus-topic-yank-group}).
3911 Note that all topics will be yanked before all groups.
3912
3913 @item T r
3914 @kindex T r (Group)
3915 @findex gnus-topic-rename
3916 Rename a topic (@code{gnus-topic-rename}). 
3917
3918 @item T DEL
3919 @kindex T DEL (Group)
3920 @findex gnus-topic-delete
3921 Delete an empty topic (@code{gnus-topic-delete}). 
3922
3923 @item A T
3924 @kindex A T (Group)
3925 @findex gnus-topic-list-active
3926 List all groups that Gnus knows about in a topicsified way
3927 (@code{gnus-topic-list-active}).
3928
3929 @end table
3930
3931
3932 @node Topic Topology
3933 @subsection Topic Topology
3934 @cindex topic topology
3935 @cindex topology
3936
3937 So, let's have a look at an example group buffer:
3938
3939 @example
3940 Gnus
3941   Emacs -- I wuw it!
3942        3: comp.emacs
3943        2: alt.religion.emacs
3944     Naughty Emacs
3945      452: alt.sex.emacs
3946        0: comp.talk.emacs.recovery
3947   Misc
3948        8: comp.binaries.fractals
3949       13: comp.sources.unix
3950 @end example
3951
3952 So, here we have one top-level topic, two topics under that, and one
3953 sub-topic under one of the sub-topics.  (There is always just one (1)
3954 top-level topic).  This topology can be expressed as follows:
3955
3956 @lisp
3957 (("Gnus" visible)
3958  (("Emacs -- I wuw it!" visible) 
3959   (("Naughty Emacs" visible)))
3960  (("Misc" visible)))
3961 @end lisp
3962
3963 This is in fact how the variable @code{gnus-topic-topology} would look
3964 for the display above.  That variable is saved in the @file{.newsrc.eld}
3965 file, and shouldn't be messed with manually---unless you really want
3966 to.  Since this variable is read from the @file{.newsrc.eld} file,
3967 setting it in any other startup files will have no effect.  
3968
3969 This topology shows what topics are sub-topics of what topics (right),
3970 and which topics are visible.  Two settings are currently
3971 allowed---@code{visible} and @code{invisible}.
3972
3973 @vindex gnus-topic-hide-subtopics
3974 If @code{gnus-topic-hide-subtopics} is non-@code{nil} (which it is by
3975 default), sub-topics will be folded along with any groups that belong to
3976 the topic.  If this variable is @code{nil}, all topics will always be
3977 visible, even though the parent topics are folded.
3978
3979
3980 @node Misc Group Stuff
3981 @section Misc Group Stuff
3982
3983 @table @kbd
3984
3985 @item g
3986 @kindex g (Group)
3987 @findex gnus-group-get-new-news
3988 Check the server(s) for new articles.  If the numerical prefix is used,
3989 this command will check only groups of level @var{arg} and lower
3990 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
3991 command will force a total rereading of the active file(s) from the
3992 backend(s).
3993
3994 @item M-g
3995 @kindex M-g (Group)
3996 @findex gnus-group-get-new-news-this-group
3997 @vindex gnus-goto-next-group-when-activating
3998 Check whether new articles have arrived in the current group
3999 (@code{gnus-group-get-new-news-this-group}).  The
4000 @code{gnus-goto-next-group-when-activating} variable controls whether
4001 this command is to move point to the next group or not.  It is @code{t}
4002 by default.
4003
4004 @findex gnus-activate-all-groups
4005 @item C-c M-g
4006 @kindex C-c M-g (Group)
4007 Activate absolutely all groups (@code{gnus-activate-all-groups}). 
4008
4009 @item ^
4010 @kindex ^ (Group)
4011 @findex gnus-group-enter-server-mode
4012 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
4013 Server Buffer}.
4014
4015 @item M-f
4016 @kindex M-f (Group)
4017 @findex gnus-group-fetch-faq
4018 Try to fetch the FAQ for the current group
4019 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
4020 @code{gnus-group-faq-directory}, which is usually a directory on a
4021 remote machine.  @code{ange-ftp} will be used for fetching the file.
4022
4023 @item R
4024 @kindex R (Group)
4025 @findex gnus-group-restart
4026 Restart Gnus (@code{gnus-group-restart}).
4027
4028 @item r
4029 @kindex r (Group)
4030 @findex gnus-group-read-init-file
4031 @vindex gnus-init-file
4032 Read the init file (@code{gnus-init-file}, which defaults to
4033 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
4034
4035 @item s
4036 @kindex s (Group)
4037 @findex gnus-group-save-newsrc
4038 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
4039 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
4040 file(s) whether Gnus thinks it is necessary or not.
4041
4042 @item Z
4043 @kindex Z (Group)
4044 @findex gnus-group-clear-dribble
4045 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
4046
4047 @item D
4048 @kindex D (Group)
4049 @findex gnus-group-describe-group
4050 Describe the current group (@code{gnus-group-describe-group}).  If given
4051 a prefix, force Gnus to re-read the description from the server.
4052
4053 @item G a
4054 @kindex G a (Group)
4055 @findex gnus-group-apropos
4056 List all groups that have names that match a regexp
4057 (@code{gnus-group-apropos}).
4058
4059 @item G d
4060 @kindex G d (Group)
4061 @findex gnus-group-description-apropos
4062 List all groups that have names or descriptions that match a regexp
4063 (@code{gnus-group-description-apropos}).
4064
4065 @item a
4066 @kindex a (Group)
4067 @findex gnus-group-post-news
4068 Post an article to a group (@code{gnus-group-post-news}).  The current
4069 group name will be used as the default.
4070
4071 @item m
4072 @kindex m (Group)
4073 @findex gnus-group-mail
4074 Mail a message somewhere (@code{gnus-group-mail}).
4075
4076 @item C-x C-t
4077 @kindex C-x C-t (Group)
4078 @findex gnus-group-transpose-groups
4079 Transpose two groups (@code{gnus-group-transpose-groups}).
4080
4081 @item V
4082 @kindex V (Group)
4083 @findex gnus-version
4084 Display current Gnus version numbers (@code{gnus-version}).
4085
4086 @item M-d
4087 @kindex M-d (Group)
4088 @findex gnus-group-describe-all-groups
4089 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
4090 prefix, force Gnus to re-read the description file from the server.
4091
4092 @item ?
4093 @kindex ? (Group)
4094 @findex gnus-group-describe-briefly
4095 Give a very short help message (@code{gnus-group-describe-briefly}).
4096
4097 @item C-c C-i
4098 @kindex C-c C-i (Group)
4099 @findex gnus-info-find-node
4100 Go to the Gnus info node (@code{gnus-info-find-node}).
4101 @end table
4102
4103 @vindex gnus-group-prepare-hook
4104 @code{gnus-group-prepare-hook} is called after the group buffer is
4105 generated.  It may be used to modify the buffer in some strange,
4106 unnatural way.
4107
4108 @node The Summary Buffer
4109 @chapter The Summary Buffer
4110 @cindex summary buffer
4111
4112 A line for each article is displayed in the summary buffer.  You can
4113 move around, read articles, post articles and reply to articles.
4114
4115 @menu
4116 * Summary Buffer Format::       Deciding how the summary buffer is to look.
4117 * Summary Maneuvering::         Moving around the summary buffer.
4118 * Choosing Articles::           Reading articles.
4119 * Paging the Article::          Scrolling the current article.
4120 * Reply Followup and Post::     Posting articles.
4121 * Canceling and Superseding::   "Whoops, I shouldn't have called him that."
4122 * Marking Articles::            Marking articles as read, expirable, etc.
4123 * Limiting::                    You can limit the summary buffer.
4124 * Threading::                   How threads are made.
4125 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
4126 * Article Caching::             You may store articles in a cache.
4127 * Persistent Articles::         Making articles expiry-resistant.
4128 * Article Backlog::             Having already read articles hang around.
4129 * Exiting the Summary Buffer::  Returning to the Group buffer.
4130 * Process/Prefix::              A convention used by many treatment commands.
4131 * Saving Articles::             Ways of customizing article saving.
4132 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
4133 * Article Treatment::           The article buffer can be mangled at will.
4134 * Summary Sorting::             You can sort the summary buffer four ways.
4135 * Finding the Parent::          No child support? Get the parent.
4136 * Alternative Approaches::      Reading using non-default summaries.
4137 * Tree Display::                A more visual display of threads.
4138 * Mail Group Commands::         Some commands can only be used in mail groups.
4139 * Various Summary Stuff::       What didn't fit anywhere else.
4140 @end menu
4141
4142
4143 @node Summary Buffer Format
4144 @section Summary Buffer Format
4145 @cindex summary buffer format
4146
4147 @menu
4148 * Summary Buffer Lines::     You can specify how summary lines should look.
4149 * Summary Buffer Mode Line:: You can say how the mode line should look.
4150 @end menu
4151
4152 @findex mail-extract-address-components
4153 @findex gnus-extract-address-components
4154 @vindex gnus-extract-address-components
4155 Gnus will use the value of the @code{gnus-extract-address-components}
4156 variable as a function for getting the name and address parts of a
4157 @code{From} header.  Two pre-defined function exist:
4158 @code{gnus-extract-address-components}, which is the default, quite
4159 fast, and too simplistic solution; and
4160 @code{mail-extract-address-components}, which works very nicely, but is
4161 slower.
4162
4163 @vindex gnus-summary-same-subject
4164 @code{gnus-summary-same-subject} is a string indicating that the current
4165 article has the same subject as the previous.  This string will be used
4166 with those specs that require it.  The default is @samp{""}.
4167
4168 @node Summary Buffer Lines
4169 @subsection Summary Buffer Lines
4170
4171 @vindex gnus-summary-line-format
4172 You can change the format of the lines in the summary buffer by changing
4173 the @code{gnus-summary-line-format} variable.  It works along the same
4174 lines a a normal @code{format} string, with some extensions.
4175
4176 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
4177
4178 The following format specification characters are understood:
4179
4180 @table @samp
4181 @item N 
4182 Article number.
4183 @item S
4184 Subject string.
4185 @item s
4186 Subject if the article is the root, @code{gnus-summary-same-subject}
4187 otherwise. 
4188 @item F
4189 Full @code{From} line.
4190 @item n
4191 The name (from the @code{From} header).
4192 @item a
4193 The name (from the @code{From} header).  This differs from the @code{n}
4194 spec in that it uses @code{gnus-extract-address-components}, which is
4195 slower, but may be more thorough.
4196 @item A
4197 The address (from the @code{From} header).  This works the same way as
4198 the @code{a} spec.
4199 @item L
4200 Number of lines in the article.
4201 @item c
4202 Number of characters in the article.
4203 @item I
4204 Indentation based on thread level (@pxref{Customizing Threading}).
4205 @item T
4206 Nothing if the article is a root and lots of spaces if it isn't (it
4207 pushes everything after it off the screen).
4208 @item \[
4209 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
4210 for adopted articles.
4211 @item \]
4212 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
4213 for adopted articles.
4214 @item <
4215 One space for each thread level.
4216 @item >
4217 Twenty minus thread level spaces.
4218 @item U
4219 Unread.
4220 @item R
4221 Replied.
4222 @item i
4223 Score as a number.
4224 @item z
4225 @vindex gnus-summary-zcore-fuzz
4226 Zcore, @samp{+} if above the default level and @samp{-} if below the
4227 default level.  If the difference between
4228 @code{gnus-summary-default-level} and the score is less than
4229 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
4230 @item V
4231 Total thread score.
4232 @item x
4233 @code{Xref}.
4234 @item D
4235 @code{Date}.
4236 @item M
4237 @code{Message-ID}.
4238 @item r
4239 @code{References}.
4240 @item t
4241 Number of articles in the current sub-thread.  Using this spec will slow
4242 down summary buffer generation somewhat.
4243 @item e
4244 A single character will be displayed if the article has any children. 
4245 @item u
4246 User defined specifier.  The next character in the format string should
4247 be a letter.  @sc{gnus} will call the function
4248 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
4249 following @samp{%u}.  The function will be passed the current header as
4250 argument.  The function should return a string, which will be inserted
4251 into the summary just like information from any other summary specifier.
4252 @end table
4253
4254 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
4255 have to be handled with care.  For reasons of efficiency, Gnus will
4256 compute what column these characters will end up in, and "hard-code"
4257 that.  This means that it is illegal to have these specs after a
4258 variable-length spec.  Well, you might not be arrested, but your summary
4259 buffer will look strange, which is bad enough.
4260
4261 The smart choice is to have these specs as far to the left as possible.
4262 (Isn't that the case with everything, though?  But I digress.)
4263
4264 This restriction may disappear in later versions of Gnus.
4265
4266 @node Summary Buffer Mode Line
4267 @subsection Summary Buffer Mode Line
4268
4269 @vindex gnus-summary-mode-line-format
4270 You can also change the format of the summary mode bar.  Set
4271 @code{gnus-summary-mode-line-format} to whatever you like.  Here are the
4272 elements you can play with:
4273
4274 @table @samp
4275 @item G
4276 Group name.
4277 @item p
4278 Unprefixed group name.
4279 @item A
4280 Current article number.
4281 @item V
4282 Gnus version.
4283 @item U
4284 Number of unread articles in this group.
4285 @item e
4286 Number of unselected articles in this group.
4287 @item Z
4288 A string with the number of unread and unselected articles represented
4289 either as @samp{<%U(+%u) more>} if there are both unread and unselected
4290 articles, and just as @samp{<%U more>} if there are just unread articles
4291 and no unselected ones.
4292 @item g
4293 Shortish group name.  For instance, @samp{rec.arts.anime} will be
4294 shortened to @samp{r.a.anime}. 
4295 @item S
4296 Subject of the current article.
4297 @item u
4298 Used-defined spec.
4299 @item s
4300 Name of the current score file.
4301 @item d
4302 Number of dormant articles.
4303 @item t
4304 Number of ticked articles.
4305 @item r
4306 Number of articles that have been marked as read in this session. 
4307 @item E
4308 Number of articles expunged by the score files.
4309 @end table
4310
4311
4312 @node Summary Maneuvering
4313 @section Summary Maneuvering
4314 @cindex summary movement
4315
4316 All the straight movement commands understand the numeric prefix and
4317 behave pretty much as you'd expect. 
4318
4319 None of these commands select articles.
4320
4321 @table @kbd
4322 @item G M-n
4323 @itemx M-n
4324 @kindex M-n (Summary)
4325 @kindex G M-n (Summary)
4326 @findex gnus-summary-next-unread-subject
4327 Go to the next summary line of an unread article
4328 (@code{gnus-summary-next-unread-subject}). 
4329
4330 @item G M-p
4331 @itemx M-p
4332 @kindex M-p (Summary)
4333 @kindex G M-p (Summary)
4334 @findex gnus-summary-prev-unread-subject
4335 Go to the previous summary line of an unread article
4336 (@code{gnus-summary-prev-unread-subject}). 
4337
4338 @item G g
4339 @itemx j
4340 @kindex j (Summary)
4341 @kindex G g (Summary)
4342 @findex gnus-summary-goto-subject
4343 Ask for an article number and then go to this summary line
4344 (@code{gnus-summary-goto-subject}). 
4345 @end table
4346
4347 If Gnus asks you to press a key to confirm going to the next group, you
4348 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
4349 buffer, searching for the next group to read without actually returning
4350 to the group buffer.
4351
4352 Variables related to summary movement:
4353
4354 @table @code
4355
4356 @vindex gnus-auto-select-next
4357 @item gnus-auto-select-next
4358 If you are at the end of the group and issue one of the movement
4359 commands, Gnus will offer to go to the next group.  If this variable is
4360 @code{t} and the next group is empty, Gnus will exit summary mode and
4361 return to the group buffer.  If this variable is neither @code{t} nor
4362 @code{nil}, Gnus will select the next group, no matter whether it has
4363 any unread articles or not.  As a special case, if this variable is
4364 @code{quietly}, Gnus will select the next group without asking for
4365 confirmation.  If this variable is @code{almost-quietly}, the same will
4366 happen only if you are located on the last article in the group.  Also
4367 @xref{Group Levels}.
4368
4369 @item gnus-auto-select-same
4370 @vindex gnus-auto-select-same
4371 If non-@code{nil}, all the movement commands will try to go to the next
4372 article with the same subject as the current.  This variable is not
4373 particularly useful if you use a threaded display.
4374
4375 @item gnus-summary-check-current
4376 @vindex gnus-summary-check-current
4377 If non-@code{nil}, all the "unread" movement commands will not proceed
4378 to the next (or previous) article if the current article is unread.
4379 Instead, they will choose the current article.
4380
4381 @item gnus-auto-center-summary
4382 @vindex gnus-auto-center-summary
4383 If non-@code{nil}, Gnus will keep the point in the summary buffer
4384 centered at all times.  This makes things quite tidy, but if you have a
4385 slow network connection, or simply do not like this un-Emacsism, you can
4386 set this variable to @code{nil} to get the normal Emacs scrolling
4387 action.  This will also inhibit horizontal recentering of the summary
4388 buffer, which might make it more inconvenient to read extremely long
4389 threads.
4390
4391 @end table
4392
4393
4394 @node Choosing Articles
4395 @section Choosing Articles
4396 @cindex selecting articles
4397
4398 None of the following movement commands understand the numeric prefix,
4399 and they all select and display an article.
4400
4401 @table @kbd
4402 @item SPACE
4403 @kindex SPACE (Summary)
4404 @findex gnus-summary-next-page
4405 Select the current article, or, if that one's read already, the next
4406 unread article (@code{gnus-summary-next-page}).
4407
4408 @item G n
4409 @itemx n
4410 @kindex n (Summary)
4411 @kindex G n (Summary)
4412 @findex gnus-summary-next-unread-article
4413 Go to next unread article (@code{gnus-summary-next-unread-article}).
4414
4415 @item G p
4416 @itemx p
4417 @kindex p (Summary)
4418 @findex gnus-summary-prev-unread-article
4419 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
4420
4421 @item G N
4422 @itemx N
4423 @kindex N (Summary)
4424 @kindex G N (Summary)
4425 @findex gnus-summary-next-article
4426 Go to the next article (@code{gnus-summary-next-article}).
4427
4428 @item G P
4429 @itemx P
4430 @kindex P (Summary)
4431 @kindex G P (Summary)
4432 @findex gnus-summary-prev-article
4433 Go to the previous article (@code{gnus-summary-prev-article}).
4434
4435 @item G C-n
4436 @kindex G C-n (Summary)
4437 @findex gnus-summary-next-same-subject
4438 Go to the next article with the same subject
4439 (@code{gnus-summary-next-same-subject}). 
4440
4441 @item G C-p
4442 @kindex G C-p (Summary)
4443 @findex gnus-summary-prev-same-subject
4444 Go to the previous article with the same subject
4445 (@code{gnus-summary-prev-same-subject}). 
4446
4447 @item G f
4448 @itemx .
4449 @kindex G f  (Summary)
4450 @kindex .  (Summary)
4451 @findex gnus-summary-first-unread-article
4452 Go to the first unread article
4453 (@code{gnus-summary-first-unread-article}).
4454
4455 @item G b
4456 @itemx ,
4457 @kindex G b (Summary)
4458 @kindex , (Summary)
4459 Go to the article with the highest score
4460 (@code{gnus-summary-best-unread-article}). 
4461
4462 @item G l
4463 @itemx l
4464 @kindex l (Summary)
4465 @kindex G l (Summary)
4466 @findex gnus-summary-goto-last-article
4467 Go to the previous article read (@code{gnus-summary-goto-last-article}).
4468
4469 @item G p
4470 @kindex G p (Summary)
4471 @findex gnus-summary-pop-article
4472 Pop an article off the summary history and go to this article
4473 (@code{gnus-summary-pop-article}).  This command differs from the
4474 command above in that you can pop as many previous articles off the
4475 history as you like.
4476 @end table
4477
4478 Some variables that are relevant for moving and selecting articles:
4479
4480 @table @code
4481 @item gnus-auto-extend-newsgroup
4482 @vindex gnus-auto-extend-newsgroup
4483 All the movement commands will try to go to the previous (or next)
4484 article, even if that article isn't displayed in the Summary buffer if
4485 this variable is non-@code{nil}.  Gnus will then fetch the article from
4486 the server and display it in the article buffer.
4487
4488 @item gnus-select-article-hook
4489 @vindex gnus-select-article-hook
4490 This hook is called whenever an article is selected.  By default it
4491 exposes any threads hidden under the selected article.
4492
4493 @item gnus-mark-article-hook
4494 @vindex gnus-mark-article-hook
4495 This hook is called whenever an article is selected.  It is intended to
4496 be used for marking articles as read.
4497
4498 @item gnus-visual-mark-article-hook
4499 @vindex gnus-visual-mark-article-hook
4500 This hook is run after selecting an article.  It is meant to be used for
4501 highlighting the article in some way.  It is not run if
4502 @code{gnus-visual} is @code{nil}.
4503
4504 @item gnus-summary-update-hook
4505 @vindex gnus-summary-update-hook
4506 This hook is called when a summary line is changed.  It is not run if
4507 @code{gnus-visual} is @code{nil}.
4508
4509 @item gnus-summary-selected-face
4510 @vindex gnus-summary-selected-face
4511 This is the face (or @dfn{font} as some people call it) that is used to
4512 highlight the current article in the summary buffer.
4513
4514 @item gnus-summary-highlight
4515 @vindex gnus-summary-highlight
4516 Summary lines are highlighted according to this variable, which is a
4517 list where the elements are on the format @code{(FORM . FACE)}.  If you
4518 would, for instance, like ticked articles to be italic and high-scored
4519 articles to be bold, you could set this variable to something like
4520 @lisp
4521 (((eq mark gnus-ticked-mark) . italic)
4522  ((> score default) . bold))
4523 @end lisp
4524 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
4525 @var{FACE} will be applied to the line.
4526 @end table
4527
4528 @node Paging the Article
4529 @section Scrolling the Article
4530 @cindex article scrolling
4531
4532 @table @kbd
4533
4534 @item SPACE
4535 @kindex SPACE (Summary)
4536 @findex gnus-summary-next-page
4537 Pressing @kbd{SPACE} will scroll the current article forward one page,
4538 or, if you have come to the end of the current article, will choose the
4539 next article (@code{gnus-summary-next-page}).
4540
4541 @item DEL
4542 @kindex DEL (Summary)
4543 @findex gnus-summary-prev-page
4544 Scroll the current article back one page (@code{gnus-summary-prev-page}). 
4545
4546 @item RET
4547 @kindex RET (Summary)
4548 @findex gnus-summary-scroll-up
4549 Scroll the current article one line forward
4550 (@code{gnus-summary-scroll-up}).
4551
4552 @item A <
4553 @itemx <
4554 @kindex < (Summary)
4555 @kindex A < (Summary)
4556 @findex gnus-summary-beginning-of-article
4557 Scroll to the beginning of the article
4558 (@code{gnus-summary-beginning-of-article}).
4559
4560 @item A >
4561 @itemx >
4562 @kindex > (Summary)
4563 @kindex A > (Summary)
4564 @findex gnus-summary-end-of-article
4565 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
4566
4567 @item A s 
4568 @kindex A s (Summary)
4569 @findex gnus-summary-isearch-article
4570 Perform an isearch in the article buffer
4571 (@code{gnus-summary-isearch-article}). 
4572
4573 @end table
4574
4575 @node Reply Followup and Post
4576 @section Reply, Followup and Post
4577 @cindex reply
4578 @cindex followup
4579 @cindex post
4580
4581 @kindex C-c C-c (Post)
4582 All the commands for posting and mailing will put you in a post or mail
4583 buffer where you can edit the article all you like, before you send the
4584 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
4585 and you wish to post the article using the foreign server, you can give
4586 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
4587 server. 
4588
4589 @menu 
4590 * Mail::                 Mailing & replying.
4591 * Post::                 Posting and following up.
4592 * Posting Server::       What server should you post via?
4593 * Mail & Post::          Mailing and posting at the same time.
4594 * Archived Messages::    Where Gnus stores the messages you've sent.
4595 * Posting Styles::       An easier way to configure some key elements.
4596 * Drafts::               Postponing messages and rejected messages.
4597 * Rejected Articles::    What happens if the server doesn't like your article?
4598 @end menu
4599
4600 @node Mail
4601 @subsection Mail
4602
4603 Commands for composing a mail message:
4604
4605 @table @kbd
4606
4607 @item S r
4608 @itemx r
4609 @kindex S r (Summary)
4610 @kindex r (Summary)
4611 @findex gnus-summary-reply
4612 Mail a reply to the author of the current article
4613 (@code{gnus-summary-reply}). 
4614
4615 @item S R
4616 @itemx R
4617 @kindex R (Summary)
4618 @kindex S R (Summary)
4619 @findex gnus-summary-reply-with-original
4620 Mail a reply to the author of the current article and include the
4621 original message (@code{gnus-summary-reply-with-original}).  This
4622 command uses the process/prefix convention.
4623
4624 @item S o m
4625 @kindex S o m (Summary)
4626 @findex gnus-summary-mail-forward
4627 Forward the current article to some other person
4628 (@code{gnus-summary-mail-forward}). 
4629
4630 @item S o p
4631 @kindex S o p (Summary)
4632 @findex gnus-summary-post-forward
4633 Forward the current article to a newsgroup
4634 (@code{gnus-summary-post-forward}).
4635
4636 @item S m
4637 @itemx m
4638 @kindex m (Summary)
4639 @kindex S m (Summary)
4640 @findex gnus-summary-mail-other-window
4641 Send a mail to some other person
4642 (@code{gnus-summary-mail-other-window}).
4643
4644 @item S D b
4645 @kindex S D b (Summary)
4646 @findex gnus-summary-resend-bounced-mail
4647 If you have sent a mail, but the mail was bounced back to you for some
4648 reason (wrong address, transient failure), you can use this command to
4649 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
4650 will be popped into a mail buffer where you can edit the headers before
4651 sending the mail off again.  The headers that match the regexp
4652 @code{gnus-bounced-headers-junk} (default @samp{^Received:}) are
4653 automatically deleted first.  If you give a prefix to this command, and
4654 the bounced mail is a reply to some other mail, Gnus will try to fetch
4655 that mail and display it for easy perusal of its headers.  This might
4656 very well fail, though.
4657
4658 @item S D r
4659 @kindex S D r (Summary)
4660 @findex gnus-summary-resend-message
4661 Not to be confused with the previous command,
4662 @code{gnus-summary-resend-message} will prompt you for an address to
4663 send the current message off to, and then send it to that place.  The
4664 headers of the message won't be altered---but lots of headers that say
4665 @samp{Resent-To}, @samp{Resent-From} and so on will be added.  This
4666 means that you actually send a mail to someone that has a @samp{To}
4667 header that (proabbly) points to yourself.  This will confuse people.
4668 So, natcherly you'll only do that if you're really eVIl.  
4669
4670 This command is mainly used if you have several accounts and want to
4671 ship a mail to a different account of yours.  (If you're both
4672 @samp{root} and @samp{postmaster} and get a mail for @samp{postmaster}
4673 to the @samp{root} account, you may want to resend it to
4674 @samp{postmaster}.  Ordnung muss sein!
4675
4676 @item S O m
4677 @kindex S O m (Summary)
4678 @findex gnus-uu-digest-mail-forward
4679 Digest the current series and forward the result using mail
4680 (@code{gnus-uu-digest-mail-forward}).  This command uses the
4681 process/prefix convention (@pxref{Process/Prefix}). 
4682
4683 @item S O p
4684 @kindex S O p (Summary)
4685 @findex gnus-uu-digest-post-forward
4686 Digest the current series and forward the result to a newsgroup
4687 (@code{gnus-uu-digest-mail-forward}).  
4688 @end table
4689
4690 Variables for customizing outgoing mail:
4691
4692 @table @code
4693 @item gnus-reply-to-function
4694 @vindex gnus-reply-to-function
4695 Gnus uses the normal methods to determine where replies are to go, but
4696 you can change the behavior to suit your needs by fiddling with this
4697 variable.
4698
4699 If you want the replies to go to the @samp{Sender} instead of the
4700 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4701 like this:
4702
4703 @lisp
4704 (setq gnus-reply-to-function
4705       (lambda (group)
4706        (cond ((string= group "mail.stupid-list")
4707                (mail-fetch-field "sender"))
4708              (t
4709               nil))))
4710 @end lisp
4711
4712 This function will be called narrowed to the head of the article that is
4713 being replied to.
4714
4715 As you can see, this function should return a string if it has an
4716 opinion as to what the To header should be.  If it does not, it should
4717 just return @code{nil}, and the normal methods for determining the To
4718 header will be used.
4719
4720 This function can also return a list.  In that case, each list element
4721 should be a cons, where the car should be the name of an header
4722 (eg. @samp{Cc}) and the cdr should be the header value
4723 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
4724 the head of the outgoing mail. 
4725
4726 @item gnus-mail-send-method
4727 @vindex gnus-mail-send-method
4728 This variable says how a mail should be mailed.  It uses the function in
4729 the @code{send-mail-function} variable as the default.
4730
4731 @item gnus-uu-digest-headers
4732 @vindex gnus-uu-digest-headers
4733 List of regexps to match headers included in digested messages.  The
4734 headers will be included in the sequence they are matched.
4735
4736 @item gnus-mail-hook
4737 @vindex gnus-mail-hook
4738 Hook called as the last thing after setting up a mail buffer.
4739
4740 @item gnus-required-mail-headers
4741 @vindex gnus-required-mail-headers
4742 Gnus will generate headers in all outgoing mail instead of letting
4743 @code{sendmail} do it for us.  This makes it possible to do more neat
4744 stuff, like putting mail without sending it, do hairy @code{Fcc}
4745 handling, and much more.  This variable controls what headers Gnus will
4746 generate, and is of the exact same form as @code{gnus-required-headers},
4747 which does the same for news articles (@pxref{Post}). 
4748
4749 The @code{Newsgroups} header is illegal in this list, while @code{To} is
4750 required, and @code{X-Mailer} can be added if you so should want.
4751
4752 @findex gnus-forward-start-separator
4753 @item gnus-forward-start-separator
4754 Delimiter inserted before forwarded messages.
4755
4756 @findex gnus-forward-end-separator
4757 @item gnus-forward-end-separator
4758 Delimiter inserted after forwarded messages.
4759
4760 @vindex gnus-signature-before-forwarded-message
4761 @item gnus-signature-before-forwarded-message
4762 If this variable is @code{t}, which it is by default, your personal
4763 signature will be inserted before the forwarded message.  If not, the
4764 forwarded message will be inserted first in the new mail.
4765
4766 @item gnus-forward-included-headers
4767 @vindex gnus-forward-included-headers
4768 Regexp matching header lines to be included in forwarded messages.  It
4769 usese the same regexp as @code{gnus-visible-headers} by default.
4770
4771 @end table
4772
4773 @kindex C-c C-c (Mail)
4774 @kindex C-c C-p (Mail)
4775 @findex gnus-put-message
4776 You normally send a mail message by pressing @kbd{C-c C-c}.  However,
4777 you may wish to just put the mail message you have just written in your
4778 own local mail group instead of sending it.  Sounds quite unlikely, but
4779 I found that useful, so you can now also press @kbd{C-c C-p} to
4780 @dfn{put} the article in the current mail group, or, if there is no such
4781 thing, you will be prompted for a mail group, and then the article will
4782 be put there.  This means that the article is @dfn{not} mailed.  
4783
4784 There are three "methods" for handling all mail.  The default is
4785 @code{sendmail}.  Some people like what @code{mh} does better, and some
4786 people prefer @code{vm}.
4787
4788 Three variables for customizing what to use when:
4789
4790 @table @code
4791
4792 @vindex gnus-mail-reply-method
4793 @item gnus-mail-reply-method
4794 This function is used to compose replies.  The three functions avaibale
4795 are:
4796
4797 @findex gnus-mail-reply-using-vm
4798 @findex gnus-mail-reply-using-mhe
4799 @findex gnus-mail-reply-using-mail
4800 @itemize @bullet
4801 @item 
4802 @code{gnus-mail-reply-using-mail} (sendmail)
4803 @item 
4804 @code{gnus-mail-reply-using-mhe} (mh)
4805 @item
4806 @code{gnus-mail-reply-using-vm} (vm)
4807 @end itemize
4808
4809 @vindex gnus-mail-forward-method
4810 @item gnus-mail-forward-method
4811 This function is used to forward messages.  The three functions avaibale
4812 are:
4813
4814 @findex gnus-mail-forward-using-vm
4815 @findex gnus-mail-forward-using-mhe
4816 @findex gnus-mail-forward-using-mail
4817 @itemize @bullet
4818 @item 
4819 @code{gnus-mail-forward-using-mail} (sendmail)
4820 @item 
4821 @code{gnus-mail-forward-using-mhe} (mh)
4822 @item
4823 @code{gnus-mail-forward-using-vm} (vm)
4824 @end itemize
4825
4826 @vindex gnus-mail-other-window-method
4827 @item gnus-mail-other-window-method
4828 This function is used to send mails.  The three functions avaibale are:
4829
4830 @findex gnus-mail-other-window-using-vm
4831 @findex gnus-mail-other-window-using-mhe
4832 @findex gnus-mail-other-window-using-mail
4833 @itemize @bullet
4834 @item 
4835 @code{gnus-mail-other-window-using-mail} (sendmail)
4836 @item 
4837 @code{gnus-mail-other-window-using-mhe} (mh)
4838 @item
4839 @code{gnus-mail-other-window-using-vm} (vm)
4840 @end itemize
4841
4842 @end table
4843
4844
4845 @node Post
4846 @subsection Post
4847
4848 Commands for posting an article:
4849
4850 @table @kbd
4851 @item S p
4852 @itemx a
4853 @kindex a (Summary)
4854 @kindex S p (Summary)
4855 @findex gnus-summary-post-news
4856 Post an article to the current group
4857 (@code{gnus-summary-post-news}).
4858
4859 @item S f
4860 @itemx f
4861 @kindex f (Summary)
4862 @kindex S f (Summary)
4863 @findex gnus-summary-followup
4864 Post a followup to the current article (@code{gnus-summary-followup}).
4865
4866 @item S F
4867 @itemx F
4868 @kindex S F (Summary)
4869 @kindex F (Summary)
4870 @findex gnus-summary-followup-with-original
4871 Post a followup to the current article and include the original message
4872 (@code{gnus-summary-followup-with-original}).   This command uses the
4873 process/prefix convention.
4874
4875 @item S u
4876 @kindex S u (Summary)
4877 @findex gnus-uu-post-news
4878 Uuencode a file, split it into parts, and post it as a series
4879 (@code{gnus-uu-post-news}). 
4880 @c (@pxref{Uuencoding & Posting}). 
4881 @end table
4882
4883 @vindex gnus-required-headers
4884 @code{gnus-required-headers} a list of header symbols.  These headers
4885 will either be automatically generated, or, if that's impossible, they
4886 will be prompted for.  The following symbols are legal:
4887
4888 @table @code
4889
4890 @item From
4891 This required header will be filled out with the result of the
4892 @code{gnus-inews-user-name} function, which depends on the
4893 @code{gnus-user-from-line}, @code{gnus-user-login-name},
4894 @code{gnus-local-domain} and @code{user-mail-address} variables.
4895
4896 @item Subject
4897 This required header will be prompted for if not present already. 
4898
4899 @item Newsgroups
4900 This required header says which newsgroups the article is to be posted
4901 to.  If it isn't present already, it will be prompted for.
4902
4903 @item Organization
4904 @cindex organization
4905 @vindex gnus-local-organization
4906 @vindex gnus-organization-file
4907 This optional header will be filled out depending on the
4908 @code{gnus-local-organization} variable.  @code{gnus-organization-file}
4909 will be used if that variable is nil.
4910
4911 @item Lines
4912 This optional header will be computed by Gnus.
4913
4914 @item Message-ID
4915 @cindex Message-ID
4916 This required header will be generated by Gnus.  A unique ID will be
4917 created based on date, time, user name and system name.
4918
4919 @item X-Newsreader
4920 @cindex X-Newsreader
4921 This optional header will be filled out with the Gnus version numbers. 
4922
4923 @item Expires
4924 @vindex gnus-article-expires
4925 @cindex Expires
4926 This extremely optional header will be inserted according to the
4927 @code{gnus-article-expires} variable.  It is highly deprecated and
4928 shouldn't be used unless you know what you're doing.
4929
4930 @item Distribution
4931 This optional header is filled out according to the
4932 @code{gnus-distribution-function} variable.  It is a deprecated and much
4933 misunderstood header.
4934 @end table
4935
4936 In addition, you can enter conses into this list.  The car of this cons
4937 should be a symbol.  This symbol's name is the name of the header, and
4938 the cdr can either be a string to be entered verbatim as the value of
4939 this header, or it can be a function to be called.  This function should
4940 return a string to be inserted.  For instance, if you want to insert
4941 @samp{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
4942 into the list.  If you want to insert a funny quote, you could enter
4943 something like @code{(X-Yow . yow)} into the list.  The function
4944 @code{yow} will then be called without any arguments.
4945
4946 The list contains a cons where the car of the cons is @code{optional},
4947 the cdr of this cons will only be inserted if it is non-@code{nil}.
4948
4949 Other variables for customizing outgoing articles:
4950
4951 @table @code
4952 @item nntp-news-default-headers
4953 @vindex nntp-news-default-headers
4954 If non-@code{nil}, this variable will override
4955 @code{mail-default-headers} when posting.  This variable should then be
4956 a string.  This string will be inserted, as is, in the head of all
4957 outgoing articles.
4958
4959 @item gnus-use-followup-to
4960 @vindex gnus-use-followup-to
4961 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
4962 use its value, but ignore the special value @samp{poster}, which will
4963 send the followup as a reply mail to the person you are responding to.
4964 If it is the symbol @code{ask}, query the user before posting.
4965 If it is the symbol @code{use}, always use the value.
4966
4967 @item gnus-followup-to-function
4968 @vindex gnus-followup-to-function
4969 This variable is most useful in mail groups, where "following up" really
4970 means sending a mail to a list address.  Gnus uses the normal methods to
4971 determine where follow-ups are to go, but you can change the behavior
4972 to suit your needs by fiddling with this variable.
4973
4974 If you want the followups to go to the @samp{Sender} instead of the
4975 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4976 like this:
4977
4978 @lisp
4979 (setq gnus-followup-to-function
4980       (lambda (group)
4981        (cond ((string= group "mail.stupid-list")
4982                (mail-fetch-field "sender"))
4983              (t
4984               nil))))
4985 @end lisp
4986
4987 This function will be called narrowed to header of the article that is
4988 being followed up.
4989
4990 @item gnus-removable-headers
4991 @vindex gnus-removable-headers
4992 Some headers that are generated are toxic to the @sc{nntp} server.
4993 These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
4994 so these headers are deleted if they are present in this list of
4995 symbols.
4996
4997 @item gnus-deletable-headers
4998 @vindex gnus-deletable-headers
4999 Headers in this list that were previously generated by Gnus will be
5000 deleted before posting.  Let's say you post an article.  Then you decide
5001 to post it again to some other group, you naughty boy, so you jump back
5002 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
5003 ship it off again.  By default, this variable makes sure that the old
5004 generated @code{Message-ID} is deleted, and a new one generated.  If
5005 this isn't done, the entire empire would probably crumble, anarchy would
5006 prevail, and cats would start walking on two legs and rule the world.
5007 Allegedly. 
5008
5009 @item gnus-signature-function
5010 @vindex gnus-signature-function
5011 If non-@code{nil}, this variable should be a function that returns a
5012 signature file name.  The function will be called with the name of the
5013 group being posted to.  If the function returns a string that doesn't
5014 correspond to a file, the string itself is inserted.  If the function
5015 returns @code{nil}, the @code{gnus-signature-file} variable will be used
5016 instead.
5017
5018 @item gnus-post-prepare-function
5019 @vindex gnus-post-prepare-function
5020 This function is called with the name of the current group after the
5021 post buffer has been initialized, and can be used for inserting a
5022 signature.  Nice if you use different signatures in different groups.
5023
5024 @item gnus-post-prepare-hook
5025 @vindex gnus-post-prepare-hook
5026 This hook is called after a post buffer has been prepared.  If you want
5027 to insert a signature at this point, you could put
5028 @code{gnus-inews-insert-signature} into this hook.
5029
5030 @item news-reply-header-hook
5031 @vindex news-reply-header-hook
5032 A related variable when following up and replying is this variable,
5033 which inserts the @dfn{quote line}.  The default value is:
5034
5035 @lisp
5036 (defvar news-reply-header-hook
5037   (lambda ()
5038     (insert "In article " news-reply-yank-message-id
5039             " " news-reply-yank-from " writes:\n\n")))
5040 @end lisp
5041
5042 This will create lines like:
5043
5044 @example
5045 In article <zngay8jrql@@eyesore.no> Lars Mars <lars@@eyesore.no> writes:
5046 @end example
5047
5048 Having the @code{Message-ID} in this line is probably overkill, so I
5049 would suggest this hook instead:
5050
5051 @lisp
5052 (setq news-reply-header-hook
5053   (lambda () (insert news-reply-yank-from " writes:\n\n")))
5054 @end lisp
5055
5056 @item gnus-prepare-article-hook
5057 @vindex gnus-prepare-article-hook
5058 This hook is called before the headers have been prepared.  
5059
5060 @item gnus-inews-article-function
5061 @vindex gnus-inews-article-function
5062 This function is used to do the actual article processing and header
5063 checking/generation.  
5064
5065 @item gnus-inews-article-hook
5066 @vindex gnus-inews-article-hook
5067 This hook is called right before the article is posted.  By default it
5068 handles FCC processing (i.e., saving the article to a file.)  You can
5069 also have this hook add a score to all followups to the article you've
5070 written (@pxref{Followups To Yourself}). 
5071
5072 @item gnus-inews-article-header-hook
5073 @vindex gnus-inews-article-header-hook
5074 This hook is called after inserting the required headers in an article
5075 to be posted.  The hook is called from the @code{*post-news*} buffer,
5076 narrowed to the head, and is intended for people who would like to
5077 insert additional headers, or just change headers in some way or other.
5078
5079 @item gnus-check-before-posting
5080 @vindex gnus-check-before-posting
5081 If non-@code{nil}, Gnus will attempt to check the legality of the
5082 headers, as well as some other stuff, before posting.  You can control
5083 the granularity of the check by adding or removing elements from this
5084 list.  Legal elements are:
5085
5086 @table @code
5087 @item subject-cmsg 
5088 Check the subject for commands.
5089 @item sender
5090 Insert a new @code{Sender} header if the @code{From} header looks odd. 
5091 @item multiple-headers 
5092 Check for the existence of multiple equal headers.
5093 @item sendsys 
5094 Check for the existence of version and sendsys commands.
5095 @item message-id
5096 Check whether the @code{Message-ID} looks ok.
5097 @item from
5098 Check whether the @code{From} header seems nice.
5099 @item long-lines 
5100 Check for too long lines.
5101 @item control-chars
5102 Check for illegal characters.
5103 @item size
5104 Check for excessive size.
5105 @item new-text
5106 Check whether there is any new text in the messages.
5107 @item signature
5108 Check the length of the signature.
5109 @item approved
5110 Check whether the article has an @code{Approved} header, which is
5111 something only moderators should include.
5112 @item empty
5113 Check whether the article is empty.
5114 @end table
5115
5116 @end table
5117
5118
5119
5120 @node Posting Server
5121 @subsection Posting Server
5122
5123 When you press those magical @kbd{C-c C-c} keys to ship off your latest
5124 (extremely intelligent, of course) article, where does it go?
5125
5126 Thank you for asking.  I hate you.
5127
5128 @vindex gnus-post-method
5129
5130 It can be quite complicated.  Normally, Gnus will use the same native
5131 server.  However.  If your native server doesn't allow posting, just
5132 reading, you probably want to use some other server to post your
5133 (extremely intelligent and fabulously interesting) articles.  You can
5134 then set the @code{gnus-post-method} to some other method:
5135
5136 @lisp
5137 (setq gnus-post-method '(nnspool ""))
5138 @end lisp
5139
5140 Now, if you've done this, and then this server rejects your article, or
5141 this server is down, what do you do then?  To override this variable you
5142 can use a non-zero prefix to the @kbd{C-c C-c} command to force using
5143 the "current" server for posting.
5144
5145 If you give a zero prefix (i. e., @kbd{C-u 0 C-c C-c}) to that command,
5146 Gnus will prompt you for what method to use for posting.  
5147
5148 You can also set @code{gnus-post-method} to a list of select methods.
5149 If that's the case, Gnus will always prompt you for what method to use
5150 for posting. 
5151
5152
5153 @node Mail & Post
5154 @subsection Mail & Post
5155
5156 Commands for sending mail and post at the same time:
5157
5158 @table @kbd
5159 @item S b
5160 @kindex S b (Summary)
5161 @findex gnus-summary-followup-and-reply
5162 Post a followup and send a reply to the current article
5163 (@code{gnus-summary-followup-and-reply}).
5164
5165 @item S B
5166 @kindex S B (Summary)
5167 @findex gnus-summary-followup-and-reply-with-original
5168 Post a followup and send a reply to the current article and include the
5169 original message (@code{gnus-summary-followup-and-reply-with-original}).
5170 This command uses the process/prefix convention.
5171 @end table
5172
5173 Here's a list of variables that are relevant to both mailing and
5174 posting:
5175
5176 @table @code
5177 @item gnus-signature-file
5178 @itemx mail-signature
5179 @vindex mail-signature
5180 @vindex gnus-signature-file
5181 @cindex double signature
5182 @cindex signature
5183 If @code{gnus-signature-file} is non-@code{nil}, it should be the name
5184 of a file containing a signature (@samp{~/.signature} by default).  This
5185 signature will be appended to all outgoing post.  Most people find it
5186 more convenient to use @code{mail-signature}, which (sort of) does the
5187 same, but inserts the signature into the buffer before you start editing
5188 the post (or mail).  So---if you have both of these variables set, you
5189 will get two signatures.  Note that @code{mail-signature} does not work
5190 the same way as @code{gnus-signature-file}, which is a bit confusing.
5191 If @code{mail-signature} is @code{t}, it will insert
5192 @file{~/.signature}.  If it is a string, this string will be inserted. 
5193
5194 Note that RFC1036 says that a signature should be preceded by the three
5195 characters @samp{-- } on a line by themselves.  This is to make it
5196 easier for the recipient to automatically recognize and process the
5197 signature.  So don't remove those characters, even though you might feel
5198 that they ruin you beautiful design, like, totally.
5199
5200 Also note that no signature should be more than four lines long.
5201 Including ASCII graphics is an efficient way to get everybody to believe
5202 that you are silly and have nothing important to say.
5203
5204 @item mail-yank-prefix
5205 @vindex mail-yank-prefix
5206 @cindex yanking
5207 @cindex quoting
5208 When you are replying to or following up an article, you normally want
5209 to quote the person you are answering.  Inserting quoted text is done by
5210 @dfn{yanking}, and each quoted line you yank will have
5211 @code{mail-yank-prefix} prepended to it.  This is @code{nil} by default,
5212 which isn't very pretty---the prefix will just be some spaces.  Most
5213 everybody prefers that lines are prepended with @samp{> }, so
5214 @code{(setq mail-yank-prefix "> ")} in your @file{.emacs} file.
5215
5216 @item mail-yank-ignored-headers
5217 @vindex mail-yank-ignored-headers
5218 When you yank a message, you do not want to quote any headers, so
5219 @code{(setq mail-yank-ignored-headers "^")}.
5220
5221 @item user-mail-address
5222 @vindex user-mail-address
5223 If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and
5224 @code{gnus-local-domain} are @code{nil}, Gnus will use
5225 @code{user-mail-address} as the address part of the @code{From} header.
5226
5227 @item gnus-local-domain
5228 @vindex gnus-local-domain
5229 @cindex domain
5230 The local doman name excluding the host name.  If your host is called
5231 @samp{"narfi.ifi.uio.no"}, then this variable should be
5232 @samp{"ifi.uio.no"}. 
5233
5234 @item gnus-local-domain
5235 @vindex gnus-local-domain
5236 @cindex domain
5237 The local doman name excluding the host name.  If your host is called
5238 @samp{"narfi.ifi.uio.no"}, then this variable should be
5239 @samp{"ifi.uio.no"}. 
5240
5241 @item gnus-user-from-line
5242 @vindex gnus-user-from-line
5243 Your full, complete e-mail address with name.  This variable overrides
5244 the other Gnus variables if it is non-@code{nil}.
5245
5246 Here are two example values of this variable: @samp{"larsi@@ifi.uio.no
5247 (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen
5248 <larsi@@ifi.uio.no>"}.  The latter version is recommended in news (and is
5249 probably illegal in mail), but the name has to be quoted if it contains
5250 non-alpha-numerical characters---@samp{"\"Lars M. Ingebrigtsen\"
5251 <larsi@@ifi.uio.no>"}.
5252
5253 @item mail-default-headers
5254 @vindex mail-default-headers
5255 This is a string that will be inserted into the header of all outgoing
5256 mail messages and news articles.  Convenient to use to insert standard
5257 headers.  If @code{nntp-news-default-headers} is non-@code{nil}, that
5258 variable will override this one when posting articles.
5259
5260 @item gnus-auto-mail-to-author
5261 @vindex gnus-auto-mail-to-author
5262 If @code{ask}, you will be prompted for whether you want to send a mail
5263 copy to the author of the article you are following up.  If
5264 non-@code{nil} and not @code{ask}, Gnus will send a mail with a copy of
5265 all follow-ups to the authors of the articles you follow up.  It's nice
5266 in one way---you make sure that the person you are responding to gets
5267 your response.  Other people loathe this method and will hate you dearly
5268 for it, because it means that they will first get a mail, and then have
5269 to read the same article later when they read the news.  It is
5270 @code{nil} by default.
5271
5272 @item gnus-mail-courtesy-message
5273 @vindex gnus-mail-courtesy-message
5274 This is a string that will be prepended to all mails that are the result
5275 of using the variable described above.  
5276
5277 @item gnus-mailing-list-groups
5278 @findex gnus-mailing-list-groups
5279 @cindex mailing lists
5280
5281 If your newsserver offer groups that are really mailing lists that are
5282 gatewayed to the @sc{nntp} server, you can read those groups without
5283 problems, but you can't post/followup to them without some difficulty.
5284 One solution is to add a @code{to-address} to the group parameters
5285 (@pxref{Group Parameters}).  An easier thing to do is set the
5286 @code{gnus-mailing-list-groups} to a regexp that match the groups that
5287 really are mailing lists.  Then, at least, followups to the mailing
5288 lists will work most of the time.  Posting to these groups (@kbd{a}) is
5289 still a pain, though.
5290
5291
5292 @end table
5293
5294 You may want to do spell-checking on messages that you send out.  Or, if
5295 you don't want to spell-check by hand, you could add automatic
5296 spell-checking via the @code{ispell} package:
5297
5298 @vindex news-inews-hook
5299 @lisp
5300 (add-hook 'news-inews-hook 'ispell-message)        ;For news posts
5301 (add-hook 'mail-send-hook 'ispell-message)        ;for mail posts via sendmail
5302 @end lisp
5303
5304 @findex gnus-inews-insert-mime-headers
5305 If you want to insert some @sc{mime} headers into the articles you post,
5306 without doing any actual encoding, you could add
5307 @code{gnus-inews-insert-mime-headers} to @code{gnus-inews-article-hook}.
5308
5309
5310
5311 @node Archived Messages
5312 @subsection Archived Messages
5313 @cindex archived messages
5314 @cindex sent messages
5315
5316 Gnus provides a few different methods for storing the mail you send.
5317 The default method is to use the @dfn{archive virtual server} to store
5318 the mail.
5319
5320 @vindex gnus-message-archive-method 
5321 @code{gnus-message-archive-method} says what virtual server Gnus is to
5322 use to store sent messages.  It is @code{(nnfolder "archive"
5323 (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any
5324 mail select method (@code{nnml}, @code{nnmbox}, etc.).  However,
5325 @code{nnfolder} is a quite likable select method for doing this sort of
5326 thing.  If you don't like the default directory chosen, you could say
5327 something like:
5328
5329 @lisp
5330 (setq gnus-message-archive-method
5331       '((nnfolder "archive" 
5332                   (nnfolder-inhibit-expiry t)
5333                   (nnfolder-active-file "~/Mail/sent-mail/active")
5334                   (nnfolder-directory "~/News/sent-mail/"))))
5335 @end lisp
5336
5337 @vindex gnus-message-archive-group
5338 Gnus will insert @code{Gcc} headers in all outgoing messages that point
5339 to one or more group(s) on that server.  Which group to use is
5340 determined by the @code{gnus-message-archive-group} variable.  
5341
5342 This variable can be:
5343
5344 @itemize @bullet
5345 @item a string
5346 Messages will be saved in that group.
5347 @item a list of strings
5348 Messages will be saved in all those groups.
5349 @item an alist of regexps, functions and forms
5350 When a key "matches", the result is used.
5351 @end itemize
5352
5353 Let's illustrate:
5354
5355 Just saving to a single group called @samp{"MisK"}:
5356 @lisp
5357 (setq gnus-message-archive-group "MisK")
5358 @end lisp
5359
5360 Saving to two groups, @samp{"MisK"} and @samp{"safe"}:
5361 @lisp
5362 (setq gnus-message-archive-group '("MisK" "safe"))
5363 @end lisp
5364
5365 Save to different groups based on what group you are in:
5366 @lisp
5367 (setq gnus-message-archive-group 
5368       '(("^alt" "sent-to-alt")
5369         ("mail" "sent-to-mail")
5370         (".*" "sent-to-misc")))
5371 @end lisp
5372
5373 More complex stuff:
5374 @lisp
5375 (setq gnus-message-archive-group 
5376       '((if (eq major-mode news-reply-mode) "misc-news" "misc-mail)))
5377 @end lisp       
5378
5379 This last one is the default.
5380
5381 Now, when you send a message off, it will be stored in the appropriate
5382 group.  (If you want to disable storing for just one particular article,
5383 you can just remove the @code{Gcc} header that has been inserted.)  The
5384 archive group will appear in the group buffer the next time you start
5385 Gnus, or the next time you press @key{F} in the group buffer.  You can
5386 enter it and read the articles in it just like you'd read any other
5387 group.  If the group gets really big and annoying, you can simply rename
5388 if (using @kbd{G r} in the group buffer) to something nice --
5389 @samp{"misc-mail-september-1995"}, or whatever.  New messages will
5390 continue to be stored in the old (now empty) group.
5391
5392
5393 That's the default method of archiving sent mail.  Gnus also offers two
5394 other variables for the people who don't like the default method.  In
5395 that case you should set @code{gnus-message-archive-group} to
5396 @code{nil}; this will disable archiving.
5397
5398 @table @code
5399 @item gnus-author-copy
5400 @vindex gnus-author-copy
5401 This is a file name, and all outgoing articles will be saved in that
5402 file.  Initialized from the @code{AUTHORCOPY} environment variable.
5403
5404 If this variable begins with the character @samp{"|"}, outgoing articles
5405 will be piped to the named program. It is possible to save an article in
5406 an MH folder as follows:
5407
5408 @lisp
5409 (setq gnus-author-copy 
5410       "|/usr/local/lib/mh/rcvstore +Article")
5411 @end lisp
5412
5413 If the first character is not a pipe, articles are saved using the
5414 function specified by the @code{gnus-author-copy-saver} variable.
5415
5416 @item gnus-author-copy-saver
5417 @vindex gnus-author-copy-saver
5418 A function called to save outgoing articles.  This function will be
5419 called with the same of the file to store the article in. The default
5420 function is @code{rmail-output} which saves in the Unix mailbox format.
5421
5422 @item gnus-mail-self-blind 
5423 @vindex gnus-mail-self-blind 
5424 Non-@code{nil} means insert a BCC header in all outgoing articles
5425 pointing to yourself.  This will result you receiving a copy of the
5426 article mailed to yourself.  The BCC header is inserted when the post
5427 buffer is initialized, so you can remove or alter the BCC header to
5428 override the default.
5429
5430 @item gnus-outgoing-message-group 
5431 @vindex gnus-outgoing-message-group 
5432 All outgoing messages will be put in this group.  If you want to store
5433 all your outgoing mail and articles in the group @samp{nnml:archive},
5434 you set this variable to that value.  This variable can also be a list of
5435 group names.
5436
5437 If you want to have greater control over what group to put each
5438 message in, you can set this variable to a function that checks the
5439 current newsgroup name and then returns a suitable group name (or list
5440 of names).
5441 @end table
5442
5443
5444 @node Posting Styles
5445 @subsection Posting Styles
5446 @cindex posting styles
5447 @cindex styles
5448
5449 All them variables, they make my head swim.  
5450
5451 So what if you want a different @code{Organization} and signature based
5452 on what groups you post to?  And you post both from your home machine
5453 and your work machine, and you want different @code{From} lines, and so
5454 on? 
5455
5456 @vindex gnus-posting-styles
5457 One way to do stuff like that is to write clever hooks that change the
5458 variables you need to have changed.  That's a bit boring, so somebody
5459 came up with the bright idea of letting the user specify these things in
5460 a handy alist.  Here's an example of a @code{gnus-posting-styles}
5461 variable: 
5462
5463 @lisp
5464 ((".*" (signature . "Peace and happiness") (organization . "What me?"))
5465  ("^comp" (signature . "Death to everybody"))
5466  ("comp.emacs.i-love-it" (organization . "Emacs is it")))
5467 @end lisp
5468
5469 As you might surmise from this example, this alist consists of several
5470 @dfn{styles}.  Each style will be applicable if the first element
5471 "matches", in some form or other.  The entire alist will be iterated
5472 over, from the beginning towards the end, and each match will be
5473 applied, which means that attributes in later styles that match override
5474 the same attributes in earlier matching styles.  So
5475 @samp{comp.programming.literate} will have the @samp{Death to everybody}
5476 signature and the @samp{What me?} @code{Organization} header. 
5477
5478 The first element in each style is called the @code{match}.  If it's a
5479 string, then Gnus will try to regexp match it against the group name.
5480 If it's a function symbol, that function will be called with no
5481 arguments.  If it's a variable symbol, then the variable will be
5482 referenced.  If it's a list, then that list will be @code{eval}ed.  In
5483 any case, if this returns a non-@code{nil} value, then the style is said
5484 to @dfn{match}.
5485
5486 Each style may contain a random amount of @dfn{attributes}.  Each
5487 attribute consists of a @var{(name  . value)} pair.  The attribute name
5488 can be one of @code{signature}, @code{organization} or @code{from}.  
5489 The attribute name can also be a string.  In that case, this will be
5490 used as a header name, and the value will be inserted in the headers of
5491 the article. 
5492
5493 The attribute value can be a string (used verbatim), a function (the
5494 return value will be used), a variable (its value will be used) or a
5495 list (it will be @code{eval}ed and the return value will be used).
5496
5497 So here's a new example:
5498
5499 @lisp
5500 (setq gnus-posting-styles
5501       '((".*" 
5502            (signature . "~/.signature") 
5503            (from . "user@@foo (user)")
5504            ("X-Home-Page" . (getenv "WWW_HOME"))
5505            (organization . "People's Front Against MWM"))
5506         ("^rec.humor" 
5507            (signature . my-funny-signature-randomizer))
5508         ((equal (system-name) "gnarly") 
5509            (signature . my-quote-randomizer))
5510         (posting-from-work-p
5511            (signature . "~/.work-signature")
5512            (from . "user@@bar.foo (user)")
5513            (organization . "Important Work, Inc"))
5514         ("^nn.+:" 
5515            (signature . "~/.mail-signature"))))
5516 @end lisp
5517
5518
5519
5520 @node Drafts
5521 @subsection Drafts
5522 @cindex drafts
5523
5524 If you are writing a message (mail or news) and suddenly remember that
5525 you have a steak in the oven (or some pesto in the food processor, you
5526 craazy vegetarians), you'll probably wish there was a method to save the
5527 message you are writing so that you can continue editing it some other
5528 day, and send it when you feel its finished.
5529
5530 Well, don't worry about it.  Whenever you start composing a message of
5531 some sort using the Gnus mail and post commands, the buffer you get will
5532 automatically associate to an article in a special @dfn{draft} group.
5533 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
5534 article will be saved there.  (Auto-save files also go to the draft
5535 group.) 
5536
5537 The draft group is a special draft group (which is implemented as an
5538 @code{nndraft} group, if you absolutely have to know) called
5539 @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
5540 controls both the name of the group and the location---the leaf element
5541 in the path will be used as the name of the group.  What makes this
5542 group special is that you can't tick any articles in it or mark any
5543 articles as read---all articles in the group are permanently unread.  
5544
5545 If the group doesn't exist, it will be created and you'll be subscribed
5546 to it.
5547
5548 @findex gnus-summary-send-draft
5549 @kindex S D c (Summary)
5550 When you want to continue editing the article, you simply enter the
5551 draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
5552 that.  You will be placed in a buffer where you left off.
5553
5554 Rejected articles will also be put in this draft group (@pxref{Rejected
5555 Articles}).
5556
5557 @findex gnus-summary-send-all-drafts
5558 If you have lots of rejected messages you want to post (or mail) without
5559 doing further editing, you can use the @kbd{S D a} command
5560 (@code{gnus-summary-send-all-drafts}).  This command understands the
5561 process/prefix convention (@pxref{Process/Prefix}).  
5562
5563
5564 @node Rejected Articles
5565 @subsection Rejected Articles
5566 @cindex rejected articles
5567
5568 Sometimes a news server will reject an article.  Perhaps the server
5569 doesn't like your face.  Perhaps it just feels miserable.  Perhaps
5570 @emph{there be demons}.  Perhaps you have included too much cited text.
5571 Perhaps the disk is full.  Perhaps the server is down.
5572
5573 These situations are, of course, totally beyond the control of Gnus.
5574 (Gnus, of course, loves the way you look, always feels great, has angels
5575 fluttering around inside of it, doesn't care about how much cited text
5576 you include, never runs full and never goes down.)  So Gnus saves these
5577 articles until some later time when the server feels better.
5578
5579 The rejected articles will automatically be put in a special draft group
5580 (@pxref{Drafts}).  When the server comes back up again, you'd then
5581 typically enter that group and send all the articles off.
5582
5583
5584 @node Canceling and Superseding
5585 @section Canceling Articles
5586 @cindex canceling articles
5587 @cindex superseding articles
5588
5589 Have you ever written something, and then decided that you really,
5590 really, really wish you hadn't posted that?
5591
5592 Well, you can't cancel mail, but you can cancel posts.
5593
5594 @findex gnus-summary-cancel-article
5595 @kindex C (Summary)
5596 Find the article you wish to cancel (you can only cancel your own
5597 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
5598 c} (@code{gnus-summary-cancel-article}).  Your article will be
5599 canceled---machines all over the world will be deleting your article. 
5600
5601 Be aware, however, that not all sites honor cancels, so your article may
5602 live on here and there, while most sites will delete the article in
5603 question.
5604
5605 If you discover that you have made some mistakes and want to do some
5606 corrections, you can post a @dfn{superseding} article that will replace
5607 your original article.
5608
5609 @findex gnus-summary-supersede-article
5610 @kindex S (Summary)
5611 Go to the original article and press @kbd{S s}
5612 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
5613 where you can edit the article all you want before sending it off the
5614 usual way.
5615
5616 @vindex gnus-delete-supersedes-headers
5617 You probably want to delete some of the old headers before sending the
5618 superseding article---@code{Path} and @code{Date} are probably
5619 incorrect.  Set @code{gnus-delete-supersedes-headers} to a regexp to
5620 match the lines you want removed.  The default is
5621 @samp{"^Path:\\|^Date"}. 
5622
5623 The same goes for superseding as for canceling, only more so: Some
5624 sites do not honor superseding.  On those sites, it will appear that you
5625 have posted almost the same article twice.
5626
5627 If you have just posted the article, and change your mind right away,
5628 there is a trick you can use to cancel/supersede the article without
5629 waiting for the article to appear on your site first.  You simply return
5630 to the post buffer (which is called @code{*post-buf*}).  There you will
5631 find the article you just posted, with all the headers intact.  Change
5632 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
5633 header by substituting one of those words for @samp{Message-ID}.  Then
5634 just press @kbd{C-c C-c} to send the article as you would do normally.
5635 The previous article will be canceled/superseded.
5636
5637 Just remember, kids: There is no 'c' in 'supersede'.
5638
5639 @node Marking Articles
5640 @section Marking Articles
5641 @cindex article marking
5642 @cindex article ticking
5643 @cindex marks
5644
5645 There are several marks you can set on an article. 
5646
5647 You have marks that decide the @dfn{readed-ness} (whoo, neato-keano
5648 neologism ohoy!) of the article.  Alphabetic marks generally mean
5649 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
5650
5651 In addition, you also have marks that do not affect readedness.
5652
5653 @menu
5654 * Unread Articles::      Marks for unread articles.
5655 * Read Articles::        Marks for read articles.
5656 * Other Marks::          Marks that do not affect readedness.
5657 @end menu
5658
5659 @ifinfo
5660 There's a plethora of commands for manipulating these marks:
5661 @end ifinfo
5662
5663 @menu
5664 * Setting Marks::           How to set and remove marks.
5665 * Setting Process Marks::   How to mark articles for later processing.
5666 @end menu
5667
5668 @node Unread Articles
5669 @subsection Unread Articles
5670
5671 The following marks mark articles as unread, in one form or other.
5672
5673 @vindex gnus-dormant-mark
5674 @vindex gnus-ticked-mark
5675 @table @samp
5676 @item !
5677 @dfn{Ticked articles} are articles that will remain visible always.  If
5678 you see an article that you find interesting, or you want to put off
5679 reading it, or replying to it, until sometime later, you'd typically
5680 tick it.  However, articles can be expired, so if you want to keep an
5681 article forever, you'll have to save it.  Ticked articles have a
5682 @samp{!} (@code{gnus-ticked-mark}) in the first column.
5683
5684 @item ?
5685 A @dfn{dormant} article is marked with a @samp{?}
5686 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
5687 if there are followups to it.
5688
5689 @item SPC
5690 An @dfn{unread} article is marked with a @samp{SPC}
5691 (@code{gnus-unread-mark}).  These are articles that haven't been read at
5692 all yet.
5693 @end table
5694
5695 @node Read Articles
5696 @subsection Read Articles
5697 @cindex expirable mark
5698
5699 All the following marks mark articles as read.
5700
5701 @table @samp
5702
5703 @item r
5704 Articles that are marked as read.  They have a @samp{r}
5705 (@code{gnus-del-mark}) in the first column.  These are articles that the
5706 user has marked as read more or less manually.
5707
5708 @item R
5709 Articles that are actually read are marked with @samp{R}
5710 (@code{gnus-read-mark}). 
5711
5712 @item O
5713 Articles that were marked as read in previous sessions are now
5714 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). 
5715
5716 @item K
5717 Marked as killed (@code{gnus-killed-mark}).
5718
5719 @item X
5720 Marked as killed by kill files (@code{gnus-kill-file-mark}).
5721
5722 @item Y
5723 Marked as read by having a too low score (@code{gnus-low-score-mark}).
5724
5725 @item C
5726 Marked as read by a catchup (@code{gnus-catchup-mark}).
5727
5728 @item G
5729 Canceled article (@code{gnus-cancelled-mark})
5730 @end table
5731
5732 All these marks just mean that the article is marked as read, really.
5733 They are interpreted differently by the adaptive scoring scheme,
5734 however.
5735
5736 One more special mark, though:
5737
5738 @table @samp
5739 @item E
5740 You can also mark articles as @dfn{expirable} (or have them marked as
5741 such automatically).  That doesn't make much sense in normal groups,
5742 because a user does not control the expiring of news articles, but in
5743 mail groups, for instance, articles that are marked as @dfn{expirable}
5744 can be deleted by Gnus at any time.  Expirable articles are marked with
5745 @samp{E} (@code{gnus-expirable-mark}).
5746 @end table
5747
5748 @node Other Marks
5749 @subsection Other Marks
5750 @cindex process mark
5751 @cindex bookmarks
5752
5753 There are some marks that have nothing to do with whether the article is
5754 read or not.
5755
5756 @itemize @bullet
5757
5758 @item 
5759 You can set a bookmark in the current article.  Say you are reading a
5760 long thesis on cats' urinary tracts, and have to go home for dinner
5761 before you've finished reading the thesis.  You can then set a bookmark
5762 in the article, and Gnus will jump to this bookmark the next time it
5763 encounters the article.
5764
5765 @item
5766 All articles that you have replied to or made a followup to (i.e., have
5767 answered) will be marked with an @samp{A} in the second column
5768 (@code{gnus-replied-mark}).
5769
5770 @item 
5771 Articles that are stored in the article cache will be marked with an
5772 @samp{*} in the second column (@code{gnus-cached-mark}).
5773
5774 @item 
5775 Articles that are "saved" (in some manner or other; not necessarily
5776 religously) are marked with an @samp{S} in the second column
5777 (@code{gnus-saved-mark}.  
5778
5779 @item 
5780 @vindex gnus-not-empty-thread-mark
5781 @vindex gnus-empty-thread-mark
5782 It the @samp{%e} spec is used, the presence of threads or not will be
5783 marked with @code{gnus-not-empty-thread-mark} and
5784 @code{gnus-empty-thread-mark} in the third column, respectively.
5785
5786 @item 
5787 @vindex gnus-process-mark
5788 Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
5789 variety of commands react to the presence of the process mark.  For
5790 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
5791 all articles that have been marked with the process mark.  Articles
5792 marked with the process mark have a @samp{#} in the second column.
5793
5794 @end itemize
5795
5796 You might have noticed that most of these "non-readedness" marks appear
5797 in the second column by default.  So if you have a cached, saved,
5798 replied article that you have process-marked, what will that look like?
5799
5800 Nothing much.  The presedence rules go as follows: process -> cache ->
5801 replied -> saved.  So if the article is in the cache and is replied,
5802 you'll only see the cache mark and not the replied mark.
5803
5804
5805 @node Setting Marks
5806 @subsection Setting Marks
5807 @cindex setting marks
5808
5809 All the marking commands understand the numeric prefix.
5810
5811 @table @kbd
5812 @item M t
5813 @itemx !
5814 @kindex ! (Summary)
5815 @kindex M t (Summary)
5816 @findex gnus-summary-tick-article-forward
5817 Tick the current article (@code{gnus-summary-tick-article-forward}).
5818
5819 @item M ?
5820 @itemx ?
5821 @kindex ? (Summary)
5822 @kindex M ? (Summary)
5823 @findex gnus-summary-mark-as-dormant
5824 Mark the current article as dormant
5825 (@code{gnus-summary-mark-as-dormant}).
5826
5827 @item M d
5828 @itemx d
5829 @kindex M d (Summary)
5830 @kindex d (Summary)
5831 @findex gnus-summary-mark-as-read-forward
5832 Mark the current article as read
5833 (@code{gnus-summary-mark-as-read-forward}).
5834
5835 @item M k
5836 @itemx k
5837 @kindex k (Summary)
5838 @kindex M k (Summary)
5839 @findex gnus-summary-kill-same-subject-and-select
5840 Mark all articles that have the same subject as the current one as read,
5841 and then select the next unread article
5842 (@code{gnus-summary-kill-same-subject-and-select}).
5843
5844 @item M K
5845 @itemx C-k
5846 @kindex M K (Summary)
5847 @kindex C-k (Summary)
5848 @findex gnus-summary-kill-same-subject
5849 Mark all articles that have the same subject as the current one as read
5850 (@code{gnus-summary-kill-same-subject}).  
5851
5852 @item M C
5853 @kindex M C (Summary)
5854 @findex gnus-summary-catchup
5855 Mark all unread articles in the group as read
5856 (@code{gnus-summary-catchup}).
5857
5858 @item M C-c
5859 @kindex M C-c (Summary)
5860 @findex gnus-summary-catchup-all
5861 Mark all articles in the group as read---even the ticked and dormant
5862 articles (@code{gnus-summary-catchup-all}).
5863
5864 @item M H
5865 @kindex M H (Summary)
5866 @findex gnus-summary-catchup-to-here
5867 Catchup the current group to point
5868 (@code{gnus-summary-catchup-to-here}). 
5869
5870 @item C-w
5871 @kindex C-w (Summary)
5872 @findex gnus-summary-mark-region-as-read
5873 Mark all articles between point and mark as read
5874 (@code{gnus-summary-mark-region-as-read}). 
5875
5876 @item M V k
5877 @kindex M V k (Summary)
5878 @findex gnus-summary-kill-below
5879 Kill all articles with scores below the default score (or below the
5880 numeric prefix) (@code{gnus-summary-kill-below}).
5881
5882 @item M c
5883 @itemx M-u
5884 @kindex M c (Summary)
5885 @kindex M-u (Summary)
5886 @findex gnus-summary-clear-mark-forward
5887 Clear all readedness-marks from the current article
5888 (@code{gnus-summary-clear-mark-forward}).
5889
5890 @item M e
5891 @itemx E
5892 @kindex M e (Summary)
5893 @kindex E (Summary)
5894 @findex gnus-summary-mark-as-expirable
5895 Mark the current article as expirable
5896 (@code{gnus-summary-mark-as-expirable}).
5897
5898 @item M b
5899 @kindex M b (Summary)
5900 @findex gnus-summary-set-bookmark
5901 Set a bookmark in the current article
5902 (@code{gnus-summary-set-bookmark}).
5903
5904 @item M B
5905 @kindex M B (Summary)
5906 @findex gnus-summary-remove-bookmark
5907 Remove the bookmark from the current article
5908 (@code{gnus-summary-remove-bookmark}).
5909
5910 @item M V c
5911 @kindex M V c (Summary)
5912 @findex gnus-summary-clear-above
5913 Clear all marks from articles with scores over the default score (or
5914 over the numeric prefix) (@code{gnus-summary-clear-above}).
5915
5916 @item M V u
5917 @kindex M V u (Summary)
5918 @findex gnus-summary-tick-above
5919 Tick all articles with scores over the default score (or over the
5920 numeric prefix) (@code{gnus-summary-tick-above}).
5921
5922 @item M V m
5923 @kindex M V m (Summary)
5924 @findex gnus-summary-mark-above
5925 Prompt for a mark, and mark all articles with scores over the default
5926 score (or over the numeric prefix) with this mark
5927 (@code{gnus-summary-clear-above}).
5928 @end table
5929
5930 @code{gnus-summary-goto-unread} The @code{gnus-summary-goto-unread}
5931 variable controls what action should be taken after setting a mark.  If
5932 non-@code{nil}, point will move to the next/previous unread article.  If
5933 @code{nil}, point will just move one line up or down.  As a special
5934 case, if this variable is @code{never}, all the marking commands as well
5935 as other commands (like @kbd{SPC}) will move to the next article,
5936 whether it is unread or not.  The default is @code{t}.
5937
5938
5939 @node Setting Process Marks
5940 @subsection Setting Process Marks
5941 @cindex setting process marks
5942
5943 @table @kbd
5944
5945 @item M P p
5946 @itemx #
5947 @kindex # (Summary)
5948 @kindex M P p (Summary)
5949 @findex gnus-summary-mark-as-processable
5950 Mark the current article with the process mark
5951 (@code{gnus-summary-mark-as-processable}). 
5952 @findex gnus-summary-unmark-as-processable
5953
5954 @item M P u 
5955 @itemx M-#
5956 @kindex M P u (Summary)
5957 @kindex M-# (Summary)
5958 Remove the process mark, if any, from the current article
5959 (@code{gnus-summary-unmark-as-processable}).
5960
5961 @item M P U
5962 @kindex M P U (Summary)
5963 @findex gnus-summary-unmark-all-processable
5964 Remove the process mark from all articles
5965 (@code{gnus-summary-unmark-all-processable}). 
5966
5967 @item M P R
5968 @kindex M P R (Summary)
5969 @findex gnus-uu-mark-by-regexp
5970 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
5971
5972 @item M P r
5973 @kindex M P r (Summary)
5974 @findex gnus-uu-mark-region
5975 Mark articles in region (@code{gnus-uu-mark-region}).
5976
5977 @item M P t
5978 @kindex M P t (Summary)
5979 @findex gnus-uu-mark-thread
5980 Mark all articles in the current (sub)thread
5981 (@code{gnus-uu-mark-thread}).
5982
5983 @item M P T
5984 @kindex M P T (Summary)
5985 @findex gnus-uu-unmark-thread
5986 Unmark all articles in the current (sub)thread
5987 (@code{gnus-uu-unmark-thread}).
5988
5989 @item M P v
5990 @kindex M P v (Summary)
5991 @findex gnus-uu-mark-over
5992 Mark all articles that have a score above the prefix argumnet
5993 (@code{gnus-uu-mark-over}).
5994
5995 @item M P s
5996 @kindex M P s (Summary)
5997 @findex gnus-uu-mark-series
5998 Mark all articles in the current series (@code{gnus-uu-mark-series}).
5999
6000 @item M P S
6001 @kindex M P S (Summary)
6002 @findex gnus-uu-mark-sparse
6003 Mark all series that have already had some articles marked
6004 (@code{gnus-uu-mark-sparse}).
6005
6006 @item M P a
6007 @kindex M P a (Summary)
6008 @findex gnus-uu-mark-all
6009 Mark all articles in series order (@code{gnus-uu-mark-series}).
6010
6011 @item M P b
6012 @kindex M P b (Summary)
6013 @findex gnus-uu-mark-buffer
6014 Mark all articles in the buffer in the order they appear
6015 (@code{gnus-uu-mark-buffer}). 
6016 @end table
6017
6018
6019 @node Limiting
6020 @section Limiting
6021 @cindex limiting
6022
6023 It can be convenient to limit the summary buffer to just show some
6024 subset of the articles currently in the group.  The effect most limit
6025 commands have is to remove a few (or many) articles from the summary
6026 buffer. 
6027
6028 @table @kbd
6029
6030 @item / /
6031 @itemx / s
6032 @kindex / / (Summary)
6033 @findex gnus-summary-limit-to-subject
6034 Limit the summary buffer to articles that match some subject
6035 (@code{gnus-summary-limit-to-subject}). 
6036
6037 @item / a
6038 @kindex / a (Summary)
6039 @findex gnus-summary-limit-to-author
6040 Limit the summary buffer to articles that match some author
6041 (@code{gnus-summary-limit-to-author}).
6042
6043 @item / u
6044 @itemx x
6045 @kindex / u (Summary)
6046 @kindex x (Summary)
6047 @findex gnus-summary-limit-to-unread
6048 Limit the summary buffer to articles that are not marked as read
6049 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
6050 buffer to articles that are strictly unread.  This means that ticked and
6051 dormant articles will also be excluded.
6052
6053 @item / m
6054 @kindex / m (Summary)
6055 @findex gnus-summary-limit-to-marks
6056 Ask for a mark and then limit to all articles that have not been marked
6057 with that mark (@code{gnus-summary-limit-to-marks}).
6058
6059 @item / n
6060 @kindex / n (Summary)
6061 @findex gnus-summary-limit-to-articles
6062 Limit the summary buffer to the current article
6063 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
6064 convention (@pxref{Process/Prefix}).
6065
6066 @item / w
6067 @kindex / w (Summary)
6068 @findex gnus-summary-pop-limit
6069 Pop the previous limit off the stack and restore it
6070 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
6071 the stack.
6072
6073 @item / v
6074 @kindex / v (Summary)
6075 @findex gnus-summary-limit-to-score
6076 Limit the summary buffer to articles that have a score at or above some
6077 score (@code{gnus-summary-limit-to-score}).
6078
6079 @item / E
6080 @itemx M S
6081 @kindex M S (Summary)
6082 @kindex / E (Summary)
6083 @findex gnus-summary-limit-include-expunged
6084 Display all expunged articles
6085 (@code{gnus-summary-limit-include-expunged}). 
6086
6087 @item / D
6088 @kindex / D (Summary)
6089 @findex gnus-summary-limit-include-dormant
6090 Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
6091
6092 @item / d
6093 @kindex / d (Summary)
6094 @findex gnus-summary-limit-exclude-dormant
6095 Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
6096
6097 @item / c
6098 @kindex / c (Summary)
6099 @findex gnus-summary-limit-exclude-childless-dormant
6100 Hide all dormant articles that have no children
6101 (@code{gnus-summary-limit-exclude-childless-dormant}). 
6102
6103 @item / C
6104 @kindex / C (Summary)
6105 @findex gnus-summary-limit-mark-excluded-as-read
6106 Mark all excluded unread articles as read
6107 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
6108 also mark exluded ticked and dormant articles as read.
6109
6110 @end table
6111
6112
6113 @node Threading
6114 @section Threading
6115 @cindex threading
6116 @cindex article threading
6117
6118 Gnus threads articles by default.  @dfn{To thread} is to put replies to
6119 articles directly after the articles they reply to---in a hierarchical
6120 fashion.
6121
6122 @menu
6123 * Customizing Threading::     Variables you can change to affect the threading.
6124 * Thread Commands::           Thread based commands in the summary buffer.
6125 @end menu
6126
6127 @node Customizing Threading
6128 @subsection Customizing Threading
6129 @cindex customizing threading
6130 @cindex <
6131 @cindex >
6132
6133 @table @code
6134
6135 @item gnus-show-threads
6136 @vindex gnus-show-threads
6137 If this variable is @code{nil}, no threading will be done, and all of
6138 the rest of the variables here will have no effect.  Turning threading
6139 off will speed group selection up a bit, but it is sure to make reading
6140 slower and more awkward.
6141
6142 @item gnus-fetch-old-headers
6143 @vindex gnus-fetch-old-headers
6144 If non-@code{nil}, Gnus will attempt to build old threads by fetching
6145 more old headers---headers to articles that are marked as read.  If you
6146 would like to display as few summary lines as possible, but still
6147 connect as many loose threads as possible, you should set this variable
6148 to @code{some} or a number.  If you set it to a number, no more than
6149 that number of extra old headers will be fetched.  In either case,
6150 fetching old headers only works if the backend you are using carries
6151 overview files---this would normally be @code{nntp}, @code{nnspool} and
6152 @code{nnml}.  Also remember that if the root of the thread has been
6153 expired by the server, there's not much Gnus can do about that.
6154
6155 @item gnus-build-sparse-threads
6156 @vindex gnus-build-sparse-threads
6157 Fetching old headers can be slow.  A low-rent similar effect can be
6158 gotten by setting this variable to @code{some}.  Gnus will then look at
6159 the complete @code{References} headers of all articles and try to string
6160 articles that belong in the same thread together.  This will leave
6161 @dfn{gaps} in the threading display where Gnus guesses that an article
6162 is missing from the thread.  (These gaps appear like normal summary
6163 lines.  If you select a gap, Gnus will try to fetch the article in
6164 question.)  If this variable is @code{t}, Gnus will display all these
6165 "gaps" without regard for whether they are useful for completing the
6166 thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
6167 off sparse leaf nodes that don't lead anywhere.  This variable is
6168 @code{nil} by default.
6169
6170 @item gnus-summary-gather-subject-limit
6171 @vindex gnus-summary-gather-subject-limit
6172 Loose threads are gathered by comparing subjects of articles.  If this
6173 variable is @code{nil}, Gnus requires an exact match between the
6174 subjects of the loose threads before gathering them into one big
6175 super-thread.  This might be too strict a requirement, what with the
6176 presence of stupid newsreaders that chop off long subjects lines.  If
6177 you think so, set this variable to, say, 20 to require that only the
6178 first 20 characters of the subjects have to match.  If you set this
6179 variable to a really low number, you'll find that Gnus will gather
6180 everything in sight into one thread, which isn't very helpful.
6181
6182 @cindex fuzzy article gathering
6183 If you set this variable to the special value @code{fuzzy}, Gnus will
6184 use a fuzzy string comparison algorithm on the subjects.
6185
6186 @item gnus-simplify-ignored-prefixes
6187 @vindex gnus-simplify-ignored-prefixes
6188 If you set @code{gnus-summary-gather-subject-limit} to something as low
6189 as 10, you might consider setting this variable to something sensible:
6190
6191 @c Written by Michael Ernst <mernst@cs.rice.edu>
6192 @lisp
6193 (setq gnus-simplify-ignored-prefixes
6194       (concat 
6195        "\\`\\[?\\("
6196        (mapconcat 'identity
6197                   '("looking"
6198                      "wanted" "followup" "summary\\( of\\)?"
6199                      "help" "query" "problem" "question" 
6200                      "answer" "reference" "announce"
6201                      "How can I" "How to" "Comparison of"
6202                      ;; ...
6203                      )
6204                   "\\|")
6205                   "\\)\\s *\\("
6206                   (mapconcat 'identity
6207                              '("for" "for reference" "with" "about")
6208                              "\\|")
6209                   "\\)?\\]?:?[ \t]*"))
6210 @end lisp
6211
6212 @item gnus-summary-gather-exclude-subject
6213 @vindex gnus-summary-gather-exclude-subject
6214 Since loose thread gathering is done on subjects only, that might lead
6215 to many false hits, especially with certain common subjects like
6216 @samp{""} and @samp{"(none)"}.  To make the situation slightly better,
6217 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
6218 what subjects should be excluded from the gathering process.  The
6219 default is @samp{"^ *$\\|^(none)$"}.  
6220
6221 @item gnus-summary-thread-gathering-function
6222 @vindex gnus-summary-thread-gathering-function
6223 Gnus gathers threads by looking at @code{Subject} headers.  This means
6224 that totally unrelated articles may end up in the same "thread", which
6225 is confusing.  An alternate approach is to look at all the
6226 @code{Message-ID}s in all the @code{References} headers to find
6227 matches.  This will ensure that no gathered threads ever includes
6228 unrelated articles, but it's also means that people who have posted with
6229 broken newsreaders won't be gathered properly.  The choice is
6230 yours---plague or cholera:
6231
6232 @table @code
6233 @item gnus-summary-gather-threads-by-subject
6234 @findex gnus-summary-gather-threads-by-subject
6235 This function is the default gathering function and looks at
6236 @code{Subject}s exclusively.
6237
6238 @item gnus-summary-gather-threads-by-references
6239 @findex gnus-summary-gather-threads-by-references
6240 This function looks at @code{References} headers exclusively.
6241 @end table
6242
6243 If you want to test gathering by @code{References}, you could say
6244 something like:
6245
6246 @lisp
6247 (setq gnus-summary-thread-gathering-function
6248       'gnus-summary-gather-threads-by-references)
6249 @end lisp
6250
6251 @item gnus-summary-make-false-root
6252 @vindex gnus-summary-make-false-root
6253 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
6254 and create a dummy root at the top.  (Wait a minute.  Root at the top?
6255 Yup.)  Loose subtrees occur when the real root has expired, or you've
6256 read or killed the root in a previous session.
6257
6258 When there is no real root of a thread, Gnus will have to fudge
6259 something.  This variable says what fudging method Gnus should use.
6260 There are four possible values:
6261
6262 @cindex adopting articles
6263
6264 @table @code
6265
6266 @item adopt
6267 Gnus will make the first of the orphaned articles the parent.  This
6268 parent will adopt all the other articles.  The adopted articles will be
6269 marked as such by pointy brackets (@samp{<>}) instead of the standard
6270 square brackets (@samp{[]}).  This is the default method.
6271
6272 @item dummy
6273 Gnus will create a dummy summary line that will pretend to be the
6274 parent.  This dummy line does not correspond to any real article, so
6275 selecting it will just select the first real article after the dummy
6276 article.
6277
6278 @item empty
6279 Gnus won't actually make any article the parent, but simply leave the
6280 subject field of all orphans except the first empty.  (Actually, it will
6281 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
6282 Buffer Format}).)
6283
6284 @item none
6285 Don't make any article parent at all.  Just gather the threads and
6286 display them after one another.
6287
6288 @item nil
6289 Don't gather loose threads.
6290 @end table
6291
6292 @item gnus-thread-hide-subtree
6293 @vindex gnus-thread-hide-subtree
6294 If non-@code{nil}, all threads will be hidden when the summary buffer is
6295 generated.
6296
6297 @item gnus-thread-hide-killed
6298 @vindex gnus-thread-hide-killed
6299 if you kill a thread and this variable is non-@code{nil}, the subtree
6300 will be hidden.
6301
6302 @item gnus-thread-ignore-subject
6303 @vindex gnus-thread-ignore-subject
6304 Sometimes somebody changes the subject in the middle of a thread.  If
6305 this variable is non-@code{nil}, the subject change is ignored.  If it
6306 is @code{nil}, which is the default, a change in the subject will result
6307 in a new thread.
6308
6309 @item gnus-thread-indent-level
6310 @vindex gnus-thread-indent-level
6311 This is a number that says how much each sub-thread should be indented.
6312 The default is @samp{4}.
6313 @end table
6314
6315 @node Thread Commands
6316 @subsection Thread Commands
6317 @cindex thread commands
6318
6319 @table @kbd
6320
6321 @item T k
6322 @itemx M-C-k
6323 @kindex T k (Summary)
6324 @kindex M-C-k (Summary)
6325 @findex gnus-summary-kill-thread
6326 Mark all articles in the current sub-thread as read
6327 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
6328 remove all marks instead.  If the prefix argument is negative, tick
6329 articles instead.
6330
6331 @item T l
6332 @itemx M-C-l
6333 @kindex T l (Summary)
6334 @kindex M-C-l (Summary)
6335 @findex gnus-summary-lower-thread
6336 Lower the score of the current thread
6337 (@code{gnus-summary-lower-thread}). 
6338
6339 @item T i
6340 @kindex T i (Summary)
6341 @findex gnus-summary-raise-thread
6342 Increase the score of the current thread
6343 (@code{gnus-summary-raise-thread}).
6344
6345 @item T #
6346 @kindex T # (Summary)
6347 @findex gnus-uu-mark-thread
6348 Set the process mark on the current thread
6349 (@code{gnus-uu-mark-thread}).
6350
6351 @item T M-#
6352 @kindex T M-# (Summary)
6353 @findex gnus-uu-unmark-thread
6354 Remove the process mark from the current thread
6355 (@code{gnus-uu-unmark-thread}).
6356
6357 @item T T
6358 @kindex T T (Summary)
6359 @findex gnus-summary-toggle-threads
6360 Toggle threading (@code{gnus-summary-toggle-threads}).
6361
6362 @item T s
6363 @kindex T s (Summary)
6364 @findex gnus-summary-show-thread
6365 Expose the thread hidden under the current article, if any
6366 (@code{gnus-summary-show-thread}).
6367
6368 @item T h
6369 @kindex T h (Summary)
6370 @findex gnus-summary-hide-thread
6371 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
6372
6373 @item T S
6374 @kindex T S (Summary)
6375 @findex gnus-summary-show-all-threads
6376 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
6377
6378 @item T H
6379 @kindex T H (Summary)
6380 @findex gnus-summary-hide-all-threads
6381 Hide all threads (@code{gnus-summary-hide-all-threads}).
6382
6383 @item T t
6384 @kindex T t (Summary)
6385 @findex gnus-summary-rethread-current
6386 Re-thread the thread the current article is part of
6387 (@code{gnus-summary-rethread-current}).  This works even when the
6388 summary buffer is otherwise unthreaded.
6389
6390 @item T ^
6391 @kindex T ^ (Summary)
6392 @findex gnus-summary-reparent-thread
6393 Make the current article the child of the marked (or previous) article
6394 (@code{gnus-summary-reparent-thread}.  The change will not be visible
6395 until the next group retrieval.
6396
6397 @end table
6398
6399 The following commands are thread movement commands.  They all
6400 understand the numeric prefix.
6401
6402 @table @kbd
6403
6404 @item T n
6405 @kindex T n (Summary)
6406 @findex gnus-summary-next-thread
6407 Go to the next thread (@code{gnus-summary-next-thread}).
6408
6409 @item T p
6410 @kindex T p (Summary)
6411 @findex gnus-summary-prev-thread
6412 Go to the previous thread (@code{gnus-summary-prev-thread}).
6413
6414 @item T d
6415 @kindex T d (Summary)
6416 @findex gnus-summary-down-thread
6417 Descend the thread (@code{gnus-summary-down-thread}).
6418
6419 @item T u
6420 @kindex T u (Summary)
6421 @findex gnus-summary-up-thread
6422 Ascend the thread (@code{gnus-summary-up-thread}).
6423
6424 @item T o
6425 @kindex T o (Summary)
6426 @findex gnus-summary-top-thread
6427 Go to the top of the thread (@code{gnus-summary-top-thread}).
6428 @end table
6429
6430 @vindex gnus-thread-operation-ignore-subject 
6431 If you ignore subject while threading, you'll naturally end up with
6432 threads that have several different subjects in them.  If you then issue
6433 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
6434 wish to kill the entire thread, but just those parts of the thread that
6435 have the same subject as the current article.  If you like this idea,
6436 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If is
6437 is non-@code{nil} (which it is by default), subjects will be ignored
6438 when doing thread commands.  If this variable is @code{nil}, articles in
6439 the same thread with different subjects will not be included in the
6440 operation in question.  If this variable is @code{fuzzy}, only articles
6441 that have subjects that are fuzzily equal will be included.
6442
6443
6444 @node Asynchronous Fetching
6445 @section Asynchronous Article Fetching
6446 @cindex asynchronous article fetching
6447
6448 If you read your news from an @sc{nntp} server that's far away, the
6449 network latencies may make reading articles a chore.  You have to wait
6450 for a while after pressing @kbd{n} to go to the next article before the
6451 article appears.  Why can't Gnus just go ahead and fetch the article
6452 while you are reading the previous one? Why not, indeed.
6453
6454 First, some caveats.  There are some pitfalls to using asynchronous
6455 article fetching, especially the way Gnus does it.  
6456
6457 Let's say you are reading article 1, which is short, and article 2 is
6458 quite long, and you are not interested in reading that.  Gnus does not
6459 know this, so it goes ahead and fetches article 2.  You decide to read
6460 article 3, but since Gnus is in the process of fetching article 2, the
6461 connection is blocked.
6462
6463 To avoid these situations, Gnus will open two (count 'em two)
6464 connections to the server.  Some people may think this isn't a very nice
6465 thing to do, but I don't see any real alternatives.  Setting up that
6466 extra connection takes some time, so Gnus startup will be slower.
6467
6468 Gnus will fetch more articles than you will read.  This will mean that
6469 the link between your machine and the @sc{nntp} server will become more
6470 loaded than if you didn't use article pre-fetch.  The server itself will
6471 also become more loaded---both with the extra article requests, and the
6472 extra connection.
6473
6474 Ok, so now you know that you shouldn't really use this thing...  unless
6475 you really want to.
6476
6477 @vindex gnus-asynchronous
6478 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
6479 happen automatically.
6480
6481 @vindex nntp-async-number
6482 You can control how many articles that are to be pre-fetched by setting
6483 @code{nntp-async-number}.  This is five by default, which means that when
6484 you read an article in the group, @code{nntp} will pre-fetch the next
6485 five articles.  If this variable is @code{t}, @code{nntp} will pre-fetch
6486 all the articles that it can without bound.  If it is @code{nil}, no
6487 pre-fetching will be made.
6488
6489 @vindex gnus-asynchronous-article-function
6490 You may wish to create some sort of scheme for choosing which articles
6491 that @code{nntp} should consider as candidates for pre-fetching.  For
6492 instance, you may wish to pre-fetch all articles with high scores, and
6493 not pre-fetch low-scored articles.  You can do that by setting the
6494 @code{gnus-asynchronous-article-function}, which will be called with an
6495 alist where the keys are the article numbers.  Your function should
6496 return an alist where the articles you are not interested in have been
6497 removed.  You could also do sorting on article score and the like. 
6498
6499 @node Article Caching
6500 @section Article Caching
6501 @cindex article caching
6502 @cindex caching
6503
6504 If you have an @emph{extremely} slow @sc{nntp} connection, you may
6505 consider turning article caching on.  Each article will then be stored
6506 locally under your home directory.  As you may surmise, this could
6507 potentially use @emph{huge} amounts of disk space, as well as eat up all
6508 your inodes so fast it will make your head swim.  In vodka.
6509
6510 Used carefully, though, it could be just an easier way to save articles.
6511
6512 @vindex gnus-use-long-file-name
6513 @vindex gnus-cache-directory
6514 @vindex gnus-use-cache
6515 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
6516 all articles that are ticked or marked as dormant will then be copied
6517 over to your local cache (@code{gnus-cache-directory}).  Whether this
6518 cache is flat or hierarchal is controlled by the
6519 @code{gnus-use-long-file-name} variable, as usual.
6520
6521 When re-select a ticked or dormant article, it will be fetched from the
6522 cache instead of from the server.  As articles in your cache will never
6523 expire, this might serve as a method of saving articles while still
6524 keeping them where they belong.  Just mark all articles you want to save
6525 as dormant, and don't worry.
6526
6527 When an article is marked as read, is it removed from the cache.
6528
6529 @vindex gnus-cache-remove-articles
6530 @vindex gnus-cache-enter-articles
6531 The entering/removal of articles from the cache is controlled by the
6532 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
6533 variables.  Both are lists of symbols.  The first is @code{(ticked
6534 dormant)} by default, meaning that ticked and dormant articles will be
6535 put in the cache.  The latter is @code{(read)} by default, meaning that
6536 articles that are marked as read are removed from the cache.  Possibly
6537 symbols in these two lists are @code{ticked}, @code{dormant},
6538 @code{unread} and @code{read}.
6539
6540 @findex gnus-jog-cache
6541 So where does the massive article-fetching and storing come into the
6542 picture?  The @code{gnus-jog-cache} command will go through all
6543 subscribed newsgroups, request all unread articles, and store them in
6544 the cache.  You should only ever, ever ever ever, use this command if 1)
6545 your connection to the @sc{nntp} server is really, really, really slow
6546 and 2) you have a really, really, really huge disk.  Seriously.
6547
6548 @vindex gnus-uncacheable-groups
6549 It is likely that you do not want caching on some groups.  For instance,
6550 if your @code{nnml} mail is located under your home directory, it makes no
6551 sense to cache it somewhere else under your home directory.  Unless you
6552 feel that it's neat to use twice as much space.  To limit the caching,
6553 you could set the @code{gnus-uncacheable-groups} regexp to
6554 @samp{"^nnml"}, for instance.  This variable is @code{nil} by
6555 default.
6556
6557 @findex gnus-cache-generate-nov-databases
6558 @findex gnus-cache-generate-active
6559 If your cache becomes all messed up for some reason or other,  Gnus
6560 offers two functions that will try to set things right.  @kbd{M-x
6561 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
6562 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
6563 file. 
6564
6565
6566 @node Persistent Articles
6567 @section Persistent Articles
6568 @cindex persistent articles
6569
6570 Closely related to article caching, we have @dfn{persistent articles}.
6571 In fact, it's just a different way of looking at caching, and much more
6572 useful in my opinion.
6573
6574 Say you're reading a newsgroup, and you happen on to some valuable gem
6575 that you want to keep and treasure forever.  You'd normally just save it
6576 (using one of the many saving commands) in some file.  The problem with
6577 that is that it's just, well, yucky.  Ideally you'd prefer just having
6578 the article remain in the group where you found it forever; untouched by
6579 the expiry going on at the news server.
6580
6581 This is what a @dfn{persistent article} is---an article that just won't
6582 be deleted.  It's implemented using the normal cache functions, but
6583 you use two explicit commands for managing persistent articles:
6584
6585 @table @kbd
6586
6587 @item *
6588 @kindex * (Summary)
6589 @findex gnus-cache-enter-article
6590 Make the current article persistent (@code{gnus-cache-enter-article}). 
6591
6592 @item M-*
6593 @kindex M-* (Summary)
6594 @findex gnus-cache-remove-article
6595 Remove the current article from the persistent articles
6596 (@code{gnus-cache-remove-article}).  This will normally delete the
6597 article. 
6598 @end table
6599
6600 Both these commands understand the process/prefix convention. 
6601
6602 To avoid having all ticked articles (and stuff) entered into the cache,
6603 you should set @code{gnus-use-cache} to @code{passive} if you're just
6604 interested in persistent articles:
6605
6606 @lisp
6607 (setq gnus-use-cache 'passive)
6608 @end lisp
6609
6610
6611 @node Article Backlog
6612 @section Article Backlog
6613 @cindex backlog
6614 @cindex article backlog
6615
6616 If you have a slow connection, but the idea of using caching seems
6617 unappealing to you (and it is, really), you can help the situation some
6618 by switching on the @dfn{backlog}.  This is where Gnus will buffer
6619 already read articles so that it doesn't have to re-fetch articles
6620 you've already read.  This only helps if you are in the habit of
6621 re-selecting articles you've recently read, of course.  If you never do
6622 that, turning the backlog on will slow Gnus down a little bit, and
6623 increase memory usage some.
6624
6625 @vindex gnus-keep-backlog
6626 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
6627 at most @var{n} old articles in a buffer for later re-fetching.  If this
6628 variable is non-@code{nil} and is not a number, Gnus will store
6629 @emph{all} read articles, which means that your Emacs will group without
6630 bound before exploding and taking your machine down with you.  I put
6631 that in there just to keep y'all on your toes.  
6632
6633 This variable is @code{nil} by default.
6634
6635
6636 @node Exiting the Summary Buffer
6637 @section Exiting the Summary Buffer
6638 @cindex summary exit
6639
6640 Exiting from the summary buffer will normally update all info on the
6641 group and return you to the group buffer. 
6642
6643 @table @kbd
6644
6645 @item Z Z
6646 @itemx q
6647 @kindex Z Z (Summary)
6648 @kindex q (Summary)
6649 @findex gnus-summary-exit
6650 @vindex gnus-summary-exit-hook
6651 @vindex gnus-summary-prepare-exit-hook
6652 Exit the current group and update all information on the group
6653 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
6654 called before doing much of the exiting, and calls
6655 @code{gnus-summary-expire-articles} by default.
6656 @code{gnus-summary-exit-hook} is called after finishing the exiting
6657 process. 
6658
6659 @item Z E
6660 @itemx Q
6661 @kindex Z E (Summary)
6662 @kindex Q (Summary)
6663 @findex gnus-summary-exit-no-update
6664 Exit the current group without updating any information on the group
6665 (@code{gnus-summary-exit-no-update}).
6666
6667 @item Z c
6668 @itemx c
6669 @kindex Z c (Summary)
6670 @kindex c (Summary)
6671 @findex gnus-summary-catchup-and-exit
6672 Mark all unticked articles in the group as read and then exit
6673 (@code{gnus-summary-catchup-and-exit}).
6674
6675 @item Z C
6676 @kindex Z C (Summary)
6677 @findex gnus-summary-catchup-all-and-exit
6678 Mark all articles, even the ticked ones, as read and then exit
6679 (@code{gnus-summary-catchup-all-and-exit}).
6680
6681 @item Z n
6682 @kindex Z n (Summary)
6683 @findex gnus-summary-catchup-and-goto-next-group
6684 Mark all articles as read and go to the next group
6685 (@code{gnus-summary-catchup-and-goto-next-group}). 
6686
6687 @item Z R
6688 @kindex Z R (Summary)
6689 @findex gnus-summary-reselect-current-group
6690 Exit this group, and then enter it again
6691 (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
6692 all articles, both read and unread.
6693
6694 @item Z G
6695 @itemx M-g
6696 @kindex Z G (Summary)
6697 @kindex M-g (Summary)
6698 @findex gnus-summary-rescan-group
6699 Exit the group, check for new articles in the group, and select the
6700 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
6701 articles, both read and unread.
6702
6703 @item Z N
6704 @kindex Z N (Summary)
6705 @findex gnus-summary-next-group
6706 Exit the group and go to the next group
6707 (@code{gnus-summary-next-group}). 
6708
6709 @item Z P
6710 @kindex Z P (Summary)
6711 @findex gnus-summary-prev-group
6712 Exit the group and go to the previous group
6713 (@code{gnus-summary-prev-group}). 
6714 @end table
6715
6716 @vindex gnus-exit-group-hook
6717 @code{gnus-exit-group-hook} is called when you exit the current
6718 group.  
6719
6720 @findex gnus-summary-wake-up-the-dead
6721 @findex gnus-dead-summary-mode
6722 @vindex gnus-kill-summary-on-exit
6723 If you're in the habit of exiting groups, and then changing your mind
6724 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
6725 If you do that, Gnus won't kill the summary buffer when you exit it.
6726 (Quelle surprise!)  Instead it will change the name of the buffer to
6727 something like @samp{"*Dead Summary ... *"} and install a minor mode
6728 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
6729 buffer, you'll find that all keys are mapped to a function called
6730 @code{gnus-summary-wake-up-the-dead}.  So tapping any keys in a dead
6731 summary buffer will result in a live, normal summary buffer.  
6732
6733 There will never be more than one dead summary buffer at any one time. 
6734
6735 @vindex gnus-use-cross-reference
6736 The data on the current group will be updated (which articles you have
6737 read, which articles you have replied to, etc.) when you exit the
6738 summary buffer.  If the @code{gnus-use-cross-reference} variable is
6739 @code{t} (which is the default), articles that are cross-referenced to
6740 this group and are marked as read, will also be marked as read in the
6741 other subscribed groups they were cross-posted to.  If this variable is
6742 neither @code{nil} nor @code{t}, the article will be marked as read in
6743 both subscribed and unsubscribed groups.
6744
6745 Marking cross-posted articles as read ensures that you'll never have to
6746 read the same article more than once.  Unless, of course, somebody has
6747 posted it to several groups separately.  Posting the same article to
6748 several groups (not cross-posting) is called @dfn{spamming}, and you are
6749 by law required to send nasty-grams to anyone who perpetrates such a
6750 heinous crime.
6751
6752 Remember: Cross-posting is kinda ok, but posting the same article
6753 separately to several groups is not.
6754
6755 One thing that may cause Gnus to not do the cross-posting thing
6756 correctly is if you use an @sc{nntp} server that supports @sc{xover}
6757 (which is very nice, because it speeds things up considerably) which
6758 does not include the @code{Xref} header in its @sc{nov} lines.  This is
6759 Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
6760 even with @sc{xover} by registering the @code{Xref} lines of all
6761 articles you actually read, but if you kill the articles, or just mark
6762 them as read without reading them, Gnus will not get a chance to snoop
6763 the @code{Xref} lines out of these articles, and will be unable to use
6764 the cross reference mechanism.
6765
6766 @vindex gnus-nov-is-evil
6767 If you want Gnus to get the @code{Xref}s right all the time, you have to
6768 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
6769 considerably.
6770
6771 C'est la vie.
6772
6773
6774 @node Process/Prefix
6775 @section Process/Prefix
6776 @cindex process/prefix convention
6777
6778 Many functions, among them functions for moving, decoding and saving
6779 articles, use what is known as the @dfn{Process/Prefix convention}.
6780
6781 This is a method for figuring out what articles that the user wants the
6782 command to be performed on.
6783
6784 It goes like this:
6785
6786 If the numeric prefix is N, perform the operation on the next N
6787 articles, starting with the current one.  If the numeric prefix is
6788 negative, perform the operation on the previous N articles, starting
6789 with the current one.
6790
6791 If @code{transient-mark-mode} in non-@code{nil} and the region is
6792 active, all articles in the region will be worked upon.
6793
6794 If there is no numeric prefix, but some articles are marked with the
6795 process mark, perform the operation on the articles that are marked with
6796 the process mark.
6797
6798 If there is neither a numeric prefix nor any articles marked with the
6799 process mark, just perform the operation on the current article.
6800
6801 Quite simple, really, but it needs to be made clear so that surprises
6802 are avoided.
6803
6804 @vindex gnus-summary-goto-unread
6805 One thing that seems to shock & horrify lots of people is that, for
6806 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
6807 Since each @kbd{d} (which marks the current article as read) by default
6808 goes to the next unread article after marking, this means that @kbd{3 d}
6809 will mark the next three unread articles as read, no matter what the
6810 summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
6811 @code{nil} for a more straightforward action.
6812
6813
6814 @node Saving Articles
6815 @section Saving Articles
6816 @cindex saving articles
6817
6818 Gnus can save articles in a number of ways.  Below is the documentation
6819 for saving articles in a fairly straight-forward fashion (i.e., little
6820 processing of the article is done before it is saved).  For a different
6821 approach (uudecoding, unsharing) you should use @code{gnus-uu}
6822 (@pxref{Decoding Articles}).
6823
6824 @vindex gnus-save-all-headers
6825 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
6826 unwanted headers before saving the article.
6827
6828 @vindex gnus-saved-headers
6829 If the preceeding variable is @code{nil}, all headers that match the
6830 @code{gnus-saved-headers} regexp will be kept, while the rest will be
6831 deleted before saving.
6832
6833 @table @kbd
6834
6835 @item O o
6836 @itemx o
6837 @kindex O o (Summary)
6838 @kindex o (Summary)
6839 @findex gnus-summary-save-article
6840 Save the current article using the default article saver
6841 (@code{gnus-summary-save-article}). 
6842
6843 @item O m
6844 @kindex O m (Summary)
6845 @findex gnus-summary-save-article-mail
6846 Save the current article in mail format
6847 (@code{gnus-summary-save-article-mail}). 
6848
6849 @item O r
6850 @kindex O r (Summary)
6851 @findex gnus-summary-save-article-mail
6852 Save the current article in rmail format
6853 (@code{gnus-summary-save-article-rmail}). 
6854
6855 @item O f
6856 @kindex O f (Summary)
6857 @findex gnus-summary-save-article-file
6858 Save the current article in plain file format
6859 (@code{gnus-summary-save-article-file}). 
6860
6861 @item O b
6862 @kindex O b (Summary)
6863 @findex gnus-summary-save-article-body-file
6864 Save the current article body in plain file format
6865 (@code{gnus-summary-save-article-body-file}). 
6866
6867 @item O h
6868 @kindex O h (Summary)
6869 @findex gnus-summary-save-article-folder
6870 Save the current article in mh folder format
6871 (@code{gnus-summary-save-article-folder}). 
6872
6873 @item O p
6874 @kindex O p (Summary)
6875 @findex gnus-summary-pipe-output
6876 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
6877 the current article to a process (@code{gnus-summary-pipe-output}).
6878 @end table
6879
6880 @vindex gnus-prompt-before-saving
6881 All these commands use the process/prefix convention
6882 (@pxref{Process/Prefix}).  If you save bunches of articles using these
6883 functions, you might get tired of being prompted for files to save each
6884 and every article in.  The prompting action is controlled by
6885 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
6886 default, giving you that excessive prompting action you know and
6887 loathe.  If you set this variable to @code{t} instead, you'll be promted
6888 just once for each series of articles you save.  If you like to really
6889 have Gnus do all your thinking for you, you can even set this variable
6890 to @code{nil}, which means that you will never be prompted for files to
6891 save articles in.  Gnus will simply save all the articles in the default
6892 files. 
6893
6894
6895 @vindex gnus-default-article-saver
6896 You can customize the @code{gnus-default-article-saver} variable to make
6897 Gnus do what you want it to.  You can use any of the four ready-made
6898 functions below, or you can create your own.
6899
6900 @table @code
6901
6902 @item gnus-summary-save-in-rmail
6903 @findex gnus-summary-save-in-rmail
6904 This is the default format, @dfn{babyl}.  Uses the function in the
6905 @code{gnus-rmail-save-name} variable to get a file name to save the
6906 article in.  The default is @code{gnus-plain-save-name}.
6907
6908 @item gnus-summary-save-in-mail
6909 @findex gnus-summary-save-in-mail
6910 Save in a Unix mail (mbox) file.  Uses the function in the
6911 @code{gnus-mail-save-name} variable to get a file name to save the
6912 article in.  The default is @code{gnus-plain-save-name}.
6913
6914 @item gnus-summary-save-in-file
6915 @findex gnus-summary-save-in-file
6916 Append the article straight to an ordinary file.  Uses the function in
6917 the @code{gnus-file-save-name} variable to get a file name to save the
6918 article in.  The default is @code{gnus-numeric-save-name}.
6919
6920 @item gnus-summary-save-body-in-file
6921 @findex gnus-summary-save-body-in-file
6922 Append the article body to an ordinary file.  Uses the function in the
6923 @code{gnus-file-save-name} variable to get a file name to save the
6924 article in.  The default is @code{gnus-numeric-save-name}.
6925
6926 @item gnus-summary-save-in-folder
6927 @findex gnus-summary-save-in-folder
6928 Save the article to an MH folder using @code{rcvstore} from the MH
6929 library.
6930
6931 @item gnus-summary-save-in-vm
6932 @findex gnus-summary-save-in-vm
6933 Save the article in a VM folder.  You have to have the VM mail
6934 reader to use this setting.
6935 @end table
6936
6937 All of these functions, except for the last one, will save the article
6938 in the @code{gnus-article-save-directory}, which is initialized from the
6939 @samp{SAVEDIR} environment variable.  This is @file{~/News/} by
6940 default. 
6941
6942 As you can see above, the functions use different functions to find a
6943 suitable name of a file to save the article in.  Below is a list of
6944 available functions that generate names:
6945
6946 @table @code
6947
6948 @item gnus-Numeric-save-name
6949 @findex gnus-Numeric-save-name
6950 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
6951
6952 @item gnus-numeric-save-name
6953 @findex gnus-numeric-save-name
6954 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
6955
6956 @item gnus-Plain-save-name
6957 @findex gnus-Plain-save-name
6958 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
6959
6960 @item gnus-plain-save-name
6961 @findex gnus-plain-save-name
6962 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
6963 @end table
6964
6965 @vindex gnus-split-methods
6966 You can have Gnus suggest where to save articles by plonking regexp into
6967 the @code{gnus-split-methods} alist.  For instance, if you would like to
6968 save articles related to Gnus in the file @file{gnus-stuff}, and articles
6969 related to VM in @code{vm-stuff}, you could set this variable to something
6970 like:
6971
6972 @lisp
6973 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
6974  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
6975  (my-choosing-function "../other-dir/my-stuff")
6976  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
6977 @end lisp
6978
6979 We see that this is a list where each element is a list that has two
6980 elements---the @dfn{match} and the @dfn{file}.  The match can either be
6981 a string (in which case it is used as a regexp to match on the article
6982 head); it can be a symbol (which will be called as a function); or it
6983 can be a list (which will be @code{eval}ed).  If any of these actions
6984 have a non-@code{nil} result, the @dfn{file} will be used as a default
6985 prompt.  In addition, the result of the operation itself will be used if
6986 the function or form called returns a string or a list of strings. 
6987
6988 You basically end up with a list of file names that might be used when
6989 saving the current article.  (All "matches" will be used.)  You will
6990 then be prompted for what you really want to use as a name, with file
6991 name completion over the results from applying this variable.
6992
6993 This variable is @code{((gnus-article-archive-name))} by default, which
6994 means that Gnus will look at the articles it saves for an
6995 @samp{Archive-name} line and use that as a suggestion for the file
6996 name. 
6997
6998 @vindex gnus-use-long-file-name
6999 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
7000 @code{nil}, all the preceding functions will replace all periods
7001 (@samp{.}) in the group names with slashes (@samp{/})---which means that
7002 the functions will generate hierarchies of directories instead of having
7003 all the files in the toplevel directory
7004 (@samp{~/News/alt/andrea-dworkin} instead of
7005 @samp{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
7006 on most systems.  However, for historical reasons, this is @code{nil} on
7007 Xenix and usg-unix-v machines by default.
7008
7009 This function also affects kill and score file names.  If this variable
7010 is a list, and the list contains the element @code{not-score}, long file
7011 names will not be used for score files, if it contains the element
7012 @code{not-save}, long file names will not be used for saving, and if it
7013 contains the element @code{not-kill}, long file names will not be used
7014 for kill files.
7015
7016 If you'd like to save articles in a hierarchy that looks something like
7017 a spool, you could
7018
7019 @lisp
7020 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
7021 (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding
7022 @end lisp
7023
7024 Then just save with @kbd{o}.  You'd then read this hierarchy with
7025 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
7026 the toplevel directory as the argument (@file{~/News/}).  Then just walk
7027 around to the groups/directories with @code{nneething}.
7028
7029
7030 @node Decoding Articles
7031 @section Decoding Articles
7032 @cindex decoding articles
7033
7034 Sometime users post articles (or series of articles) that have been
7035 encoded in some way or other.  Gnus can decode them for you.
7036
7037 @menu 
7038 * Uuencoded Articles::    Uudecode articles.
7039 * Shared Articles::       Unshar articles.
7040 * PostScript Files::      Split PostScript.
7041 * Decoding Variables::    Variables for a happy decoding.
7042 * Viewing Files::         You want to look at the result of the decoding?
7043 @end menu
7044
7045 All these functions use the process/prefix convention
7046 (@pxref{Process/Prefix}) for finding out what articles to work on, with
7047 the extension that a "single article" means "a single series".  Gnus can
7048 find out by itself what articles belong to a series, decode all the
7049 articles and unpack/view/save the resulting file(s).
7050
7051 Gnus guesses what articles are in the series according to the following
7052 simplish rule: The subjects must be (nearly) identical, except for the
7053 last two numbers of the line.  (Spaces are largely ignored, however.)
7054
7055 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
7056 will find all the articles that match the regexp @samp{^cat.gif
7057 ([0-9]+/[0-9]+).*$}.  
7058
7059 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
7060 series}, will not be properly recognized by any of the automatic viewing
7061 commands, and you have to mark the articles manually with @key{#}.
7062
7063 @node Uuencoded Articles
7064 @subsection Uuencoded Articles
7065 @cindex uudecode
7066 @cindex uuencoded articles
7067
7068 @table @kbd
7069
7070 @item X u
7071 @kindex X u (Summary)
7072 @findex gnus-uu-decode-uu
7073 Uudecodes the current series (@code{gnus-uu-decode-uu}).
7074
7075 @item X U
7076 @kindex X U (Summary)
7077 @findex gnus-uu-decode-uu-and-save
7078 Uudecodes and saves the current series
7079 (@code{gnus-uu-decode-uu-and-save}).
7080
7081 @item X v u
7082 @kindex X v u (Summary)
7083 @findex gnus-uu-decode-uu-view
7084 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
7085
7086 @item X v U
7087 @kindex X v U (Summary)
7088 @findex gnus-uu-decode-uu-and-save-view
7089 Uudecodes, views and saves the current series
7090 (@code{gnus-uu-decode-uu-and-save-view}). 
7091 @end table
7092
7093 Remember that these all react to the presence of articles marked with
7094 the process mark.  If, for instance, you'd like to uncode and save an
7095 entire newsgroup, you'd typically do @kbd{M P a}
7096 (@code{gnus-uu-mark-all}) and then @kbd{X U}
7097 (@code{gnus-uu-decode-uu-and-save}).
7098
7099 All this is very much different from how @code{gnus-uu} worked with
7100 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
7101 the sun.  This version of @code{gnus-uu} generally assumes that you mark
7102 articles in some way (@pxref{Setting Process Marks}) and then press
7103 @kbd{X u}.
7104
7105 Note: When trying to decode articles that have names matching
7106 @code{gnus-uu-notify-files}, which is hard-coded to
7107 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
7108 automatically post an article on @samp{comp.unix.wizards} saying that
7109 you have just viewed the file in question.  This feature can't be turned
7110 off.
7111
7112 @node Shared Articles
7113 @subsection Shared Articles
7114 @cindex unshar
7115 @cindex shared articles
7116
7117 @table @kbd
7118
7119 @item X s
7120 @kindex X s (Summary)
7121 @findex gnus-uu-decode-unshar
7122 Unshars the current series (@code{gnus-uu-decode-unshar}).
7123
7124 @item X S
7125 @kindex X S (Summary)
7126 @findex gnus-uu-decode-unshar-and-save
7127 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
7128
7129 @item X v s
7130 @kindex X v s (Summary)
7131 @findex gnus-uu-decode-unshar-view
7132 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
7133
7134 @item X v S
7135 @kindex X v S (Summary)
7136 @findex gnus-uu-decode-unshar-and-save-view
7137 Unshars, views and saves the current series
7138 (@code{gnus-uu-decode-unshar-and-save-view}). 
7139 @end table
7140
7141 @node PostScript Files
7142 @subsection PostScript Files
7143 @cindex PostScript
7144
7145 @table @kbd
7146
7147 @item X p
7148 @kindex X p (Summary)
7149 @findex gnus-uu-decode-postscript
7150 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
7151
7152 @item X P
7153 @kindex X P (Summary)
7154 @findex gnus-uu-decode-postscript-and-save
7155 Unpack and save the current PostScript series
7156 (@code{gnus-uu-decode-postscript-and-save}).
7157
7158 @item X v p
7159 @kindex X v p (Summary)
7160 @findex gnus-uu-decode-postscript-view
7161 View the current PostScript series
7162 (@code{gnus-uu-decode-postscript-view}).
7163
7164 @item X v P
7165 @kindex X v P (Summary)
7166 @findex gnus-uu-decode-postscript-and-save-view
7167 View and save the current PostScript series
7168 (@code{gnus-uu-decode-postscript-and-save-view}). 
7169 @end table
7170
7171 @node Decoding Variables
7172 @subsection Decoding Variables
7173
7174 Adjective, not verb.
7175
7176 @menu 
7177 * Rule Variables::          Variables that say how a file is to be viewed.
7178 * Other Decode Variables::  Other decode variables.
7179 * Uuencoding & Posting::    Variables for customizing uuencoding.
7180 @end menu
7181
7182 @node Rule Variables
7183 @subsubsection Rule Variables
7184 @cindex rule variables
7185
7186 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
7187 variables are on the form
7188   
7189 @lisp
7190       (list '(regexp1 command2)
7191             '(regexp2 command2)
7192             ...)
7193 @end lisp
7194
7195 @table @code
7196
7197 @item gnus-uu-user-view-rules
7198 @vindex gnus-uu-user-view-rules
7199 This variable is consulted first when viewing files.  If you wish to use,
7200 for instance, @code{sox} to convert an @samp{.au} sound file, you could
7201 say something like:
7202 @lisp
7203        (setq gnus-uu-user-view-rules
7204          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
7205 @end lisp
7206
7207 @item gnus-uu-user-view-rules-end
7208 @vindex gnus-uu-user-view-rules-end
7209 This variable is consulted if Gnus couldn't make any matches from the
7210 user and default view rules.
7211
7212 @item gnus-uu-user-archive-rules
7213 @vindex gnus-uu-user-archive-rules
7214 This variable can be used to say what commands should be used to unpack
7215 archives.
7216 @end table
7217
7218
7219 @node Other Decode Variables
7220 @subsubsection Other Decode Variables
7221
7222 @table @code
7223 @vindex gnus-uu-grabbed-file-functions
7224
7225 @item gnus-uu-grabbed-file-functions
7226 All functions in this list will be called right each file has been
7227 successfully decoded---so that you can move or view files right away,
7228 and don't have to wait for all files to be decoded before you can do
7229 anything.  Ready-made functions you can put in this list are:
7230
7231 @table @code
7232
7233 @item gnus-uu-grab-view
7234 @findex gnus-uu-grab-view
7235 View the file.
7236
7237 @item gnus-uu-grab-move
7238 @findex gnus-uu-grab-move
7239 Move the file (if you're using a saving function.)
7240 @end table
7241
7242 @item gnus-uu-ignore-files-by-name
7243 @vindex gnus-uu-ignore-files-by-name
7244 Files with name matching this regular expression won't be viewed.
7245
7246 @item gnus-uu-ignore-files-by-type
7247 @vindex gnus-uu-ignore-files-by-type
7248 Files with a @sc{mime} type matching this variable won't be viewed.
7249 Note that Gnus tries to guess what type the file is based on the name.
7250 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
7251 kludgey.
7252
7253 @item gnus-uu-tmp-dir
7254 @vindex gnus-uu-tmp-dir
7255 Where @code{gnus-uu} does its work.
7256
7257 @item gnus-uu-do-not-unpack-archives
7258 @vindex gnus-uu-do-not-unpack-archives
7259 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
7260 looking for files to display.
7261
7262 @item gnus-uu-view-and-save
7263 @vindex gnus-uu-view-and-save
7264 Non-@code{nil} means that the user will always be asked to save a file
7265 after viewing it.
7266
7267 @item gnus-uu-ignore-default-view-rules
7268 @vindex gnus-uu-ignore-default-view-rules
7269 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
7270 rules.
7271
7272 @item gnus-uu-ignore-default-archive-rules
7273 @vindex gnus-uu-ignore-default-archive-rules
7274 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
7275 unpacking commands.
7276
7277 @item gnus-uu-kill-carriage-return
7278 @vindex gnus-uu-kill-carriage-return
7279 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
7280 from articles.
7281
7282 @item gnus-uu-unmark-articles-not-decoded
7283 @vindex gnus-uu-unmark-articles-not-decoded
7284 Non-@code{nil} means that @code{gnus-uu} will mark articles that were
7285 unsuccessfully decoded as unread.
7286
7287 @item gnus-uu-correct-stripped-uucode
7288 @vindex gnus-uu-correct-stripped-uucode
7289 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
7290 uuencoded files that have had trailing spaces deleted.
7291
7292 @item gnus-uu-view-with-metamail
7293 @vindex gnus-uu-view-with-metamail
7294 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
7295 commands defined by the rule variables and just fudge a @sc{mime}
7296 content type based on the file name.  The result will be fed to
7297 @code{metamail} for viewing.
7298
7299 @item gnus-uu-save-in-digest
7300 @vindex gnus-uu-save-in-digest
7301 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
7302 decoding, will save in digests.  If this variable is @code{nil},
7303 @code{gnus-uu} will just save everything in a file without any
7304 embellishments.  The digesting almost conforms to RFC1153---no easy way
7305 to specify any meaningful volume and issue numbers were found, so I
7306 simply dropped them.
7307
7308 @end table
7309
7310 @node Uuencoding & Posting
7311 @subsubsection Uuencoding & Posting
7312
7313 @table @code
7314
7315 @item gnus-uu-post-include-before-composing
7316 @vindex gnus-uu-post-include-before-composing
7317 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
7318 before you compose the article.  If this variable is @code{t}, you can
7319 either include an encoded file with @key{C-c C-i} or have one included
7320 for you when you post the article.
7321
7322 @item gnus-uu-post-length
7323 @vindex gnus-uu-post-length
7324 Maximum length of an article.  The encoded file will be split into how
7325 many articles it takes to post the entire file.
7326
7327 @item gnus-uu-post-threaded
7328 @vindex gnus-uu-post-threaded
7329 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
7330 thread.  This may not be smart, as no other decoder I have seen are able
7331 to follow threads when collecting uuencoded articles.  (Well, I have
7332 seen one package that does that---@code{gnus-uu}, but somehow, I don't
7333 think that counts...) Default is @code{nil}.
7334
7335 @item gnus-uu-post-separate-description
7336 @vindex gnus-uu-post-separate-description
7337 Non-@code{nil} means that the description will be posted in a separate
7338 article.  The first article will typically be numbered (0/x).  If this
7339 variable is @code{nil}, the description the user enters will be included
7340 at the beginning of the first article, which will be numbered (1/x).
7341 Default is @code{t}.
7342
7343 @end table
7344
7345 @node Viewing Files
7346 @subsection Viewing Files
7347 @cindex viewing files
7348 @cindex pseudo-articles
7349
7350 After decoding, if the file is some sort of archive, Gnus will attempt
7351 to unpack the archive and see if any of the files in the archive can be
7352 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
7353 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
7354 uncompress and detar the main file, and then view the two pictures.
7355 This unpacking process is recursive, so if the archive contains archives
7356 of archives, it'll all be unpacked.
7357
7358 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
7359 extracted file into the summary buffer.  If you go to these "articles",
7360 you will be prompted for a command to run (usually Gnus will make a
7361 suggestion), and then the command will be run.
7362
7363 @vindex gnus-view-pseudo-asynchronously
7364 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
7365 until the viewing is done before proceeding.
7366
7367 @vindex gnus-view-pseudos
7368 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
7369 the pseudo-articles into the summary buffer, but view them
7370 immediately.  If this variable is @code{not-confirm}, the user won't even
7371 be asked for a confirmation before viewing is done.
7372
7373 @vindex gnus-view-pseudos-separately 
7374 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
7375 pseudo-article will be created for each file to be viewed.  If
7376 @code{nil}, all files that use the same viewing command will be given as
7377 a list of parameters to that command.
7378
7379 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
7380 pseudo-articles when decoding.  It is @code{t} by default.
7381
7382 So; there you are, reading your @emph{pseudo-articles} in your
7383 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
7384 Why isn't anything real anymore? How did we get here?
7385
7386
7387 @node Article Treatment
7388 @section Article Treatment
7389
7390 Reading through this huge manual, you may have quite forgotten that the
7391 object of newsreaders are to actually, like, read what people have
7392 written.  Reading articles.  Unfortunately, people are quite bad at
7393 writing, so there are tons of functions and variables to make reading
7394 these articles easier.
7395
7396 @menu
7397 * Article Highlighting::    You want to make the article look like fruit salad.
7398 * Article Hiding::          You also want to make certain info go away.
7399 * Article Washing::         Lots of way-neat functions to make life better.
7400 * Article Buttons::         Clcik on URLs, Message-IDs, addresses and the like.
7401 * Article Date::            Grumble, UT!
7402 @end menu
7403
7404
7405 @node Article Highlighting
7406 @subsection Article Highlighting
7407 @cindex highlight
7408
7409 Not only do you want your article buffer to look like fruit salad, but
7410 you want it to look like technicolor fruit salad.
7411
7412 @table @kbd
7413
7414 @item W H a
7415 @kindex W H a (Summary)
7416 @findex gnus-article-highlight
7417 Highlight the current article (@code{gnus-article-highlight}).
7418
7419 @item W H h
7420 @kindex W H h (Summary)
7421 @findex gnus-article-highlight-headers
7422 @vindex gnus-header-face-alist
7423 Highlight the headers (@code{gnus-article-highlight-headers}).  The
7424 highlighting will be done according to the @code{gnus-header-face-alist}
7425 variable, which is a list where each element has the form @var{(regexp
7426 name content)}.  @var{regexp} is a regular expression for matching the
7427 header,  @var{name} is the face used for highling the header name and
7428 @var{content} is the face for highlighting the header value.  The first
7429 match made will be used.
7430
7431 @item W H c
7432 @kindex W H c (Summary)
7433 @findex gnus-article-highlight-citation
7434 Highlight cited text (@code{gnus-article-highlight-citation}). 
7435
7436 Some variables to customize the citation highlights:
7437
7438 @table @code
7439 @vindex gnus-cite-parse-max-size
7440
7441 @item gnus-cite-parse-max-size
7442 If the article size if bigger than this variable (which is 25000 by
7443 default), no citation highlighting will be performed.  
7444
7445 @item gnus-cite-prefix-regexp
7446 @vindex gnus-cite-prefix-regexp
7447 Regexp mathcing the longest possible citation prefix on a line. 
7448
7449 @item gnus-cite-max-prefix
7450 @vindex gnus-cite-max-prefix
7451 Maximum possible length for a citation prefix (default 20).
7452
7453 @item gnus-supercite-regexp
7454 @vindex gnus-supercite-regexp
7455 Regexp matching normal SuperCite attribution lines.  
7456
7457 @item gnus-supercite-secondary-regexp
7458 @vindex gnus-supercite-secondary-regexp
7459 Regexp matching mangled SuperCite attribution lines.
7460
7461 @item gnus-cite-minimum-match-count
7462 @vindex gnus-cite-minimum-match-count
7463 Minimum number of identical prefixes we have to see before we believe
7464 that it's a citation.
7465
7466 @item gnus-cite-attribution-prefix
7467 @vindex gnus-cite-attribution-prefix
7468 Regexp matching the beginning of an attribution line.
7469
7470 @item gnus-cite-addtribution-suffix
7471 @vindex gnus-cite-addtribution-suffix
7472 Regexp matching the end of an attribution line.
7473
7474 @item gnus-cite-attribution-face
7475 @vindex gnus-cite-attribution-face
7476 Face used for attribution lines.  It is merged with the face for the
7477 cited text belonging to the attribution.
7478
7479 @end table
7480
7481
7482 @item W H s
7483 @kindex W H s (Summary)
7484 @vindex gnus-signature-separator
7485 @findex gnus-article-highlight-signature
7486 Highlight the signature (@code{gnus-article-highlight-signature}).
7487 Everything after @code{gnus-signature-separator} in an article will be
7488 considered a signature.
7489
7490 @end table
7491
7492
7493 @node Article Hiding
7494 @subsection Article Hiding
7495 @cindex article hiding
7496
7497 Or rather, hiding certain things in each article.  There usually is much
7498 too much gruft in most articles.  
7499
7500 @table @kbd
7501
7502 @item W W a
7503 @kindex W W a (Summary)
7504 @findex gnus-article-hide
7505 Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}). 
7506
7507 @item W W h
7508 @kindex W W h (Summary)
7509 @findex gnus-article-hide-headers
7510 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
7511 Headers}. 
7512
7513 @item W W b
7514 @kindex W W b (Summary)
7515 @findex gnus-article-hide-boring-headers
7516 Hide headers that aren't particularly interesting
7517 (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
7518
7519 @item W W s
7520 @kindex W W s (Summary)
7521 @findex gnus-article-hide-signature
7522 Hide signature (@code{gnus-article-hide-signature}).
7523
7524 @item W W p
7525 @kindex W W p (Summary)
7526 @findex gnus-article-hide-pgp
7527 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 
7528
7529 @item W W c
7530 @kindex W W c (Summary)
7531 @findex gnus-article-hide-citation
7532 Hide citation (@code{gnus-article-hide-citation}).  Some variables for
7533 customizing the hiding:
7534
7535 @table @code
7536
7537 @item gnus-cite-hide-percentage
7538 @vindex gnus-cite-hide-percentage
7539 If the cited text is of a bigger percentage than this variable (default
7540 50), hide the cited text.
7541
7542 @item gnus-cite-hide-absolute
7543 @vindex gnus-cite-hide-absolute
7544 The cited text must be have at least this length (default 10) before it
7545 is hidden.
7546
7547 @item gnus-cited-text-button-line-format
7548 @vindex gnus-cited-text-button-line-format
7549 Gnus adds buttons show where the cited text has been hidden, and to
7550 allow toggle hiding the text.  The format of the variable is specified
7551 by this format-like variable.  These specs are legal:
7552
7553 @table @samp
7554 @item b
7555 Start point of the hidden text.
7556 @item e
7557 End point of the hidden text.
7558 @item l
7559 Length of the hidden text.
7560 @end table
7561
7562 @item gnus-cited-lines-visible
7563 @vindex gnus-cited-lines-visible
7564 The number of lines at the beginning of the cited text to leave shown. 
7565
7566 @end table
7567
7568 @item W W C
7569 @kindex W W C (Summary)
7570 @findex gnus-article-hide-citation-in-followups
7571 Hide cited text in articles that aren't roots
7572 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
7573 useful as an interactive command, but might be a handy function to stick
7574 in @code{gnus-article-display-hook} (@pxref{Customizing Articles}). 
7575
7576 @end table
7577
7578 All these "hiding" commands are toggles, but if you give a negative
7579 prefix to these commands, they will show what they have previously
7580 hidden.  If you give a positive prefix, they will always hide.
7581
7582 Also see @xref{Article Highlighting} for further variables for
7583 citation customization.
7584
7585 @vindex gnus-signature-limit
7586 @code{gnus-signature-limit} provides a limit to what is considered a
7587 signature.  If it is a number, no signature may not be longer (in
7588 characters) than that number.  If it is a function, the function will be
7589 called without any parameters, and if it returns @code{nil}, there is no
7590 signature in the buffer.  If it is a string, it will be used as a
7591 regexp.  If it matches, the text in question is not a signature.
7592
7593
7594 @node Article Washing
7595 @subsection Article Washing
7596 @cindex washing
7597 @cindex article washing
7598
7599 We call this "article washing" for a really good reason.  Namely, the
7600 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
7601
7602 @dfn{Washing} is defined by us as "changing something from something to
7603 something else", but normally results in something looking better.
7604 Cleaner, perhaps.
7605
7606 @table @kbd
7607
7608 @item W l
7609 @kindex W l (Summary)
7610 @findex gnus-summary-stop-page-breaking
7611 Remove page breaks from the current article
7612 (@code{gnus-summary-stop-page-breaking}).
7613
7614 @item W r
7615 @kindex W r (Summary)
7616 @findex gnus-summary-caesar-message
7617 Do a Caesar rotate (rot13) on the article buffer
7618 (@code{gnus-summary-caesar-message}). 
7619
7620 @item A g
7621 @kindex A g (Summary)
7622 @findex gnus-summary-show-article
7623 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
7624 given a prefix, fetch the current article, but don't run any of the
7625 article treatment functions.  This will give you a "raw" article, just
7626 the way it came from the server.
7627
7628 @item W t
7629 @kindex W t (Summary)
7630 @findex gnus-summary-toggle-header
7631 Toggle whether to display all headers in the article buffer
7632 (@code{gnus-summary-toggle-header}). 
7633
7634 @item W m
7635 @kindex W m (Summary)
7636 @findex gnus-summary-toggle-mime
7637 Toggle whether to run the article through @sc{mime} before displaying
7638 (@code{gnus-summary-toggle-mime}).
7639
7640 @item W o
7641 @kindex W o (Summary)
7642 @findex gnus-article-treat-overstrike
7643 Treat overstrike (@code{gnus-article-treat-overstrike}).
7644
7645 @item W w
7646 @kindex W w (Summary)
7647 @findex gnus-article-word-wrap
7648 Do word wrap (@code{gnus-article-word-wrap}).
7649
7650 @item W c
7651 @kindex W c (Summary)
7652 @findex gnus-article-remove-cr
7653 Remove CR (@code{gnus-article-remove-cr}).
7654
7655 @item W L
7656 @kindex W L (Summary)
7657 @findex gnus-article-remove-trailing-blank-lines
7658 Remove all blank lines at the end of the article
7659 (@code{gnus-article-remove-trailing-blank-lines}).
7660
7661 @item W q
7662 @kindex W q (Summary)
7663 @findex gnus-article-de-quoted-unreadable
7664 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
7665
7666 @item W f
7667 @kindex W f (Summary)
7668 @cindex x-face
7669 @findex gnus-article-display-x-face
7670 @findex gnus-article-x-face-command
7671 @vindex gnus-article-x-face-command
7672 @vindex gnus-article-x-face-too-ugly
7673 Look for and display any X-Face headers
7674 (@code{gnus-article-display-x-face}).  The command executed by this
7675 function is given by the @code{gnus-article-x-face-command} variable.  If
7676 this variable is a string, this string will be executed in a sub-shell.
7677 If it is a function, this function will be called with the face as the
7678 argument.  If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
7679 matches the @code{From} header, the face will not be shown.
7680
7681 @item W b
7682 @kindex W b (Summary)
7683 @findex gnus-article-add-buttons
7684 Add clickable buttons to the article (@code{gnus-article-add-buttons}). 
7685
7686 @item W B
7687 @kindex W B (Summary)
7688 @findex gnus-article-add-buttons-to-head
7689 Add clickable buttons to the article headers
7690 (@code{gnus-article-add-buttons-to-head}).  
7691
7692 @end table
7693
7694
7695 @node Article Buttons
7696 @subsection Article Buttons
7697 @cindex buttons
7698
7699 People often include references to other stuff in articles, and it would
7700 be nice if Gnus could just fetch whatever it is that people talk about
7701 with the minimum of fuzz.
7702
7703 Gnus adds @dfn{buttons} to certain standard references by default:
7704 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
7705 two variables, one that handles article bodies and one that handles
7706 article heads:
7707
7708 @table @code
7709
7710 @item gnus-button-alist
7711 @vindex gnus-header-button-alist
7712 This is an alist where each entry has this form:
7713
7714 @lisp
7715 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7716 @end lisp
7717
7718 @table @var
7719
7720 @item regexp
7721 All text that match this regular expression will be considered an
7722 external reference.  Here's a typical regexp that match embedded URLs:
7723 @samp{"<URL:\\([^\n\r>]*\\)>"}. 
7724
7725 @item button-par
7726 Gnus has to know which parts of the match is to be highlighted.  This is
7727 a number that says what sub-expression of the regexp that is to be
7728 highlighted.  If you want it all highlighted, you use @samp{0} here.
7729
7730 @item use-p
7731 This form will be @code{eval}ed, and if the result is non-@code{nil},
7732 this is considered a match.  This is useful if you want extra sifting to
7733 avoid false matches.
7734
7735 @item function
7736 This function will be called when you click on this button.
7737
7738 @item data-par
7739 As with @var{button-par}, this is a sub-expression number, but this one
7740 says which part of the match is to be sent as data to @var{function}. 
7741
7742 @end table
7743
7744 So the full entry for buttonizing URLs is then
7745
7746 @lisp
7747 ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
7748 @end lisp
7749
7750 @item gnus-header-button-alist
7751 @vindex gnus-header-button-alist
7752 This is just like the other alist, except that it is applied to the
7753 article head only, and that each entry has an additional element that is
7754 used to say what headers to apply the buttonize coding to:
7755
7756 @lisp
7757 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7758 @end lisp
7759
7760 @var{header} is a regular expression.
7761
7762 @end table
7763
7764 @vindex gnus-article-button-face
7765 @vindex gnus-article-mouse-face
7766 Buttons are highlighted with @code{gnus-article-button-face}, while
7767 @code{gnus-article-mouse-face} is used when the mouse cursor is over the
7768 button.
7769
7770
7771 @node Article Date
7772 @subsection Article Date
7773
7774 The date is most likely generated in some obscure timezone you've never
7775 heard of, so it's quite nice to be able to find out what the time was
7776 when the article was sent.
7777
7778 @table @kbd
7779
7780 @item W T u
7781 @kindex W T u (Summary)
7782 @findex gnus-article-date-ut
7783 Display the date in UT (aka. GMT, aka ZULU)
7784 (@code{gnus-article-date-ut}). 
7785
7786 @item W T l
7787 @kindex W T l (Summary)
7788 @findex gnus-article-date-local
7789 Display the date in the local timezone (@code{gnus-article-date-local}).
7790
7791 @item W T e
7792 @kindex W T e (Summary)
7793 @findex gnus-article-date-lapsed
7794 Say how much time has (e)lapsed between the article was posted and now
7795 (@code{gnus-article-date-lapsed}).
7796
7797 @item W T o
7798 @kindex W T o (Summary)
7799 @findex gnus-article-date-original
7800 Display the original date (@code{gnus-article-date-original}).  This can
7801 be useful if you normally use some other conversion function and is
7802 worried that it might be doing something totally wrong.  Say, claiming
7803 that the article was posted in 1854.  Although something like that is
7804 @emph{totally} impossible.  Don't you trust me? *titter*
7805
7806 @end table
7807
7808
7809 @node Summary Sorting
7810 @section Summary Sorting
7811 @cindex summary sorting
7812
7813 You can have the summary buffer sorted in various ways, even though I
7814 can't really see why you'd want that.
7815
7816 @table @kbd
7817
7818 @item C-c C-s C-n
7819 @kindex C-c C-s C-n (Summary)
7820 @findex gnus-summary-sort-by-number
7821 Sort by article number (@code{gnus-summary-sort-by-number}).
7822
7823 @item C-c C-s C-a
7824 @kindex C-c C-s C-a (Summary)
7825 @findex gnus-summary-sort-by-author
7826 Sort by author (@code{gnus-summary-sort-by-author}).
7827
7828 @item C-c C-s C-s
7829 @kindex C-c C-s C-s (Summary)
7830 @findex gnus-summary-sort-by-subject
7831 Sort by subject (@code{gnus-summary-sort-by-subject}).
7832
7833 @item C-c C-s C-d
7834 @kindex C-c C-s C-d (Summary)
7835 @findex gnus-summary-sort-by-date
7836 Sort by date (@code{gnus-summary-sort-by-date}).
7837
7838 @item C-c C-s C-i
7839 @kindex C-c C-s C-i (Summary)
7840 @findex gnus-summary-sort-by-score
7841 Sort by score (@code{gnus-summary-sort-by-score}).
7842 @end table
7843
7844 These functions will work both when you use threading and when you don't
7845 use threading.  In the latter case, all summary lines will be sorted,
7846 line by line.  In the former case, sorting will be done on a
7847 root-by-root basis, which might not be what you were looking for.  To
7848 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
7849 Commands}).
7850
7851
7852 @node Finding the Parent
7853 @section Finding the Parent
7854 @cindex parent articles
7855 @cindex referring articles
7856
7857 @findex gnus-summary-refer-parent-article
7858 @kindex ^ (Summary)
7859 If you'd like to read the parent of the current article, and it is not
7860 displayed in the article buffer, you might still be able to.  That is,
7861 if the current group is fetched by @sc{nntp}, the parent hasn't expired
7862 and the @code{References} in the current article are not mangled, you
7863 can just press @kbd{^} or @kbd{A r}
7864 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
7865 you'll get the parent.  If the parent is already displayed in the
7866 summary buffer, point will just move to this article.
7867
7868 @findex gnus-summary-refer-references
7869 @kindex A R (Summary)
7870 You can have Gnus fetch all articles mentioned in the @code{References}
7871 header of the article by pushing @kbd{A R}
7872 (@code{gnus-summary-refer-references}). 
7873
7874 @findex gnus-summary-refer-article
7875 @kindex M-^ (Summary)
7876 You can also ask the @sc{nntp} server for an arbitrary article, no
7877 matter what group it belongs to.  @kbd{M-^}
7878 (@code{gnus-summary-refer-article}) will ask you for a
7879 @code{Message-ID}, which is one of those long thingies that look
7880 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get
7881 it all exactly right.  No fuzzy searches, I'm afraid.
7882
7883 @vindex gnus-refer-article-method
7884 If the group you are reading is located on a backend that does not
7885 support fetching by @code{Message-ID} very well (like @code{nnspool}),
7886 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
7887 would, perhaps, be best if the @sc{nntp} server you consult is the same
7888 as the one that keeps the spool you are reading from updated, but that's
7889 not really necessary.
7890
7891 Most of the mail backends support fetching by @code{Message-ID}, but do
7892 not do a particularly excellent job of it.  That is, @code{nnmbox} and
7893 @code{nnbabyl} are able to locate articles from any groups, while
7894 @code{nnml} and @code{nnfolder} are only able to locate articles that
7895 have been posted to the current group.  (Anything else would be too time
7896 consuming.)  @code{nnmh} does not support this at all.
7897
7898
7899 @node Alternative Approaches
7900 @section Alternative Approaches
7901
7902 Different people like to read news using different methods.  This being
7903 Gnus, we offer a small selection of minor modes for the summary buffers.
7904
7905 @menu
7906 * Pick and Read::               First mark articles and then read them.
7907 * Binary Groups::               Auto-decode all articles.
7908 @end menu
7909
7910
7911 @node Pick and Read
7912 @subsection Pick and Read
7913 @cindex pick and read
7914
7915 Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased
7916 reading interface.  The user first marks the articles she wants to read
7917 from a summary buffer.  Then she starts reading the articles with just
7918 an article buffer displayed.
7919
7920 @findex gnus-pick-mode
7921 @kindex M-x gnus-pick-mode
7922 Gnus provides a summary buffer minor mode that allows
7923 this---@code{gnus-pick-mode}.  This basically means that a few process
7924 mark commands becode one-keystroke commands to allow easy marking, and
7925 it makes one additional command for switching to the summary buffer
7926 available. 
7927
7928 Here are the available keystrokes when using pick mode:
7929
7930 @table @kbd
7931 @item SPC
7932 Pick the article (@code{gnus-summary-mark-as-processable}). 
7933
7934 @item u
7935 Unpick the article (@code{gnus-summary-unmark-as-processable}). 
7936
7937 @item U
7938 Unpick all articles (@code{gnus-summary-unmark-all-processable}). 
7939
7940 @item t
7941 Pick the thread (@code{gnus-uu-mark-thread}). 
7942
7943 @item T
7944 Unpick the thread (@code{gnus-uu-unmark-thread}). 
7945
7946 @item r
7947 Pick the region (@code{gnus-uu-mark-region}). 
7948
7949 @item R
7950 Unpick the region (@code{gnus-uu-unmark-region}). 
7951
7952 @item e
7953 Pick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
7954
7955 @item E
7956 Unpick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
7957
7958 @item b
7959 Pick the buffer (@code{gnus-uu-mark-buffer}). 
7960
7961 @item B
7962 Unpick the buffer (@code{gnus-uu-unmark-buffer}). 
7963
7964 @item RET
7965 @vindex gnus-pick-display-summary
7966 Start reading the picked articles (@code{gnus-pick-start-reading}).  If
7967 given a prefix, mark all unpicked articles as read first.  If
7968 @code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
7969 will still be visible when you are reading.
7970
7971 @end table
7972
7973 If this sounds like a good idea to you, you could say:
7974
7975 @lisp
7976 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
7977 @end lisp
7978
7979
7980 @node Binary Groups
7981 @subsection Binary Groups
7982 @cindex binary groups
7983
7984 @findex gnus-binary-mode
7985 @kindex M-x gnus-binary-mode
7986 If you spend much time in binary groups, you may grow tired of hitting
7987 @kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
7988 is a minor mode for summary buffers that makes all ordinary Gnus article
7989 selection functions uudecode series of articles and display the result
7990 instead of just displaying the articles the normal way.  
7991
7992 @kindex g (Binary)
7993 @findex gnus-binary-show-article
7994 In fact, the only way to see the actual articles if you have turned this
7995 mode on is the @kbd{g} command (@code{gnus-binary-show-article}). 
7996
7997
7998 @node Tree Display
7999 @section Tree Display
8000 @cindex trees
8001
8002 @vindex gnus-use-trees
8003 If you don't like the normal Gnus summary display, you might try setting
8004 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
8005 additional @dfn{tree buffer}.  You can execute all summary mode commands
8006 in the tree buffer.  
8007
8008 There are a few variables to customize the tree display, of course:
8009
8010 @table @code
8011 @item gnus-tree-mode-hook
8012 A hook called in all tree mode buffers.
8013
8014 @item gnus-tree-mode-line-format
8015 A format string for the mode bar in the tree mode buffers.  The default
8016 is @samp{"Gnus: %%b [%A] %Z"}.  For a list of legal specs, @xref{Summary
8017 Buffer Mode Line}. 
8018
8019 @item gnus-selected-tree-face
8020 Face used for highlighting the selected article in the tree buffer.  The
8021 default is @code{modeline}.
8022
8023 @item gnus-tree-line-format
8024 A format string for the tree nodes.  The name is a bit of a misnomer,
8025 though---it doesn't define a line, but just the node.  The default value
8026 is @samp{"%(%[%3,3n%]%)"}, which displays the first three characters of
8027 the name of the poster.  It is vital that all nodes are of the same
8028 length, so you @emph{must} use @samp{%4,4n}-like specifiers.
8029
8030 Legal specs are:
8031
8032 @table @samp
8033 @item n
8034 The name of the poster.
8035 @item f
8036 The @code{From} header.
8037 @item N
8038 The number of the article.
8039 @item [
8040 The opening bracket.
8041 @item ] 
8042 The closing bracket.
8043 @item s
8044 The subject.
8045 @end table
8046
8047 @xref{Formatting Variables}.
8048
8049 Variables related to the display are:
8050
8051 @table @code
8052 @item gnus-tree-brackets
8053 This is used for differentiating between "real" articles and "sparse"
8054 articles.  The format is @var{((real-open . real-close) (sparse-open
8055 . sparse-close) (dummy-open . dummy-close))}, and the default is
8056 @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}.
8057
8058 @item gnus-tree-parent-child-edges
8059 This is a list that contains the characters used for connecting parent
8060 nodes to their children.  The default is @code{(?- ?\\ ?|)}. 
8061
8062 @end table
8063
8064 @item gnus-tree-minimize-window
8065 If this variable is non-@code{nil}, Gnus will try to keep the tree
8066 buffer as small as possible to allow more room for the other Gnus
8067 windows.  If this variable is a number, the tree buffer will never be
8068 higher than that number.  The default is @code{t}.
8069
8070 @item gnus-generate-tree-function
8071 @findex gnus-generate-horizontal-tree
8072 @findex gnus-generate-vertical-tree
8073 The function that actually generates the thread tree.  Two predefined
8074 functions are available: @code{gnus-generate-horizontal-tree} and
8075 @code{gnus-generate-vertical-tree} (which is the default).
8076
8077 @end table
8078
8079 Here's and example from a horizontal tree buffer:
8080
8081 @example
8082 @{***@}-(***)-[odd]-[Gun]
8083      |     \[Jan]
8084      |     \[odd]-[Eri]
8085      |     \(***)-[Eri]
8086      |           \[odd]-[Paa]
8087      \[Bjo]
8088      \[Gun]
8089      \[Gun]-[Jor]
8090 @end example
8091
8092 Here's the same thread displayed in a vertical tree buffer:
8093
8094 @example
8095 @{***@}
8096   |--------------------------\-----\-----\
8097 (***)                         [Bjo] [Gun] [Gun]
8098   |--\-----\-----\                          |
8099 [odd] [Jan] [odd] (***)                   [Jor]
8100   |           |     |--\
8101 [Gun]       [Eri] [Eri] [odd]
8102                           |
8103                         [Paa]
8104 @end example
8105
8106
8107 @node Mail Group Commands
8108 @section Mail Group Commands
8109 @cindex mail group commands
8110
8111 Some commands only make sense in mail groups.  If these commands are
8112 illegal in the current group, they will raise a hell and let you know.
8113
8114 All these commands (except the expiry and edit commands) use the
8115 process/prefix convention (@pxref{Process/Prefix}).
8116
8117 @table @kbd
8118
8119 @item B e
8120 @kindex B e (Summary)
8121 @findex gnus-summary-expire-articles
8122 Expire all expirable articles in the group
8123 (@code{gnus-summary-expire-articles}).
8124
8125 @item B M-C-e
8126 @kindex B M-C-e (Summary)
8127 @findex gnus-summary-expire-articles-now
8128 Expunge all the expirable articles in the group
8129 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
8130 articles that are eligeble for expiry in the current group will
8131 disappear forever into that big @file{/dev/null} in the sky.
8132
8133 @item B DEL
8134 @kindex B DEL (Summary)
8135 @findex gnus-summary-delete-articles
8136 Delete the mail article.  This is "delete" as in "delete it from your
8137 disk forever and ever, never to return again." Use with caution.
8138 (@code{gnus-summary-delete-article}).
8139
8140 @item B m
8141 @kindex B m (Summary)
8142 @cindex move mail
8143 @findex gnus-summary-move-article
8144 Move the article from one mail group to another
8145 (@code{gnus-summary-move-article}). 
8146
8147 @item B c
8148 @kindex B c (Summary)
8149 @cindex copy mail
8150 @findex gnus-summary-copy-article
8151 Copy the article from one group (mail group or not) to a mail group
8152 (@code{gnus-summary-copy-article}).
8153
8154 @item B C
8155 @kindex B C (Summary)
8156 @cindex crosspost mail
8157 @findex gnus-summary-crosspost-article
8158 Crosspost the current article to some other group
8159 (@code{gnus-summary-crosspost-article}).  This will create a new copy of
8160 the article in the other group, and the Xref headers of the article will
8161 be properly updated.
8162
8163 @item B i
8164 @kindex B i (Summary)
8165 @findex gnus-summary-import-article
8166 Import a random file into the current mail newsgroup
8167 (@code{gnus-summary-import-article}).  You will be prompted for a file
8168 name, a @code{From} header and a @code{Subject} header.
8169
8170 Something similar can be done by just starting to compose a mail
8171 message.  Instead of typing @kbd{C-c C-c} to mail it off, you can type
8172 @kbd{C-c C-p} instead.  This will put the message you have just created
8173 into the current mail group.
8174
8175 @item B r
8176 @kindex B r (Summary)
8177 @findex gnus-summary-respool-article
8178 Respool the mail article (@code{gnus-summary-move-article}).
8179
8180 @item B w
8181 @itemx e
8182 @kindex B w (Summary)
8183 @kindex e (Summary)
8184 @findex gnus-summary-edit-article
8185 @kindex C-c C-c (Article)
8186 Edit the current article (@code{gnus-summary-edit-article}).  To finish
8187 editing and make the changes permanent, type @kbd{C-c C-c}
8188 (@kbd{gnus-summary-edit-article-done}).
8189
8190 @item B q
8191 @kindex B q (Summary)
8192 @findex gnus-summary-respool-query
8193 If you want to respool an article, you might be curious as to what group
8194 the article will end up in before you do the respooling.  This command
8195 will tell you (@code{gnus-summary-fancy-query}). 
8196 @end table
8197
8198 If you move (or copy) articles regularly, you might wish to have Gnus
8199 suggest where to put the articles.  @code{gnus-move-split-methods} is a
8200 variable that uses the same syntax as @code{gnus-split-methods}
8201 (@pxref{Saving Articles}).  You may customize that variable to create
8202 suggestions you find reasonable.
8203
8204
8205 @node Various Summary Stuff
8206 @section Various Summary Stuff
8207
8208 @menu
8209 * Group Information::                 Information oriented commands.
8210 * Searching for Articles::            Multiple article commands.
8211 * Really Various Summary Commands::   Those pesky non-conformant commands.
8212 @end menu
8213
8214 @vindex gnus-summary-generate-hook
8215 @code{gnus-summary-generate-hook} is called as the last thing before
8216 doing the threading and the generation of the summary buffer.  It's
8217 quite convenient for customizing the threading variables based on what
8218 data the newsgroup has.  This hook is called from the summary buffer
8219 after most summary buffer variables has been set.
8220
8221 @vindex gnus-summary-prepare-hook
8222 @code{gnus-summary-prepare-hook} is called after the summary buffer has
8223 been generated.  You might use it to, for instance, highlight lines or
8224 modify the look of the buffer in some other ungodly manner.  I don't
8225 care.
8226
8227 @node Group Information
8228 @subsection Group Information
8229
8230 @table @kbd
8231
8232 @item H f
8233 @kindex H f (Summary)
8234 @findex gnus-summary-fetch-faq
8235 @vindex gnus-group-faq-directory
8236 Try to fetch the FAQ (list of frequently asked questions) for the
8237 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
8238 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
8239 on a remote machine.  This variable can also be a list of directories.
8240 In that case, giving a prefix to this command will allow you to choose
8241 between the various sites.  @code{ange-ftp} probably will be used for
8242 fetching the file.
8243
8244 @item H d
8245 @kindex H d (Summary)
8246 @findex gnus-summary-describe-group
8247 Give a brief description of the current group
8248 (@code{gnus-summary-describe-group}).  If given a prefix, force
8249 rereading the description from the server.
8250
8251 @item H h
8252 @kindex H h (Summary)
8253 @findex gnus-summary-describe-briefly
8254 Give a very brief description of the most important summary keystrokes
8255 (@code{gnus-summary-describe-briefly}). 
8256
8257 @item H i
8258 @kindex H i (Summary)
8259 @findex gnus-info-find-node
8260 Go to the Gnus info node (@code{gnus-info-find-node}).
8261 @end table
8262
8263 @node Searching for Articles
8264 @subsection Searching for Articles
8265
8266 @table @kbd
8267
8268 @item M-s
8269 @kindex M-s (Summary)
8270 @findex gnus-summary-search-article-forward
8271 Search through all subsequent articles for a regexp
8272 (@code{gnus-summary-search-article-forward}). 
8273
8274 @item M-r
8275 @kindex M-r (Summary)
8276 @findex gnus-summary-search-article-backward
8277 Search through all previous articles for a regexp
8278 (@code{gnus-summary-search-article-backward}). 
8279
8280 @item &
8281 @kindex & (Summary)
8282 @findex gnus-summary-execute-command
8283 This command will prompt you for a header field, a regular expression to
8284 match on this field, and a command to be executed if the match is made
8285 (@code{gnus-summary-execute-command}).
8286
8287 @item M-&
8288 @kindex M-& (Summary)
8289 @findex gnus-summary-universal-argument
8290 Perform any operation on all articles that have been marked with
8291 the process mark (@code{gnus-summary-universal-argument}).
8292 @end table
8293
8294 @node Really Various Summary Commands
8295 @subsection Really Various Summary Commands
8296
8297 @table @kbd
8298
8299 @item A D
8300 @kindex A D (Summary)
8301 @findex gnus-summary-enter-digest-group
8302 If the current article is a collection of other articles (for instance,
8303 a digest), you might use this command to enter a group based on the that
8304 article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
8305 guess what article type is currently displayed unless you give a prefix
8306 to this command, which forces a "digest" interpretation.  Basically,
8307 whenever you see a message that is a collection of other messages on
8308 some format, you @kbd{A D} and read these messages in a more convenient
8309 fashion. 
8310
8311 @item C-t
8312 @kindex C-t (Summary)
8313 @findex gnus-summary-toggle-truncation
8314 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
8315
8316 @item =
8317 @kindex = (Summary)
8318 @findex gnus-summary-expand-window
8319 Expand the summary buffer window (@code{gnus-summary-expand-window}).
8320 If given a prefix, force an @code{article} window configuration. 
8321 @end table
8322
8323
8324 @node The Article Buffer
8325 @chapter The Article Buffer
8326 @cindex article buffer
8327
8328 The articles are displayed in the article buffer, of which there is only
8329 one.  All the summary buffers share the same article buffer unless you
8330 tell Gnus otherwise.
8331
8332 @menu
8333 * Hiding Headers::        Deciding what headers should be displayed.
8334 * Using MIME::            Pushing articles through @sc{mime} before reading them.
8335 * Customizing Articles::  Tailoring the look of the articles.
8336 * Article Keymap::        Keystrokes available in the article buffer
8337 * Misc Article::          Other stuff.
8338 @end menu
8339
8340
8341 @node Hiding Headers
8342 @section Hiding Headers
8343 @cindex hiding headers
8344 @cindex deleting headers
8345
8346 The top section of each article is the @dfn{head}.  (The rest is the
8347 @dfn{body}, but you may have guessed that already.)
8348
8349 @vindex gnus-show-all-headers
8350 There is a lot of useful information in the head: the name of the person
8351 who wrote the article, the date it was written and the subject of the
8352 article.  That's well and nice, but there's also lots of information
8353 most people do not want to see---what systems the article has passed
8354 through before reaching you, the @code{Message-ID}, the
8355 @code{References}, etc. ad nauseum---and you'll probably want to get rid
8356 of some of those lines.  If you want to keep all those lines in the
8357 article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
8358
8359 Gnus provides you with two variables for sifting headers:
8360
8361 @table @code
8362
8363 @item gnus-visible-headers
8364 @vindex gnus-visible-headers
8365 If this variable is non-@code{nil}, it should be a regular expression
8366 that says what headers you wish to keep in the article buffer.  All
8367 headers that do not match this variable will be hidden.
8368
8369 For instance, if you only want to see the name of the person who wrote
8370 the article and the subject, you'd say:
8371
8372 @lisp
8373 (setq gnus-visible-headers "^From:\\|^Subject:")
8374 @end lisp
8375
8376 This variable can also be a list of regexps to match headers that are to
8377 remain visible.
8378
8379 @item gnus-ignored-headers
8380 @vindex gnus-ignored-headers
8381 This variable is the reverse of @code{gnus-visible-headers}.  If this
8382 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
8383 should be a regular expression that matches all lines that you want to
8384 hide.  All lines that do not match this variable will remain visible.
8385
8386 For instance, if you just want to get rid of the @code{References} line
8387 and the @code{Xref} line, you might say:
8388
8389 @lisp
8390 (setq gnus-ignored-headers "^References:\\|^Xref:")
8391 @end lisp
8392
8393 This variable can also be a list of regexps to match headers that are to
8394 be removed.
8395
8396 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
8397 variable will have no effect.
8398
8399 @end table
8400
8401 @vindex gnus-sorted-header-list
8402 Gnus can also sort the headers for you.  (It does this by default.)  You
8403 can control the sorting by setting the @code{gnus-sorted-header-list}
8404 variable.  It is a list of regular expressions that says in what order
8405 the headers are to be displayed.
8406
8407 For instance, if you want the name of the author of the article first,
8408 and then the subject, you might say something like:
8409
8410 @lisp
8411 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
8412 @end lisp
8413
8414 Any headers that are to remain visible, but are not listed in this
8415 variable, will be displayed in random order after all the headers that
8416 are listed in this variable.
8417
8418 @findex gnus-article-hide-boring-headers
8419 @vindex gnus-article-display-hook
8420 @vindex gnus-boring-article-headers
8421 You can hide further boring headers by entering
8422 @code{gnus-article-hide-boring-headers} into
8423 @code{gnus-article-display-hook}.  What this function does depends on
8424 the @code{gnus-boring-article-headers} variable.  It's a list, but this
8425 list doesn't actually contain header names.  Instead is lists various
8426 @dfn{boring conditions} that Gnus can check and remove from sight.
8427
8428 These conditions are:
8429 @table @code
8430 @item empty
8431 Remove all empty headers.
8432 @item newsgroups
8433 Remove the @code{Newsgroups} header if it only contains the current group
8434 name. 
8435 @item followup-to
8436 Remove the @code{Followup-To} header if it is identical to the
8437 @code{Newsgroups} header.
8438 @item reply-to
8439 Remove the @code{Reply-To} header if it lists the same address as the
8440 @code{From} header.
8441 @item date
8442 Remove the @code{Date} header if the article is less than three days
8443 old. 
8444 @end table
8445
8446 To include the four first elements, you could say something like;
8447
8448 @lisp
8449 (setq gnus-boring-article-headers 
8450       '(empty newsgroups followup-to reply-to))
8451 @end lisp
8452
8453 This is also the default value for this variable.
8454
8455
8456 @node Using MIME
8457 @section Using @sc{mime}
8458 @cindex @sc{mime}
8459
8460 Mime is a standard for waving your hands through the air, aimlessly,
8461 while people stand around yawning.
8462
8463 @sc{mime}, however, is a standard for encoding your articles, aimlessly,
8464 while all newsreaders die of fear.
8465
8466 @sc{mime} may specify what character set the article uses, the encoding
8467 of the characters, and it also makes it possible to embed pictures and
8468 other naughty stuff in innocent-looking articles.
8469
8470 @vindex gnus-show-mime
8471 @vindex gnus-show-mime-method
8472 @vindex gnus-strict-mime
8473 Gnus handles @sc{mime} by shoving the articles through
8474 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
8475 default.  Set @code{gnus-show-mime} to @code{t} if you want to use
8476 @sc{mime} all the time.  However, if @code{gnus-strict-mime} is
8477 non-@code{nil}, the @sc{mime} method will only be used if there are
8478 @sc{mime} headers in the article.
8479
8480 It might be best to just use the toggling functions from the summary
8481 buffer to avoid getting nasty surprises. (For instance, you enter the
8482 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
8483 decoded the sound file in the article and some horrible sing-a-long song
8484 comes streaming out out your speakers, and you can't find the volume
8485 button, because there isn't one, and people are starting to look at you,
8486 and you try to stop the program, but you can't, and you can't find the
8487 program to control the volume, and everybody else in the room suddenly
8488 decides to look at you disdainfully, and you'll feel rather stupid.)
8489
8490 Any similarity to real events and people is purely coincidental.  Ahem.
8491
8492
8493 @node Customizing Articles
8494 @section Customizing Articles
8495 @cindex article customization
8496
8497 @vindex gnus-article-display-hook
8498 The @code{gnus-article-display-hook} is called after the article has
8499 been inserted into the article buffer.  It is meant to handle all
8500 treatment of the article before it is displayed. 
8501
8502 By default it contains @code{gnus-article-hide-headers},
8503 @code{gnus-article-treat-overstrike}, and
8504 @code{gnus-article-maybe-highlight}, but there are thousands, nay
8505 millions, of functions you can put in this hook.  For an overview of
8506 functions @xref{Article Highlighting}, @xref{Article Hiding},
8507 @xref{Article Washing}, @xref{Article Buttons} and @xref{Article Date}. 
8508
8509 You can, of course, write your own functions.  The functions are called
8510 from the article buffer, and you can do anything you like, pretty much.
8511 There is no information that you have to keep in the buffer---you can
8512 change everything.  However, you shouldn't delete any headers.  Instead
8513 make them invisible if you want to make them go away.
8514
8515
8516 @node Article Keymap
8517 @section Article Keymap
8518
8519 Most of the keystrokes in the summary buffer can also be used in the
8520 article buffer.  They should behave as if you typed them in the summary
8521 buffer, which means that you don't actually have to have a summary
8522 buffer displayed while reading.  You can do it all from the article
8523 buffer.
8524
8525 A few additional keystrokes are available:
8526
8527 @table @kbd
8528
8529 @item SPACE
8530 @kindex SPACE (Article)
8531 @findex gnus-article-next-page
8532 Scroll forwards one page (@code{gnus-article-next-page}).
8533
8534 @item DEL
8535 @kindex DEL (Article)
8536 @findex gnus-article-prev-page
8537 Scroll backwards one page (@code{gnus-article-prev-page}).
8538
8539 @item C-c ^
8540 @kindex C-c ^ (Article)
8541 @findex gnus-article-refer-article
8542 If point is in the neighborhood of a @code{Message-ID} and you press
8543 @kbd{r}, Gnus will try to get that article from the server
8544 (@code{gnus-article-refer-article}).
8545
8546 @item C-c C-m
8547 @kindex C-c C-m (Article)
8548 @findex gnus-article-mail
8549 Send a reply to the address near point (@code{gnus-article-mail}).  If
8550 given a prefix, include the mail.
8551
8552 @item s
8553 @kindex s (Article)
8554 @findex gnus-article-show-summary
8555 Reconfigure the buffers so that the summary buffer becomes visible
8556 (@code{gnus-article-show-summary}).
8557
8558 @item ?
8559 @kindex ? (Article)
8560 @findex gnus-article-describe-briefly
8561 Give a very brief description of the available keystrokes
8562 (@code{gnus-article-describe-briefly}). 
8563
8564 @item TAB
8565 @kindex TAB (Article)
8566 @findex gnus-article-next-button
8567 Go to the next button, if any (@code{gnus-article-next-button}.  This
8568 only makes sense if you have buttonizing turned on.
8569
8570 @item M-TAB
8571 @kindex M-TAB (Article)
8572 @findex gnus-article-prev-button
8573 Go to the previous button, if any (@code{gnus-article-prev-button}.  
8574
8575 @end table
8576
8577
8578 @node Misc Article
8579 @section Misc Article
8580
8581 @table @code
8582
8583 @item gnus-single-article-buffer
8584 @vindex gnus-single-article-buffer
8585 If non-@code{nil}, use the same article buffer for all the groups.
8586 (This is the default.)  If @code{nil}, each group will have its own
8587 article buffer.
8588
8589 @vindex gnus-article-prepare-hook
8590
8591 @item gnus-article-prepare-hook
8592 This hook is called right after the article has been inserted into the
8593 article buffer.  It is mainly intended for functions that do something
8594 depending on the contents; it should probably not be used for changing
8595 the contents of the article buffer.
8596 @vindex gnus-article-display-hook
8597
8598 @item gnus-article-display-hook
8599 This hook is called as the last thing when displaying an article, and is
8600 intended for modifying the contents of the buffer, doing highlights,
8601 hiding headers, and the like.
8602 @vindex gnus-article-mode-line-format
8603
8604 @item gnus-article-mode-line-format
8605 This variable is a format string along the same lines as
8606 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
8607 format specifications as that variable.
8608 @vindex gnus-break-pages
8609
8610 @item gnus-break-pages
8611 Controls whether @dfn{page breaking} is to take place.  If this variable
8612 is non-@code{nil}, the articles will be divided into pages whenever a
8613 page delimiter appears in the article.  If this variable is @code{nil},
8614 paging will not be done.
8615
8616 @item gnus-page-delimiter
8617 @vindex gnus-page-delimiter
8618 This is the delimiter mentioned above.  By default, it is @samp{^L}
8619 (form linefeed).
8620 @end table
8621
8622 @node The Server Buffer
8623 @chapter The Server Buffer
8624
8625 Traditionally, a @dfn{server} is a machine or a piece of software that
8626 one connects to, and then requests information from.  Gnus does not
8627 connect directly to any real servers, but does all transactions through
8628 one backend or other.  But that's just putting one layer more between
8629 the actual media and Gnus, so we might just as well say that each
8630 backend represents a virtual server.
8631
8632 For instance, the @code{nntp} backend may be used to connect to several
8633 different actual @sc{nntp} servers, or, perhaps, to many different ports
8634 on the same actual @sc{nntp} server.  You tell Gnus which backend to
8635 use, and what parameters to set by specifying a @dfn{select method}.
8636
8637 These select methods specifications can sometimes become quite
8638 complicated---say, for instance, that you want to read from the
8639 @sc{nntp} server @samp{news.funet.fi} on port number @samp{13}, which
8640 hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
8641 Anyways, if you had to specify that for each group that used this
8642 server, that would be too much work, so Gnus offers a way of putting
8643 names to methods, which is what you do in the server buffer.
8644
8645 To enter the server buffer, user the @kbd{^}
8646 (@code{gnus-group-enter-server-mode}) command in the group buffer.
8647
8648 @menu
8649 * Server Buffer Format::   You can customize the look of this buffer.
8650 * Server Commands::        Commands to manipulate servers.
8651 * Example Methods::        Examples server specifications.
8652 * Servers & Methods::      You can use server names as select methods.
8653 * Unavailable Servers::    Some servers you try to contact may be down.
8654 @end menu
8655
8656 @node Server Buffer Format
8657 @section Server Buffer Format
8658 @cindex server buffer format
8659
8660 @vindex gnus-server-line-format
8661 You can change the look of the server buffer lines by changing the
8662 @code{gnus-server-line-format} variable.  This is a @code{format}-like
8663 variable, with some simple extensions:
8664
8665 @table @samp
8666
8667 @item h 
8668 How the news is fetched---the backend name.
8669
8670 @item n
8671 The name of this server.
8672
8673 @item w
8674 Where the news is to be fetched from---the address.
8675 @end table
8676
8677 @node Server Commands
8678 @section Server Commands
8679 @cindex server commands
8680
8681 @table @kbd
8682
8683 @item SPC
8684 Browse the current server (@code{gnus-server-read-server}).
8685
8686 @item q
8687 Return to the group buffer (@code{gnus-server-exit}).
8688
8689 @item l
8690 List all servers (@code{gnus-server-list-servers}).
8691
8692 @item k
8693 Kill the current server (@code{gnus-server-kill-server}).
8694
8695 @item y
8696 Yank the previously killed server (@code{gnus-server-yank-server}).
8697
8698 @item c
8699 Copy the current server (@code{gnus-server-copy-server}).
8700
8701 @item a
8702 Add a new server (@code{gnus-server-add-server}).
8703
8704 @item e
8705 Edit a server (@code{gnus-server-edit-server}).
8706 @end table
8707
8708 @node Example Methods
8709 @section Example Methods
8710
8711 Most select methods are pretty simple and self-explanatory: 
8712
8713 @lisp
8714 (nntp "news.funet.fi")
8715 @end lisp
8716
8717 Reading directly from the spool is even simpler:
8718
8719 @lisp
8720 (nnspool "")
8721 @end lisp
8722
8723 As you can see, the first element in a select method is the name of the
8724 backend, and the second is the @dfn{address}, or @dfn{name}, if you
8725 will. 
8726
8727 After these two elements, there may be a random number of @var{(variable
8728 form)} pairs.
8729
8730 To go back to the first example---imagine that you want to read from
8731 port @code{15} from that machine.  This is what the select method should
8732 look like then:
8733
8734 @lisp
8735 (nntp "news.funet.fi" (nntp-port-number 15))
8736 @end lisp
8737
8738 You should read the documentation to each backend to find out what
8739 variables are relevant, but here's an @code{nnmh} example. 
8740
8741 @code{nnmh} is a mail backend that reads a spool-like structure.  Say
8742 you have two structures that you wish to access: One is your private
8743 mail spool, and the other is a public one.  Here's the possible spec for
8744 you private mail:
8745
8746 @lisp
8747 (nnmh "private" (nnmh-directory "~/private/mail/"))
8748 @end lisp
8749
8750 (This server is then called @samp{private}, but you may have guessed
8751 that. 
8752
8753 Here's the method for the public spool:
8754
8755 @lisp
8756 (nnmh "public" 
8757       (nnmh-directory "/usr/information/spool/") 
8758       (nnmh-get-new-mail nil))
8759 @end lisp
8760
8761 @node Servers & Methods
8762 @section Servers & Methods
8763
8764 Wherever you would normally use a select method
8765 (eg. @code{gnus-secondary-select-method}, in the group select method,
8766 when browsing a foreign server) you can use a virtual server name
8767 instead.  This could potentially save lots of typing.  And it's nice all
8768 over.
8769
8770
8771 @node Unavailable Servers
8772 @section Unavailable Servers
8773
8774 If a server seems to be unreachable, Gnus will mark that server as
8775 @code{denied}.  That means that any subsequent attempt to make contact
8776 with that server will just be ignored.  "It can't be opened," Gnus will
8777 tell you, without making the least effort to see whether that is
8778 actually the case or not.  
8779
8780 That might seem quite naughty, but it does make sense most of the time.
8781 Let's say you have 10 groups subscribed to the server
8782 @samp{nepholococcygia.com}.  This server is located somewhere quite far
8783 away from you, the machine is quite, so it takes 1 minute just to find
8784 out that it refuses connection from you today.  If Gnus were to attempt
8785 to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
8786 that.  Once it has gotten a single "connection refused", it will regard
8787 that server as "down".
8788
8789 So, what happens if the machine was only feeling unwell temporarily?
8790 How do you test to see whether the machine has come up again?
8791
8792 You jump to the server buffer (@pxref{The Server Buffer}) and poke ut
8793 with the following commands:
8794
8795 @table @kbd
8796
8797 @item O
8798 @kindex O (Server)
8799 @findex gnus-server-open-server
8800 Try to establish connection to the server on the current line
8801 (@code{gnus-server-open-server}).
8802
8803 @item C
8804 @kindex C (Server)
8805 @findex gnus-server-close-server
8806 Close the connection (if any) to the server
8807 (@code{gnus-server-close-server}).
8808
8809 @item D
8810 @kindex D (Server)
8811 @findex gnus-server-deny-server
8812 Mark the current server as unreachable
8813 (@code{gnus-server-deny-server}). 
8814
8815 @item R
8816 @kindex R (Server)
8817 @findex gnus-server-remove-denials
8818 Remove all marks to whether Gnus was denied connection from all servers
8819 (@code{gnus-server-remove-denials}). 
8820
8821 @end table
8822
8823
8824 @node Scoring
8825 @chapter Scoring
8826 @cindex scoring
8827
8828 Other people use @dfn{kill files}, but we here at Gnus Towers like
8829 scoring better than killing, so we'd rather switch than fight.  They do
8830 something completely different as well, so sit up straight and pay
8831 attention!
8832
8833 @vindex gnus-summary-mark-below
8834 All articles have a default score (@code{gnus-summary-default-score}),
8835 which is 0 by default.  This score may be raised or lowered either
8836 interactively or by score files.  Articles that have a score lower than
8837 @code{gnus-summary-mark-below} are marked as read.
8838
8839 Gnus will read any @dfn{score files} that apply to the current group
8840 before generating the summary buffer.
8841
8842 There are several commands in the summary buffer that insert score
8843 entries based on the current article.  You can, for instance, ask Gnus to
8844 lower or increase the score of all articles with a certain subject.
8845
8846 There are two sorts of scoring entries: Permanent and temporary.
8847 Temporary score entries are self-expiring entries.  Any entries that are
8848 temporary and have not been used for, say, a week, will be removed
8849 silently to help keep the sizes of the score files down.
8850
8851 @menu 
8852 * Summary Score Commands::   Adding score entries for the current group.
8853 * Group Score Commands::     General score commands.
8854 * Score Variables::          Customize your scoring.  (My, what terminology).
8855 * Score File Format::        What a score file may contain.
8856 * Score File Editing::       You can edit score files by hand as well.
8857 * Adaptive Scoring::         Big Sister Gnus *knows* what you read.
8858 * Followups To Yourself::    Having Gnus notice when people answer you.
8859 * Scoring Tips::             How to score effectively.
8860 * Reverse Scoring::          That problem child of old is not problem.
8861 * Global Score Files::       Earth-spanning, ear-splitting score files.
8862 * Kill Files::               They are still here, but they can be ignored.
8863 @end menu
8864
8865 @node Summary Score Commands
8866 @section Summary Score Commands
8867 @cindex score commands
8868
8869 The score commands that alter score entries do not actually modify real
8870 score files.  That would be too inefficient.  Gnus maintains a cache of
8871 previously loaded score files, one of which is considered the
8872 @dfn{current score file alist}.  The score commands simply insert
8873 entries into this list, and upon group exit, this list is saved.
8874
8875 The current score file is by default the group's local score file, even
8876 if no such score file actually exists.  To insert score commands into
8877 some other score file (eg. @file{all.SCORE}), you must first make this
8878 score file the current one.
8879
8880 General score commands that don't actually change the score file:
8881
8882 @table @kbd
8883
8884 @item V s
8885 @kindex V s (Summary)
8886 @findex gnus-summary-set-score
8887 Set the score of the current article (@code{gnus-summary-set-score}).  
8888
8889 @item V S
8890 @kindex V S (Summary)
8891 @findex gnus-summary-current-score
8892 Display the score of the current article
8893 (@code{gnus-summary-current-score}).   
8894
8895 @item V t
8896 @kindex V t (Summary)
8897 @findex gnus-score-find-trace
8898 Display all score rules that have been used on the current article
8899 (@code{gnus-score-find-trace}).   
8900
8901 @item V R
8902 @item V R (Summary)
8903 @findex gnus-summary-rescore
8904 Run the current summary through the scoring process
8905 (@code{gnus-summary-rescore}).  This might be useful if you're playing
8906 around with your score files behind Gnus' back and want to see the
8907 effect you're having.
8908
8909 @item V a
8910 @kindex V a (Summary)
8911 @findex gnus-summary-score-entry
8912 Add a new score entry, and allow specifying all elements 
8913 (@code{gnus-summary-score-entry}).
8914
8915 @item V c
8916 @kindex V c (Summary)
8917 @findex gnus-score-change-score-file
8918 Make a different score file the current
8919 (@code{gnus-score-change-score-file}). 
8920
8921 @item V e
8922 @kindex V e (Summary)
8923 @findex gnus-score-edit-alist
8924 Edit the current score file (@code{gnus-score-edit-alist}).  You will be
8925 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
8926 Editing}).
8927
8928 @item V f
8929 @kindex V f (Summary)
8930 @findex gnus-score-edit-file
8931 Edit a score file and make this score file the current one
8932 (@code{gnus-score-edit-file}).
8933
8934 @item V C
8935 @kindex V C (Summary)
8936 @findex gnus-score-customize
8937 Customize a score file in a visually pleasing manner
8938 (@code{gnus-score-customize}). 
8939
8940 @item I C-i
8941 @kindex I C-i (Summary)
8942 @findex gnus-summary-raise-score
8943 Increase the score of the current article
8944 (@code{gnus-summary-raise-score}).
8945
8946 @item L C-l
8947 @kindex L C-l (Summary)
8948 @findex gnus-summary-lower-score
8949 Lower the score of the current article
8950 (@code{gnus-summary-lower-score}). 
8951 @end table
8952
8953 The rest of these commands modify the local score file.
8954
8955 @table @kbd
8956
8957 @item V m
8958 @kindex V m (Summary)
8959 @findex gnus-score-set-mark-below
8960 Prompt for a score, and mark all articles with a score below this as
8961 read (@code{gnus-score-set-mark-below}).
8962
8963 @item V E
8964 @kindex V E (Summary)
8965 @findex gnus-score-set-expunge-below
8966 Expunge all articles with a score below the default score (or the
8967 numeric prefix) (@code{gnus-score-set-expunge-below}).
8968 @end table
8969
8970 The keystrokes for actually making score entries follow a very regular
8971 pattern, so there's no need to list all the commands.  (Hundreds of
8972 them.)  
8973
8974 @enumerate
8975 @item
8976 The first key is either @kbd{I} (upper case i) for increasing the score
8977 or @kbd{L} for lowering the score. 
8978 @item
8979 The second key says what header you want to score on.  The following
8980 keys are available:
8981 @table @kbd
8982
8983 @item a
8984 Score on the author name.
8985
8986 @item s
8987 Score on the subject line.
8988
8989 @item x
8990 Score on the Xref line---i.e., the cross-posting line.
8991
8992 @item t
8993 Score on thread---the References line.
8994
8995 @item d
8996 Score on the date.
8997
8998 @item l
8999 Score on the number of lines.
9000
9001 @item i
9002 Score on the Message-ID.
9003
9004 @item f
9005 Score on followups.
9006
9007 @item b
9008 Score on the body.
9009
9010 @item h
9011 Score on the head.
9012 @end table
9013
9014 @item
9015 The third key is the match type.  Which match types are legal depends on
9016 what headers you are scoring on.
9017
9018 @table @code
9019
9020 @item strings 
9021
9022 @table @kbd
9023
9024 @item e
9025 Exact matching.
9026
9027 @item s
9028 Substring matching.
9029
9030 @item f
9031 Fuzzy matching.
9032
9033 @item r
9034 Regexp matching
9035 @end table
9036
9037 @item date
9038 @table @kbd
9039
9040 @item b
9041 Before date.
9042
9043 @item a
9044 At date.
9045
9046 @item n
9047 This date.
9048 @end table
9049
9050 @item number
9051 @table @kbd
9052
9053 @item <
9054 Less than number.
9055
9056 @item =
9057 Equal to number.
9058
9059 @item >
9060 Greater than number.
9061 @end table
9062 @end table
9063
9064 @item 
9065 The fourth and final key says whether this is a temporary (i.e., expiring)
9066 score entry, or a permanent (i.e., non-expiring) score entry, or whether
9067 it is to be done immediately, without adding to the score file.
9068 @table @kbd
9069
9070 @item t
9071 Temporary score entry.
9072
9073 @item p
9074 Permanent score entry.
9075
9076 @item i
9077 Immediately scoring.
9078 @end table
9079
9080 @end enumerate
9081
9082 So, let's say you want to increase the score on the current author with
9083 exact matching permanently: @kbd{I a e p}.  If you want to lower the
9084 score based on the subject line, using substring matching, and make a
9085 temporary score entry: @kbd{L s s t}.  Pretty easy.
9086
9087 To make things a bit more complicated, there are shortcuts.  If you use
9088 a capital letter on either the second or third keys, Gnus will use
9089 defaults for the remaining one or two keystrokes.  The defaults are
9090 "substring" and "temporary".  So @kbd{I A} is the same as @kbd{I a s t},
9091 and @kbd{I a R} is the same as @kbd{I a r t}.
9092
9093 @vindex gnus-score-mimic-keymap
9094 The @code{gnus-score-mimic-keymap} says whether these commands will
9095 pretend they are keymaps or not.
9096
9097
9098 @node Group Score Commands
9099 @section Group Score Commands
9100 @cindex group score commands
9101
9102 There aren't many of these as yet, I'm afraid.
9103
9104 @table @kbd
9105
9106 @item W f
9107 @kindex W f (Group)
9108 @findex gnus-score-flush-cache
9109 Gnus maintains a cache of score alists to avoid having to reload them
9110 all the time.  This command will flush the cache
9111 (@code{gnus-score-flush-cache}). 
9112
9113 @end table
9114
9115
9116 @node Score Variables
9117 @section Score Variables
9118 @cindex score variables
9119
9120 @table @code
9121
9122 @item gnus-use-scoring
9123 @vindex gnus-use-scoring
9124 If @code{nil}, Gnus will not check for score files, and will not, in
9125 general, do any score-related work.  This is @code{t} by default.
9126
9127 @item gnus-kill-killed
9128 @vindex gnus-kill-killed
9129 If this variable is @code{nil}, Gnus will never apply score files to
9130 articles that have already been through the kill process.  While this
9131 may save you lots of time, it also means that if you apply a kill file
9132 to a group, and then change the kill file and want to run it over you
9133 group again to kill more articles, it won't work.  You have to set this
9134 variable to @code{t} to do that.  (It is @code{t} by default.)
9135
9136 @item gnus-kill-files-directory
9137 @vindex gnus-kill-files-directory
9138 All kill and score files will be stored in this directory, which is
9139 initialized from the @samp{SAVEDIR} environment variable by default.
9140 This is @file{~/News/} by default.
9141
9142 @item gnus-score-file-suffix
9143 @vindex gnus-score-file-suffix
9144 Suffix to add to the group name to arrive at the score file name
9145 (@samp{SCORE} by default.)
9146
9147 @item gnus-score-uncacheable-files
9148 @vindex gnus-score-uncacheable-files
9149 @cindex score cache
9150 All score files are normally cached to avoid excessive re-loading of
9151 score files.  However, if this might make you Emacs grow big and
9152 bloated, so this regexp can be used to weed out score files that are
9153 unlikely to be needed again.  It would be a bad idea to deny caching of
9154 @file{all.SCORE}, while it might be a good idea to not cache
9155 @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
9156 variable is @samp{"ADAPT$"} by default, so no adaptive score files will
9157 be cached.
9158
9159 @item gnus-save-score
9160 @vindex gnus-save-score
9161 If you have really complicated score files, and do lots of batch
9162 scoring, then you might set this variable to @code{t}.  This will make
9163 Gnus save the scores into the @file{.newsrc.eld} file.
9164
9165 @item gnus-save-score
9166 @vindex gnus-save-score
9167 If you have really complicated score files, and do lots of batch
9168 scoring, then you might set this variable to @code{t}.  This will make
9169 Gnus save the scores into the @file{.newsrc.eld} file.
9170
9171 @item gnus-score-interactive-default-score
9172 @vindex gnus-score-interactive-default-score
9173 Score used by all the interactive raise/lower commands to raise/lower
9174 score with.  Default is 1000, which may seem excessive, but this is to
9175 ensure that the adaptive scoring scheme gets enough room to play with.
9176 We don't want the small changes from the adaptive scoring to overwrite
9177 manually entered data.
9178
9179 @item gnus-summary-default-score
9180 @vindex gnus-summary-default-score
9181 Default score of an article, which is 0 by default.
9182
9183 @item gnus-score-over-mark
9184 @vindex gnus-score-over-mark
9185 Mark (in the third column) used for articles with a score over the
9186 default.  Default is @samp{+}.
9187
9188 @item gnus-score-below-mark
9189 @vindex gnus-score-below-mark
9190 Mark (in the third column) used for articles with a score below the
9191 default.  Default is @samp{-}.
9192
9193 @item gnus-score-find-score-files-function
9194 @vindex gnus-score-find-score-files-function
9195 Function used to find score files for the current group.  This function
9196 is called with the name of the group as the argument. 
9197
9198 Predefined functions available are:
9199 @table @code
9200
9201 @item gnus-score-find-single
9202 @findex gnus-score-find-single
9203 Only apply the group's own score file.
9204
9205 @item gnus-score-find-bnews
9206 @findex gnus-score-find-bnews
9207 Apply all score files that match, using bnews syntax.  This is the
9208 default.  For instance, if the current group is @samp{gnu.emacs.gnus},
9209 @samp{all.emacs.all.SCORE}, @samp{not.alt.all.SCORE} and
9210 @samp{gnu.all.SCORE} would all apply.  In short, the instances of
9211 @samp{all} in the score file names are translated into @samp{.*}, and
9212 then a regexp match is done.
9213
9214 This means that if you have some score entries that you want to apply to
9215 all groups, then you put those entries in the @file{all.SCORE} file. 
9216
9217 If @code{gnus-use-long-file-name} is non-@code{nil}, this won't work
9218 very will.  It will find stuff like @file{gnu/all/SCORE}, but will not
9219 find files like @file{not/gnu/all/SCORE}. 
9220
9221 @item gnus-score-find-hierarchical
9222 @findex gnus-score-find-hierarchical
9223 Apply all score files from all the parent groups.  This means that you
9224 can't have score files like @file{all.SCORE} or @file{all.emacs.SCORE},
9225 but you can have @file{SCORE},  @file{comp.SCORE} and
9226 @file{comp.emacs.SCORE}. 
9227
9228 @end table
9229 This variable can also be a list of functions.  In that case, all these
9230 functions will be called, and all the returned lists of score files will
9231 be applied.  These functions can also return lists of score alists
9232 directly.  In that case, the functions that return these non-file score
9233 alists should probably be placed before the "real" score file functions,
9234 to ensure that the last score file returned is the local score file.
9235 Phu. 
9236
9237 @item gnus-score-expiry-days
9238 @vindex gnus-score-expiry-days
9239 This variable says how many days should pass before an unused score file
9240 entry is expired.  If this variable is @code{nil}, no score file entries
9241 are expired.  It's 7 by default.
9242
9243 @item gnus-update-score-entry-dates
9244 @vindex gnus-update-score-entry-dates
9245 If this variable is non-@code{nil}, matching score entries will have
9246 their dates updated.  (This is how Gnus controls expiry---all
9247 non-matching entries will become too old while matching entries will
9248 stay fresh and young.)  However, if you set this variable to @code{nil},
9249 even matching entries will grow old and will have to face that oh-so
9250 grim reaper.  
9251
9252 @end table
9253
9254
9255 @node Score File Format
9256 @section Score File Format
9257 @cindex score file format
9258
9259 A score file is an @code{emacs-lisp} file that normally contains just a
9260 single form.  Casual users are not expected to edit these files;
9261 everything can be changed from the summary buffer.
9262
9263 Anyway, if you'd like to dig into it yourself, here's an example:
9264
9265 @lisp
9266 (("from"
9267   ("Lars Ingebrigtsen" -10000)
9268   ("Per Abrahamsen")
9269   ("larsi\\|lmi" -50000 nil R))
9270  ("subject"
9271   ("Ding is Badd" nil 728373))
9272  ("xref"
9273   ("alt.politics" -1000 728372 s))
9274  ("lines"
9275   (2 -100 nil <))
9276  (mark 0)
9277  (expunge -1000)
9278  (mark-and-expunge -10)
9279  (read-only nil)
9280  (orphan -10)
9281  (adapt t)
9282  (files "/hom/larsi/News/gnu.SCORE")
9283  (exclude-files "all.SCORE")
9284  (local (gnus-newsgroup-auto-expire t)
9285         (gnus-summary-make-false-root 'empty))
9286  (eval (ding)))
9287 @end lisp
9288
9289 This example demonstrates absolutely everything about a score file. 
9290
9291 Even though this looks much like lisp code, nothing here is actually
9292 @code{eval}ed.  The lisp reader is used to read this form, though, so it
9293 has to be legal syntactically, if not semantically.
9294
9295 Six keys are supported by this alist:
9296
9297 @table @code
9298
9299 @item STRING
9300 If the key is a string, it is the name of the header to perform the
9301 match on.  Scoring can only be performed on these eight headers:
9302 @samp{From}, @samp{Subject}, @samp{References}, @samp{Message-ID},
9303 @samp{Xref}, @samp{Lines}, @samp{Chars} and @samp{Date}.  In addition to
9304 these headers, there are three strings to tell Gnus to fetch the entire
9305 article and do the match on larger parts of the article: @samp{Body}
9306 will perform the match on the body of the article, @samp{Head} will
9307 perform the match on the head of the article, and @samp{All} will
9308 perform the match on the entire article.  Note that using any of these
9309 last three keys will slow down group entry @emph{considerably}.  The
9310 final "header" you can score on is @samp{Followup}.  These score entries
9311 will result in new score entries being added for all follow-ups to
9312 articles that matches these score entries.
9313
9314 Following this key is a random number of score entries, where each score
9315 entry has one to four elements.
9316 @enumerate
9317
9318 @item 
9319 The first element is the @dfn{match element}.  On most headers this will
9320 be a string, but on the Lines and Chars headers, this must be an
9321 integer. 
9322
9323 @item 
9324 If the second element is present, it should be a number---the @dfn{score
9325 element}.  This number should be an integer in the neginf to posinf
9326 interval.  This number is added to the score of the article if the match
9327 is successful.  If this element is not present, the
9328 @code{gnus-score-interactive-default-score} number will be used
9329 instead.  This is 1000 by default.
9330
9331 @item 
9332 If the third element is present, it should be a number---the @dfn{date
9333 element}.  This date says when the last time this score entry matched,
9334 which provides a mechanism for expiring the score entries.  It this
9335 element is not present, the score entry is permanent.  The date is
9336 represented by the number of days since December 31, 1 ce.
9337
9338 @item 
9339 If the fourth element is present, it should be a symbol---the @dfn{type
9340 element}.  This element specifies what function should be used to see
9341 whether this score entry matches the article.  What match types that can
9342 be used depends on what header you wish to perform the match on.
9343 @table @dfn
9344
9345 @item From, Subject, References, Xref, Message-ID
9346 For most header types, there are the @code{r} and @code{R} (regexp) as
9347 well as @code{s} and @code{S} (substring) types and @code{e} and
9348 @code{E} (exact match) types.  If this element is not present, Gnus will
9349 assume that substring matching should be used.  @code{R} and @code{S}
9350 differ from the other two in that the matches will be done in a
9351 case-sensitive manner.  All these one-letter types are really just
9352 abbreviations for the @code{regexp}, @code{string} and @code{exact}
9353 types, which you can use instead, if you feel like.
9354
9355 @item Lines, Chars
9356 These two headers use different match types: @code{<}, @code{>},
9357 @code{=}, @code{>=} and @code{<=}.
9358
9359 @item Date
9360 For the Date header we have three match types: @code{before}, @code{at}
9361 and @code{after}.  I can't really imagine this ever being useful, but,
9362 like, it would feel kinda silly not to provide this function.  Just in
9363 case.  You never know.  Better safe than sorry.  Once burnt, twice shy.
9364 Don't judge a book by its cover.  Never not have sex on a first date.
9365
9366 @item Head, Body, All
9367 These three match keys use the same match types as the @code{From} (etc)
9368 header uses.
9369
9370 @item Followup
9371 This match key will add a score entry on all articles that followup to
9372 some author.  Uses the same match types as the @code{From} header uses.
9373
9374 @item Thread
9375 This match key will add a ascore entry on all articles that are part of
9376 a thread.  Uses the same match types as the @code{References} header
9377 uses.
9378 @end table
9379 @end enumerate
9380
9381 @item mark
9382 The value of this entry should be a number.  Any articles with a score
9383 lower than this number will be marked as read.
9384
9385 @item expunge
9386 The value of this entry should be a number.  Any articles with a score
9387 lower than this number will be removed from the summary buffer.
9388
9389 @item mark-and-expunge
9390 The value of this entry should be a number.  Any articles with a score
9391 lower than this number will be marked as read and removed from the
9392 summary buffer.
9393
9394 @item thread-mark-and-expunge
9395 The value of this entry should be a number.  All articles that belong to
9396 a thread that has a total score below this number will be marked as read
9397 and removed from the summary buffer.  @code{gnus-thread-score-function}
9398 says how to compute the total score for a thread.
9399
9400 @item files
9401 The value of this entry should be any number of file names.  These files
9402 are assumed to be score files as well, and will be loaded the same way
9403 this one was.
9404
9405 @item exclude-files
9406 The clue of this entry should be any number of files.  This files will
9407 not be loaded, even though they would normally be so, for some reason or
9408 other. 
9409
9410 @item eval
9411 The value of this entry will be @code{eval}el.  This element will be
9412 ignored when handling global score files. 
9413
9414 @item read-only
9415 Read-only score files will not be updated or saved.  Global score files
9416 should feature this atom (@pxref{Global Score Files}).
9417
9418 @item orphan
9419 The value of this entry should be a number.  Articles that do not have
9420 parents will get this number added to their scores.
9421
9422 @item adapt
9423 This entry controls the adaptive scoring.  If it is @code{t}, the
9424 default adaptive scoring rules will be used.  If it is @code{ignore}, no
9425 adaptive scoring will be performed on this group.  If it is a list, this
9426 list will be used as the adaptive scoring rules.  If it isn't present,
9427 or is something other than @code{t} or @code{ignore}, the default
9428 adaptive scoring rules will be used.  If you want to use adaptive
9429 scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
9430 @code{t}, and insert an @code{(adapt ignore)} in the groups where you do
9431 not want adaptive scoring.  If you only want adaptive scoring in a few
9432 groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
9433 insert @code{(adapt t)} in the score files of the groups where you want
9434 it. 
9435
9436 @item adapt-file
9437 All adaptive score entries will go to the file named by this entry.  It
9438 will also be applied when entering the group.  This atom might be handy
9439 if you want to adapt on several groups at once, using the same adaptive
9440 file for a number of groups.
9441
9442 @item local
9443 @cindex local variables
9444 The value of this entry should be a list of @code{(VAR VALUE)} pairs.
9445 Each @var{var} will be made buffer-local to the current summary buffer,
9446 and set to the value specified.  This is a convenient, if somewhat
9447 strange, way of setting variables in some groups if you don't like hooks
9448 much.
9449 @end table
9450
9451 @node Score File Editing
9452 @section Score File Editing
9453
9454 You normally enter all scoring commands from the summary buffer, but you
9455 might feel the urge to edit them by hand as well, so we've supplied you
9456 with a mode for that.  
9457
9458 It's simply a slightly customized @code{emacs-lisp} mode, with these
9459 additional commands:
9460
9461 @table @kbd
9462
9463 @item C-c C-c
9464 @kindex C-c C-c (Score)
9465 @findex gnus-score-edit-done
9466 Save the changes you have made and return to the summary buffer
9467 (@code{gnus-score-edit-done}). 
9468
9469 @item C-c C-d
9470 @kindex C-c C-d (Score)
9471 @findex gnus-score-edit-insert-date
9472 Insert the current date in numerical format
9473 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
9474 you were wondering.
9475 @end table
9476
9477 @node Adaptive Scoring
9478 @section Adaptive Scoring
9479 @cindex adaptive scoring
9480
9481 If all this scoring is getting you down, Gnus has a way of making it all
9482 happen automatically---as if by magic.  Or rather, as if by artificial
9483 stupidity, to be precise.
9484
9485 @vindex gnus-use-adaptive-scoring
9486 When you read an article, or mark an article as read, or kill an
9487 article, you leave marks behind.  On exit from the group, Gnus can sniff
9488 these marks and add score elements depending on what marks it finds.
9489 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
9490 @code{t}. 
9491
9492 @vindex gnus-default-adaptive-score-alist
9493 To give you complete control over the scoring process, you can customize
9494 the @code{gnus-default-adaptive-score-alist} variable.  By default, it
9495 looks something like this:
9496
9497 @lisp
9498 (defvar gnus-default-adaptive-score-alist
9499   '((gnus-unread-mark)
9500     (gnus-ticked-mark (from 4))
9501     (gnus-dormant-mark (from 5))
9502     (gnus-del-mark (from -4) (subject -1))
9503     (gnus-read-mark (from 4) (subject 2))
9504     (gnus-expirable-mark (from -1) (subject -1))
9505     (gnus-killed-mark (from -1) (subject -3))
9506     (gnus-kill-file-mark)
9507     (gnus-catchup-mark (from -1) (subject -1))))
9508 @end lisp
9509
9510 As you see, each element in this alist has a mark as a key (either a
9511 variable name or a "real" mark---a character).  Following this key is a
9512 random number of header/score pairs.  
9513
9514 To take @code{gnus-del-mark} as an example---this alist says that all
9515 articles that have that mark (i.e., are marked with @samp{D}) will have a
9516 score entry added to lower based on the @code{From} header by -4, and
9517 lowered by @code{Subject} by -1.  Change this to fit your prejudices. 
9518
9519 The headers you can score on are @code{from}, @code{subject},
9520 @code{message-id}, @code{references}, @code{xref}, @code{lines},
9521 @code{chars} and @code{date}.  In addition, you can score on
9522 @code{followup}, which will create an adaptive score entry that matches
9523 on the @code{References} header using the @code{Message-ID} of the
9524 current article, thereby matching the following thread.  
9525
9526 You can also score on @code{thread}, which will try to score all
9527 articles that appear in a thread.  @code{thread} matches uses a
9528 @code{Message-ID} to match on the @code{References} header of the
9529 article.  If the match is made, the @code{Message-ID} of the article is
9530 added to the @code{thread} rule.  (Think about it.  I'd recommend two
9531 aspirins afterwards.)
9532
9533 If you use this scheme, you should set @code{mark-below} to something
9534 small---like -300, perhaps, to avoid having small random changes result
9535 in articles getting marked as read.
9536
9537 After using adaptive scoring for a week or so, Gnus should start to
9538 become properly trained and enhance the authors you like best, and kill
9539 the authors you like least, without you having to say so explicitly. 
9540
9541 You can control what groups the adaptive scoring is to be performed on
9542 by using the score files (@pxref{Score File Format}).  This will also
9543 let you use different rules in different groups.
9544
9545 @vindex gnus-adaptive-file-suffix
9546 The adaptive score entries will be put into a file where the name is the
9547 group name with @code{gnus-adaptive-file-suffix} appended.  The default
9548 is @samp{ADAPT}.
9549
9550 @vindex gnus-score-exact-adapt-limit
9551 When doing adaptive scoring, substring or fuzzy matching would probably
9552 give you the best results in most cases.  However, if the header one
9553 matches is short, the possibility for false positives is great, so if
9554 the length of the match is less than
9555 @code{gnus-score-exact-adapt-limit}, exact matching will be used.  If
9556 this variable is @code{nil}, exact matching will always be used to avoid
9557 this problem.
9558
9559
9560 @node Followups To Yourself
9561 @section Followups To Yourself
9562
9563 Gnus offers two commands for picking out the @code{Message-ID} header in
9564 the current buffer.  Gnus will then add a score rule that scores using
9565 this @code{Message-ID} on the @code{References} header of other
9566 articles.  This will, in effect, increase the score of all articles that
9567 respond to the article in the current buffer.  Quite useful if you want
9568 to easily note when people answer what you've said.
9569
9570 @table @code
9571
9572 @item gnus-score-followup-article
9573 @findex gnus-score-followup-article
9574 This will add a score to articles that directly follow up your own
9575 article. 
9576
9577 @item gnus-score-followup-thread
9578 @findex gnus-score-followup-thread
9579 This will add a score to all articles that appear in a thread "below"
9580 your own article.
9581 @end table
9582
9583 @vindex gnus-inews-article-hook
9584 These two functions are both primarily meant to be used in hooks like
9585 @code{gnus-inews-article-hook}.  
9586
9587
9588 @node Scoring Tips
9589 @section Scoring Tips
9590 @cindex scoring tips
9591
9592 @table @dfn
9593
9594 @item Crossposts
9595 If you want to lower the score of crossposts, the line to match on is
9596 the @code{Xref} header.
9597 @lisp
9598 ("xref" (" talk.politics.misc:" -1000))
9599 @end lisp
9600
9601 @item Multiple crossposts
9602 If you want to lower the score of articles that have been crossposted to
9603 more than, say, 3 groups:
9604 @lisp
9605 ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
9606 @end lisp
9607
9608 @item Matching on the body
9609 This is generally not a very good idea---it takes a very long time.
9610 Gnus actually has to fetch each individual article from the server.  But
9611 you might want to anyway, I guess.  Even though there are three match
9612 keys (@code{Head}, @code{Body} and @code{All}), you should choose one
9613 and stick with it in each score file.  If you use any two, each article
9614 will be fetched @emph{twice}.  If you want to match a bit on the
9615 @code{Head} and a bit on the @code{Body}, just use @code{All} for all
9616 the matches.  
9617
9618 @item Marking as read
9619 You will probably want to mark articles that has a score below a certain
9620 number as read.  This is most easily achieved by putting the following
9621 in your @file{all.SCORE} file:
9622 @lisp
9623 ((mark -100))
9624 @end lisp
9625 You may also consider doing something similar with @code{expunge}.  
9626
9627 @item Negated charater classes
9628 If you say stuff like @code{[^abcd]*}, you may get unexpected results.
9629 That will match newlines, which might lead to, well, The Unknown.  Say
9630 @code{[^abcd\n]*} instead.
9631 @end table
9632
9633 @node Reverse Scoring
9634 @section Reverse Scoring
9635 @cindex reverse scoring
9636
9637 If you want to keep just articles that have @samp{Sex with Emacs} in the
9638 subject header, and expunge all other articles, you could put something
9639 like this in your score file:
9640
9641 @lisp
9642 (("subject"
9643   ("Sex with Emacs" 2))
9644  (mark 1)
9645  (expunge 1))
9646 @end lisp
9647
9648 So, you raise all articles that match @samp{Sex with Emacs} and mark the
9649 rest as read, and expunge them to boot.
9650
9651 @node Global Score Files
9652 @section Global Score Files
9653 @cindex global score files
9654
9655 Sure, other newsreaders have "global kill files".  These are usually
9656 nothing more than a single kill file that applies to all groups, stored
9657 in the user's home directory.  Bah!  Puny, weak newsreaders!
9658
9659 What I'm talking about here are Global Score Files.  Score files from
9660 all over the world, from users everywhere, uniting all nations in one
9661 big, happy score file union!  Ange-score!  New and untested!
9662
9663 @vindex gnus-global-score-files
9664 All you have to do to use other people's score files is to set the
9665 @code{gnus-global-score-files} variable.  One entry for each score file,
9666 or each score file directory.  Gnus will decide by itself what score
9667 files are applicable to which group.
9668
9669 Say you want to use all score files in the
9670 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
9671 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
9672
9673 @lisp
9674 (setq gnus-global-score-files
9675       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
9676         "/ftp@@ftp.some-where:/pub/score/"))
9677 @end lisp
9678
9679 @findex gnus-score-search-global-directories
9680 Simple, eh?  Directory names must end with a @samp{/}.  These
9681 directories are typically scanned only once during each Gnus session.
9682 If you feel the need to manually re-scan the remote directories, you can
9683 use the @code{gnus-score-search-global-directories} command.
9684
9685 Note that, at present, using this option will slow down group entry
9686 somewhat.  (That is---a lot.)
9687
9688 If you want to start maintaining score files for other people to use,
9689 just put your score file up for anonymous ftp and announce it to the
9690 world.  Become a retro-moderator!  Participate in the retro-moderator
9691 wars sure to ensue, where retro-moderators battle it out for the
9692 sympathy of the people, luring them to use their score files on false
9693 premises!  Yay!  The net is saved!
9694
9695 Here are some tips for the would-be retro-moderator, off the top of my
9696 head: 
9697
9698 @itemize @bullet
9699
9700 @item 
9701 Articles that are heavily crossposted are probably junk. 
9702 @item
9703 To lower a single inappropriate article, lower by @code{Message-ID}.
9704 @item
9705 Particularly brilliant authors can be raised on a permanent basis. 
9706 @item
9707 Authors that repeatedly post off-charter for the group can safely be
9708 lowered out of existence.
9709 @item
9710 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
9711 articles completely.
9712
9713 @item 
9714 Use expiring score entries to keep the size of the file down.  You
9715 should probably have a long expiry period, though, as some sites keep
9716 old articles for a long time.
9717 @end itemize
9718
9719 ... I wonder whether other newsreaders will support global score files
9720 in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
9721 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
9722 holding our breath yet?
9723
9724
9725 @node Kill Files
9726 @section Kill Files
9727 @cindex kill files
9728
9729 Gnus still supports those pesky old kill files.  In fact, the kill file
9730 entries can now be expiring, which is something I wrote before Daniel
9731 Quinlan thought of doing score files, so I've left the code in there.
9732
9733 In short, kill processing is a lot slower (and I do mean @emph{a lot})
9734 than score processing, so it might be a good idea to rewrite your kill
9735 files into score files.
9736
9737 Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
9738 forms into this file, which means that you can use kill files as some
9739 sort of primitive hook function to be run on group entry, even though
9740 that isn't a very good idea.
9741
9742 XCNormal kill files look like this:
9743
9744 @lisp
9745 (gnus-kill "From" "Lars Ingebrigtsen")
9746 (gnus-kill "Subject" "ding")
9747 (gnus-expunge "X")
9748 @end lisp
9749
9750 This will mark every article written by me as read, and remove them from
9751 the summary buffer.  Very useful, you'll agree.
9752
9753 Other programs use a totally different kill file syntax.  If Gnus
9754 encounters what looks like a @code{rn} kill file, it will take a stab at
9755 interpreting it. 
9756
9757 Two functions for editing a GNUS kill file:
9758
9759 @table @kbd
9760
9761 @item M-k
9762 @kindex M-k (Summary)
9763 @findex gnus-summary-edit-local-kill
9764 Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
9765
9766 @item M-K
9767 @kindex M-K (Summary)
9768 @findex gnus-summary-edit-global-kill
9769 Edit the general kill file (@code{gnus-summary-edit-global-kill}).
9770 @end table
9771
9772 @vindex gnus-kill-file-name
9773 A kill file for the group @samp{soc.motss} is normally called
9774 @file{soc.motss.KILL}.  The suffix appended to the group name to get
9775 this file name is detailed by the @code{gnus-kill-file-name} variable.
9776 The "global" kill file (not in the score file sense of "global", of
9777 course) is called just @file{KILL}.
9778
9779 @vindex gnus-kill-save-kill-file
9780 If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the
9781 kill file after processing, which is necessary if you use expiring
9782 kills. 
9783
9784
9785
9786
9787 @node Various
9788 @chapter Various
9789
9790 @menu
9791 * Interactive::                Making Gnus ask you many questions.
9792 * Formatting Variables::       How to control the look of the buffers.
9793 * Windows Configuration::      Configuring the Gnus buffer windows.
9794 * Buttons::                    Get tendonitis in ten easy steps!
9795 * Compilation & Init File::    How to speed Gnus up.
9796 * Daemons::                    Gnus can do things behind your back.
9797 * NoCeM::                      How to avoid spam and other fatty foods.
9798 * Various Various::            Things that are really various.
9799 @end menu
9800
9801 @node Interactive
9802 @section Interactive
9803 @cindex interaction
9804
9805 @table @code
9806
9807 @item gnus-novice-user
9808 @vindex gnus-novice-user
9809 If this variable is non-@code{nil}, you are either a newcomer to the
9810 World of Usenet, or you are very cautious, which is a nice thing to be,
9811 really.  You will be given questions of the type "Are you sure you want
9812 to do this?" before doing anything dangerous.  This is @code{t} by
9813 default. 
9814
9815 @item gnus-expert-user
9816 @vindex gnus-expert-user
9817 If this variable is non-@code{nil}, you will never ever be asked any
9818 questions by Gnus.  It will simply assume you know what you're doing, no
9819 matter how strange.
9820
9821 @item gnus-interactive-catchup
9822 @vindex gnus-interactive-catchup
9823 Require confirmation before catching up a group if non-@code{nil}.  It
9824 is @code{t} by default.
9825
9826 @item gnus-interactive-post
9827 @vindex gnus-interactive-post
9828 If non-@code{nil}, the user will be prompted for a group name when
9829 posting an article.  It is @code{t} by default.
9830
9831 @item gnus-interactive-exit
9832 @vindex gnus-interactive-exit
9833 Require confirmation before exiting Gnus.  This variable is @code{t} by
9834 default. 
9835 @end table
9836
9837
9838 @node Formatting Variables
9839 @section Formatting Variables
9840 @cindex formatting variables
9841
9842 Throughout this manual you've probably noticed lots of variables that
9843 are called things like @code{gnus-group-line-format} and
9844 @code{gnus-summary-mode-line-format}.  These control how Gnus is to
9845 output lines in the various buffers.  There's quite a lot of them.
9846 Fortunately, they all use the same syntax, so there's not that much to
9847 be annoyed by.
9848
9849 Here's an example format spec (from the group buffer): @samp{"%M%S%5y:
9850 %(%g%)\n"}.  We see that it is indeed extremely ugly, and that there are
9851 lots of percentages everywhere.  
9852
9853 Each @samp{%} element will be replaced by some string or other when the
9854 buffer in question is generated.  @samp{%5y} means "insert the @samp{y}
9855 spec, and pad with spaces to get a 5-character field".  Just like a
9856 normal format spec, almost.
9857
9858 You can also say @samp{%6,4y}, which means that the field will never be
9859 more than 6 characters wide and never less than 4 characters wide.
9860
9861 There are also specs for highlighting, and these are shared by all the
9862 format variables.  Text inside the @samp{%(} and @samp{%)} specifiers
9863 will get the special @code{mouse-face} property set, which means that it
9864 will be highlighted (with @code{gnus-mouse-face}) when you put the mouse
9865 pointer over it.
9866
9867 Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
9868 normal faces set using @code{gnus-face-0}, which is @code{bold} by
9869 default.  If you say @samp{%1@{} instead, you'll get @code{gnus-face-1}
9870 instead, and so on.  Create as many faces as you wish.  The same goes
9871 for the @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
9872 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
9873
9874 Here's an alternative recipe for the group buffer:
9875
9876 @lisp
9877 ;; Create three face types.
9878 (setq gnus-face-1 'bold)
9879 (setq gnus-face-3 'italic)
9880
9881 ;; We want the article count to be in 
9882 ;; a bold and green face.  So we create 
9883 ;; a new face called `my-green-bold'.
9884 (copy-face 'bold 'my-green-bold)
9885 ;; Set the color.
9886 (set-face-foreground 'my-green-bold "ForestGreen")
9887 (setq gnus-face-2 'my-green-bold)
9888
9889 ;; Set the new & fancy format.
9890 (setq gnus-group-line-format 
9891       "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
9892 @end lisp
9893
9894 I'm sure you'll be able to use this scheme to create totally unreadable
9895 and extremely vulgar displays.  Have fun!
9896
9897 Currently Gnus uses the following formatting variables:
9898 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
9899 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
9900 @code{gnus-group-mode-line-format},
9901 @code{gnus-summary-mode-line-format},
9902 @code{gnus-article-mode-line-format},
9903 @code{gnus-server-mode-line-format}. 
9904
9905 Note that the @samp{%(} specs (and friends) do not make any sense on the
9906 mode-line variables.
9907
9908 All these format variables can also be random elisp forms.  In that
9909 case, they will be @code{eval}ed to insert the required lines.
9910
9911 @kindex M-x gnus-update-format
9912 @findex gnus-update-format
9913 Gnus includes a command to help you while creating your own format
9914 specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
9915 update the spec in question and pop you to a buffer where you can
9916 examine the resulting lisp code to be run to generate the line.  
9917
9918
9919 @node Windows Configuration
9920 @section Windows Configuration
9921 @cindex windows configuration
9922
9923 No, there's nothing here about X, so be quiet.
9924
9925 @vindex gnus-use-full-window
9926 If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
9927 other windows and occupy the entire Emacs screen by itself.  It is
9928 @code{t} by default.
9929
9930 @code{gnus-buffer-configuration} describes how much space each Gnus
9931 buffer should be given.  Here's an excerpt of this variable:
9932
9933 @lisp
9934 ((group (vertical 1.0 (group 1.0 point)
9935                       (if gnus-carpal (group-carpal 4))))
9936  (article (vertical 1.0 (summary 0.25 point) 
9937                         (article 1.0))))
9938 @end lisp
9939
9940 This is an alist.  The @dfn{key} is a symbol that names some action or
9941 other.  For instance, when displaying the group buffer, the window
9942 configuration function will use @code{group} as the key.  A full list of
9943 possible names is listed below.
9944
9945 The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer
9946 should occupy.  To take the @code{article} split as an example -
9947
9948 @lisp
9949 (article (vertical 1.0 (summary 0.25 point)
9950                        (article 1.0)))
9951 @end lisp
9952
9953 This @dfn{split} says that the summary buffer should occupy 25% of upper
9954 half of the screen, and that it is placed over the article buffer.  As
9955 you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all
9956 reaching for that calculator there).  However, the special number
9957 @code{1.0} is used to signal that this buffer should soak up all the
9958 rest of the space avaiable after the rest of the buffers have taken
9959 whatever they need.  There should be only one buffer with the @code{1.0}
9960 size spec per split.
9961
9962 Point will be put in the buffer that has the optional third element
9963 @code{point}. 
9964
9965 Here's a more complicated example:
9966
9967 @lisp
9968 (article (vertical 1.0 (group 4)
9969                        (summary 0.25 point)
9970                        (if gnus-carpal (summary-carpal 4))
9971                        (article 1.0)))
9972 @end lisp
9973
9974 If the size spec is an integer instead of a floating point number, 
9975 then that number will be used to say how many lines a buffer should
9976 occupy, not a percentage.
9977
9978 If the @dfn{split} looks like something that can be @code{eval}ed (to be
9979 precise---if the @code{car} of the split is a function or a subr), this
9980 split will be @code{eval}ed.  If the result is non-@code{nil}, it will
9981 be used as a split.  This means that there will be three buffers if
9982 @code{gnus-carpal} is @code{nil}, and four buffers if @code{gnus-carpal}
9983 is non-@code{nil}.
9984
9985 Not complicated enough for you?  Well, try this on for size:
9986
9987 @lisp
9988 (article (horizontal 1.0 
9989              (vertical 0.5
9990                  (group 1.0)
9991                  (gnus-carpal 4))
9992              (vertical 1.0
9993                  (summary 0.25 point)
9994                  (summary-carpal 4)
9995                  (article 1.0))))
9996 @end lisp
9997
9998 Whoops.  Two buffers with the mystery 100% tag.  And what's that
9999 @code{horizontal} thingie?  
10000
10001 If the first element in one of the split is @code{horizontal}, Gnus will
10002 split the window horizontally, giving you two windows side-by-side.
10003 Inside each of these strips you may carry on all you like in the normal
10004 fashion.  The number following @code{horizontal} says what percentage of
10005 the screen is to be given to this strip.
10006
10007 For each split, there @emph{must} be one element that has the 100% tag.
10008 The splitting is never accurate, and this buffer will eat any leftover
10009 lines from the splits.
10010
10011 To be slightly more formal, here's a definition of what a legal split
10012 may look like:
10013
10014 @example
10015 split       = frame | horizontal | vertical | buffer | form
10016 frame       = "(frame " size *split ")"
10017 horizontal  = "(horizontal " size *split ")"
10018 vertical    = "(vertical " size *split ")"
10019 buffer      = "(" buffer-name " " size *[ "point" ] ")"
10020 size        = number | frame-params
10021 buffer-name = group | article | summary ...
10022 @end example
10023
10024 The limitations are that the @samp{frame} split can only appear as the
10025 top-level split.  @samp{form} should be an Emacs Lisp form that should
10026 return a valid split.  We see that each split is fully recursive, and
10027 may contain any number of @samp{vertical} and @samp{horizontal} splits. 
10028
10029 @vindex gnus-window-min-width
10030 @vindex gnus-window-min-height
10031 @cindex window height
10032 @cindex window width
10033 Finding the right sizes can be a bit complicated.  No window may be less
10034 than @code{gnus-window-min-height} (default 2) characters high, and all
10035 windows must be at least @code{gnus-window-min-wide} (default 1)
10036 characters wide.  Gnus will try to enforce this before applying the
10037 splits.  If you want to use the normal Emacs window width/height limit,
10038 you can just set these two variables to @code{nil}.
10039
10040 If you're not familiar with Emacs terminology, @samp{horizontal} and
10041 @samp{vertical} splits may work the opposite way of what you'd expect.
10042 Windows inside a @samp{horizontal} split are shown side-by-side, and
10043 windows within a @samp{vertical} split are shown above each other.
10044
10045 @findex gnus-configure-frame
10046 If you want to experiment with window placement, a good tip is to call
10047 @code{gnus-configure-frame} directly with a split.  This is the function
10048 that does all the real work when splitting buffers.  Below is a pretty
10049 nonsensical configuration with 5 windows; two for the group buffer and
10050 three for the article buffer.  (I said it was nonsensical.)  If you
10051 @code{eval} the statement below, you can get an idea of how that would
10052 look straight away, without going through the normal Gnus channels.
10053 Play with it until you're satisfied, and then use
10054 @code{gnus-add-configuration} to add your new creation to the buffer
10055 configuration list. 
10056
10057 @lisp
10058 (gnus-configure-frame
10059  '(horizontal 1.0
10060     (vertical 10
10061       (group 1.0)
10062       (article 0.3 point))
10063     (vertical 1.0
10064       (article 1.0)
10065       (horizontal 4
10066         (group 1.0)
10067         (article 10)))))
10068 @end lisp
10069
10070 You might want to have several frames as well.  No prob---just use the
10071 @code{frame} split:
10072
10073 @lisp
10074 (gnus-configure-frame
10075  '(frame 1.0
10076          (vertical 1.0
10077                    (summary 0.25 point)
10078                    (article 1.0))
10079          (vertical ((height . 5) (width . 15)
10080                     (user-position . t)
10081                     (left . -1) (top . 1))
10082                    (picon 1.0))))
10083
10084 @end lisp
10085
10086 This split will result in the familiar summary/article window
10087 configuration in the first (or "main") frame, while a small additional
10088 frame will be created where picons will be shown.  As you can see,
10089 instead of the normal @samp{1.0} top-level spec, each additional split
10090 should have a frame parameter alist as the size spec.
10091 @xref{(elisp)Frame Parameters}.
10092
10093 Here's a list of all possible keys for
10094 @code{gnus-buffer-configuaration}:
10095
10096 @code{group}, @code{summary}, @code{article}, @code{server},
10097 @code{browse}, @code{group-mail}, @code{summary-mail},
10098 @code{summary-reply}, @code{info}, @code{summary-faq},
10099 @code{edit-group}, @code{edit-server}, @code{reply}, @code{reply-yank},
10100 @code{followup}, @code{followup-yank}, @code{edit-score}.  
10101
10102 @findex gnus-add-configuration
10103 Since the @code{gnus-buffer-configuration} variable is so long and
10104 complicated, there's a function you can use to ease changing the config
10105 of a single setting: @code{gnus-add-configuration}.  If, for instance,
10106 you want to change the @code{article} setting, you could say:
10107
10108 @lisp
10109 (gnus-add-configuration
10110  '(article (vertical 1.0
10111                (group 4)
10112                (summary .25 point)
10113                (article 1.0))))
10114 @end lisp
10115
10116 You'd typically stick these @code{gnus-add-configuration} calls in your
10117 @file{.gnus} file or in some startup hook -- they should be run after
10118 Gnus has been loaded.
10119
10120
10121 @node Buttons
10122 @section Buttons
10123 @cindex buttons
10124 @cindex mouse
10125 @cindex click
10126
10127 Those new-fangled @dfn{mouse} contraptions is very popular with the
10128 young, hep kids who don't want to learn the proper way to do things
10129 these days.  Why, I remember way back in the summer of '89, when I was
10130 using Emacs on a Tops 20 system.  Three hundred users on one single
10131 machine, and every user was running Simula compilers.  Bah!
10132
10133 Right.
10134
10135 @vindex gnus-carpal
10136 Well, you can make Gnus display bufferfuls of buttons you can click to
10137 do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
10138 really.  Tell the chiropractor I sent you.
10139
10140
10141 @table @code
10142
10143 @item gnus-carpal-mode-hook
10144 @vindex gnus-carpal-mode-hook
10145 Hook run in all carpal mode buffers.
10146
10147 @item gnus-carpal-button-face
10148 @vindex gnus-carpal-button-face
10149 Face used on buttons.
10150
10151 @item gnus-carpal-group-buffer-buttons
10152 @vindex gnus-carpal-group-buffer-buttons
10153 Buttons in the group buffer.
10154
10155 @item gnus-carpal-summary-buffer-buttons
10156 @vindex gnus-carpal-summary-buffer-buttons
10157 Buttons in the summary buffer.
10158
10159 @item gnus-carpal-server-buffer-buttons
10160 @vindex gnus-carpal-server-buffer-buttons
10161 Buttons in the server buffer.
10162
10163 @item gnus-carpal-browse-buffer-buttons
10164 @vindex gnus-carpal-browse-buffer-buttons
10165 Buttons in the browse buffer.
10166 @end table
10167
10168 All the @code{buttons} variables are lists.  The elements in these list
10169 is either a cons cell where the car contains a text to be displayed and
10170 the cdr contains a function symbol, or a simple string.
10171
10172
10173 @node Compilation & Init File
10174 @section Compilation & Init File
10175 @cindex compilation
10176 @cindex init file
10177 @cindex byte-compilation
10178
10179 @vindex gnus-init-file
10180 @findex gnus-compile
10181 When Gnus starts up, it will read the Gnus init file
10182 @code{gnus-init-file}, which is @file{.gnus} by default.  It is
10183 recommended that you keep any Gnus-related functions that you have
10184 written in that file.  If you want to byte-compile the file, Gnus offers
10185 the handy @kbd{M-x gnus-compile} function that will do that for you. 
10186
10187 That's not really why that function was written, though.
10188
10189 Remember all those line format specification variables?
10190 @code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
10191 on.  Now, Gnus will of course heed whatever these variables are, but,
10192 unfortunately, changing them will mean a quite significant slow-down.
10193 (The default values of these variables have byte-compiled functions
10194 associated with them, while the user-generated versions do not, of
10195 course.) 
10196
10197 To help with this, you can run @code{gnus-compile} after you've fiddled
10198 around with the variables and feel that you're (kind of) satisfied.
10199 This will result in the new specs being byte-compiled, and you'll get
10200 top speed again.
10201
10202 The result of these byte-compilations will be written to
10203 @file{.gnus.elc} by default.
10204
10205 Note that Gnus will read @file{.gnus.elc} instead of @file{.gnus} if
10206 @file{.gnus.elc} exists, so if you change @file{.gnus}, you should
10207 remove @file{.gnus.elc}.
10208
10209
10210 @node Daemons
10211 @section Daemons
10212 @cindex demons
10213 @cindex daemons
10214
10215 Gnus, being larger than any program ever written (allegedly), does lots
10216 of strange stuff that you may wish to have done while you're not
10217 present.  For instance, you may want it to check for new mail once in a
10218 while.  Or you may want it to close down all connections to all servers
10219 when you leave Emacs idle.  And stuff like that.
10220
10221 Gnus will let you do stuff like that by defining various
10222 @dfn{handlers}.  Each handler consists of three elements:  A
10223 @var{function}, a @var{time}, and an @var{idle} parameter.
10224
10225 Here's an example of a handler that closes connections when Emacs has
10226 been idle for thirty minutes:
10227
10228 @lisp
10229 (gnus-demon-close-connections nil 30)
10230 @end lisp
10231
10232 Here's a handler that scans for PGP headers every hour when Emacs is
10233 idle: 
10234
10235 @lisp
10236 (gnus-demon-scan-pgp 60 t)
10237 @end lisp
10238
10239 This @var{time} parameter and than @var{idle} parameter works together
10240 in a strange, but wonderful fashion.  Basically, if @var{idle} is
10241 @code{nil}, then the function will be called every @var{time} minutes.
10242
10243 If @var{idle} is @code{t}, then the function will be called after
10244 @var{time} minutes only if Emacs is idle.  So if Emacs is never idle,
10245 the function will never be called.  But once Emacs goes idle, the
10246 function will be called every @var{time} minutes.
10247
10248 If @var{idle} is a number and @var{time} is a number, the function will
10249 be called every @var{time} minutes only when Emacs has been idle for
10250 @var{idle} minutes.
10251
10252 If @var{idle} is a number and @var{time} is @code{nil}, the function
10253 will be called once every time Emacs has been idle for @var{idle}
10254 minutes.  
10255
10256 And if @var{time} is a string, it should look like @samp{"07:31"}, and
10257 the function will then be called once every day somewhere near that
10258 time.  Modified by the @var{idle} parameter, of course.
10259
10260 @vindex gnus-demon-timestep
10261 (When I say "minute" here, I really mean @code{gnus-demon-timestep}
10262 seconds.  This is @samp{60} by default.  If you change that variable,
10263 all the timings in the handlers will be affected.)
10264
10265 @vindex gnus-use-demon
10266 To set the whole thing in motion, though, you have to set
10267 @code{gnus-use-demon} to @code{t}.
10268
10269 @vindex gnus-use-demon
10270 To set the whole thing in motion, though, you have to set
10271 @code{gnus-use-demon} to @code{t}.
10272
10273 So, if you want to add a handler, you could put something like this in
10274 your @file{.gnus} file:
10275
10276 @findex gnus-demon-add-handler
10277 @lisp
10278 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
10279 @end lisp
10280
10281 @findex gnus-demon-add-nocem
10282 @findex gnus-demon-add-scanmail
10283 @findex gnus-demon-add-disconnection
10284 Some ready-made functions to do this has been created:
10285 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, and
10286 @code{gnus-demon-add-scanmail}.  Just put those functions in your
10287 @file{.gnus} if you want those abilities.
10288
10289 @findex gnus-demon-init
10290 @findex gnus-demon-cancel
10291 @vindex gnus-demon-handlers
10292 If you add handlers to @code{gnus-demon-handlers} directly, you should
10293 run @code{gnus-demon-init} to make the changes take hold.  To cancel all
10294 daemons, you can use the @code{gnus-demon-cancel} function.
10295
10296 Note that adding daemons can be pretty naughty if you overdo it.  Adding
10297 functions that scan all news and mail from all servers every two seconds
10298 is a sure-fire way of getting booted off any respectable system.  So
10299 behave. 
10300
10301
10302 @node NoCeM
10303 @section NoCeM
10304 @cindex nocem
10305 @cindex spam
10306
10307
10308
10309 @node Various Various
10310 @section Various Various
10311 @cindex mode lines
10312 @cindex highlights
10313
10314 @table @code
10315
10316 @item gnus-verbose
10317 @vindex gnus-verbose
10318 This variable is an integer between zero and ten.  The higher the value,
10319 the more messages will be displayed.  If this variable is zero, Gnus
10320 will never flash any messages, if it is seven (which is the default),
10321 most important messages will be shown, and if it is ten, Gnus won't ever
10322 shut up, but will flash so many messages it will make your head swim.
10323
10324 @item gnus-verbose-backends
10325 @vindex gnus-verbose-backends
10326 This variable works the same way as @code{gnus-verbose}, but it applies
10327 to the Gnus backends instead of Gnus proper.
10328
10329 @item gnus-updated-mode-lines
10330 @vindex gnus-updated-mode-lines
10331 This is a list of buffers that should keep their mode lines updated.
10332 The list may contain the symbols @code{group}, @code{article} and
10333 @code{summary}.  If the corresponding symbol is present, Gnus will keep
10334 that mode line updated with information that may be pertinent.  If this
10335 variable is @code{nil}, screen refresh may be quicker.
10336
10337 @cindex display-time
10338
10339 @item gnus-mode-non-string-length
10340 @vindex gnus-mode-non-string-length
10341 By default, Gnus displays information on the current article in the mode
10342 lines of the summary and article buffers.  The information Gnus wishes
10343 to display (eg. the subject of the article) is often longer than the
10344 mode lines, and therefore have to be cut off at some point.  This
10345 variable says how long the other elements on the line is (i.e., the
10346 non-info part).  If you put additional elements on the mode line (eg. a
10347 clock), you should modify this variable:
10348
10349 @c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
10350 @lisp
10351 (add-hook 'display-time-hook
10352           (lambda () (setq gnus-mode-non-string-length
10353                            (+ 21
10354                               (if line-number-mode 5 0)
10355                               (if column-number-mode 4 0)
10356                               (length display-time-string)))))
10357 @end lisp
10358
10359 If this variable is @code{nil} (which is the default), the mode line
10360 strings won't be chopped off, and they won't be padded either.
10361
10362 @item gnus-visual
10363 @vindex gnus-visual
10364 @cindex visual
10365 @cindex highlighting
10366 @cindex menus
10367
10368 If @code{nil}, Gnus won't attempt to create menus or use fancy colors
10369 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
10370 file.
10371
10372 This variable can also be a list of visual properties that are enabled.
10373 The following elements are legal, and are all set by default:
10374
10375 @table @code
10376
10377 @item summary-highlight
10378 Perform various highlighting in the summary buffer.
10379
10380 @item article-highlight
10381 Perform various highlighting in the article buffer.
10382
10383 @item highlight
10384 Turn on highlighting in all buffers.
10385
10386 @item group-menu
10387 Create menus in the group buffer.
10388
10389 @item summary-menu
10390 Create menus in the summary buffer.
10391
10392 @item article-menu
10393 Create menus in the article buffer.
10394
10395 @item browse-menu
10396 Create menus in the browse buffer.
10397
10398 @item server-menu
10399 Create menus in the server buffer.
10400
10401 @item menu
10402 Create menus in all buffers.
10403
10404 @end table
10405
10406 So if you only want highlighting in the article buffer and menus in all
10407 buffers, you couls say something like:
10408
10409 @lisp
10410 (setq gnus-visual '(article-highlight menu))
10411 @end lisp
10412
10413 If you want only highlighting and no menus whatsoever, you'd say:
10414
10415 @lisp
10416 (setq gnus-visual '(highlight))
10417 @end lisp
10418
10419 @item gnus-mouse-face
10420 @vindex gnus-mouse-face
10421 This is the face (i.e., font) used for mouse highlighting in Gnus.  No
10422 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
10423
10424 @item gnus-display-type
10425 @vindex gnus-display-type
10426 This variable is symbol indicating the display Emacs is running under.
10427 The symbol should be one of @code{color}, @code{grayscale} or
10428 @code{mono}.  If Gnus guesses this display attribute wrongly, either set
10429 this variable in your @file{~/.emacs} or set the resource
10430 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
10431
10432 @item gnus-background-mode 
10433 @vindex gnus-background-mode 
10434 This is a symbol indicating the Emacs background brightness.  The symbol
10435 should be one of @code{light} or @code{dark}.  If Gnus guesses this
10436 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
10437 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}. 
10438 `gnus-display-type'.
10439
10440 @item nnheader-max-head-length
10441 @vindex nnheader-max-head-length
10442 When the backends read straight heads of articles, they all try to read
10443 as little as possible.  This variable (default @code{4096}) specifies
10444 the absolute max length the backends will try to read before giving up
10445 on finding a separator line between the head and the body.  If this
10446 variable is @code{nil}, there is no upper read bound.  If it is
10447 @code{t}, the backends won't try to read the articles piece by piece,
10448 but read the entire articles.  This makes sense with some versions of
10449 @code{ange-ftp}. 
10450
10451 @item nnheader-file-name-translation-alist 
10452 @vindex nnheader-file-name-translation-alist 
10453 @cindex file names
10454 @cindex illegal characters in file names
10455 @cindex characters in file names
10456 This is an alist that says how to translate characters in file names.
10457 For instance, if @samp{:} is illegal as a file character in file names
10458 on your system (you OS/2 user you), you could say something like:
10459
10460 @lisp
10461 (setq nnheader-file-name-translation-alist 
10462       '((?: . ?_)))
10463 @end lisp
10464
10465 In fact, this is the default value for this variable on OS/2 and MS
10466 Windows (phooey) systems.
10467
10468 @end table
10469
10470 @node Customization
10471 @chapter Customization
10472 @cindex general customization
10473
10474 All variables are properly documented elsewhere in this manual.  This
10475 section is designed to give general pointers on how to customize Gnus
10476 for some quite common situations.
10477
10478 @menu
10479 * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
10480 * Slow Terminal Connection::  You run a remote Emacs.
10481 * Little Disk Space::         You feel that having large setup files is icky.
10482 * Slow Machine::              You feel like buying a faster machine.
10483 @end menu
10484
10485 @node Slow/Expensive Connection
10486 @section Slow/Expensive @sc{nntp} Connection
10487
10488 If you run Emacs on a machine locally, and get your news from a machine
10489 over some very thin strings, you want to cut down on the amount of data
10490 Gnus has to get from the @sc{nntp} server.
10491
10492 @table @code
10493
10494 @item gnus-read-active-file
10495 Set this to @code{nil}, which will inhibit Gnus from requesting the
10496 entire active file from the server.  This file is often v.  large.  You
10497 also have to set @code{gnus-check-new-news} and
10498 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
10499 doesn't suddenly decide to fetch the active file anyway.
10500
10501 @item gnus-nov-is-evil
10502 This one has to be @code{nil}.  If not, grabbing article headers from
10503 the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
10504 support @sc{xover}; Gnus will detect this by itself.
10505 @end table
10506
10507 @node Slow Terminal Connection
10508 @section Slow Terminal Connection
10509
10510 Let's say you use your home computer for dialing up the system that
10511 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
10512 amount of data that is sent over the wires as much as possible.
10513
10514 @table @code
10515
10516 @item gnus-auto-center-summary
10517 Set this to @code{nil} to inhibit Gnus from recentering the summary
10518 buffer all the time.  
10519
10520 @item gnus-visible-headers
10521 Cut down on the headers that are included in the articles to the
10522 minimum.  You can, in fact, make do without them altogether---most of the
10523 useful data is in the summary buffer, anyway.  Set this variable to
10524 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
10525
10526 @item gnus-article-display-hook
10527 Set this hook to all the available hiding commands:
10528 @lisp
10529 (setq gnus-article-display-hook 
10530       '(gnus-article-hide-headers gnus-article-hide-signature
10531         gnus-article-hide-citation))
10532 @end lisp
10533
10534 @item gnus-use-full-window
10535 By setting this to @code{nil}, you can make all the windows smaller.
10536 While this doesn't really cut down much generally, it means that you
10537 have to see smaller portions of articles before deciding that you didn't
10538 want to read them anyway.
10539
10540 @item gnus-thread-hide-subtree
10541 If this is non-@code{nil}, all threads in the summary buffer will be
10542 hidden initially.
10543
10544 @item gnus-updated-mode-lines
10545 If this is @code{nil}, Gnus will not put information in the buffer mode
10546 lines, which might save some time.
10547 @end table
10548
10549 @node Little Disk Space
10550 @section Little Disk Space
10551
10552 The startup files can get rather large, so you may want to cut their
10553 sizes a bit if you are running out of space.
10554
10555 @table @code
10556
10557 @item gnus-save-newsrc-file
10558 If this is @code{nil}, Gnus will never save @file{.newsrc}---it will
10559 only save @file{.newsrc.eld}.  This means that you will not be able to
10560 use any other newsreaders than Gnus.  This variable is @code{t} by
10561 default. 
10562
10563 @item gnus-save-killed-list
10564 If this is @code{nil}, Gnus will not save the list of dead groups.  You
10565 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
10566 and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
10567 variable to @code{nil}.  This variable is @code{t} by default.
10568
10569 @end table
10570
10571
10572 @node Slow Machine
10573 @section Slow Machine
10574
10575 If you have a slow machine, or are just really impatient, there are a
10576 few things you can do to make Gnus run faster.
10577
10578 Set@code{gnus-check-new-newsgroups} and
10579 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
10580
10581 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
10582 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
10583 summary buffer faster.
10584
10585 Set @code{gnus-article-display-hook} to @code{nil} to make article
10586 processing a bit faster.
10587
10588
10589 @node Troubleshooting
10590 @chapter Troubleshooting
10591 @cindex troubleshooting
10592
10593 Gnus works @emph{so} well straight out of the box---I can't imagine any
10594 problems, really.
10595
10596 Ahem.
10597
10598 @enumerate
10599
10600 @item
10601 Make sure your computer is switched on.
10602
10603 @item
10604 Make sure that you really load the current Gnus version.  If you have
10605 been running @sc{gnus}, you need to exit Emacs and start it up again before
10606 Gnus will work.
10607
10608 @item
10609 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
10610 like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
10611 on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
10612 flee}, you have some old @file{.el} files lying around.  Delete these.
10613
10614 @item
10615 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
10616 how-to. 
10617 @end enumerate
10618
10619 If all else fails, report the problem as a bug.
10620
10621 @cindex bugs
10622 @cindex reporting bugs
10623
10624 @kindex M-x gnus-bug
10625 @findex gnus-bug
10626 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
10627 command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
10628 me the backtrace.  I will fix bugs, but I can only fix them if you send
10629 me a precise description as to how to reproduce the bug.
10630
10631 You really can never be too detailed in a bug report.  Always use the
10632 @kbd{M-x gnus-bug} command when you make bug reports, even if it creates
10633 a 10Kb mail each time you use it, and even if you have sent me your
10634 environment 500 times before.  I don't care.  I want the full info each
10635 time.  
10636
10637 It is also important to remember that I have no memory whatsoever.  If
10638 you send a bug report, and I send you a reply, and then you send back
10639 just "No, it's not! Moron!", I will have no idea what you are insulting
10640 me about.  Always overexplain everything.  It's much easier for all of
10641 us---if I don't have all the information I need, I will just mail you
10642 and ask for more info, and everything takes more time.
10643
10644 If you just need help, you are better off asking on
10645 @samp{gnu.emacs.gnus}.  I'm not very helpful.
10646
10647 @cindex gnu.emacs.gnus
10648 @cindex ding mailing list
10649 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
10650 Write to @samp{ding-request@@ifi.uio.no} to subscribe.
10651
10652
10653 @node The End
10654 @chapter The End
10655
10656 Well, that's the manual---you can get on with your life now.  Keep in
10657 touch.  Say hello to your cats from me.  
10658
10659 My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
10660
10661 Ol' Chuck Reznikoff said it pretty well, so I leave the floor to him:
10662
10663 @quotation
10664 @strong{Te Deum}
10665 @sp 1
10666 Not because of victories @*
10667 I sing,@*
10668 having none,@*
10669 but for the common sunshine,@*
10670 the breeze,@*
10671 the largess of the spring.
10672 @sp 1
10673 Not for victory@*
10674 but for the day's work done@*
10675 as well as I was able;@*
10676 not for a seat upon the dais@*
10677 but at the common table.@*
10678 @end quotation
10679
10680 @node Appendices
10681 @chapter Appendices
10682
10683 @menu
10684 * A Programmer@'s Guide to Gnus::   Rilly, rilly technical stuff.
10685 * Emacs for Heathens::             A short intruduction to Emacsian terms.
10686 * Frequently Asked Questions::     A question-and-answer session.
10687 @end menu
10688
10689
10690 @node A Programmer@'s Guide to Gnus
10691 @section A Programmer's Guide to Gnus
10692
10693 It is my hope that other people will figure out smart stuff that Gnus
10694 can do, and that other people will write those smart things as well.  To
10695 facilitate that I thought it would be a good idea to describe the inner
10696 workings of Gnus.  And some of the not-so-inner workings, while I'm at
10697 it.
10698
10699 You can never expect the internals of a program not to change, but I
10700 will be defining (in some details) the interface between Gnus and its
10701 backends (this is written in stone), the format of the score files
10702 (ditto), data structures (some are less likely to change than others)
10703 and general method of operations.
10704
10705 @menu 
10706 * Backend Interface::        How Gnus communicates with the servers.
10707 * Score File Syntax::        A BNF definition of the score file standard.
10708 * Headers::                  How Gnus stores headers internally.
10709 * Ranges::                   A handy format for storing mucho numbers.
10710 * Group Info::               The group info format.
10711 * Various File Formats::     Formats of files that Gnus use.
10712 @end menu
10713
10714
10715 @node Backend Interface
10716 @subsection Backend Interface
10717
10718 Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
10719 groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
10720 server is a @dfn{backend} and some @dfn{backend variables}.  As examples
10721 of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
10722 examples of the latter we have @code{nntp-port-number} and
10723 @code{nnmbox-directory}.
10724
10725 When Gnus asks for information from a backend---say @code{nntp}---on
10726 something, it will normally include a virtual server name in the
10727 function parameters.  (If not, the backend should use the "current"
10728 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
10729 server as its only (optional) parameter.  If this virtual server hasn't
10730 been opened, the function should fail.
10731
10732 Note that a virtual server name has no relation to some physical server
10733 name.  Take this example:
10734
10735 @lisp
10736 (nntp "odd-one" 
10737       (nntp-address "ifi.uio.no") 
10738       (nntp-port-number 4324))
10739 @end lisp
10740
10741 Here the virtual server name is @samp{"odd-one"} while the name of
10742 the physical server is @samp{"ifi.uio.no"}. 
10743
10744 The backends should be able to switch between several virtual servers.
10745 The standard backends implement this by keeping an alist of virtual
10746 server environments that it pulls down/pushes up when needed.  
10747
10748 There are two groups of interface functions: @dfn{required functions},
10749 which must be present, and @dfn{optional functions}, which Gnus will
10750 always check whether are present before attempting to call.
10751
10752 All these functions are expected to return data in the buffer
10753 @code{nntp-server-buffer} (@samp{" *nntpd*"}), which is somewhat
10754 unfortunately named, but we'll have to live with it.  When I talk about
10755 "resulting data", I always refer to the data in that buffer.  When I
10756 talk about "return value", I talk about the function value returned by
10757 the function call.
10758
10759 Some backends could be said to be @dfn{server-forming} backends, and
10760 some might be said to not be.  The latter are backends that generally
10761 only operate on one group at a time, and have no concept of "server" --
10762 they have a group, and they deliver info on that group and nothing more.
10763
10764 In the examples and definitions I will refer to the imaginary backend
10765 @code{nnchoke}. 
10766
10767 @cindex @code{nnchoke}
10768
10769 @menu
10770 * Required Backend Functions::        Functions that must be implemented.
10771 * Optional Backend Functions::        Functions that need not be implemented.
10772 @end menu
10773
10774
10775 @node Required Backend Functions
10776 @subsubsection Required Backend Functions
10777
10778 @table @code
10779
10780 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
10781
10782 @var{articles} is either a range of article numbers or a list of
10783 @code{Message-ID}s.  Current backends do not fully support either---only
10784 sequences (lists) of article numbers, and most backends do not support
10785 retrieval of @code{Message-ID}s.  But they should try for both. 
10786
10787 The result data should either be HEADs or NOV lines, and the result
10788 value should either be @code{headers} or @code{nov} to reflect this.
10789 This might later be expanded to @code{various}, which will be a mixture
10790 of HEADs and NOV lines, but this is currently not supported by Gnus.  
10791
10792 If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra
10793 headers, in some meaning of the word.  This is generally done by
10794 fetching (at most) @var{fetch-old} extra headers less than the smallest
10795 article number in @code{articles}, and fill in the gaps as well.  The
10796 presence of this parameter can be ignored if the backend finds it
10797 cumbersome to follow the request.  If this is non-@code{nil} and not a
10798 number, do maximum fetches.
10799
10800 Here's an example HEAD:
10801
10802 @example
10803 221 1056 Article retrieved.
10804 Path: ifi.uio.no!sturles
10805 From: sturles@@ifi.uio.no (Sturle Sunde)
10806 Newsgroups: ifi.discussion
10807 Subject: Re: Something very droll
10808 Date: 27 Oct 1994 14:02:57 +0100
10809 Organization: Dept. of Informatics, University of Oslo, Norway
10810 Lines: 26
10811 Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
10812 References: <38jdmq$4qu@@visbur.ifi.uio.no>
10813 NNTP-Posting-Host: holmenkollen.ifi.uio.no
10814 .
10815 @end example
10816
10817 So a @code{headers} return value would imply that there's a number of
10818 these in the data buffer.
10819
10820 Here's a BNF definition of such a buffer:
10821
10822 @example
10823 headers        = *head
10824 head           = error / valid-head
10825 error-message  = [ "4" / "5" ] 2number " " <error message> eol
10826 valid-head     = valid-message *header "." eol
10827 valid-message  = "221 " <number> " Article retrieved." eol
10828 header         = <text> eol
10829 @end example
10830
10831 If the return value is @code{nov}, the data buffer should contain
10832 @dfn{network overview database} lines.  These are basically fields
10833 separated by tabs. 
10834
10835 @example
10836 nov-buffer = *nov-line
10837 nov-line   = 8*9 [ field <TAB> ] eol
10838 field      = <text except TAB>
10839 @end example
10840
10841 For a closer explanation what should be in those fields,
10842 @xref{Headers}. 
10843
10844
10845 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
10846
10847 @var{server} is here the virtual server name.  @var{definitions} is a
10848 list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
10849
10850 If the server can't be opened, no error should be signaled.  The backend
10851 may then choose to refuse further attempts at connecting to this
10852 server.  In fact, it should do so. 
10853
10854 If the server is opened already, this function should return a
10855 non-@code{nil} value.  There should be no data returned.
10856
10857
10858 @item (nnchoke-close-server &optional SERVER)
10859
10860 Close connection to @var{server} and free all resources connected
10861 to it. 
10862
10863 There should be no data returned.
10864
10865
10866 @item (nnchoke-request-close)
10867
10868 Close connection to all servers and free all resources that the backend
10869 have reserved.  All buffers that have been created by that backend
10870 should be killed.  (Not the @code{nntp-server-buffer}, though.)
10871
10872 There should be no data returned. 
10873
10874
10875 @item (nnchoke-server-opened &optional SERVER)
10876
10877 This function should return whether @var{server} is opened, and that the
10878 connection to it is still alive.  This function should under no
10879 circumstances attempt to reconnect to a server that is has lost
10880 connection to. 
10881
10882 There should be no data returned.
10883
10884
10885 @item (nnchoke-status-message &optional SERVER)
10886
10887 This function should return the last error message from @var{server}. 
10888
10889 There should be no data returned.
10890
10891
10892 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
10893
10894 The result data from this function should be the article specified by
10895 @var{article}.  This might either be a @code{Message-ID} or a number.
10896 It is optional whether to implement retrieval by @code{Message-ID}, but
10897 it would be nice if that were possible.
10898
10899 If @var{to-buffer} is non-@code{nil}, the result data should be returned
10900 in this buffer instead of the normal data buffer.  This is to make it
10901 possible to avoid copying large amounts of data from one buffer to
10902 another, and Gnus mainly request articles to be inserted directly into
10903 its article buffer.
10904
10905
10906 @item (nnchoke-open-group GROUP &optional SERVER)
10907
10908 Make @var{group} the current group.  
10909
10910 There should be no data returned by this function.
10911
10912
10913 @item (nnchoke-request-group GROUP &optional SERVER)
10914
10915 Get data on @var{group}.  This function also has the side effect of
10916 making @var{group} the current group. 
10917
10918 Here's an example of some result data and a definition of the same:
10919
10920 @example
10921 211 56 1000 1059 ifi.discussion
10922 @end example
10923
10924 The first number is the status, which should be @samp{211}.  Next is the
10925 total number of articles in the group, the lowest article number, the
10926 highest article number, and finally the group name.  Note that the total
10927 number of articles may be less than one might think while just
10928 considering the highest and lowest article numbers, but some articles
10929 may have been cancelled.  Gnus just discards the total-number, so
10930 whether one should take the bother to generate it properly (if that is a
10931 problem) is left as an excercise to the reader.
10932
10933 @example
10934 group-status = [ error / info ] eol
10935 error        = [ "4" / "5" ] 2<number> " " <Error message>
10936 info         = "211 " 3* [ <number> " " ] <string>
10937 @end example
10938
10939
10940 @item (nnchoke-close-group GROUP &optional SERVER)
10941
10942 Close @var{group} and free any resources connected to it.  This will be
10943 a no-op on most backends. 
10944
10945 There should be no data returned.
10946
10947
10948 @item (nnchoke-request-list &optional SERVER)
10949
10950 Return a list of all groups available on @var{server}.  And that means
10951 @emph{all}. 
10952
10953 Here's an example from a server that only carries two groups:
10954
10955 @example
10956 ifi.test 0000002200 0000002000 y
10957 ifi.discussion 3324 3300 n
10958 @end example
10959
10960 On each line we have a group name, then the highest article number in
10961 that group, the lowest article number, and finally a flag.
10962
10963 @example
10964 active-file = *active-line
10965 active-line = name " " <number> " " <number> " " flags eol
10966 name        = <string>
10967 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
10968 @end example
10969
10970 The flag says whether the group is read-only (@samp{n}), is moderated
10971 (@samp{m}), is dead (@samp{x}), is aliased to some other group
10972 (@samp{=other-group} or none of the above (@samp{y}). 
10973
10974
10975 @item (nnchoke-request-post &optional SERVER)
10976
10977 This function should post the current buffer.  It might return whether
10978 the posting was successful or not, but that's not required.  If, for
10979 instance, the posting is done asynchronously, it has generally not been
10980 completed by the time this function concludes.  In that case, this
10981 function should set up some kind of sentinel to beep the user loud and
10982 clear if the posting could not be completed.
10983
10984 There should be no result data from this function. 
10985
10986
10987 @item (nnchoke-request-post-buffer POST GROUP SUBJECT HEADER ARTICLE-BUFFER INFO FOLLOW-TO RESPECT-POSTER)
10988
10989 This function should return a buffer suitable for composing an article
10990 to be posted by @code{nnchoke-request-post}.  If @var{post} is
10991 non-@code{nil}, this is not a followup, but a totally new article.
10992 @var{group} is the name of the group to be posted to.  @var{subject} is
10993 the subject of the message.  @var{article-buffer} is the buffer being
10994 followed up, if that is the case.  @var{info} is the group info.
10995 @var{follow-to} is the group that one is supposed to re-direct the
10996 article ot.  If @var{respect-poster} is non-@code{nil}, the special
10997 @samp{"poster"} value of a @code{Followup-To} header is to be respected.
10998
10999 There should be no result data returned.
11000
11001 @end table
11002
11003 @node Optional Backend Functions
11004 @subsubsection Optional Backend Functions
11005
11006 @table @code
11007
11008 @item (nnchoke-retrieve-groups GROUPS &optional SERVER)
11009
11010 @var{groups} is a list of groups, and this function should request data
11011 on all those groups.  How it does it is of no concern to Gnus, but it
11012 should attempt to do this in a speedy fashion.
11013
11014 The return value of this function can be either @code{active} or
11015 @code{group}, which says what the format of the result data is.  The
11016 former is in the same format as the data from
11017 @code{nnchoke-request-list}, while the latter is a buffer full of lines
11018 in the same format as @code{nnchoke-request-group} gives.
11019
11020 @example
11021 group-buffer = *active-line / *group-status
11022 @end example
11023
11024
11025 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
11026
11027 A Gnus group info (@pxref{Group Info}) is handed to the backend for
11028 alterations.  This comes in handy if the backend really carries all the
11029 information (as is the case with virtual an imap groups).  This function
11030 may alter the info in any manner it sees fit, and should return the
11031 (altered) group info.  This function may alter the group info
11032 destructively, so no copying is needed before boogeying. 
11033
11034 There should be no result data from this function.
11035
11036
11037 @item (nnchoke-request-type GROUP &optional ARTICLE)
11038
11039 When the user issues commands for "sending news" (@kbd{F} in the summary
11040 buffer, for instance), Gnus has to know whether the article the user is
11041 following up is news or mail.  This function should return @code{news}
11042 if @var{article} in @var{group} is news, @code{mail} if it is mail and
11043 @code{unknown} if the type can't be decided.  (The @var{article}
11044 parameter is necessary in @code{nnvirtual} groups which might very well
11045 combine mail groups and news groups.)
11046
11047 There should be no result data from this function.
11048
11049
11050 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
11051
11052 If the user tries to set a mark that the backend doesn't like, this
11053 function may change the mark.  Gnus will use whatever this function
11054 returns as the mark for @var{article} instead of the original
11055 @var{mark}.  If the backend doesn't care, it must return the original
11056 @var{mark}, and not @code{nil} or any other type of garbage.  
11057
11058 The only use for this that I can see is what @code{nnvirtual} does with
11059 it---if a component group is auto-expirable, marking an article as read
11060 in the virtual group should result in the article being marked as
11061 expirable. 
11062
11063 There should be no result data from this function.
11064
11065
11066 @item (nnchoke-request-scan &optional GROUP SERVER)
11067
11068 This function may be called at any time (by Gnus or anything else) to
11069 request that the backend check for incoming articles, in one way or
11070 another.  A mail backend will typically read the spool file or query the
11071 POP server when this function is invoked.  The @var{group} doesn't have
11072 to be heeded---if the backend decides that it is too much work just
11073 scanning for a single group, it may do a total scan of all groups.  It
11074 would be nice, however, to keep things local if that's practical.
11075
11076 There should be no result data from this function.
11077
11078
11079 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
11080
11081 This is a request to fetch articles asynchronously later.
11082 @var{articles} is an alist of @var{(article-number line-number)}.  One
11083 would generally expect that if one later fetches article number 4, for
11084 instance, some sort of asynchronous fetching of the articles after 4
11085 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
11086 alist) would be fetched asynchronouly, but that is left up to the
11087 backend.  Gnus doesn't care.
11088
11089 There should be no result data from this function.
11090  
11091
11092 @item (nnchoke-request-group-description GROUP &optional SERVER)
11093
11094 The result data from this function should be a description of
11095 @var{group}. 
11096
11097 @example
11098 description-line = name <TAB> description eol
11099 name             = <string>
11100 description      = <text>
11101 @end example
11102
11103 @item (nnchoke-request-list-newsgroups &optional SERVER)
11104
11105 The result data from this function should be the description of all
11106 groups available on the server.
11107
11108 @example
11109 description-buffer = *description-line
11110 @end example
11111
11112
11113 @item (nnchoke-request-newgroups DATE &optional SERVER)
11114
11115 The result data from this function should be all groups that were
11116 created after @samp{date}, which is in normal human-readable date
11117 format.  The data should be in the active buffer format.
11118
11119
11120 @item (nnchoke-request-create-groups GROUP &optional SERVER)
11121
11122 This function should create an empty group with name @var{group}.  
11123
11124 There should be no return data.
11125
11126
11127 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
11128
11129 This function should run the expiry process on all articles in the
11130 @var{articles} range (which is currently a simple list of article
11131 numbers.)  It is left up to the backend to decide how old articles
11132 should be before they are removed by this function.  If @var{force} is
11133 non-@code{nil}, all @var{articles} should be deleted, no matter how new
11134 they are. 
11135
11136 This function should return a list of articles that it did not/was not
11137 able to delete.
11138
11139 There should be no result data returned.
11140
11141
11142 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
11143 &optional LAST)
11144
11145 This function should move @var{article} (which is a number) from
11146 @var{group} by calling @var{accept-form}.  
11147
11148 This function should ready the article in question for moving by
11149 removing any header lines it has added to the article, and generally
11150 should "tidy up" the article.  Then it should @code{eval}
11151 @var{accept-form} in the buffer where the "tidy" article is.  This will
11152 do the actual copying.  If this @code{eval} returns a non-@code{nil}
11153 value, the article should be removed.
11154
11155 If @var{last} is @code{nil}, that means that there is a high likelihood
11156 that there will be more requests issued shortly, so that allows some
11157 optimizations. 
11158
11159 There should be no data returned. 
11160
11161
11162 @item (nnchoke-request-accept-article GROUP &optional LAST)
11163
11164 This function takes the current buffer and inserts it into @var{group}.
11165 If @var{last} in @code{nil}, that means that there will be more calls to
11166 this function in short order.
11167
11168 There should be no data returned.
11169
11170
11171 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
11172
11173 This function should remove @var{article} (which is a number) from
11174 @var{group} and insert @var{buffer} there instead.
11175
11176 There should be no data returned.
11177
11178
11179 @item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
11180
11181 This function should delete @var{group}.  If @var{force}, it should
11182 really delete all the articles in the group, and then delete the group
11183 itself.  (If there is such a thing as "the group itself".)
11184
11185 There should be no data returned.
11186
11187
11188 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
11189
11190 This function should rename @var{group} into @var{new-name}.  All
11191 articles that are in @var{group} should move to @var{new-name}.
11192
11193 There should be no data returned.
11194
11195
11196 @end table
11197
11198
11199 @node Score File Syntax
11200 @subsection Score File Syntax
11201
11202 Score files are meant to be easily parsable, but yet extremely
11203 mallable.   It was decided that something that had the same read syntax
11204 as an Emacs Lisp list would fit that spec.
11205
11206 Here's a typical score file:
11207
11208 @lisp
11209 (("summary"
11210   ("win95" -10000 nil s)
11211   ("Gnus"))
11212  ("from"
11213   ("Lars" -1000))
11214  (mark -100))
11215 @end lisp
11216
11217 BNF definition of a score file:
11218
11219 @example
11220 score-file       = "" / "(" *element ")"
11221 element          = rule / atom
11222 rule             = string-rule / number-rule / date-rule
11223 string-rule      = "(" quote string-header quote space *string-match ")"
11224 number-rule      = "(" quote number-header quote space *number-match ")"
11225 date-rule        = "(" quote date-header quote space *date-match ")"
11226 quote            = <ascii 34>
11227 string-header    = "subject" / "from" / "references" / "message-id" / 
11228                    "xref" / "body" / "head" / "all" / "followup"
11229 number-header    = "lines" / "chars"
11230 date-header      = "date"
11231 string-match     = "(" quote <string> quote [ "" / [ space score [ "" / 
11232                    space date [ "" / [ space string-match-t ] ] ] ] ] ")"
11233 score            = "nil" / <integer>
11234 date             = "nil" / <natural number>
11235 string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" / 
11236                    "r" / "regex" / "R" / "Regex" /
11237                    "e" / "exact" / "E" / "Exact" /
11238                    "f" / "fuzzy" / "F" / "Fuzzy"
11239 number-match     = "(" <integer> [ "" / [ space score [ "" / 
11240                    space date [ "" / [ space number-match-t ] ] ] ] ] ")"
11241 number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
11242 date-match       = "(" quote <string> quote [ "" / [ space score [ "" / 
11243                    space date [ "" / [ space date-match-t ] ] ] ] ")"
11244 date-match-t     = "nil" / "at" / "before" / "after"
11245 atom             = "(" [ required-atom / optional-atom ] ")"
11246 required-atom    = mark / expunge / mark-and-expunge / files /
11247                    exclude-files / read-only / touched
11248 optional-atom    = adapt / local / eval 
11249 mark             = "mark" space nil-or-number
11250 nil-or-number    = "nil" / <integer>
11251 expunge          = "expunge" space nil-or-number
11252 mark-and-expunge = "mark-and-expunge" space nil-or-number
11253 files            = "files" *[ space <string> ]
11254 exclude-files    = "exclude-files" *[ space <string> ]
11255 read-only        = "read-only" [ space "nil" / space "t" ]
11256 adapt            = "adapt" [ space "nil" / space "t" / space adapt-rule ]
11257 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
11258 local            = "local" *[ space "(" <string> space <form> ")" ]
11259 eval             = "eval" space <form>
11260 space            = *[ " " / <TAB> / <NEWLINE> ]
11261 @end example
11262
11263 Any unrecognized elements in a score file should be ignored, but not
11264 discarded.  
11265
11266 As you can see, white space is needed, but the type and amount of white
11267 space is irrelevant.  This means that formatting of the score file is
11268 left up to the programmer---if it's simpler to just spew it all out on
11269 one looong line, then that's ok.
11270
11271 The meaning of the various atoms are explained elsewhere in this
11272 manual. 
11273
11274
11275 @node Headers
11276 @subsection Headers
11277
11278 Gnus uses internally a format for storing article headers that
11279 corresponds to the @sc{nov} format in a mysterious fashion.  One could
11280 almost suspect that the author looked at the @sc{nov} specification and
11281 just shamelessly @emph{stole} the entire thing, and one would be right.
11282
11283 @dfn{Header} is a severly overloaded term.  "Header" is used in RFC1036
11284 to talk about lines in the head of an article (eg., @code{From}).  It is
11285 used by many people as a synonym for "head"---"the header and the
11286 body".  (That should be avoided, in my opinion.)  And Gnus uses a format
11287 interanally that it calls "header", which is what I'm talking about
11288 here.  This is a 9-element vector, basically, with each header (ouch)
11289 having one slot. 
11290
11291 These slots are, in order: @code{number}, @code{subject}, @code{from},
11292 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
11293 @code{xref}.  There are macros for accessing and setting these slots --
11294 they all have predicatable names beginning with @code{mail-header-} and
11295 @code{mail-header-set-}, respectively.  
11296
11297 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
11298 be put in there.
11299
11300
11301 @node Ranges
11302 @subsection Ranges
11303
11304 @sc{gnus} introduced a concept that I found so useful that I've started
11305 using it a lot and have elaborated on it greatly. 
11306
11307 The question is simple: If you have a large amount of objects that are
11308 identified by numbers (say, articles, to take a @emph{wild} example)
11309 that you want to callify as being "included", a normal sequence isn't
11310 very useful.  (A 200,000 length sequence is a bit long-winded.)
11311
11312 The solution is as simple as the question: You just collapse the
11313 sequence. 
11314
11315 @example
11316 (1 2 3 4 5 6 10 11 12)
11317 @end example
11318
11319 is transformed into
11320
11321 @example
11322 ((1 . 6) (10 . 12))
11323 @end example
11324
11325 To avoid having those nasty @samp{(13 . 13)} elements to denote a
11326 lonesome object, a @samp{13} is a valid element:
11327
11328 @example
11329 ((1 . 6) 7 (10 . 12))
11330 @end example
11331
11332 This means that comparing two ranges to find out whether they are equal
11333 is slightly tricky:
11334
11335 @example
11336 ((1 . 5) 7 8 (10 . 12))
11337 @end example
11338
11339 and
11340
11341 @example
11342 ((1 . 5) (7 . 8) (10 . 12))
11343 @end example
11344
11345 are equal.  In fact, any non-descending list is a range:
11346
11347 @example
11348 (1 2 3 4 5)
11349 @end example
11350
11351 is a perfectly valid range, although a pretty longwinded one.  This is
11352 also legal:
11353
11354 @example
11355 (1 . 5)
11356 @end example
11357
11358 and is equal to the previous range.
11359
11360 Here's a BNF definition of ranges.  Of course, one must remember the
11361 semantic requirement that the numbers are non-descending.  (Any number
11362 of repetition of the same number is allowed, but apt to disappear in
11363 range handling.)
11364
11365 @example
11366 range           = simple-range / normal-range
11367 simple-range    = "(" number " . " number ")"
11368 normal-range    = "(" start-contents ")"
11369 contents        = "" / simple-range *[ " " contents ] / 
11370                   number *[ " " contents ]
11371 @end example
11372
11373 Gnus currently uses ranges to keep track of read articles and article
11374 marks.  I plan on implementing a number of range operators in C if The
11375 Powers That Be are willing to let me.  (I haven't asked yet, because I
11376 need to do some more thinking on what operators I need to make life
11377 totally range-based without ever having to convert back to normal
11378 sequences.) 
11379
11380
11381 @node Group Info
11382 @subsection Group Info
11383
11384 Gnus stores all permanent info on groups in a @dfn{group info} list.
11385 This list is from three to six elements (or more) long and exhaustively
11386 describes the group.
11387
11388 Here are two example group infos; one is a very simple group while the
11389 second is a more complex one:
11390
11391 @example
11392 ("no.group" 5 (1 . 54324))
11393
11394 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
11395                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
11396                 (nnml "")
11397                 (auto-expire (to-address "ding@@ifi.uio.no")))
11398 @end example
11399
11400 The first element is the group name as Gnus knows the group; the second
11401 is the group level; the third is the read articles in range format; the
11402 fourth is a list of article marks lists; the fifth is the select method;
11403 and the sixth contains the group parameters.
11404
11405 Here's a BNF definition of the group info format:
11406
11407 @example
11408 info          = "(" group space level space read 
11409                 [ "" / [ space marks-list [ "" / [ space method [ "" /
11410                 space parameters ] ] ] ] ] ")" 
11411 group         = quote <string> quote
11412 level         = <integer in the range of 1 to inf>
11413 read          = range
11414 marks-lists   = nil / "(" *marks ")"
11415 marks         = "(" <string> range ")"
11416 method        = "(" <string> *elisp-forms ")"
11417 parameters    = "(" *elisp-forms ")"
11418 @end example
11419
11420 Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
11421 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
11422 in pseudo-BNF.
11423
11424
11425 @node Various File Formats
11426 @subsection Various File Formats
11427
11428 @menu
11429 * Active File Format::      Information on articles and groups available.
11430 * Newsgroups File Format::  Group descriptions.
11431 @end menu
11432
11433
11434 @node Active File Format
11435 @subsubsection Active File Format
11436
11437 The active file lists all groups that are available on the server in
11438 question.  It also lists the highest and lowest current article numbers
11439 in each group.  
11440
11441 Here's an exceprt from a typical active file:
11442
11443 @example
11444 soc.motss 296030 293865 y
11445 alt.binaries.pictures.fractals 3922 3913 n
11446 comp.sources.unix 1605 1593 m
11447 comp.binaries.ibm.pc 5097 5089 y
11448 no.general 1000 900 y
11449 @end example
11450
11451 Here's a pseudo-BNF definition of this file:
11452
11453 @example
11454 active      = *group-line
11455 group-line  = group space high-number space low-number space flag <NEWLINE>
11456 group       = <non-white-space string>
11457 space       = " "
11458 high-number = <non-negative integer>
11459 low-number  = <positive integer>
11460 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
11461 @end example
11462
11463
11464 @node Newsgroups File Format
11465 @subsubsection Newsgroups File Format
11466
11467 The newsgroups file lists groups along with their descriptions.  Not all
11468 groups on the server have to be listed,  and not all groups in the file
11469 have to exist on the server.  The file is meant purely as information to
11470 the user.
11471
11472 The format is quite simple; a group name, a tab, and the description.
11473 Here's the definition:
11474
11475 @example
11476 newsgroups    = *line
11477 line          = group tab description <NEWLINE>
11478 group         = <non-white-space string>
11479 tab           = <TAB>
11480 description   = <string>
11481 @end example
11482
11483
11484 @node Emacs for Heathens
11485 @section Emacs for Heathens
11486
11487 Believe it or not, but some people who use Gnus haven't really used
11488 Emacs much before they embarked on their journey on the Gnus Love Boat.
11489 If you are one of those unfortunates whom "@kbd{M-C-a}", "kill the
11490 region", and "set @code{gnus-flargblossen} to an alist where the key is
11491 a regexp that is used for matching on the group name" are magical
11492 phrases with little or no meaning, then this appendix is for you.  If
11493 you are already familiar with Emacs, just ignore this and go fondle your
11494 cat instead.
11495
11496 @menu
11497 * Keystrokes::      Entering text and executing commands.
11498 * Emacs Lisp::      The built-in Emacs programming language.
11499 @end menu
11500
11501
11502 @node Keystrokes
11503 @subsection Keystrokes
11504
11505 @itemize @bullet
11506 @item
11507 Q: What is an experienced Emacs user?
11508
11509 @item 
11510 A: A person who wishes that the terminal had pedals.
11511 @end itemize
11512
11513 Yes, when you use Emacs, you are apt to use the control key, the shift
11514 key and the meta key a lot.  This is very annoying to some people
11515 (notably @code{vi}le users), and the rest of us just love the hell out
11516 of it.  Just give up and submit.  Emacs really does stand for
11517 "Escape-Meta-Alt-Control-Shift", and not "Editin Macros", as you may
11518 have heard from other disreputable sources (like the Emacs author).
11519
11520 The shift key is normally located near your pinky fingers, and are
11521 normally used to get capital letters and stuff.  You probably use it all
11522 the time.  The control key is normally marked "CTRL" or something like
11523 that.  The meta key is, funnily enough, never marked as such on any
11524 keyboards.  The one I'm curretly at has a key that's marked "Alt", which
11525 is the meta key on this keyboard.  It's usually located somewhere to the
11526 left hand side of the keyboard, usually on the bottom row.
11527
11528 Now, us Emacs people doesn't say "press the meta-control-m key", because
11529 that's just too inconvenient.  We say "press the @kbd{M-C-m} key".
11530 @kbd{M-} is the prefix that means "meta" and "C-" is the prefix that
11531 means "control".  So "press @kbd{C-k}" means "press down the control
11532 key, and hold it down while you press @kbd{k}".  "Press @kbd{M-C-k}"
11533 means "press down and hold down the meta key and the control key and
11534 then press @kbd{k}".  Simple, ay?
11535
11536 This is somewhat complicated by the fact that not all keyboards have a
11537 meta key.  In that case you can use the "escape" key.  Then @kbd{M-k}
11538 means "press escape, release escape, press @kbd{k}".  That's much more
11539 work than if you have a meta key, so if that's the case, I respectfully
11540 suggest you get a real keyboard with a meta key.  You can't live without
11541 it.
11542
11543
11544
11545 @node Emacs Lisp
11546 @subsection Emacs Lisp
11547
11548 Emacs is the King of Editors because it's really a Lisp interpreter.
11549 Each and every key you tap runs some Emacs Lisp code snippet, and since
11550 Emacs Lisp is an interpreted language, that means that you can configure
11551 any key to run any random code.  You just, like, do it.  
11552
11553 Gnus is written in Emacs Lisp, and is run as a bunch of interpreted
11554 functions.  (These are byte-compiled for speed, but it's still
11555 interpreted.)  If you decide that you don't like the way Gnus does
11556 certain things, it's trivial to have it do something a different way.
11557 (Well, at least if you know how to write Lisp code.)  However, that's
11558 beyond the scope of this manual, so we are simply going to talk about
11559 some common constructs that you normally use in your @file{.emacs} file
11560 to customize Gnus.
11561
11562 If you want to set the variable @code{gnus-florgbnize} to four (4), you
11563 write the following:
11564
11565 @lisp
11566 (setq gnus-florgbnize 4)
11567 @end lisp
11568
11569 This function (really "special form") @code{setq} is the one that can
11570 set a variable to some value.  This is really all you need to know.  Now
11571 you can go and fill your @code{.emacs} file with lots of these to change
11572 how Gnus works.
11573
11574 If you have put that thing in your @code{.emacs} file, it will be read
11575 and @code{eval}ed (which is lispese for "run") the next time you start
11576 Emacs.  If you want to change the variable right away, simply say
11577 @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
11578 previous "form", which here is a simple @code{setq} statement.
11579
11580 Go ahead---just try it, if you're located at your Emacs.  After you
11581 @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which
11582 is the return value of the form you @code{eval}ed.
11583
11584 Some pitfalls:
11585
11586 If the manual says "set @code{gnus-read-active-file} to @code{some}",
11587 that means:
11588
11589 @lisp
11590 (setq gnus-read-active-file 'some)
11591 @end lisp
11592
11593 On the other hand, if the manual says "set @code{gnus-nntp-server} to
11594 @samp{"nntp.ifi.uio.no"}", that means:
11595
11596 @lisp
11597 (setq gnus-nntp-server "nntp.ifi.uio.no")
11598 @end lisp
11599
11600 So be careful not to mix up strings (the latter) with symbols (the
11601 former).  The manual is unambiguous, but it can be confusing.
11602
11603
11604 @include gnus-faq.texi
11605
11606 @node Index
11607 @chapter Index
11608 @printindex cp
11609
11610 @node Key Index
11611 @chapter Key Index
11612 @printindex ky
11613
11614 @summarycontents
11615 @contents
11616 @bye
11617
11618 \f
11619 @c Local Variables:
11620 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
11621 @c End:
11622
11623 \1f