*** empty log message ***
[gnus] / texi / gnus.texi
1 \input texinfo                  @c -*-texinfo-*-
2 @comment %**start of header (This is for running Texinfo on a region.)
3 @setfilename gnus.info
4 @settitle September Gnus Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @iftex
9 @finalout
10 @end iftex
11 @setchapternewpage odd
12 @c      @smallbook
13 @comment %**end of header (This is for running Texinfo on a region.)
14 @tex
15 \overfullrule=0pt
16 %\global\baselineskip 30pt      % For printing in double spaces
17 @end tex
18
19 @ifinfo
20
21 This file documents Gnus, the GNU Emacs newsreader.
22
23 Copyright (C) 1995 Free Software Foundation, Inc.
24
25 Permission is granted to make and distribute verbatim copies of
26 this manual provided the copyright notice and this permission notice
27 are preserved on all copies.
28
29 @ignore
30 Permission is granted to process this file through Tex and print the
31 results, provided the printed document carries copying permission
32 notice identical to this one except for the removal of this paragraph
33 (this paragraph not being relevant to the printed manual).
34
35 @end ignore
36 Permission is granted to copy and distribute modified versions of this
37 manual under the conditions for verbatim copying, provided also that the
38 entire resulting derived work is distributed under the terms of a
39 permission notice identical to this one.
40
41 Permission is granted to copy and distribute translations of this manual
42 into another language, under the above conditions for modified versions.
43 @end ifinfo
44
45 @iftex
46
47 @titlepage
48 @title September Gnus Manual
49
50 @author by Lars Magne Ingebrigtsen
51 @page
52 @vskip 0pt plus 1filll
53 Copyright @copyright{} 1995 Free Software Foundation, Inc. 
54
55 Permission is granted to make and distribute verbatim copies of
56 this manual provided the copyright notice and this permission notice
57 are preserved on all copies.
58
59 Permission is granted to copy and distribute modified versions of this
60 manual under the conditions for verbatim copying, provided that the
61 entire resulting derived work is distributed under the terms of a
62 permission notice identical to this one.
63
64 Permission is granted to copy and distribute translations of this manual
65 into another language, under the above conditions for modified versions.
66
67 Cover art by Etienne Suvasa.
68 @end titlepage
69 @page
70
71 @end iftex
72
73 @node Top
74 @top The Gnus Newsreader
75
76 You can read news (and mail) from within Emacs by using Gnus.  The news
77 can be gotten by any nefarious means you can think of---@sc{nntp}, local
78 spool or your mbox file.  All at the same time, if you want to push your
79 luck.
80
81 @menu
82 * History::                 How Gnus got where it is today.
83 * Terminology::             We use really difficult, like, words here.
84 * Starting Up::             Finding news can be a pain.
85 * The Group Buffer::        Selecting, subscribing and killing groups.
86 * The Summary Buffer::      Reading, saving and posting articles.
87 * The Article Buffer::      Displaying and handling articles.
88 * The Server Buffer::       Making and editing virtual servers.
89 * Scoring::                 Assigning values to articles.
90 * Various::                 General purpose settings.
91 * Customization::           Tailoring Gnus to your needs.
92 * Troubleshooting::         What you might try if things do not work.
93 * The End::                 Farewell and goodbye.
94 * Appendices::              Technical stuff, Emacs intro, FAQ
95 * Index::                   Variable, function and concept index.
96 * Key Index::               Key Index.
97 @end menu
98
99 @node History
100 @chapter History
101
102 @cindex history
103 @sc{gnus} was written by Masanobu UMEDA.  When autumn crept up in '94,
104 Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
105
106 If you want to investigate the person responsible for this outrage, you
107 can point your (feh!) web browser to
108 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
109 distribution point for the new and spiffy versions of Gnus, also know as
110 The Site That Destroys Newsrcs And Drives People Mad.
111
112 During the first extended alpha period of develpment, the new Gnus was
113 called "(ding) Gnus".  @dfn{(ding)}, is, of course, short for @dfn{ding
114 is not Gnus}, which is a total and utter lie, but who cares? (Besides,
115 the "Gnus" in this abbreviation should probably be pronounced "news" as
116 UMEDA intended, which makes it a more appropriate name, don't you
117 think?)
118
119 In any case, after spending all that energy with coming up with a new
120 and spiffy name, we decided that the name was @emph{too} spiffy, so we
121 renamamed it back again to "Gnus".  But in mixed case.  "Gnus" vs.
122 "@sc{gnus}".  New vs. old.
123
124 Incidentally, the next Gnus generation will be called "September Gnus",
125 and won't be released until February.  Confused?  You will be.
126
127 @menu
128 * Why?::                What's the point of Gnus?
129 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
130 * Conformity::          Gnus tries to conform to all standards.
131 * Emacsen::             Gnus can be run on a few modern Emacsen.
132 * Contributors::        Oodles of people.  
133 * New Features::        Pointers to some of the new stuff in Gnus.
134 * Newest Features::     Features so new that they haven't been written yet.
135 @end menu
136
137 @node Why?
138 @section Why?
139
140 What's the point of Gnus?  
141
142 I want to provide a "rad", "happening", "way cool" and "hep" newsreader,
143 that lets you do anything you can think of.  That was my original
144 motivation, but while working on Gnus, it has become clear to me that
145 this generation of newsreaders really belong in the stone age.
146 Newsreaders haven't developed much since the infancy of the net.  If the
147 volume continues to rise with the current rate of increase, all current
148 newsreaders will be pretty much useless.  How do you deal with
149 newsgroups that have hundreds (or thousands) of new articles each day? 
150
151 Gnus offer no real solutions to these questions, but I would very much
152 like to see Gnus being used as a testing ground for new methods of
153 reading and fetching news.  Expanding on Umeda-san's wise decision to
154 separate the newsreader from the backends, Gnus now offers a simple
155 interface for anybody who wants to write new backends for fetching mail
156 and news from different sources.  I have added hooks for customizations
157 everywhere I can imagine useful.  By doing so, I'm inviting every one of
158 you to explore and invent new ways of reading news.
159
160 May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
161
162 @node Compatibility
163 @section Compatibility
164
165 @cindex compatibility
166 Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
167 bindings have been kept.  More key bindings have been added, of course,
168 but only in one or two obscure cases have old bindings been changed.
169
170 Our motto is:
171 @quotation
172 @cartouche
173 @center In a cloud bones of steel.
174 @end cartouche
175 @end quotation
176
177 All commands have kept their names.  Some internal functions have changed
178 their names.
179
180 The @code{gnus-uu} package has changed drastically. @xref{Decoding
181 Articles}. 
182
183 One major compatibility question if the presence of several summary
184 buffers.  All variables that are relevant while reading a group are
185 buffer-local to the summary buffer they belong in.  Although most
186 important variables have their values copied into their global
187 counterparts whenever a command is executed in the summary buffer, this
188 change might lead to incorrect values being used unless you are careful.
189
190 All code that relies on knowledge of @sc{gnus} internals will probably
191 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
192 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
193 maintains a hash table that points to the entries in this assoc (which
194 speeds up many functions), and changing the assoc directly will lead to
195 peculiar results.
196
197 @cindex hilit19
198 @cindex highlighting
199 Old hilit19 code does not work at all.  In fact, you should probably
200 remove all hilit code from all Gnus hooks
201 (@code{gnus-group-prepare-hook}, @code{gnus-summary-prepare-hook} and
202 @code{gnus-summary-article-hook}).  (Well, at the very least the first
203 two.)  Gnus provides various integrated functions for highlighting.
204 These are faster and more accurate.  To make life easier for everybody,
205 Gnus will by default remove all hilit calls from all hilit hooks.
206 Uncleanliness!  Away!
207
208 Packages like @code{expire-kill} will no longer work.  As a matter of
209 fact, you should probably remove all old @sc{gnus} packages (and other
210 code) when you start using Gnus.  More likely than not, Gnus already
211 does what you have written code to make @sc{gnus} do.  (Snicker.)
212
213 Even though old methods of doing things are still supported, only the
214 new methods are documented in this manual.  If you detect a new method of
215 doing something while reading this manual, that does not mean you have
216 to stop doing it the old way.
217
218 Gnus understands all @sc{gnus} startup files.
219
220 @kindex M-x gnus-bug
221 Overall, a casual user who hasn't written much code that depends on
222 @sc{gnus} internals should suffer no problems.  If problems occur,
223 please let me know (@kbd{M-x gnus-bug}).
224
225
226 @node Conformity
227 @section Conformity
228
229 No rebels without a clue here, ma'am.  We conform to all standards known
230 to (wo)man.  Except for those standards and/or conventions we disagree
231 with, of course.
232
233 @table @strong
234
235 @item RFC 822
236 There are no known breaches of this standard.
237
238 @item RFC 1036
239 There are no known breaches of this standard, either.
240
241 @item Usenet Seal of Approval
242 Gnus hasn't been formally through the Seal process, but I have read
243 through the Seal text and I think Gnus would pass.
244
245 @item Son-of-RFC 1036
246 We do have some breaches to this one.
247
248 @table @emph
249
250 @item MIME
251 Gnus does no MIME handling, and this standard-to-be seems to think that
252 MIME is the bees' knees, so we have major breakage here.
253
254 @item X-Newsreader
255 This is considered to be a "vanity header", while I consider it to be
256 consumer information.  After seeing so many badly formatted articles
257 coming from @code{tin} and @code{Netscape} I know not to use either of
258 those for posting articles.  I would not have known that if it wasn't
259 for the @code{X-Newsreader} header.
260
261 @item References
262 Gnus breaks lines if this header is long.  I infer from RFC1036 that
263 being conservative in what you output is not creating 5000-character
264 lines, so it seems like a good idea to me.  However, this standard-to-be
265 says that whitespace in the @code{References} header is to be preserved,
266 so...  It doesn't matter one way or the other to Gnus, so if somebody
267 tells me what The Way is, I'll change it.  Or not.
268 @end table
269
270 @end table
271
272 If you ever see Gnus act noncompliantly to the texts mentioned above,
273 don't hesitate to drop a note to Gnus Towers and let us know.
274
275
276 @node Emacsen
277 @section Emacsen
278 @cindex Emacsen
279 @cindex XEmacs
280 @cindex Mule
281 @cindex Emacs
282
283 Gnus should work on :
284
285 @itemize @bullet 
286
287 @item
288 Emacs 19.26 and up.
289
290 @item
291 XEmacs 19.12 and up.
292
293 @item 
294 Mule versions based on Emacs 19.26 and up.
295
296 @end itemize
297
298 Gnus will absolutely not work on any Emacsen older than that.  Not
299 reliably, at least. 
300
301 There are some vague differences in what Gnus does, though:
302
303 @itemize @bullet
304
305 @item
306 The mouse-face on Gnus lines under Emacs and Mule is delimited to
307 certain parts of the lines while they cover the entire line under
308 XEmacs. 
309
310 @item 
311 The same with current-article marking---XEmacs puts an underline under
312 the entire summary line while Emacs and Mule are nicer and kinder.
313
314 @item
315 XEmacs features more graphics---a logo and a toolbar.
316
317 @item
318 Citation highlighting us better under Emacs and Mule than under XEmacs.
319
320 @item
321 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
322 confusing. 
323
324 @end itemize
325
326
327 @node Contributors
328 @section Contributors
329 @cindex contributors
330
331 The new Gnus version couldn't have been done without the help of all the
332 people on the (ding) mailing list.  Every day for months I have gotten
333 tens of nice bug reports from them, filling me with joy, every single
334 one of them.  Smooches.  The people on the list have been tried beyond
335 endurance, what with my "oh, that's a neat idea <type type>, yup, I'll
336 release it right away <ship off> no wait, that doesn't work at all <type
337 type>, yup, I'll ship that one off right away <ship off> no, wait, that
338 absolutely does not work" policy for releases.  Micro$oft---bah.
339 Amateurs.  I'm @emph{much} worse.  (Or is that "worser"? "much worser"?
340 "worsest"?)
341
342 I would like to take this opportunity to thank the Academy for...  oops,
343 wrong show.
344
345 @itemize @bullet
346 @item
347 Of course, GNUS was written by Masanobu UMEDA.
348 @item 
349 Many excellent functions, especially dealing with scoring and
350 highlighting (as well as the @sc{soup} support) was written
351 by Per Abrahamsen.
352 @item
353 Innumerable bug fixes were written by Sudish Joseph.
354 @item 
355 @code{gnus-topic} was written by Ilja Weis.
356 @item
357 The refcard was written by Vladimir Alexiev.
358 @item
359 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
360 @item 
361 @code{nnfolder} has been much enhanced by Scott Byer.
362 @item
363 The orphan scoring was written by Peter Mutsaers.
364 @item 
365 GNU XEmacs support has been added by Fabrice Popineau. 
366 @item 
367 POP mail support was written by Ken Raeburn.
368 @item 
369 Various bits and pieces, especially dealing with .newsrc files, were
370 suggested and added by Hallvard B Furuseth.
371 @item 
372 Brian Edmonds has written @code{gnus-bbdb}.
373 @item 
374 Ricardo Nassif did the proof-reading.
375 @item
376 Kevin Davidson came up with the name @dfn{ding}, so blame him.
377 @item 
378 Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel
379 Quinlan, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have
380 all contributed code and suggestions.
381 @end itemize
382
383
384 @node New Features
385 @section New Features
386 @cindex new features
387
388 @itemize @bullet
389
390 @item
391 The look of all buffers can be changed by setting format-like variables
392 (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). 
393  
394 @item 
395 Local spool and several @sc{nntp} servers can be used at once
396 (@pxref{Foreign Groups}).  
397
398 @item 
399 You can combine groups into virtual groups (@pxref{nnvirtual}). 
400
401 @item 
402 You can read a number of different mail formats (@pxref{Reading Mail}).
403 All the mail backends implement a convenient mail expiry scheme
404 (@pxref{Expiring Old Mail Articles}). 
405
406 @item
407 Gnus can use various strategies for gathering threads that have lost
408 their roots (thereby gathering loose sub-threads into one thread) or it
409 can go back and retrieve enough headers to build a complete thread
410 (@pxref{Customizing Threading}).
411
412 @item 
413 Killed groups can be displayed in the group buffer, and you can read
414 them as well.
415
416 @item 
417 Gnus can do partial group updates---you do not have to retrieve the
418 entire active file just to check for new articles in a few groups
419 (@pxref{The Active File}).
420
421 @item 
422 Gnus implements a sliding scale of subscribedness to groups
423 (@pxref{Group Levels}).
424
425 @item 
426 You can score articles according to any number of criteria
427 (@pxref{Scoring}).  You can even get Gnus to find out how to score
428 articles for you (@pxref{Adaptive Scoring}).
429
430 @item 
431 Gnus maintains a dribble buffer that is auto-saved the normal Emacs
432 manner, so it should be difficult to lose much data on what you have
433 read if your machine should go down (@pxref{Auto Save}). 
434
435 @item 
436 Gnus now has its own startup file to avoid cluttering up the
437 @file{.emacs} file.
438
439 @item 
440 You can set the process mark on both groups and articles and perform
441 operations on all the marked items (@pxref{Process/Prefix}).
442
443 @item 
444 You can grep through a subset of groups and create a group from the
445 results (@pxref{nnkiboze}). 
446
447 @item 
448 You can list subsets of groups according to, well, anything
449 (@pxref{Listing Groups}). 
450
451 @item 
452 You can browse foreign servers and subscribe to groups from those
453 servers (@pxref{Browse Foreign Server}). 
454
455 @item 
456 Gnus can fetch articles asynchronously on a second connection to the
457 server (@pxref{Asynchronous Fetching}).
458
459 @item 
460 You can cache articles locally (@pxref{Article Caching}). 
461
462 @item 
463 The uudecode functions have been expanded and generalized
464 (@pxref{Decoding Articles}). 
465
466 @item
467 You can still post uuencoded articles, which was a little-known feature
468 of @sc{gnus}' past (@pxref{Uuencoding & Posting}).
469
470 @item
471 Fetching parents (and other articles) now actually works without
472 glitches (@pxref{Finding the Parent}). 
473
474 @item
475 Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
476
477 @item
478 Digests (and other files) can be used as the basis for groups
479 (@pxref{nndoc}).
480
481 @item 
482 Articles can be highlighted and customized (@pxref{Customizing
483 Articles}). 
484
485 @item 
486 URLs and other external references can be buttonized (@pxref{Article
487 Buttons}). 
488
489 @item
490 All Gnus buffers can be customized in a difficult fashion
491 (@pxref{Windows Configuration}). 
492
493 @item
494 You can click on buttons instead of using the keyboard
495 (@pxref{Buttons}). 
496
497 @item 
498 Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}). 
499
500 @end itemize
501
502 This is, of course, just a @emph{short} overview of the @emph{most}
503 important new features.  No, really.  There are tons more.  Yes, we have
504 feeping creaturism in full effect, but nothing too gratuitous, I would
505 hope. 
506
507
508 @node Newest Features
509 @section Newest Features
510 @cindex todo
511
512 Also known as the @dfn{todo list}.  Sure to be implemented before the
513 next millennium. 
514
515 Be afraid.  Be very afraid.
516
517 @itemize @bullet
518 @item
519 Native @sc{mime} support is something that should be done.  
520 @item
521 @code{trn}-like trees.
522 @item
523 @code{nn}-like pick-and-read summary interface.
524 @item 
525 Frame configuration.
526 @item 
527 Automatic re-scan of incoming mail.
528 @item
529 Buttonize more stuff in the article buffer.
530 @item
531 A better and simpler method for specifying mail composing methods. 
532 @item 
533 Marks for saved, forwarded, etc articles.
534 @item
535 Gather thread by filling in missing Message-IDs.
536 @item 
537 PGP support.
538 @item
539 Allow posting through mail-to-news gateways.
540 @item
541 @code{jka-compr} isn't fully supported.
542 @item
543 Do better word-wrap on cited text.
544 @item 
545 Better X-Face support with X-Face databases and stuff. 
546 @item
547 Really do unbinhexing.
548 @item
549 XEmacs toolbar.
550 @item
551 Don't kill summary buffers upon exit from the groups.
552 @item
553 Allow adaption on secondary marks.
554 @end itemize
555
556 And much, much, much more.  There is more to come than has already been
557 implemented.  (But that's always true, isn't it?)
558
559 @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
560 up-to-the-second todo list is located, so if you're really curious, you
561 could point your Web browser over that-a-way.
562
563
564 @node Terminology
565 @chapter Terminology
566
567 @cindex terminology
568 @table @dfn
569
570 @item news
571 @cindex news
572 This is what you are supposed to use this thing for---reading news.
573 News is generally fetched from a nearby @sc{nntp} server, and is
574 generally publicly available to everybody.  If you post news, the entire
575 world is likely to read just what you have written, and they'll all
576 snigger mischievously.  Behind your back.
577
578 @item mail
579 @cindex mail
580 Everything that's delivered to you personally is mail.  Some news/mail
581 readers (like Gnus) blur the distinction between mail and news, but
582 there is a difference.  Mail is private.  News is public.  Mailing is
583 not posting, and replying is not following up.
584
585 @item reply
586 Send a mail to the person who has written what you are reading.
587
588 @item follow up
589 Post an article to the current newsgroup responding to the article you
590 are reading.
591
592 @item backend
593 Gnus gets fed articles from a number of backends, both news and mail
594 backends.  Gnus does not handle the underlying media, so to speak---this
595 is all done by the backends.
596
597 @item native
598 Gnus will always use one method (and backend) as the @dfn{native}, or
599 default, way of getting news.
600
601 @item foreign
602 You can also have any number of foreign groups at the same time.  These
603 are groups that use different backends for getting news.
604
605 @item head
606 @cindex head
607 The top part of an article, where administration information (etc.) is
608 put. 
609
610 @item body
611 @cindex body
612 The rest of an article.  Everything that is not in the head is in the
613 body. 
614
615 @item header
616 @cindex header
617 A line from the head of an article. 
618
619 @item headers
620 @cindex headers
621 A collection of such lines, or a collection of heads.  Or even a
622 collection of @sc{nov} lines.
623
624 @item @sc{nov}
625 @cindex nov
626 When Gnus enters a group, it asks the backend for the headers for all
627 the unread articles in the group.  Most servers support the News OverView
628 format, which is much smaller and much faster to read than the normal
629 HEAD format. 
630
631 @item level
632 @cindex levels
633 Each group is subscribed at some @dfn{level} or other (1-9).  The ones
634 that have a lower level are "more" subscribed than the groups with a
635 higher level.  In fact, groups on levels 1-5 are considered
636 @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
637 are @dfn{killed}.  Commands for listing groups and scanning for new
638 articles will all use the numeric prefix as @dfn{working level}.
639
640 @item killed groups
641 @cindex killed groups
642 No information on killed groups is stored or updated, which makes killed
643 groups much easier to handle than subscribed groups.
644
645 @item zombie groups
646 @cindex zombie groups
647 Just like killed groups, only slightly less dead.
648
649 @item active file
650 @cindex active file
651 The news server has to keep track of what articles it carries, and what
652 groups exist.  All this information in stored in the active file, which
653 is rather large, as you might surmise.
654
655 @item bogus groups
656 @cindex bogus groups
657 A group that exists in the @file{.newsrc} file, but isn't known to the
658 server (i. e.,  it isn't in the active file), is a @emph{bogus group}.
659 This means that the group probably doesn't exist (any more).
660 @end table
661
662 @node Starting Up
663 @chapter Starting Gnus
664 @cindex starting up
665
666 @kindex M-x gnus
667 If your system administrator has set things up properly, starting Gnus
668 and reading news is extremely easy---you just type @kbd{M-x gnus}.
669
670 If things do not go smoothly at startup, you have to twiddle some
671 variables. 
672
673 @menu
674 * Finding the News::    Choosing a method for getting news.
675 * The First Time::      What does Gnus do the first time you start it?
676 * The Server is Down::  How can I read my mail then?
677 * Slave Gnusii::        You can have more than one Gnus active at a time.
678 * Fetching a Group::    Starting Gnus just to read a group.
679 * New Groups::          What is Gnus supposed to do with new groups?
680 * Startup Files::       Those pesky startup files---@file{.newsrc}.
681 * Auto Save::           Recovering from a crash.
682 * The Active File::     Reading the active file over a slow line Takes Time.
683 * Startup Variables::   Other variables you might change.
684 @end menu
685
686 @node Finding the News
687 @section Finding the News
688
689 @vindex gnus-select-method
690 The @code{gnus-select-method} variable controls how Gnus finds news.
691 This variable should be a list where the first element says @dfn{how}
692 and the second element says @dfn{where}.  This method is is your native
693 method.  All groups that are not fetched with this method are foreign
694 groups.
695
696 For instance, if you want to get your daily dosage of news from the
697 @samp{news.somewhere.edu} @sc{nntp} server, you'd say:
698
699 @lisp
700 (setq gnus-select-method '(nntp "news.somewhere.edu"))
701 @end lisp
702
703 If you want to read directly from the local spool, say:
704
705 @lisp
706 (setq gnus-select-method '(nnspool ""))
707 @end lisp
708
709 If you can use a local spool, you probably should, as it will almost
710 certainly be much faster.
711
712 @vindex gnus-nntpserver-file
713 @cindex NNTPSERVER
714 @cindex @sc{nntp} server
715 If this variable is not set, Gnus will take a look at the
716 @code{NNTPSERVER} environment variable.  If that variable isn't set,
717 Gnus will see whether @code{gnus-nntpserver-file} (default
718 @file{/etc/nntpserver}) has any opinions in the matter.  It that fails
719 as well, Gnus will will try to use the machine that is running Emacs as
720 an @sc{nntp} server.  That's a longshot, though.
721
722 @vindex gnus-nntp-server
723 If @code{gnus-nntp-server} is set, this variable will override
724 @code{gnus-select-method}.  You should therefore set
725 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
726
727 @vindex gnus-secondary-servers
728 You can also make Gnus prompt you interactively for the name of an
729 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
730 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
731 in the @code{gnus-secondary-servers} list (if any).  You can also just
732 type in the name of any server you feel like visiting.
733
734 However, if you use one @sc{nntp} server regularly, and are just
735 interested in a couple of groups from a different server, you would be
736 better served by using the @code{gnus-group-browse-foreign-server}
737 command from the group buffer.  It will let you have a look at what
738 groups are available, and you can subscribe to any of the groups you
739 want to.  This also makes @file{.newsrc} maintenance much tidier.
740 @xref{Foreign Groups}.
741
742 @vindex gnus-secondary-select-methods
743 A slightly different approach to foreign groups is to set the
744 @code{gnus-secondary-select-methods} variable.  The select methods
745 listed in this variable are in many ways just as native as the
746 @code{gnus-select-method} server.  They will also be queried for active
747 files during startup (if that's required), and new newsgroups that
748 appear on these servers will be subscribed (or not) just as native
749 groups are.
750
751 For instance, if you use the @code{nnmbox} backend to read you mail, you
752 would typically set this variable to
753
754 @lisp
755 (setq gnus-secondary-select-methods '((nnmbox "")))
756 @end lisp
757
758 @node The First Time
759 @section The First Time
760 @cindex first time usage
761
762 If no startup files exist, Gnus will try to determine what groups should
763 be subscribed by default.
764
765 @vindex gnus-default-subscribed-newsgroups
766 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
767 will subscribe you to just those groups in that list, leaving the rest
768 killed.  Your system administrator should have set this variable to
769 something useful.
770
771 Since she hasn't, Gnus will just subscribe you to a few randomly picked
772 groups (i.e., @samp{*.newusers}).  (@dfn{Random} is here defined as
773 "whatever Lars thinks you should read".)
774
775 You'll also be subscribed to the Gnus documentation group, which should
776 help you with most common problems.  
777
778 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
779 use the normal functions for handling new groups, and not do anything
780 special.
781
782 @node The Server is Down
783 @section The Server is Down
784 @cindex server errors
785
786 If the default server is down, Gnus will understandably have some
787 problems starting.  However, if you have some mail groups in addition to
788 the news groups, you may want to start Gnus anyway.
789
790 Gnus, being the trusting sort of program, will ask whether to proceed
791 without a native select method if that server can't be contacted.  This
792 will happen whether the server doesn't actually exist (i.e., you have
793 given the wrong address) or the server has just momentarily taken ill
794 for some reason or other.  
795
796 If Gnus says "nntp server on <your server> can't be opened.  Continue?",
797 you do not want to continue unless you have some foreign groups that you
798 want to read.  Even if you don't, Gnus will let you continue, but you'll
799 find it difficult to actually do anything in the group buffer.  But,
800 hey, that's your problem.  Blllrph!
801
802 @findex gnus-no-server
803 If you know that the server is definitely down, or you just want to read
804 your mail without bothering with the server at all, you can use the
805 @code{gnus-no-server} command to start Gnus.  That might come in handy
806 if you're in a hurry as well.
807
808
809 @node Slave Gnusii
810 @section Slave Gnusiï
811 @cindex slave
812
813 You might want to run more than one Emacs with more than one Gnus at the
814 same time.  If you are using different @file{.newsrc} files (eg., if you
815 are using the two different Gnusiï to read from two different servers),
816 that is no problem whatsoever.  You just do it.
817
818 The problem appears when you want to run two Gnusiï that use the same
819 @code{.newsrc} file.
820
821 To work around that problem some, we here at the Think-Tank at the Gnus
822 Towers have come up with a new concept: @dfn{Masters} and
823 @dfn{servants}.  (We have applied for a patent on this concept, and have
824 taken out a copyright on those words.  If you wish to use those words in
825 conjunction with each other, you have to send $1 per usage instance to
826 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
827 Applications}) will be much more expensive, of course.)
828
829 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
830 however you do it).  Each subsequent slave Gnusiï should be started with
831 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
832 files, but some slave files that contains information only on what
833 groups have been read in the slave session.  When a master Gnus starts,
834 it will read (and delete) these slave files, incorporating all
835 information from all of them.  (The slave files will be read in the
836 sequence they were created, so the latest changes will have precedence.)
837
838 Information from the slave files has, of course, presedence over the
839 information in the normal (i. e., master) @code{.newsrc} file.
840
841
842 @node Fetching a Group
843 @section Fetching a Group
844
845 @findex gnus-fetch-group
846 It it sometime convenient to be able to just say "I want to read this
847 group and I don't care whether Gnus has been started or not".  This is
848 perhaps more useful for people who write code than for users, but the
849 command @code{gnus-fetch-group} provides this functionality in any
850 case.  It takes the group name as a paramenter.
851
852
853 @node New Groups
854 @section New Groups
855 @cindex new groups
856
857 @vindex gnus-subscribe-newsgroup-method
858 What Gnus does when it encounters a new group is determined by the
859 @code{gnus-subscribe-newsgroup-method} variable.
860
861 This variable should contain a function.  Some handy pre-fab values
862 are:
863
864 @table @code
865
866 @item gnus-subscribe-randomly
867 @vindex gnus-subscribe-randomly
868 Subscribe all new groups randomly.
869
870 @item gnus-subscribe-alphabetically
871 @vindex gnus-subscribe-alphabetically
872 Subscribe all new groups alphabetically.
873
874 @item gnus-subscribe-hierarchically
875 @vindex gnus-subscribe-hierarchically
876 Subscribe all new groups hierarchically.
877
878 @item gnus-subscribe-interactively
879 @vindex gnus-subscribe-interactively
880 Subscribe new groups interactively.  This means that Gnus will ask
881 you about @strong{all} new groups.
882
883 @item gnus-subscribe-killed
884 @vindex gnus-subscribe-killed
885 Kill all new groups.
886
887 @item gnus-subscribe-zombies
888 @vindex gnus-subscribe-zombies
889 Make all new groups zombies.  You can browse the zombies later (with
890 @kbd{A z}) and either kill them all off properly, or subscribe to them.
891 This is the default.
892 @end table
893
894 @vindex gnus-subscribe-hierarchical-interactive
895 A closely related variable is
896 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
897 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
898 hierarchical fashion whether to subscribe to new groups or not.  Gnus
899 will ask you for each sub-hierarchy whether you want to descend the
900 hierarchy or not.
901
902 One common way to control which new newsgroups should be subscribed or
903 ignored is to put an @dfn{options} line at the start of the
904 @file{.newsrc} file.  Here's an example:
905
906 @example
907 options -n !alt.all !rec.all sci.all
908 @end example
909
910 @vindex gnus-subscribe-options-newsgroup-method
911 This line obviously belongs to a serious-minded intellectual scientific
912 person (or she may just be plain old boring), because it says that all
913 groups that have names beginning with @samp{alt} and @samp{rec} should
914 be ignored, and all groups with names beginning with @samp{sci} should
915 be subscribed.  Gnus will not use the normal subscription method for
916 subscribing these groups.
917 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
918 variable defaults to @code{gnus-subscribe-alphabetically}.
919
920 @vindex gnus-options-not-subscribe
921 @vindex gnus-options-subscribe
922 If you don't want to mess with your @file{.newsrc} file, you can just
923 set the two variables @code{gnus-options-subscribe} and
924 @code{gnus-options-not-subscribe}.  These two variables do exactly the
925 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
926 the the new group matches the first, it will be unconditionally
927 subscribed, and if it matches the latter, it will be ignored.
928
929 @vindex gnus-auto-subscribed-groups
930 Yet another variable that meddles here is
931 @code{gnus-auto-subscribed-groups}.  It works exactly like
932 @code{gnus-options-subscribe}, and is therefore really superfluos, but I
933 thought it would be nice to have two of these.  This variable is more
934 meant for setting some ground rules, while the other variable is used
935 more for user fiddling.  By default this variable makes all new groups
936 that come from mail backends (@code{nnml}, @code{nnbabyl},
937 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
938 don't like that, just set this variable to @code{nil}.
939
940 @vindex gnus-check-new-newsgroups
941 If you are satisfied that you really never want to see any new groups,
942 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
943 also save you some time at startup.  Even if this variable is
944 @code{nil}, you can always subscribe to the new groups just by pressing
945 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
946 is @code{t} by default.
947
948 Gnus normally determines whether a group is new or not by comparing the
949 list of groups from the active file(s) with the lists of subscribed and
950 dead groups.  This isn't a particularly fast method.  If
951 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
952 server for new groups since the last time.  This is both faster &
953 cheaper.  This also means that you can get rid of the list of killed
954 groups altogether, so you may set @code{gnus-save-killed-list} to
955 @code{nil}, which will save time both at startup, at exit, and all over.
956 Saves disk space, too.  Why isn't this the default, then?
957 Unfortunately, not all servers support this function. 
958
959 This variable can also be a list of select methods.  If so, Gnus will
960 issue an @code{ask-server} command to each of the select methods, and
961 subscribe them (or not) using the normal methods.  This might be handy
962 if you are monitoring a few servers for new groups.  A side effect is
963 that startup will take much longer, so you can meditate while waiting.
964 Use the mantra "dingnusdingnusdingnus" to achieve permanent happiness.
965
966 @node Startup Files
967 @section Startup Files
968 @cindex startup files
969 @cindex .newsrc
970
971 Now, you all know about the @file{.newsrc} file.  All subscription
972 information is traditionally stored in this file.
973
974 Things got a bit more complicated with @sc{gnus}.  In addition to
975 keeping the @file{.newsrc} file updated, it also used a file called
976 @file{.newsrc.el} for storing all the information that didn't fit into
977 the @file{.newsrc} file.  (Actually, it duplicated everything in the
978 @file{.newsrc} file.)  @sc{gnus} would read whichever one of these files
979 that were the most recently saved, which enabled people to swap between
980 @sc{gnus} and other newsreaders.
981
982 That was kinda silly, so Gnus went one better: In addition to the
983 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
984 @file{.newsrc.eld}.  It will read whichever of these files that are most
985 recent, but it will never write a @file{.newsrc.el} file.
986
987 @vindex gnus-save-newsrc-file
988 You can also turn off writing the @file{.newsrc} file by setting
989 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
990 the file and save some space, as well as making exit from Gnus faster.
991 However, this will make it impossible to use other newsreaders than
992 Gnus.  But hey, who would want to, right?
993
994 @vindex gnus-save-killed-list
995 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
996 list of killed groups to the startup file.  This will save both time
997 (when starting and quitting) and space (on disk).  It will also means
998 that Gnus has no record of what groups are new or old, so the automatic
999 new groups subscription methods become meaningless.  You should always
1000 set @code{gnus-check-new-newsgroups} to @code{nil} or @code{ask-server}
1001 if you set this variable to @code{nil} (@pxref{New Groups}).
1002
1003 @vindex gnus-startup-file
1004 The @code{gnus-startup-file} variable says where the startup files are.
1005 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1006 file being whatever that one is with a @samp{.eld} appended.
1007
1008 @vindex gnus-save-newsrc-hook
1009 @vindex gnus-save-quick-newsrc-hook
1010 @vindex gnus-save-standard-newsrc-hook
1011 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1012 files, while @code{gnus-save-quick-newsrc-hook} is called just before
1013 saving the @file{.newsrc.eld} file, and
1014 @code{gnus-save-standard-newsrc-hook} is called just before saving the
1015 @file{.newsrc} file.  The latter two are commonly used to turn version
1016 control on or off.  Version control is off by default when saving.
1017
1018 @node Auto Save
1019 @section Auto Save
1020 @cindex dribble file
1021 @cindex auto-save
1022
1023 Whenever you do something that changes the Gnus data (reading articles,
1024 catching up, killing/subscribing groups), the change is added to a
1025 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
1026 Emacs way.  If your Emacs should crash before you have saved the
1027 @file{.newsrc} files, all changes you have made can be recovered from
1028 this file.
1029
1030 If Gnus detects this file at startup, it will ask the user whether to
1031 read it.  The auto save file is deleted whenever the real startup file is
1032 saved.
1033
1034 @vindex gnus-use-dribble-file
1035 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1036 maintain a dribble buffer.  The default is @code{t}.
1037
1038 @vindex gnus-dribble-directory
1039 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
1040 this variable is @code{nil}, which it is by default, Gnus will dribble
1041 into the same directory as the @file{.newsrc} file is located.  (This is
1042 normally the user's home directory.)
1043
1044 @node The Active File
1045 @section The Active File
1046 @cindex active file
1047 @cindex ignored groups
1048
1049 When Gnus starts, or indeed whenever it tries to determine whether new
1050 articles have arrived, it reads the active file.  This is a very large
1051 file that lists all the active groups and articles on the @sc{nntp}
1052 server.
1053
1054 @vindex gnus-ignored-newsgroups
1055 Before examining the active file, Gnus deletes all lines that match the
1056 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
1057 any groups with bogus names, but you can use this variable to make Gnus
1058 ignore hierarchies you aren't ever interested in.  
1059 @c This variable is
1060 @c @code{nil} by default, and will slow down active file handling somewhat
1061 @c if you set it to anything else.
1062
1063 @vindex gnus-read-active-file
1064 The active file can be rather Huge, so if you have a slow network, you
1065 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1066 reading the active file.  This variable is @code{t} by default.
1067
1068 Gnus will try to make do by just getting information on the groups
1069 that you actually subscribe to.
1070
1071 Note that if you subscribe to lots and lots of groups, setting this
1072 variable to @code{nil} will probably make Gnus slower, not faster.  At
1073 present, having this variable @code{nil} will slow Gnus down
1074 considerably, unless you read news over a 2400 baud modem.  
1075
1076 This variable can also have the value @code{some}.  Gnus will then
1077 attempt to read active info only on the subscribed groups.  On some
1078 servers this is quite fast (on sparkling, brand new INN servers that
1079 support the @samp{LIST ACTIVE group} command), on others this is not
1080 fast at all.  In any case, @code{some} should be faster than @code{nil},
1081 and is certainly faster than @code{t} over slow lines.
1082
1083 If this variable is @code{nil}, Gnus will as for group info in total
1084 lock-step, which isn't very fast.  If it is @code{some} and you use an
1085 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
1086 read all the replies in one swoop.  This will normally result in better
1087 performance, but if the server does not support the aforementioned
1088 @samp{LIST ACTIVE group} command, this isn't very nice to the server.
1089
1090 In any case, if you use @code{some} or @code{nil}, you should kill all
1091 groups that you aren't interested in.
1092
1093 @node Startup Variables
1094 @section Startup Variables
1095
1096 @table @code
1097
1098 @item gnus-load-hook
1099 @vindex gnus-load-hook
1100 A hook that is run while Gnus is being loaded.  Note that this hook will
1101 normally be run just once in each Emacs session, no matter how many
1102 times you start Gnus.
1103
1104 @item gnus-startup-hook
1105 @vindex gnus-startup-hook
1106 A hook that is run after starting up Gnus successfully.
1107
1108 @item gnus-check-bogus-newsgroups
1109 @vindex gnus-check-bogus-newsgroups
1110 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1111 startup.  A @dfn{bogus group} is a group that you have in your
1112 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1113 bogus groups isn't very quick, so to save time and resources, it's best
1114 to leave this option off, and instead do the checking for bogus groups
1115 once in a while from the group buffer (@pxref{Group Maintenance}).
1116
1117 @item gnus-inhibit-startup-message
1118 @vindex gnus-inhibit-startup-message
1119 If non-@code{nil}, the startup message won't be displayed.  That way,
1120 your boss might not notice that you are reading news instead of doing
1121 your job.
1122
1123 @item gnus-no-groups-message
1124 @vindex gnus-no-groups-message
1125 Message displayed by Gnus when no groups are available.
1126 @end table
1127
1128 @node The Group Buffer
1129 @chapter The Group Buffer
1130 @cindex group buffer
1131
1132 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1133 is the first buffer shown when Gnus starts, and will never be killed as
1134 long as Gnus is active.
1135
1136 @menu
1137 * Group Buffer Format::    Information listed and how you can change it.
1138 * Group Maneuvering::      Commands for moving in the group buffer.
1139 * Selecting a Group::      Actually reading news.
1140 * Subscription Commands::  Unsubscribing, killing, subscribing.
1141 * Group Levels::           Levels? What are those, then?
1142 * Group Score::            A mechanism for finding out what groups you like.
1143 * Marking Groups::         You can mark groups for later processing.
1144 * Foreign Groups::         How to create foreign groups.
1145 * Group Parameters::       Each group may have different parameters set.
1146 * Listing Groups::         Gnus can list various subsets of the groups.
1147 * Sorting Groups::         Re-arrange the group order.
1148 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1149 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
1150 * Exiting Gnus::           Stop reading news and get some work done.
1151 * Group Topics::           A folding group mode divided into topics.
1152 * Misc Group Stuff::       Other stuff that you can to do.
1153 @end menu
1154
1155 @node Group Buffer Format
1156 @section Group Buffer Format
1157 @cindex group buffer format
1158
1159 The default format of the group buffer is nice and dull, but you can
1160 make it as exciting and ugly as you feel like.
1161
1162 Here's a couple of example group lines:
1163
1164 @example
1165      25: news.announce.newusers
1166  *    0: alt.fan.andrea-dworkin
1167 @end example
1168
1169 Quite simple, huh?
1170
1171 You can see that there are 25 unread articles in
1172 @samp{news.announce.newusers}.  There are no unread articles, but some
1173 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1174 asterisk at the beginning of the line?)
1175
1176 @vindex gnus-group-line-format
1177 You can fuck that up to your heart's delight by fiddling with the
1178 @code{gnus-group-line-format} variable.  This variable works along the
1179 lines of a @code{format} specification, which is pretty much the same as
1180 a @code{printf} specifications, for those of you who use (feh!) C.
1181 @xref{Formatting Variables}. 
1182
1183 The default value that produced those lines above is 
1184 @samp{"%M%S%5y: %(%g%)\n"}.
1185
1186 There should always be a colon on the line; the cursor always moves to
1187 the colon after performing an operation.  Nothing else is required---not
1188 even the group name.  All displayed text is just window dressing, and is
1189 never examined by Gnus.  Gnus stores all real information it needs using
1190 text properties.
1191
1192 (Note that if you make a really strange, wonderful, spreadsheet-like
1193 layout, everybody will believe you are hard at work with the accounting
1194 instead of wasting time reading news.)
1195
1196 Here's a list of all available format characters:
1197
1198 @table @samp
1199
1200 @item M    
1201 Only marked articles.
1202
1203 @item S
1204 Whether the group is subscribed.
1205
1206 @item L    
1207 Level of subscribedness.
1208
1209 @item N
1210 Number of unread articles.
1211
1212 @item I
1213 Number of dormant articles.
1214
1215 @item T
1216 Number of ticked articles.
1217
1218 @item R
1219 Number of read articles.
1220
1221 @item t
1222 Total number of articles.
1223
1224 @item y
1225 Number of unread, unticked, non-dormant articles.
1226
1227 @item i
1228 Number of ticked and dormant articles.
1229
1230 @item g
1231 Full group name.
1232
1233 @item G
1234 Group name.
1235
1236 @item D
1237 Newsgroup description.
1238
1239 @item o
1240 Moderated.
1241
1242 @item O
1243 Moderated.
1244
1245 @item s
1246 Select method.
1247
1248 @item n
1249 Select from where.
1250
1251 @item z
1252 A string that looks like @samp{<%s:%n>} if a foreign select method is
1253 used.
1254
1255 @item c
1256 Short (collapsed) group name.
1257
1258 @item u
1259 User defined specifier.  The next character in the format string should
1260 be a letter.  @sc{gnus} will call the function
1261 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1262 following @samp{%u}.  The function will be passed the current headers as
1263 argument.  The function should return a string, which will be inserted
1264 into the buffer just like information from any other specifier.
1265 @end table
1266
1267 @cindex *
1268 All the "number-of" specs will be filled with an asterisk (@samp{*}) if
1269 no info is available---for instance, if it is a non-activated foreign
1270 group, or a bogus (or semi-bogus) native group.
1271
1272 @vindex gnus-group-mode-line-format
1273 The mode line can be changed by setting
1274 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
1275 format specifiers:
1276
1277 @table @samp
1278 @item S
1279 The native news server.
1280 @item M
1281 The native select method.
1282 @end table
1283
1284 @node Group Maneuvering
1285 @section Group Maneuvering
1286 @cindex group movement
1287
1288 All movement commands understand the numeric prefix and will behave as
1289 expected, hopefully. 
1290
1291 @table @kbd
1292
1293 @item n
1294 @kindex n (Group)
1295 @findex gnus-group-next-unread-group
1296 Go to the next group that has unread articles
1297 (@code{gnus-group-next-unread-group}).
1298
1299 @item p
1300
1301 @itemx DEL
1302 @kindex DEL (Group)
1303 @kindex p (Group)
1304 @findex gnus-group-prev-unread-group
1305 Go to the previous group group that has unread articles
1306 (@code{gnus-group-prev-unread-group}).
1307
1308 @item N
1309 @kindex N (Group)
1310 @findex gnus-group-next-group
1311 Go to the next group (@code{gnus-group-next-group}).
1312
1313 @item P
1314 @kindex P (Group)
1315 @findex gnus-group-prev-group
1316 Go to the previous group (@code{gnus-group-prev-group}).
1317
1318 @item M-p
1319 @kindex M-p (Group)
1320 @findex gnus-group-next-unread-group-same-level
1321 Go to the next unread group on the same level (or lower)
1322 (@code{gnus-group-next-unread-group-same-level}). 
1323
1324 @item M-n
1325 @kindex M-n (Group)
1326 @findex gnus-group-prev-unread-group-same-level
1327 Go to the previous unread group on the same level (or lower)
1328 (@code{gnus-group-prev-unread-group-same-level}). 
1329 @end table
1330
1331 Three commands for jumping to groups:
1332
1333 @table @kbd
1334
1335 @item j
1336 @kindex j (Group)
1337 @findex gnus-group-jump-to-group
1338 Jump to a group (and make it visible if it isn't already)
1339 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1340 like living groups.
1341
1342 @item ,
1343 @kindex , (Group)
1344 @findex gnus-group-best-unread-group
1345 Jump to the unread group with the lowest level
1346 (@code{gnus-group-best-unread-group}). 
1347
1348 @item .
1349 @kindex . (Group)
1350 @findex gnus-group-first-unread-group
1351 Jump to the first group with unread articles
1352 (@code{gnus-group-first-unread-group}).  
1353 @end table
1354
1355 @vindex gnus-group-goto-unread
1356 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1357 commands will move to the next group, not the next unread group.  Even
1358 the commands that say they move to the next unread group.  The default
1359 is @code{t}.
1360
1361 @node Selecting a Group
1362 @section Selecting a Group
1363 @cindex group selection
1364
1365 @table @kbd
1366
1367 @item SPACE
1368 @kindex SPACE (Group)
1369 @findex gnus-group-read-group
1370 Select the current group, switch to the summary buffer and display the
1371 first unread article (@code{gnus-group-read-group}).  If there are no
1372 unread articles in the group, or if you give a non-numerical prefix to
1373 this command, Gnus will offer to fetch all the old articles in this
1374 group from the server.  If you give a numerical prefix @var{N}, Gnus
1375 will fetch @var{N} number of articles.  If @var{N} is positive, fetch
1376 the @var{N} newest articles, if @var{N} is negative, fetch the
1377 @var{abs(N)} oldest articles.
1378
1379 @item RET
1380 @kindex RET (Group)
1381 @findex gnus-group-select-group
1382 Select the current group and switch to the summary buffer
1383 (@code{gnus-group-select-group}).  Takes the same arguments as
1384 @code{gnus-group-read-group}---the only difference is that this command
1385 does not display the first unread article automatically upon group
1386 entry. 
1387
1388 @item M-RET
1389 @kindex M-RET (Group)
1390 @findex gnus-group-quick-select-group
1391 This does the same as the command above, but tries to do it with the
1392 minimum amount off fuzz (@code{gnus-group-quick-select-group}).  No
1393 scoring/killing will be performed, there will be no highlights and no
1394 expunging.  This might be useful if you're in a real hurry and have to
1395 enter some humongous groups.
1396
1397 @item M-SPACE
1398 @kindex M-RET (Group)
1399 @findex gnus-group-visible-select-group
1400 This is yet one more command that does the same as the one above, but
1401 this one does it without expunging and hiding dormants
1402 (@code{gnus-group-visible-select-group}).  
1403
1404 @item c
1405 @kindex c (Group)
1406 @findex gnus-group-catchup-current
1407 Mark all unticked articles in this group as read
1408 (@code{gnus-group-catchup-current}). 
1409
1410 @item C
1411 @kindex C (Group)
1412 @findex gnus-group-catchup-current-all
1413 Mark all articles in this group, even the ticked ones, as read
1414 (@code{gnus-group-catchup-current-all}). 
1415 @end table
1416
1417 @vindex gnus-large-newsgroup
1418 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1419 to be a big group.  This is 200 by default.  If the group has more
1420 unread articles than this, Gnus will query the user before entering the
1421 group.  The user can then specify how many articles should be fetched
1422 from the server.  If the user specifies a negative number (@samp{-n}),
1423 the @samp{n} oldest articles will be fetched.  If it is positive, the
1424 @samp{n} articles that have arrived most recently will be fetched.
1425
1426 @vindex gnus-select-group-hook
1427 @vindex gnus-auto-select-first
1428 @code{gnus-auto-select-first} control whether any articles are selected
1429 automatically when entering a group.  
1430
1431 @table @code
1432
1433 @item nil
1434 Don't select any articles when entering the group.  Just display the
1435 full summary buffer.
1436
1437 @item t
1438 Select the first unread article when entering the group.  
1439
1440 @item best
1441 Select the most high-scored article in the group when entering the
1442 group. 
1443 @end table
1444         
1445 If you want to prevent automatic selection in some group (say, in a
1446 binary group with Huge articles) you can set this variable to @code{nil}
1447 in @code{gnus-select-group-hook}, which is called when a group is
1448 selected.
1449
1450 @findex gnus-thread-sort-by-total-score
1451 @findex gnus-thread-sort-by-date
1452 @findex gnus-thread-sort-by-score
1453 @findex gnus-thread-sort-by-subject
1454 @findex gnus-thread-sort-by-author
1455 @findex gnus-thread-sort-by-number
1456 @vindex gnus-thread-sort-functions
1457 If you are using a threaded summary display, you can sort the threads by
1458 setting @code{gnus-thread-sort-functions}, which is a list of functions.
1459 By default, sorting is done on article numbers.  Ready-made sorting
1460 functions include @code{gnus-thread-sort-by-number},
1461 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
1462 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
1463 @code{gnus-thread-sort-by-total-score}.
1464
1465 Each function takes two threads and return non-@code{nil} if the first
1466 thread should be sorted before the other.  If you use more than one
1467 function, the primary sort key should be the last function in the list.
1468
1469 If you would like to sort by score, then by subject, and finally by
1470 date, you could do something like:
1471
1472 @lisp
1473 (setq gnus-thread-sort-functions 
1474       '(gnus-thread-sort-by-date
1475         gnus-thread-sort-by-subject
1476         gnus-thread-sort-by-score))
1477 @end lisp
1478
1479 @vindex gnus-thread-score-function
1480 The function in the @code{gnus-thread-score-function} variable (default
1481 @code{+}) is used for calculating the total score of a thread.  Useful
1482 functions might be @code{max}, @code{min}, or squared means, or whatever
1483 tickles you fancy.
1484
1485 @findex gnus-article-sort-functions
1486 @findex gnus-article-sort-by-date
1487 @findex gnus-article-sort-by-score
1488 @findex gnus-article-sort-by-subject
1489 @findex gnus-article-sort-by-author
1490 @findex gnus-article-sort-by-number
1491 If you are using an unthreaded display for some strange reason or other,
1492 you have to fiddle with the @code{gnus-article-sort-functions}
1493 variable.  It is very similar to the @code{gnus-thread-sort-functions},
1494 except that is uses slightly different functions for article
1495 comparison.  Available functions are @code{gnus-article-sort-by-number},
1496 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
1497 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
1498
1499
1500 @node Subscription Commands
1501 @section Subscription Commands
1502 @cindex subscribing
1503
1504 @table @kbd
1505
1506 @item S t
1507 @itemx u
1508 @kindex S t (Group)
1509 @kindex u (Group)
1510 @findex gnus-group-unsubscribe-current-group
1511 Toggle subscription to the current group
1512 (@code{gnus-group-unsubscribe-current-group}).  
1513
1514 @item S s
1515 @itemx U
1516 @kindex S s (Group)
1517 @kindex U (Group)
1518 @findex gnus-group-unsubscribe-group
1519 Prompt for a group to subscribe, and then subscribe it.  If it was
1520 subscribed already, unsubscribe it instead
1521 (@code{gnus-group-unsubscribe-group}).
1522
1523 @item S k
1524 @itemx C-k
1525 @kindex S k (Group)
1526 @kindex C-k (Group)
1527 @findex gnus-group-kill-group
1528 Kill the current group (@code{gnus-group-kill-group}).
1529
1530 @item S y
1531 @itemx C-y
1532 @kindex S y (Group)
1533 @kindex C-y (Group)
1534 @findex gnus-group-yank-group
1535 Yank the last killed group (@code{gnus-group-yank-group}).
1536
1537 @item S w
1538 @itemx C-w
1539 @kindex S w (Group)
1540 @kindex C-w (Group)
1541 @findex gnus-group-kill-region
1542 Kill all groups in the region (@code{gnus-group-kill-region}). 
1543
1544 @item S z
1545 @kindex S z (Group)
1546 @findex gnus-group-kill-all-zombies
1547 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1548
1549 @item S C-k
1550 @kindex S C-k (Group)
1551 @findex gnus-group-kill-level
1552 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1553 These groups can't be yanked back after killing, so this command should
1554 be used with some caution.  The only thing where this command comes in
1555 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1556 groups that you want to get rid off.  @kbd{S C-k} on level @code{7} will
1557 kill off all unsubscribed groups that do not have message numbers in the
1558 @file{.newsrc} file.  
1559
1560 @end table
1561
1562 Also @xref{Group Levels}.
1563
1564 @node Group Levels
1565 @section Group Levels
1566 @cindex group level
1567
1568 All groups have a level of @dfn{subscribedness}.  For instance, if a
1569 group is on level 2, it is more subscribed than a group on level 5.  You
1570 can ask Gnus to just list groups on a given level or lower
1571 (@pxref{Listing Groups}), or to just check for new articles in groups on
1572 a given level or lower (@pxref{Misc Group Stuff}).
1573
1574 @table @kbd
1575
1576 @item S l
1577 @kindex S l (Group)
1578 @findex gnus-group-set-current-level
1579 Set the level of the current group.  If a numeric prefix is given, the
1580 next @var{n} groups will have their levels set.  The user will be
1581 prompted for a level.
1582 @end table
1583
1584 @vindex gnus-level-killed
1585 @vindex gnus-level-zombie
1586 @vindex gnus-level-unsubscribed
1587 @vindex gnus-level-subscribed
1588 Gnus considers groups on between levels 1 and
1589 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1590 @code{gnus-level-subscribed} (exclusive) and
1591 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1592 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1593 (default 8) and @code{gnus-level-killed} to be killed (default 9),
1594 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
1595 the same, but zombie and killed groups have no information on what
1596 articles you have read, etc, stored.  This distinction between dead and
1597 living groups isn't done because it is nice or clever, it is done purely
1598 for reasons of efficiency.
1599
1600 It is recommended that you keep all your mail groups (if any) on quite
1601 low levels (eg. 1 or 2).
1602
1603 If you want to play with the level variables, you should show some care.
1604 Set them once, and don't touch them ever again.  Better yet, don't touch
1605 them at all unless you know exactly what you're doing.
1606
1607 @vindex gnus-level-default-unsubscribed
1608 @vindex gnus-level-default-subscribed
1609 Two closely related variables are @code{gnus-level-default-subscribed}
1610 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1611 which are the levels that new groups will be put on if they are
1612 (un)subscribed.  These two variables should, of course, be inside the
1613 relevant legal ranges.
1614
1615 @vindex gnus-keep-same-level
1616 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1617 will only move to groups that are of the same level (or lower).  In
1618 particular, going from the last article in one group to the next group
1619 will go to the next group of the same level (or lower).  This might be
1620 handy if you want to read the most important groups before you read the
1621 rest.
1622
1623 @vindex gnus-group-default-list-level
1624 All groups with a level less than or equal to
1625 @code{gnus-group-default-list-level} will be listed in the group buffer
1626 by default.
1627
1628 @vindex gnus-group-list-inactive-groups
1629 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1630 groups will be listed along with the unread groups.  This variable is
1631 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1632 listed. 
1633
1634 @vindex gnus-group-use-permament-levels
1635 If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you
1636 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1637 use this level as the "work" level.
1638
1639 @vindex gnus-activate-level
1640 Gnus will normally just activate groups that are on level
1641 @code{gnus-activate-level} or less.  If you don't want to activate
1642 unsubscribed groups, for instance, you might set this variable to
1643 @samp{5}. 
1644
1645
1646 @node Group Score
1647 @section Group Score
1648 @cindex group score
1649
1650 You would normally keep important groups on high levels, but that scheme
1651 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1652 group buffer according to how often you read groups, perhaps?  Within
1653 reason?  
1654
1655 This is what @dfn{group score} is for.  You can assign a score to each
1656 group.  You can then sort the group buffer based on this score.
1657 Alternatively, you can sort on score and then level.  (Taken together,
1658 the level and the score is called the @dfn{rank} of the group.  A group
1659 that is on level 4 and has a score of 1 has a higher rank than a group
1660 on level 5 that has a score of 300.  (The level is the most significant
1661 part and the score is the least significant part.)
1662
1663 @findex gnus-summary-bubble-group
1664 If you want groups you read often to get higher scores than groups you
1665 read seldom you can add the @code{gnus-summary-bubble-group} function to
1666 the @code{gnus-summary-exit-hook} hook.  This will result (after
1667 sorting) in a bubbling sort of action.  If you want to see that in
1668 action after each summary exit, you can add
1669 @code{gnus-group-sort-groups-by-rank} or
1670 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1671 slow things down somewhat.
1672
1673
1674 @node Marking Groups
1675 @section Marking Groups
1676 @cindex marking groups
1677
1678 If you want to perform some command on several groups, and they appear
1679 subsequently in the group buffer, you would normally just give a
1680 numerical prefix to the command.  Most group commands will then do your
1681 bidding on those groups.
1682
1683 However, if the groups are not in sequential order, you can still
1684 perform a command on several groups.  You simply mark the groups first
1685 with the process mark and then execute the command.
1686
1687 @table @kbd
1688
1689 @item #
1690 @kindex # (Group)
1691 @itemx M m
1692 @kindex M m (Group)
1693 @findex gnus-group-mark-group
1694 Set the mark on the current group (@code{gnus-group-mark-group}). 
1695
1696 @item M-#
1697 @kindex M-# (Group)
1698 @itemx < u
1699 @kindex M u (Group)
1700 @findex gnus-group-unmark-group
1701 Remove the mark from the current group
1702 (@code{gnus-group-unmark-group}). 
1703
1704 @item M w
1705 @kindex M w (Group)
1706 @findex gnus-group-mark-region
1707 Mark all groups between point and mark (@code{gnus-group-mark-region}). 
1708
1709 @item M r
1710 @kindex M r (Group)
1711 @findex gnus-group-mark-regexp
1712 Mark all groups that match some regular expression
1713 (@code{gnus-group-mark-regexp}).  
1714 @end table
1715
1716 Also @xref{Process/Prefix}.
1717
1718
1719 @node Foreign Groups
1720 @section Foreign Groups
1721 @cindex foreign groups
1722
1723 A @dfn{foreign group} is a group that is not read by the usual (or
1724 default) means.  It could be, for instance, a group from a different
1725 @sc{nntp} server, it could be a virtual group, or it could be your own
1726 personal mail group.
1727
1728 A foreign group (or any group, really) is specified by a @dfn{name} and
1729 a @dfn{select method}.  To take the latter first, a select method is a
1730 list where the first element says what backend to use (eg. @code{nntp},
1731 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
1732 name}.  There may be additional elements in the select method, where the
1733 value may have special meaning for the backend in question.
1734
1735 One could say that a select method defines a @dfn{virtual server}---so
1736 we do just that (@pxref{The Server Buffer}).
1737
1738 The @dfn{name} of the group is the name the backend will recognize the
1739 group as.
1740
1741 For instance, the group @samp{soc.motss} on the @sc{nntp} server
1742 @samp{some.where.edu} will have the name @samp{soc.motss} and select
1743 method @code{(nntp "some.where.edu")}.  Gnus will call this group, in
1744 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
1745 @code{nntp} backend just knows this group as @samp{soc.motss}.
1746
1747 Here are some commands for making and editing general foreign groups,
1748 and some commands to ease the creation of some special-purpose groups:
1749
1750 @table @kbd
1751
1752 @item G m
1753 @kindex G m (Group)
1754 @findex gnus-group-make-group
1755 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1756 for a name, a method and possibly an @dfn{address}.  For an easier way
1757 to subscribe to @sc{nntp} groups, @xref{Browse Foreign Server}.
1758
1759 @item G r
1760 @kindex G m (Group)
1761 @findex gnus-group-rename-group
1762 Rename the current group to something else
1763 (@code{gnus-group-rename-group}).  This is legal only on some groups --
1764 mail groups mostly.  This command might very well be quite slow on some
1765 backends. 
1766
1767 @item G e
1768 @kindex G e (Group)
1769 @findex gnus-group-edit-group-method
1770 Enter a buffer where you can edit the select method of the current
1771 group (@code{gnus-group-edit-group-method}).
1772
1773 @item G p
1774 @kindex G p (Group)
1775 @findex gnus-group-edit-group-parameters
1776 Enter a buffer where you can edit the group parameters
1777 (@code{gnus-group-edit-group-parameters}). 
1778
1779 @item G E
1780 @kindex G E (Group)
1781 @findex gnus-group-edit-group
1782 Enter a buffer where you can edit the group info
1783 (@code{gnus-group-edit-group}).
1784
1785 @item G d
1786 @kindex G d (Group)
1787 @findex gnus-group-make-directory-group
1788 Make a directory group.  You will be prompted for a directory name
1789 (@code{gnus-group-make-directory-group}).  
1790
1791 @item G h 
1792 @kindex G h (Group)
1793 @findex gnus-group-make-help-group
1794 Make the Gnus help group (@code{gnus-group-make-help-group}).
1795
1796 @item G a
1797 @kindex G a (Group)
1798 @findex gnus-group-make-archive-group
1799 @vindex gnus-group-archive-directory
1800 @vindex gnus-group-recent-archive-directory
1801 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1802 default a group pointing to the most recent articles will be created
1803 (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
1804 group will be created from from @code{gnus-group-archive-directory}.
1805
1806 @item G k
1807 @kindex G k (Group)
1808 @findex gnus-group-make-kiboze-group
1809 Make a kiboze group.  You will be prompted for a name, for a regexp to
1810 match groups to be "included" in the kiboze group, and a series of
1811 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1812
1813 @item G D
1814 @kindex G D (Group)
1815 @findex gnus-group-enter-directory
1816 Read a random directory as if with were a newsgroup with the
1817 @code{nneething} backend (@code{gnus-group-enter-directory}).
1818
1819 @item G f
1820 @kindex G f (Group)
1821 @findex gnus-group-make-doc-group
1822 Make a group based on some file or other
1823 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1824 command, you will be prompted for a file name and a file type.
1825 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1826 @code{mmdf}, @code{news}, @code{rnews}, and @code{forward}.  If you run
1827 this command without a prefix, Gnus will guess at the file type.
1828
1829 @item G DEL
1830 @kindex G DEL (Group)
1831 @findex gnus-group-delete-group
1832 This function will delete the current group
1833 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1834 actually delete all the articles in the group, and forcibly remove the
1835 group itself from the face of the Earth.  Use a prefix only if you are
1836 sure of what you are doing.  
1837
1838 @item G V
1839 @kindex G V (Group)
1840 @findex gnus-group-make-empty-virtual
1841 Make a new, fresh, empty @code{nnvirtual} group
1842 (@code{gnus-group-make-empty-virtual}).
1843
1844 @item G v
1845 @kindex G v (Group)
1846 @findex gnus-group-add-to-virtual
1847 Add the current group to an @code{nnvirtual} group
1848 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1849 @end table
1850
1851 The different methods all have their peculiarities, of course.
1852
1853 @menu
1854 * nntp::             Reading news from a different @sc{nntp} server.
1855 * nnspool::          Reading news from the local spool.
1856 * nnvirtual::        Combining articles from many groups.
1857 * nnkiboze::         Looking through parts of the newsfeed for articles.
1858 * nndir::            You can read a directory as if it was a newsgroup.
1859 * nneething::        Dired?  Who needs dired?
1860 * nndoc::            Single files can be the basis of a group.
1861 * SOUP::             Reading @sc{SOUP} packets "offline".
1862 * Reading Mail::     Reading your personal mail with Gnus.
1863 @end menu
1864
1865 @vindex gnus-activate-foreign-newsgroups
1866 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1867 Gnus will check all foreign groups with this level or lower at startup.
1868 This might take quite a while, especially if you subscribe to lots of
1869 groups from different @sc{nntp} servers.
1870
1871 @node nntp
1872 @subsection nntp
1873 @cindex @sc{nntp}
1874
1875 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
1876 You just specify @code{nntp} as method and the address of the @sc{nntp}
1877 server as the, uhm, address.
1878
1879 If the @sc{nntp} server is located at a non-standard port, setting the
1880 third element of the select method to this port number should allow you
1881 to connect to the right port.  You'll have to edit the group info for
1882 that (@pxref{Foreign Groups}).
1883
1884 The name of the foreign group can be the same as a native group.  In
1885 fact, you can subscribe to the same group from as many different servers
1886 you feel like.  There will be no name collisions.
1887
1888 The following variables can be used to create a virtual @code{nntp}
1889 server: 
1890
1891 @table @code
1892
1893 @item nntp-server-opened-hook
1894 @vindex nntp-server-opened-hook
1895 @cindex @sc{mode reader}
1896 @cindex authinfo
1897 @cindex authentification
1898 @cindex nntp authentification
1899 @findex nntp-send-authinfo
1900 @findex nntp-send-mode-reader
1901 @code{nntp-server-opened-hook} is run after a connection has been made.
1902 It can be used to send commands to the @sc{nntp} server after it has
1903 been contacted.  By default is sends the command @samp{MODE READER} to
1904 the server with the @code{nntp-send-mode-reader} function.  Another
1905 popular function is @code{nntp-send-authinfo}, which will prompt you for
1906 an @sc{nntp} password and stuff.
1907
1908 @item nntp-maximum-request
1909 @vindex nntp-maximum-request
1910 If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
1911 will collect headers by sending a series of @code{head} commands.  To
1912 speed things up, the backend sends lots of these commands without
1913 waiting for reply, and then reads all the replies.  This is controlled
1914 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
1915 your network is buggy, you should set this to 1.
1916
1917 @item nntp-connection-timeout
1918 @vindex nntp-connection-timeout
1919 If you have lots of foreign @code{nntp} groups that you connect to
1920 regularly, you're sure to have problems with @sc{nntp} servers not
1921 responding properly, or being too loaded to reply within reasonable
1922 time.  This is can lead to awkward problems, which can be helped
1923 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
1924 that says how many seconds the @code{nntp} backend should wait for a
1925 connection before giving up.  If it is @code{nil}, which is the default,
1926 no timeouts are done.
1927
1928 @item nntp-server-hook
1929 @vindex nntp-server-hook
1930 This hook is run as the last step when connecting to an @sc{nntp}
1931 server.
1932
1933 @c @findex nntp-open-rlogin
1934 @c @findex nntp-open-network-stream
1935 @c @item nntp-open-server-function
1936 @c @vindex nntp-open-server-function
1937 @c This function is used to connect to the remote system.  Two pre-made
1938 @c functions are @code{nntp-open-network-stream}, which is the default, and
1939 @c simply connects to some port or other on the remote system.  The other
1940 @c is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
1941 @c and then does a telnet to the @sc{nntp} server available there.
1942 @c 
1943 @c @item nntp-rlogin-parameters
1944 @c @vindex nntp-rlogin-parameters
1945 @c If you use @code{nntp-open-rlogin} as the
1946 @c @code{nntp-open-server-function}, this list will be used as the
1947 @c parameter list given to @code{rsh}.
1948 @c 
1949 @c @item nntp-rlogin-user-name
1950 @c @vindex nntp-rlogin-user-name
1951 @c User name on the remote system when using the @code{rlogin} connect
1952 @c function. 
1953
1954 @item nntp-address
1955 @vindex nntp-address
1956 The address of the remote system running the @sc{nntp} server.
1957
1958 @item nntp-port-number
1959 @vindex nntp-port-number
1960 Port number to connect to when using the @code{nntp-open-network-stream}
1961 connect function.
1962
1963 @item nntp-buggy-select
1964 @vindex nntp-buggy-select
1965 Set this to non-@code{nil} if your select routine is buggy.
1966
1967 @item nntp-nov-is-evil 
1968 @vindex nntp-nov-is-evil 
1969 If the @sc{nntp} server does not support @sc{nov}, you could set this
1970 variable to @code{t}, but @code{nntp} usually checks whether @sc{nov}
1971 can be used automatically.
1972
1973 @item nntp-xover-commands
1974 @vindex nntp-xover-commands
1975 List of strings that are used as commands to fetch @sc{nov} lines from a
1976 server.  The default value of this variable is @code{("XOVER"
1977 "XOVERVIEW")}. 
1978
1979 @item nntp-nov-gap
1980 @vindex nntp-nov-gap
1981 @code{nntp} normally sends just one big request for @sc{nov} lines to
1982 the server.  The server responds with one huge list of lines.  However,
1983 if you have read articles 2-5000 in the group, and only want to read
1984 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
1985 lines that you do not want, and will not use.  This variable says how
1986 big a gap between two consecutive articles is allowed to be before the
1987 @code{XOVER} request is split into several request.  Note that if your
1988 network is fast, setting this variable to a really small number means
1989 that fetching will probably be slower.  If this variable is @code{nil},
1990 @code{nntp} will never split requests.
1991
1992 @item nntp-prepare-server-hook
1993 @vindex nntp-prepare-server-hook
1994 A hook run before attempting to connect to an @sc{nntp} server.
1995
1996 @item nntp-async-number
1997 @vindex nntp-async-number
1998 How many articles should be pre-fetched when in asynchronous mode.  If
1999 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
2000 that it can without bound.  If it is @code{nil}, no pre-fetching will be
2001 made.
2002
2003 @item nntp-warn-about-losing-connection
2004 @vindex nntp-warn-about-losing-connection
2005 If this variable is non-@code{nil}, some noise will be made when a
2006 server closes connection.
2007
2008
2009 @end table
2010
2011 @node nnspool
2012 @subsection nnspool
2013 @cindex @code{nnspool}
2014 @cindex news spool
2015
2016 Subscribing to a foreign group from the local spool is extremely easy,
2017 and might be useful, for instance, to speed up reading groups like
2018 @samp{alt.binaries.pictures.furniture}.
2019
2020 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
2021 anything else) as the address.
2022
2023 If you have access to a local spool, you should probably use that as the
2024 native select method (@pxref{Finding the News}).  It is normally faster
2025 than using an @code{nntp} select method, but might not be.  It depends.
2026 You just have to try to find out what's best at your site.
2027
2028 @table @code
2029
2030 @item nnspool-inews-program
2031 @vindex nnspool-inews-program
2032 Program used to post an article.
2033
2034 @item nnspool-inews-switches
2035 @vindex nnspool-inews-switches
2036 Parameters given to the inews program when posting an article. 
2037
2038 @item nnspool-spool-directory
2039 @vindex nnspool-spool-directory
2040 Where @code{nnspool} looks for the articles.  This is normally
2041 @file{/usr/spool/news/}.
2042
2043 @item nnspool-nov-directory 
2044 @vindex nnspool-nov-directory 
2045 Where @code{nnspool} will look for @sc{nov} files.  This is normally
2046 @file{/usr/spool/news/over.view/}.
2047
2048 @item nnspool-lib-dir
2049 @vindex nnspool-lib-dir
2050 Where the news lib dir is (@file{/usr/lib/news/} by default).
2051
2052 @item nnspool-active-file
2053 @vindex nnspool-active-file
2054 The path of the active file.
2055
2056 @item nnspool-newsgroups-file
2057 @vindex nnspool-newsgroups-file
2058 The path of the group descriptions file.
2059
2060 @item nnspool-history-file
2061 @vindex nnspool-history-file
2062 The path of the news history file.
2063
2064 @item nnspool-active-times-file
2065 @vindex nnspool-active-times-file
2066 The path of the active date file.
2067
2068 @item nnspool-nov-is-evil
2069 @vindex nnspool-nov-is-evil
2070 If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
2071 that it finds.
2072
2073 @item nnspool-sift-nov-with-sed
2074 @vindex nnspool-sift-nov-with-sed
2075 If non-@code{nil}, which is the default, use @code{sed} to get the
2076 relevant portion from the overview file.  If nil, @code{nnspool} will
2077 load the entire file into a buffer and process it there.
2078
2079 @end table
2080
2081 @node nnvirtual
2082 @subsection nnvirtual
2083 @cindex @code{nnvirtual}
2084 @cindex virtual groups
2085
2086 An @dfn{nnvirtual group} is really nothing more than a collection of
2087 other groups.
2088
2089 For instance, if you are tired of reading many small group, you can
2090 put them all in one big group, and then grow tired of reading one
2091 big, unwieldy group.  The joys of computing!
2092
2093 You specify @code{nnvirtual} as the method.  The address should be a
2094 regexp to match component groups.
2095
2096 All marks in the virtual group will stick to the articles in the
2097 component groups.  So if you tick an article in a virtual group, the
2098 article will also be ticked in the component group from whence it came.
2099 (And vice versa---marks from the component groups will also be shown in
2100 the virtual group.)
2101
2102 Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
2103 newsgroups into one, big, happy newsgroup:
2104
2105 @lisp
2106 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
2107 @end lisp
2108
2109 The component groups can be native or foreign; everything should work
2110 smoothly, but if your computer explodes, it was probably my fault.
2111
2112 Collecting the same group from several servers might actually be a good
2113 idea if users have set the Distribution header to limit distribution.
2114 If you would like to read @samp{soc.motss} both from a server in Japan
2115 and a server in Norway, you could use the following as the group regexp:
2116
2117 @example
2118 "^nntp+some.server.jp:soc.motss$\\|^nntp+some.server.no:soc.motss$"
2119 @end example
2120
2121 This should work kinda smoothly---all articles from both groups should
2122 end up in this one, and there should be no duplicates.  Threading (and
2123 the rest) will still work as usual, but there might be problems with the
2124 sequence of articles.  Sorting on date might be an option here
2125 (@pxref{Selecting a Group}.
2126
2127 One limitation, however---all groups that are included in a virtual
2128 group has to be alive (i.e., subscribed or unsubscribed).  Killed or
2129 zombie groups can't be component groups for @code{nnvirtual} groups.
2130
2131
2132 @node nnkiboze
2133 @subsection nnkiboze
2134 @cindex @code{nnkiboze}
2135 @cindex kibozing
2136
2137 @dfn{Kibozing} is defined by @sc{oed} as "grepping through (parts of)
2138 the news feed".  @code{nnkiboze} is a backend that will do this for you.  Oh
2139 joy!  Now you can grind any @sc{nntp} server down to a halt with useless
2140 requests!  Oh happiness!
2141
2142 The address field of the @code{nnkiboze} method is, as with
2143 @code{nnvirtual}, a regexp to match groups to be "included" in the
2144 @code{nnkiboze} group.  There most similarities between @code{nnkiboze}
2145 and @code{nnvirtual} ends.
2146
2147 In addition to this regexp detailing component groups, an @code{nnkiboze} group
2148 must have a score file to say what articles that are to be included in
2149 the group (@pxref{Scoring}).
2150
2151 @kindex M-x nnkiboze-generate-groups
2152 @findex nnkiboze-generate-groups
2153 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
2154 @code{nnkiboze} groups you want to have.  This command will take time.  Lots of
2155 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
2156 all the articles in all the components groups and run them through the
2157 scoring process to determine if there are any articles in the groups
2158 that are to be part of the @code{nnkiboze} groups.
2159
2160 Please limit the number of component groups by using restrictive
2161 regexps.  Otherwise your sysadmin may become annoyed with you, and the
2162 @sc{nntp} site may throw you off and never let you back in again.
2163 Stranger things have happened.
2164
2165 @code{nnkiboze} component groups do not have to be alive---they can be dead,
2166 and they can be foreign.  No restrictions.
2167
2168 @vindex nnkiboze-directory
2169 The generation of an @code{nnkiboze} group means writing two files in
2170 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
2171 contains the @sc{nov} header lines for all the articles in the group,
2172 and the other is an additional @file{.newsrc} file to store information
2173 on what groups that have been searched through to find component
2174 articles.
2175
2176 Articles that are marked as read in the @code{nnkiboze} group will have their
2177 @sc{nov} lines removed from the @sc{nov} file.
2178
2179 @node nndir
2180 @subsection nndir
2181 @cindex @code{nndir}
2182 @cindex directory groups
2183
2184 If you have a directory that has lots of articles in separate files in
2185 it, you might treat it as a newsgroup.  The files have to have numerical
2186 names, of course.
2187
2188 This might be an opportune moment to mention @code{ange-ftp}, that most
2189 wonderful of all wonderful Emacs packages.  When I wrote @code{nndir}, I
2190 didn't think much about it---a backend to read directories.  Big deal.
2191
2192 @code{ange-ftp} changes that picture dramatically.  For instance, if you
2193 enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the
2194 directory name, ange-ftp will actually allow you to read this directory
2195 over at @samp{sina} as a newsgroup.  Distributed news ahoy!
2196
2197 @code{nndir} will use @sc{nov} files if they are present.
2198
2199 @code{nndir} is a "read-only" backend---you can't delete or expire
2200 articles with this method.  You can use @code{nnmh} or @code{nnml} for
2201 whatever you use @code{nndir} for, so you could switch to any of those
2202 methods if you feel the need to have a non-read-only @code{nndir}.
2203
2204 @node nneething
2205 @subsection nneething
2206 @cindex @code{nneething}
2207
2208 From the @code{nndir} backend (which reads a single spool-like
2209 directory), it's just a hop and a skip to @code{nneething}, which
2210 pretends that any random directory is a newsgroup.  Strange, but true.
2211
2212 When @code{nneething} is presented with a directory, it will scan this
2213 directory and assign article numbers to each file.  When you enter such a
2214 group, @code{nneething} must create "headers" that Gnus can use.  After
2215 all, Gnus is a newsreader, in case you're forgetting. @code{nneething}
2216 does this in a two-step process.  First, it snoops each file in question.
2217 If the file looks like an article (i.e., the first few lines look like
2218 headers), it will use this as the head.  If this is just some random file
2219 without a head (eg. a C source file), @code{nneething} will cobble up a
2220 header out of thin air.  It will use file ownership, name and date and do
2221 whatever it can with these elements.
2222
2223 All this should happen automatically for you, and you will be presented
2224 with something that looks very much like a newsgroup.  Totally like a
2225 newsgroup, to be precise.  If you select an article, it will be displayed
2226 in the article buffer, just as usual.
2227
2228 If you select a line that represents a directory, Gnus will pop you into
2229 a new summary buffer for this @code{nneething} group.  And so on.  You can
2230 traverse the entire disk this way, if you feel like, but remember that
2231 Gnus is not dired, really, and does not intend to be, either.
2232
2233 There are two overall modes to this action---ephemeral or solid.  When
2234 doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
2235 will not store information on what files you have read, and what files
2236 are new, and so on.  If you create a solid @code{nneething} group the
2237 normal way with @kbd{G m}, Gnus will store a mapping table between
2238 article numbers and file names, and you can treat this group like any
2239 other groups.  When you activate a solid @code{nneething} group, you will
2240 be told how many unread articles it contains, etc., etc.
2241
2242 Some variables:
2243
2244 @table @code
2245 @item nneething-map-file-directory
2246 @vindex nneething-map-file-directory
2247 All the mapping files for solid @code{nneething} groups will be stored
2248 in this directory, which defaults to @file{~/.nneething/}.
2249
2250 @item nneething-exclude-files
2251 @vindex nneething-exclude-files
2252 All files that match this regexp will be ignored.  Nice to use to exclude
2253 auto-save files and the like, which is what it does by default.
2254
2255 @item nneething-map-file
2256 @vindex nneething-map-file
2257 Name of the map files.
2258 @end table
2259
2260
2261 @node nndoc
2262 @subsection nndoc
2263 @cindex @code{nndoc}
2264 @cindex documentation group
2265 @cindex help group
2266
2267 @code{nndoc} is a cute little thing that will let you read a single file
2268 as a newsgroup.  Several files types are supported:
2269
2270 @table @code
2271 @cindex babyl
2272 @cindex rmail mbox
2273
2274 @item babyl
2275 The babyl (rmail) mail box.
2276 @cindex mbox
2277 @cindex Unix mbox
2278
2279 @item mbox
2280 The standard Unix mbox file.
2281 @cindex MMDF mail box
2282
2283 @item mmdf
2284 The MMDF mail box format.
2285
2286 @item news
2287 Several news articles appended into a file.
2288
2289 @item rnews
2290 @cindex rnews batch files
2291 The rnews batch transport format.
2292 @cindex forwarded messages
2293
2294 @item forward
2295 Forwarded articles.
2296
2297 @item mime-digest
2298 @cindex digest
2299 @cindex MIME digest
2300 @cindex 1153 digest
2301 @cindex RFC 1153 digest
2302 @cindex RFC 341 digest
2303 MIME (RFC 1341) digest format.
2304
2305 @item standard-digest
2306 The standard (RFC 1153) digest format.
2307
2308 @item slack-digest
2309 Non-standard digest format---matches most things, but does it badly. 
2310 @end table
2311
2312 You can also use the special "file type" @code{guess}, which means that
2313 @code{nndoc} will try to guess what file type it is looking at.
2314 @code{digest} means that @code{nndoc} should guess what digest type the
2315 file is. 
2316
2317 @code{nndoc} will not try to change the file or insert any extra headers into
2318 it---it will simply, like, let you use the file as the basis for a
2319 group.  And that's it.
2320
2321 If you have some old archived articles that you want to insert into your
2322 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
2323 that.  Say you have an old @file{RMAIL} file with mail that you now want
2324 to split into your new @code{nnml} groups.  You look at that file using
2325 @code{nndoc}, set the process mark on all the articles in the buffer
2326 (@kbd{M P b}, for instance), and then respool (@kbd{B r}) using
2327 @code{nnml}.  If all goes well, all the mail in the @file{RMAIL} file is
2328 now also stored in lots of @code{nnml} directories, and you can delete
2329 that pesky @file{RMAIL} file.  If you have the guts!  
2330
2331 Virtual server variables:
2332
2333 @table @code
2334 @item nndoc-article-type
2335 @vindex nndoc-article-type
2336 This should be one of @code{mbox}, @code{babyl}, @code{digest},
2337 @code{mmdf}, @code{forward}, or @code{guess}.
2338 @end table
2339
2340
2341 @node SOUP
2342 @subsection @sc{soup}
2343 @cindex @sc{SOUP}
2344 @cindex offline
2345
2346 In the PC world people often talk about "offline" newsreaders.  These
2347 are thingies that are combined reader/news transport monstrosities.
2348 With built-in modem programs.  Yecchh!  
2349
2350 Of course, us Unix Weenie types of human beans use things like
2351 @code{uucp} and, like, @code{nntpd} and set up proper news and mail
2352 transport things like Ghod inteded.  And then we just use normal
2353 newsreaders.  
2354
2355 However, it can sometimes be convenient to do something a that's a bit
2356 easier on the brain if you have a very slow modem, and you're not really
2357 that interested in doing things properly.  
2358
2359 A file format called @sc{soup} has been developed for transporting news
2360 and mail from servers to home machines and back again.  It can be a bit
2361 fiddly.
2362
2363 @enumerate
2364
2365 @item
2366 You log in on the server and create a @sc{soup} packet.  You can either
2367 use a dedicated @sc{soup} thingie, or you can use Gnus to create the
2368 packet with the @kbd{O s} command.
2369
2370 @item 
2371 You transfer the packet home.  Rail, boat, car or modem will do fine.
2372
2373 @item
2374 You put the packet in your home directory.
2375
2376 @item
2377 You fire up Gnus using the @code{nnsoup} backend as the native server.
2378
2379 @item
2380 You read articles and mail and answer and followup to the things you
2381 want.
2382
2383 @item 
2384 You do the @kbd{G s r} command to pack these replies into a @sc{soup}
2385 packet.
2386
2387 @item 
2388 You transfer this packet to the server.  
2389
2390 @item
2391 You use Gnus to mail this packet out with the @kbd{G s s} command.
2392
2393 @item
2394 You then repeat until you die.
2395
2396 @end enumerate
2397
2398 So you basically have a bipartite system---you use @code{nnsoup} for
2399 reading and Gnus for packing/sending these @sc{soup} packets.
2400
2401 @menu
2402 * SOUP Commands::     Commands for creating and sending @sc{soup} packets
2403 * nnsoup::            A backend for reading @sc{soup} packets.
2404 * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
2405 @end menu
2406
2407
2408 @node SOUP Commands
2409 @subsubsection @sc{soup} Commands
2410
2411 @table @kbd
2412 @item G s b
2413 @kindex G s b (Group)
2414 @findex gnus-group-brew-soup
2415 Pack all unread articles in the current group
2416 (@code{gnus-group-brew-soup}).  This command understands the
2417 process/prefix convention.
2418
2419 @item G s w
2420 @kindex G s w (Group)
2421 @findex gnus-soup-save-areas
2422 Save all data files (@code{gnus-soup-save-areas}).
2423
2424 @item G s s
2425 @kindex G s s (Group)
2426 @findex gnus-soup-send-replies
2427 Send all replies from the replies packet
2428 (@code{gnus-soup-send-replies}). 
2429
2430 @item G s p
2431 @kindex G s p (Group)
2432 @findex gnus-soup-pack-packet
2433 Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}). 
2434
2435 @item G s r
2436 @kindex G s r (Group)
2437 @findex nnsoup-pack-replies
2438 Pack all replies into a replies packet (@code{nnsoup-pack-replies}). 
2439
2440 @item O s
2441 @kindex O s (Summary)
2442 @findex gnus-soup-add-article
2443 This summary-mode command adds the current article to a @sc{soup} packet
2444 (@code{gnus-soup-add-article}).  It understands the process/prefix
2445 convention. 
2446
2447 @end table
2448
2449
2450 There are a few variables to customize where Gnus will put all these
2451 thingies:  
2452
2453 @table @code
2454
2455 @item gnus-soup-directory
2456 @vindex gnus-soup-directory
2457 Directory where Gnus will save intermediate files while composing
2458 @sc{soup} packets.  The default is @file{~/SoupBrew/}. 
2459
2460 @item gnus-soup-replies-directory
2461 @vindex gnus-soup-replies-directory
2462 This is what Gnus will use as a temporary directory while sending our
2463 reply packets.  The default is @file{~/SoupBrew/SoupReplies/}. 
2464
2465 @item gnus-soup-prefix-file
2466 @vindex gnus-soup-prefix-file
2467 Name of the file where Gnus stores the last used prefix.  The default is
2468 @samp{"gnus-prefix"}. 
2469
2470 @item gnus-soup-packer
2471 @vindex gnus-soup-packer
2472 A format string command for packing a @sc{soup} packet.  The default is
2473 @samp{ "tar cf - %s | gzip > $HOME/Soupout%d.tgz"}. 
2474
2475 @item gnus-soup-unpacker
2476 @vindex gnus-soup-unpacker
2477 Format string command for unpacking a @sc{soup} packet.  The default is
2478 @samp{"gunzip -c %s | tar xvf -"}.
2479
2480 @item gnus-soup-packet-directory
2481 @vindex gnus-soup-packet-directory
2482 Wehre Gnus will look for reply packets.  The default is @file{~/}. 
2483
2484 @item gnus-soup-packet-regexp
2485 @vindex gnus-soup-packet-regexp
2486 Regular expression matching @sc{soup} reply packets in
2487 @code{gnus-soup-packet-directory}. 
2488
2489 @end table
2490  
2491
2492 @node nnsoup
2493 @subsubsection nnsoup
2494 @cindex @code{nnsoup}
2495
2496 @code{nnsoup} is the backend for reading @sc{soup} packets.  It will
2497 read incoming packets, unpack them, and put them in a directory where
2498 you can read them at leisure.
2499
2500 These are the variables you can use to customize its behavior:
2501
2502 @table @code
2503
2504 @item nnsoup-directory
2505 @vindex nnsoup-directory
2506 @code{nnsoup} will move all incoming @sc{soup} packets to this directory
2507 and unpack them there.  The default is @file{~/SOUP/}.
2508
2509 @item nnsoup-replies-directory 
2510 @vindex nnsoup-replies-directory 
2511 All replies will stored in this directory before being packed into a
2512 reply packet.  The default is @file{~/SOUP/replies/"}.
2513
2514 @item nnsoup-replies-format-type
2515 @vindex nnsoup-replies-format-type
2516 The @sc{soup} format of the replies packets.  The default is @samp{?n}
2517 (rnews), and I don't think you should touch that variable.  I probaly
2518 shouldn't even have documented it.  Drats!  Too late!
2519
2520 @item nnsoup-replies-index-type
2521 @vindex nnsoup-replies-index-type
2522 The index type of the replies packet.  The is @samp{?n}, which means
2523 "none".  Don't fiddle with this one either!
2524
2525 @item nnsoup-active-file
2526 @vindex nnsoup-active-file
2527 Where @code{nnsoup} stores lots of information.  This is not an "active
2528 file" in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
2529 this file or mess it up in any way, you're dead.  The default is
2530 @file{~/SOUP/active}.
2531
2532 @item nnsoup-packer
2533 @vindex nnsoup-packer
2534 Format string command for packing a reply @sc{soup} packet.  The default
2535 is @samp{"tar cf - %s | gzip > $HOME/Soupin%d.tgz"}. 
2536
2537 @item nnsoup-unpacker
2538 @vindex nnsoup-unpacker
2539 Format string command for unpacking incoming @sc{soup} packets.  The
2540 default is @samp{"gunzip -c %s | tar xvf -"}. 
2541
2542 @item nnsoup-packet-directory
2543 @vindex nnsoup-packet-directory
2544 Where @code{nnsoup} will look for incoming packets.  The default is
2545 @file{~/}.  
2546
2547 @item nnsoup-packet-regexp
2548 @vindex nnsoup-packet-regexp
2549 Regular expression matching incoming @sc{soup} packets.  The default is
2550 @samp{Soupout}. 
2551
2552 @end table
2553
2554
2555 @node SOUP Replies
2556 @subsubsection @sc{SOUP} Replies
2557
2558 Just using @code{nnsoup} won't mean that your postings and mailings end
2559 up in @sc{soup} reply packets automagically.  You have to work a bit
2560 more for that to happen.
2561
2562 @findex nnsoup-set-variables
2563 The @code{nnsoup-set-variables} command will set the appropriate
2564 variables to ensure that all your followups and replies end up in the
2565 @sc{soup} system.
2566
2567 In specific, this is what it does:
2568
2569 @lisp
2570 (setq gnus-inews-article-function 'nnsoup-request-post)
2571 (setq send-mail-function 'nnsoup-request-mail)
2572 @end lisp
2573
2574 And that's it, really.  If you only want news to go into the @sc{soup}
2575 system you just use the first line.  If you only want mail to be
2576 @sc{soup}ed you use the second.
2577
2578
2579 @node Reading Mail
2580 @subsection Reading Mail
2581 @cindex reading mail
2582 @cindex mail
2583
2584 Reading mail with a newsreader---isn't that just plain WeIrD? But of
2585 course.
2586
2587 Gnus will read the mail spool when you activate a mail group.  The mail
2588 file is first copied to your home directory.  What happens after that
2589 depends on what format you want to store your mail in.
2590
2591 @menu
2592 * Creating Mail Groups::         How to create mail groups.
2593 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
2594 * Mail & Procmail::              Reading mail groups that procmail create.
2595 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
2596 * Not Reading Mail::             Using mail backends for reading other files.
2597 * nnmbox::                       Using the (quite) standard Un*x mbox.
2598 * nnbabyl::                      Emacs programs use the rmail babyl format.
2599 * nnml::                         Store your mail in a private spool?
2600 * nnmh::                         An mhspool-like backend.
2601 * nnfolder::                     Having one file for each group.
2602 @end menu
2603
2604 @vindex nnmail-read-incoming-hook
2605 The mail backends all call @code{nnmail-read-incoming-hook} after
2606 reading new mail.  You can use this hook to notify any mail watch
2607 programs, if you want to.
2608
2609 @vindex nnmail-spool-file
2610 @cindex POP mail
2611 @code{nnmail-spool-file} says where to look for new mail.  If this
2612 variable is @code{nil}, the mail backends will never attempt to fetch
2613 mail by themselves.  If you are using a POP mail server and your name is
2614 @samp{"larsi"}, you should set this variable to @samp{"po:larsi"}.  If
2615 your name is not @samp{"larsi"}, you should probably modify that
2616 slightly, but you may have guessed that already, you smart & handsome
2617 devil!  You can also set this variable to @code{pop}, and Gnus will try
2618 to figure out the POP mail string by itself.
2619
2620 When you use a mail backend, Gnus will slurp all your mail from your
2621 inbox and plonk it down in your home directory.  Gnus doesn't move any
2622 mail if you're not using a mail backend---you have to do a lot of magic
2623 invocations first.  At the time when you have finished drawing the
2624 pentagram, lightened the candles, and sacrificed the goat, you really
2625 shouldn't be too suprised when Gnus moves your mail.
2626
2627 @vindex nnmail-use-procmail
2628 If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will
2629 look in @code{nnmail-procmail-directory} for incoming mail.  All the
2630 files in that directory that have names ending in
2631 @code{gnus-procmail-suffix} will be considered incoming mailboxes, and
2632 will be searched for new mail.
2633
2634 @vindex nnmail-prepare-incoming-hook
2635 @code{nnmail-prepare-incoming-hook} is run in a buffer that holds all
2636 the new incoming mail, and can be used for, well, anything, really.
2637
2638 @vindex nnmail-tmp-directory
2639 @code{nnmail-tmp-directory} says where to move the incoming mail to
2640 while processing it.  This is usually done in the same directory that
2641 the mail backend inhabits (i.e., @file{~/Mail/}), but if this variable is
2642 non-@code{nil}, it will be used instead.
2643
2644 @vindex nnmail-movemail-program
2645 @code{nnmail-movemail-program} is executed to move mail from the user's
2646 inbox to her home directory.  The default is @samp{"movemail"}.
2647
2648 @vindex nnmail-delete-incoming
2649 If @code{nnmail-delete-incoming} is non-@code{nil}, the mail backends
2650 will delete the temporary incoming file after splitting mail into the
2651 proper groups.  This is @code{nil} by default for reasons of security. 
2652
2653 @vindex nnmail-use-long-file-names
2654 If @code{nnmail-use-long-file-names} is non-@code{nil} the mail backends
2655 will use long file and directory names.  Groups like @samp{mail.misc}
2656 will end up in directories like @file{mail.misc/}.  If it is @code{nil},
2657 the same group will end up in @file{mail/misc/}.
2658
2659 @vindex nnmail-message-id-cache-length
2660 @vindex nnmail-message-id-cache-file
2661 @vindex nnmail-delete-duplicates
2662 @cindex duplicate mails
2663 If you are a member of a couple of mailing list, you will sometime
2664 receive two copies of the same mail.  This can be quite annoying, so
2665 @code{nnmail} checks for and discards any duplicates it might find.  To
2666 do this, it keeps a cache of old @code{Message-ID}s -
2667 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
2668 default.  The approximate maximum number of @code{Message-ID}s stored
2669 there is controlled by the @code{nnmail-message-id-cache-length}
2670 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
2671 stored.) If all this sounds scary to you, you can set
2672 @code{nnmail-delete-duplicates} to @code{nil} (which is what it is by
2673 default), and @code{nnmail} won't do any duplicate checking.
2674
2675 Here's a neat feature: If you know that the recipient reads her mail
2676 with Gnus, and that she has @code{nnmail-delete-duplicates} set to
2677 @code{t}, you can send her as many insults as you like, just by using a
2678 @code{Message-ID} of a mail that you know that she's already received.
2679 Think of all the fun!  She'll never see any of it!  Whee!
2680
2681 Gnus gives you all the opportunity you could possibly want for shooting
2682 yourself in the foot.  Let's say you create a group that will contain
2683 all the mail you get from your boss.  And then you accidentally
2684 unsubscribe from the group.  Gnus will still put all the mail from your
2685 boss in the unsubscribed group, and so, when your boss mails you "Have
2686 that report ready by Monday or you're fired!", you'll never see it and,
2687 come Tuesday, you'll still believe that you're gainfully employed while
2688 you really should be out collecting empty bottles to save up for next
2689 month's rent money.
2690
2691 @node Creating Mail Groups
2692 @subsubsection Creating Mail Groups
2693 @cindex creating mail groups
2694
2695 You can make Gnus read your personal, private, secret mail.
2696
2697 You should first set @code{gnus-secondary-select-methods} to, for
2698 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
2699 this backend for what groups it carries (@samp{mail.misc} by default)
2700 and subscribe it the normal way.  (Which means you may have to look for
2701 it among the zombie groups, I guess, all depending on your
2702 @code{gnus-subscribe-newsgroup-method} variable.)
2703
2704 @vindex nnmail-split-methods
2705 Then you should set the variable @code{nnmail-split-methods} to specify
2706 how the incoming mail is to be split into groups.
2707
2708 @lisp
2709 (setq nnmail-split-methods
2710   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
2711     ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
2712     ("mail.other" "")))
2713 @end lisp
2714
2715 This variable is a list of lists, where the first element of each of
2716 these lists is the name of the mail group (they do not have to be called
2717 something beginning with @samp{mail}, by the way), and the second
2718 element is a regular expression used on the header of each mail to
2719 determine if it belongs in this mail group.
2720
2721 The second element can also be a function.  In that case, it will be
2722 called narrowed to the headers with the first element of the rule as the
2723 argument.  It should return a non-@code{nil} value if it thinks that the
2724 mail belongs in that group.
2725
2726 The last of these groups should always be a general one, and the regular
2727 expression should @emph{always} be @samp{""} so that it matches any
2728 mails that haven't been matched by any of the other regexps.
2729
2730 If you like to tinker with this yourself, you can set this variable to a
2731 function of your choice.  This function will be called without any
2732 arguments in a buffer narrowed to the headers of an incoming mail
2733 message.  The function should return a list of groups names that it
2734 thinks should carry this mail message.
2735
2736 Note that the mail backends are free to maul the poor, innocent
2737 incoming headers all they want to.  They all add @code{Lines} headers;
2738 some add @code{X-Gnus-Group} headers; most rename the Unix mbox
2739 @code{From<SPC>} line to something else.
2740
2741 @vindex nnmail-crosspost
2742 The mail backends all support cross-posting.  If several regexps match,
2743 the mail will be "cross-posted" to all those groups.
2744 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
2745 that no articles are crossposted to the general (@samp{""}) group. 
2746
2747
2748
2749 @node Fancy Mail Splitting
2750 @subsubsection Fancy Mail Splitting
2751 @cindex mail splitting
2752 @cindex fancy mail splitting
2753
2754 @vindex nnmail-split-fancy
2755 @findex nnmail-split-fancy
2756 If the rather simple, standard method for specifying how to split mail
2757 doesn't allow you to do what you want, you can set
2758 @code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
2759 play with the @code{nnmail-split-fancy} variable. 
2760
2761 Let's look at an example value of this variable first:
2762
2763 @lisp
2764 ;; Messages from the mailer daemon are not crossposted to any of
2765 ;; the ordinary groups.  Warnings are put in a separate group
2766 ;; from real errors.
2767 (| ("from" mail (| ("subject" "warn.*" "mail.warning")
2768                    "mail.misc"))
2769    ;; Non-error messages are crossposted to all relevant
2770    ;; groups, but we don't crosspost between the group for the
2771    ;; (ding) list and the group for other (ding) related mail.
2772    (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
2773          ("subject" "ding" "ding.misc"))
2774       ;; Other mailing lists...
2775       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
2776       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
2777       ;; People...
2778       (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
2779    ;; Unmatched mail goes to the catch all group.
2780    "misc.misc"))")
2781 @end lisp
2782
2783 This variable has the format of a @dfn{split}.  A split is a (possibly)
2784 recursive structure where each split may contain other splits.  Here are
2785 the four possible split syntaxes:
2786
2787 @table @dfn
2788
2789 @item GROUP 
2790 If the split is a string, that will be taken as a group name. 
2791
2792 @item (FIELD VALUE SPLIT)
2793 If the split is a list, and the first element is a string, then that
2794 means that if header FIELD (a regexp) contains VALUE (also a regexp),
2795 then store the message as specified by SPLIT.
2796
2797 @item (| SPLIT...)
2798 If the split is a list, and the first element is @code{|} (vertical
2799 bar), then process each SPLIT until one of them matches.  A SPLIT is
2800 said to match if it will cause the mail message to be stored in one or
2801 more groups.
2802
2803 @item (& SPLIT...)
2804 If the split is a list, and the first element is @code{&}, then process
2805 all SPLITs in the list.
2806 @end table
2807
2808 In these splits, FIELD must match a complete field name.  VALUE must
2809 match a complete word according to the fundamental mode syntax table.
2810 You can use @code{.*} in the regexps to match partial field names or
2811 words.
2812
2813 @vindex nnmail-split-abbrev-alist
2814 FIELD and VALUE can also be lisp symbols, in that case they are expanded
2815 as specified by the variable @code{nnmail-split-abbrev-alist}.  This is
2816 an alist of cons cells, where the car of the cells contains the key, and
2817 the cdr contains a string.
2818
2819 @node Mail & Procmail
2820 @subsubsection Mail & Procmail
2821 @cindex procmail
2822
2823 Many people use @code{procmail} to split incoming mail into groups.  If
2824 you do that, you should set @code{nnmail-spool-file} to @code{procmail}
2825 to ensure that the mail backends never ever try to fetch mail by
2826 themselves.
2827
2828 This also means that you probably don't want to set
2829 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
2830 side effects.
2831
2832 When a mail backend is queried for what groups it carries, it replies
2833 with the contents of that variable, along with any groups it has figured
2834 out that it carries by other means.  None of the backends (except
2835 @code{nnmh}) actually go out to the disk and check what groups actually
2836 exist.  (It's not trivial to distinguish between what the user thinks is
2837 a basis for a newsgroup and what is just a plain old file or directory.)
2838
2839 This means that you have to tell Gnus (and the backends) what groups
2840 exist by hand.
2841
2842 Let's take the @code{nnmh} backend as an example. 
2843
2844 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
2845 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
2846
2847 Go to the group buffer and type @kbd{G m}.  When prompted, answer
2848 @samp{foo} for the name and @samp{nnmh} for the method.  Repeat
2849 twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
2850 to include all your mail groups.
2851
2852 That's it.  You are now set to read your mail.  An active file for this
2853 method will be created automatically.
2854
2855 @vindex nnmail-procmail-suffix
2856 @vindex nnmail-procmail-directory
2857 If you use @code{nnfolder} or any other backend that store more than a
2858 single article in each file, you should never have procmail add mails to
2859 the file that Gnus sees.  Instead, procmail should put all incoming mail
2860 in @code{nnmail-procmail-directory}.  To arrive at the file name to put
2861 the incoming mail in, append @code{nnmail-procmail-suffix} to the group
2862 name.  The mail backends will read the mail from these files.
2863
2864 @vindex nnmail-resplit-incoming
2865 When Gnus reads a file called @file{mail.misc.spool}, this mail will be
2866 put in the @code{mail.misc}, as one would expect.  However, if you want
2867 Gnus to split the mail the normal way, you could set
2868 @code{nnmail-resplit-incoming} to @code{t}.
2869
2870 @vindex nnmail-keep-last-article
2871 If you use @code{procmail} to split things directory into an @code{nnmh}
2872 directory (which you shouldn't do), you should set
2873 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
2874 ever expiring the final article in a mail newsgroup.  This is quite,
2875 quite important.
2876
2877
2878 @node Expiring Old Mail Articles
2879 @subsubsection Expiring Old Mail Articles
2880 @cindex article expiry
2881
2882 Traditional mail readers have a tendency to remove mail articles when
2883 you mark them as read, in some way.  Gnus takes a fundamentally
2884 different approach to mail reading.
2885
2886 Gnus basically considers mail just to be news that has been received in
2887 a rather peculiar manner.  It does not think that it has the power to
2888 actually change the mail, or delete any mail messages.  If you enter a
2889 mail group, and mark articles as "read", or kill them in some other
2890 fashion, the mail articles will still exist on the system.  I repeat:
2891 Gnus will not delete your old, read mail.  Unless you ask it to, of
2892 course.
2893
2894 To make Gnus get rid of your unwanted mail, you have to mark the
2895 articles as @dfn{expirable}.  This does not mean that the articles will
2896 disappear right away, however.  In general, a mail article will be
2897 deleted from your system if, 1) it is marked as expirable, AND 2) it is
2898 more than one week old.  If you do not mark an article as expirable, it
2899 will remain on your system until hell freezes over.  This bears
2900 repeating one more time, with some spurious capitalizations: IF you do
2901 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
2902
2903 @vindex gnus-auto-expirable-newsgroups
2904 You do not have to mark articles as expirable by hand.  Groups that
2905 match the regular expression @code{gnus-auto-expirable-newsgroups} will
2906 have all articles that you read marked as expirable automatically.  All
2907 articles that are marked as expirable have an @samp{E} in the first
2908 column in the summary buffer.
2909
2910 Let's say you subscribe to a couple of mailing lists, and you want the
2911 articles you have read to disappear after a while:
2912
2913 @lisp
2914 (setq gnus-auto-expirable-newsgroups 
2915       "mail.nonsense-list\\|mail.nice-list")
2916 @end lisp
2917
2918 Another way to have auto-expiry happen is to have the element
2919 @code{auto-expire} in the select method of the group. 
2920
2921 @vindex nnmail-expiry-wait
2922 The @code{nnmail-expiry-wait} variable supplies the default time an
2923 expirable article has to live.  The default is seven days.  
2924
2925 Gnus also supplies a function that lets you fine-tune how long articles
2926 are to live, based on what group they are in.  Let's say you want to
2927 have one month expiry period in the @samp{mail.private} group, a one day
2928 expiry period in the @samp{mail.junk} group, and a six day expiry period
2929 everywhere else:
2930
2931 @lisp
2932 (setq nnmail-expiry-wait-function
2933       (lambda (group)
2934        (cond ((string= group "mail.private")
2935                31)
2936              ((string= group "mail.junk")
2937                1)
2938              ((string= group "important")
2939                'never)
2940              (t
2941                6))))
2942 @end lisp
2943
2944 The group names that this function is fed are "unadorned" group
2945 names---no @samp{"nnml:"} prefixes and the like.
2946
2947 The @code{nnmail-expiry-wait} variable and
2948 @code{nnmail-expiry-wait-function} function can be either a number (not
2949 necessarily an integer) or the symbols @code{immediate} or
2950 @code{never}. 
2951
2952 @vindex nnmail-keep-last-article
2953 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
2954 expire the final article in a mail newsgroup.  This is to make life
2955 easier for procmail users.
2956
2957 @vindex gnus-total-expirable-newsgroups
2958 By the way, that line up there about Gnus never expiring non-expirable
2959 articles is a lie.  If you put @code{total-expire} in the group
2960 parameters, articles will not be marked as expirable, but all read
2961 articles will be put through the expiry process.  Use with extreme
2962 caution.  Even more dangerous is the
2963 @code{gnus-total-expirable-newsgroups} variable.  All groups that match
2964 this regexp will have all read articles put through the expiry process,
2965 which means that @emph{all} old mail articles in the groups in question
2966 will be deleted after a while.  Use with extreme caution, and don't come
2967 crying to me when you discover that the regexp you used matched the
2968 wrong group and all your important mail has disappeared.  Be a
2969 @emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
2970 with!  So there!
2971
2972
2973 @node Not Reading Mail
2974 @subsubsection Not Reading Mail
2975
2976 If you start using any of the mail backends, they have the annoying
2977 habit of assuming that you want to read mail with them.  This might not
2978 be unreasonable, but it might not be what you want.
2979
2980 If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
2981 will ever attempt to read incoming mail, which should help.
2982
2983 @vindex nnbabyl-get-new-mail
2984 @vindex nnmbox-get-new-mail
2985 @vindex nnml-get-new-mail
2986 @vindex nnmh-get-new-mail
2987 @vindex nnfolder-get-new-mail
2988 This might be too much, if, for instance, you are reading mail quite
2989 happily with @code{nnml} and just want to peek at some old @sc{rmail}
2990 file you have stashed away with @code{nnbabyl}.  All backends have
2991 variables called backend-@code{get-new-mail}.  If you want to disable
2992 the @code{nnbabyl} mail reading, you edit the virtual server for the
2993 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
2994
2995 All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
2996 narrowed to the article to be saved before saving it when reading
2997 incoming mail.
2998
2999 @node nnmbox
3000 @subsubsection nnmbox
3001 @cindex @code{nnmbox}
3002 @cindex unix mail box
3003
3004 @vindex nnmbox-active-file
3005 @vindex nnmbox-mbox-file
3006 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
3007 mail.  @code{nnmbox} will add extra headers to each mail article to say
3008 which group it belongs in.
3009
3010 Virtual server settings:
3011
3012 @table @code
3013 @item nnmbox-mbox-file
3014 @vindex nnmbox-mbox-file
3015 The name of the mail box in the user's home directory. 
3016
3017 @item nnmbox-active-file
3018 @vindex nnmbox-active-file
3019 The name of the active file for the mail box.
3020
3021 @item nnmbox-get-new-mail
3022 @vindex nnmbox-get-new-mail
3023 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
3024 into groups.
3025 @end table
3026
3027 @node nnbabyl
3028 @subsubsection nnbabyl
3029 @cindex @code{nnbabyl}
3030 @cindex rmail mbox
3031
3032 @vindex nnbabyl-active-file
3033 @vindex nnbabyl-mbox-file
3034 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
3035 mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
3036 article to say which group it belongs in.
3037
3038 Virtual server settings:
3039
3040 @table @code
3041 @item nnbabyl-mbox-file
3042 @vindex nnbabyl-mbox-file
3043 The name of the rmail mbox file.
3044
3045 @item nnbabyl-active-file
3046 @vindex nnbabyl-active-file
3047 The name of the active file for the rmail box.
3048
3049 @item nnbabyl-get-new-mail
3050 @vindex nnbabyl-get-new-mail
3051 If non-@code{nil}, @code{nnbabyl} will read incoming mail. 
3052 @end table
3053
3054 @node nnml
3055 @subsubsection nnml
3056 @cindex @code{nnml}
3057 @cindex mail @sc{nov} spool
3058
3059 The @dfn{nnml} spool mail format isn't compatible with any other known
3060 format.  It should be used with some caution.
3061
3062 @vindex nnml-directory
3063 If you use this backend, Gnus will split all incoming mail into files;
3064 one file for each mail, and put the articles into the correct
3065 directories under the directory specified by the @code{nnml-directory}
3066 variable.  The default value is @file{~/Mail/}.
3067
3068 You do not have to create any directories beforehand; Gnus will take
3069 care of all that.
3070
3071 If you have a strict limit as to how many files you are allowed to store
3072 in your account, you should not use this backend.  As each mail gets its
3073 own file, you might very well occupy thousands of inodes within a few
3074 weeks.  If this is no problem for you, and it isn't a problem for you
3075 having your friendly systems administrator walking around, madly,
3076 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
3077 know that this is probably the fastest format to use.  You do not have
3078 to trudge through a big mbox file just to read your new mail.
3079
3080 @code{nnml} is probably the slowest backend when it comes to article
3081 splitting.  It has to create lots of files, and it also generates
3082 @sc{nov} databases for the incoming mails.  This makes is the fastest
3083 backend when it comes to reading mail.
3084
3085 Virtual server settings:
3086
3087 @table @code
3088 @item nnml-directory
3089 @vindex nnml-directory
3090 All @code{nnml} directories will be placed under this directory. 
3091
3092 @item nnml-active-file
3093 @vindex nnml-active-file
3094 The active file for the @code{nnml} server.
3095
3096 @item nnml-newsgroups-file
3097 @vindex nnml-newsgroups-file
3098 The @code{nnml} group descriptions file.  @xref{Newsgroups File
3099 Format}. 
3100
3101 @item nnml-get-new-mail
3102 @vindex nnml-get-new-mail
3103 If non-@code{nil}, @code{nnml} will read incoming mail.
3104
3105 @item nnml-nov-is-evil
3106 @vindex nnml-nov-is-evil
3107 If non-@code{nil}, this backend will ignore any @sc{nov} files.  
3108
3109 @item nnml-nov-file-name
3110 @vindex nnml-nov-file-name
3111 The name of the @sc{nov} files.  The default is @file{.overview}. 
3112
3113 @end table
3114
3115 @findex nnml-generate-nov-databases
3116 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
3117 you can do a complete update by typing @kbd{M-x
3118 nnml-generate-nov-databases}.  This command will trawl through the
3119 entire @code{nnml} hierarchy, looking at each and every article, so it
3120 might take a while to complete.
3121
3122 @node nnmh
3123 @subsubsection nnmh
3124 @cindex @code{nnmh}
3125 @cindex mh-e mail spool
3126
3127 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
3128 @sc{nov} databases and it doesn't keep an active file.  This makes
3129 @code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
3130 makes it easier to write procmail scripts for.
3131
3132 Virtual server settings:
3133
3134 @table @code
3135 @item nnmh-directory
3136 @vindex nnmh-directory
3137 All @code{nnmh} directories will be located under this directory.
3138
3139 @item nnmh-get-new-mail
3140 @vindex nnmh-get-new-mail
3141 If non-@code{nil}, @code{nnmh} will read incoming mail.
3142
3143 @item nnmh-be-safe
3144 @vindex nnmh-be-safe
3145 If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
3146 sure that the articles in the folder are actually what Gnus thinks they
3147 are.  It will check date stamps and stat everything in sight, so
3148 setting this to @code{t} will mean a serious slow-down.  If you never
3149 use anything but Gnus to read the @code{nnmh} articles, you do not have
3150 to set this variable to @code{t}.
3151 @end table
3152
3153 @node nnfolder
3154 @subsubsection nnfolder
3155 @cindex @code{nnfolder}
3156 @cindex mbox folders
3157
3158 @code{nnfolder} is a backend for storing each mail group in a separate
3159 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
3160 will add extra headers to keep track of article numbers and arrival
3161 dates.
3162
3163 Virtual server settings:
3164
3165 @table @code
3166 @item nnfolder-directory
3167 @vindex nnfolder-directory
3168 All the @code{nnfolder} mail boxes will be stored under this directory. 
3169
3170 @item nnfolder-active-file
3171 @vindex nnfolder-active-file
3172 The name of the active file.
3173
3174 @item nnfolder-newsgroups-file
3175 @vindex nnfolder-newsgroups-file
3176 The name of the group descriptions file.  @xref{Newsgroups File Format}.
3177
3178 @item nnfolder-get-new-mail
3179 @vindex nnfolder-get-new-mail
3180 If non-@code{nil}, @code{nnfolder} will read incoming mail.
3181 @end table
3182
3183
3184 @node Group Parameters
3185 @section Group Parameters
3186 @cindex group parameters
3187
3188 Gnus stores all information on a group in a list that is usually known
3189 as the @dfn{group info}.  This list has from three to six elements.
3190 Here's an example info.
3191
3192 @lisp
3193 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
3194                   (nnml "private") ((to-address . "ding@@ifi.uio.no")))
3195 @end lisp
3196
3197 The first element is the @dfn{group name}, as Gnus knows the group,
3198 anyway.  The second element is the @dfn{subscription level}, which
3199 normally is a small integer.  The third element is a list of ranges of
3200 read articles.  The fourth element is a list of lists of article marks
3201 of various kinds.  The fifth element is the select method (or virtual
3202 server, if you like).  The sixth element is a list of @dfn{group
3203 parameters}, which is what this section is about.
3204
3205 Any of the last three elements may be missing if they are not required.
3206 In fact, the vast majority of groups will normally only have the first
3207 three elements, which saves quite a lot of cons cells.
3208
3209 The group parameters store information local to a particular group:
3210
3211 @table @code
3212 @item to-address
3213 @cindex to-address
3214 If the group parameter list contains an element that looks like
3215 @samp{(to-address .  "some@@where.com")}, that address will be used by
3216 the backend when doing followups and posts.  This is primarily useful in
3217 mail groups that represent close mailing lists.  You just set this
3218 address to whatever the list address is.
3219
3220 This trick will actually work whether the group is foreign or not.
3221 Let's say there's a group on the server that is called @samp{fa.4ad-l}.
3222 This is a real newsgroup, but the server has gotten the articles from a
3223 mail-to-news gateway.  Posting directly to this group is therefore
3224 impossible---you have to send mail to the mailing list address instead.
3225 Also @xref{Mail & Post}. 
3226
3227 @item to-list
3228 @cindex to-list
3229 If the group parameter list has an element that looks like
3230 @samp{(to-list . "some@@where.com")}, that address will be used when
3231 doing a @kbd{a} in any group.  It is totally ignored when doing a
3232 followup---except that if it is present in a news group, you'll get mail
3233 group semantics when doing @kbd{f}.
3234
3235 @item to-group
3236 @cindex to-group
3237 If the group parameter list contains an element like @code{(to-group
3238 . "some.group.name")}, all posts will be sent to that group.
3239
3240 @item auto-expire
3241 @cindex auto-expire
3242 If this symbol is present in the group parameter list, all articles that
3243 are read will be marked as expirable.  For an alternative approach,
3244 @xref{Expiring Old Mail Articles}.
3245
3246 @item total-expire
3247 @cindex total-expire
3248 If this symbol is present, all read articles will be put through the
3249 expiry process, even if they are not marked as expirable.  Use with
3250 caution. 
3251
3252 @item expiry-wait
3253 @cindex expiry-wait
3254 If the group parameter has an element that looks like @samp{(expiry-wait
3255 . 10)}, this value will override any @code{nnmail-expiry-wait} and
3256 @code{nnmail-expiry-wait-functions} when expiring expirable messages.
3257 The value can either be a number of days (not necessarily an integer) or
3258 the symbols @code{never} or @code{immediate}.
3259
3260 @item score-file
3261 Elements that look like @samp{(score-file . "file")} will make
3262 @samp{file} into the current score file for the group in question.  This
3263 means that all score commands you issue will end up in that file. 
3264
3265 @item admin-address
3266 When unsubscribing to a mailing list you should never send the
3267 unsubscription notice to the mailing list itself.  Instead, you'd send
3268 messages to the administrative address.  This parameter allows you to
3269 put the admin address somewhere convenient.
3270
3271 @item comment
3272 This parameter allows you to enter a random comment on the group.
3273
3274 @item @var{(variable form)}
3275 You can use the group parameters to set variables local to the group you
3276 are entering.  Say you want to turn threading off in
3277 @samp{news.answers}.  You'd then put @code{(gnus-show-threads nil)} in
3278 the group parameters of that group.  @code{gnus-show-threads} will be
3279 made into a local variable in the summary buffer you enter, and the form
3280 @code{nil} will be @code{eval}ed there.  
3281
3282 This can also be used as a group-specific hook function, if you'd like.
3283 If you want to hear a beep when you enter the group
3284 @samp{alt.binaries.pictures.furniture}, you could put something like
3285 @code{(dummy-variable (ding))} in the parameters of that group.
3286 @code{dummy-variable} will be set to the result of the @code{(ding)}
3287 form, but who cares?
3288
3289 @end table
3290
3291 If you want to change the group info you can use the @kbd{G E} command
3292 to enter a buffer where you can edit it.
3293
3294 You usually don't want to edit the entire group info, so you'd be better
3295 off using the @kbd{G p} command to just edit the group parameters.
3296
3297 @node Listing Groups
3298 @section Listing Groups
3299 @cindex group listing
3300
3301 These commands all list various slices of the groups that are available.
3302
3303 @table @kbd
3304
3305 @item l
3306 @itemx A s
3307 @kindex A s (Group)
3308 @kindex l (Group)
3309 @findex gnus-group-list-groups
3310 List all groups that have unread articles
3311 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
3312 command will list only groups of level ARG and lower.  By default, it
3313 only lists groups of level five or lower (i.e., just subscribed groups).
3314
3315 @item L
3316 @itemx A u
3317 @kindex A u (Group)
3318 @kindex L (Group)
3319 @findex gnus-group-list-all-groups
3320 List all groups, whether they have unread articles or not
3321 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
3322 this command will list only groups of level ARG and lower.  By default,
3323 it lists groups of level seven or lower (i.e., just subscribed and
3324 unsubscribed groups).
3325
3326 @item A l
3327 @kindex A l (Group)
3328 @findex gnus-group-list-level
3329 List all unread groups on a specific level
3330 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
3331 with no unread articles.
3332
3333 @item A k
3334 @kindex A k (Group)
3335 @findex gnus-group-list-killed
3336 List all killed groups (@code{gnus-group-list-killed}).  If given a
3337 prefix argument, really list all groups that are available, but aren't
3338 currently (un)subscribed.  This could entail reading the active file
3339 from the server.
3340
3341 @item A z
3342 @kindex A z (Group)
3343 @findex gnus-group-list-zombies
3344 List all zombie groups (@code{gnus-group-list-zombies}).
3345
3346 @item A m
3347 @kindex A m (Group)
3348 @findex gnus-group-list-matching
3349 List all subscribed groups with unread articles that match a regexp
3350 (@code{gnus-group-list-matching}). 
3351
3352 @item A M
3353 @kindex A M (Group)
3354 @findex gnus-group-list-all-matching
3355 List groups that match a regexp (@code{gnus-group-list-all-matching}).
3356
3357 @item A A
3358 @kindex A A (Group)
3359 @findex gnus-group-list-active
3360 List absolutely all groups that are in the active file(s) of the
3361 server(s) you are connected to (@code{gnus-group-list-active}).  This
3362 might very well take quite a while.  It might actually be a better idea
3363 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
3364 thing to match on.
3365
3366 @end table
3367
3368 @vindex gnus-permanently-visible-groups
3369 @cindex visible group paramenter
3370 Groups that match the @code{gnus-permanently-visible-groups} regexp will
3371 always be shown, whether they have unread articles or not.  You can also
3372 add the @code{visible} element to the group parameters in question to
3373 get the same effect.
3374
3375 @node Sorting Groups
3376 @section Sorting Groups
3377 @cindex sorting groups
3378
3379 @kindex C-c C-s (Group)
3380 @findex gnus-group-sort-groups
3381 @vindex gnus-group-sort-function
3382 The @kbd{C-c C-s} (@code{gnus-group-srot-groups}) command sorts the
3383 group buffer according to the function(s) given by the
3384 @code{gnus-group-sort-function} variable.  Available sorting functions
3385 include: 
3386
3387 @table @code
3388
3389 @item gnus-group-sort-by-alphabet
3390 @findex gnus-group-sort-by-alphabet
3391 Sort the group names alphabetically.  This is the default.
3392
3393 @item gnus-group-sort-by-level
3394 @findex gnus-group-sort-by-level
3395 Sort by group level.
3396
3397 @item gnus-group-sort-by-score
3398 @findex gnus-group-sort-by-score
3399 Sort by group score.
3400
3401 @item gnus-group-sort-by-rank
3402 @findex gnus-group-sort-by-rank
3403 Sort by group score and then the group level.  The level and the score
3404 are, when taken together, the group's @dfn{rank}. 
3405
3406 @item gnus-group-sort-by-unread
3407 @findex gnus-group-sort-by-unread
3408 Sort by number of unread articles.
3409
3410 @item gnus-group-sort-by-method
3411 @findex gnus-group-sort-by-method
3412 Sort by alphabetically on the select method.
3413
3414
3415 @end table
3416
3417 @code{gnus-group-sort-function} can also be a list of sorting
3418 functions.  In that case, the most significant sort key function must be
3419 the last one.
3420
3421
3422 There are also a number of commands for sorting directly according to
3423 some sorting criteria:
3424
3425 @table @kbd
3426 @item G S a
3427 @kindex G S a (Group)
3428 @findex gnus-group-sort-groups-by-alphabet
3429 Sort the group buffer alphabetically by group name
3430 (@code{gnus-group-sort-groups-by-alphabet}). 
3431
3432 @item G S u
3433 @kindex G S u (Group)
3434 @findex gnus-group-sort-groups-by-unread
3435 Sort the group buffer by the number of unread articles
3436 (@code{gnus-group-sort-groups-by-unread}).
3437
3438 @item G S l
3439 @kindex G S l (Group)
3440 @findex gnus-group-sort-groups-by-level
3441 Sort the group buffer by group level
3442 (@code{gnus-group-sort-groups-by-level}). 
3443
3444 @item G S v
3445 @kindex G S v (Group)
3446 @findex gnus-group-sort-groups-by-score
3447 Sort the group buffer by group score
3448 (@code{gnus-group-sort-groups-by-score}). 
3449
3450 @item G S r
3451 @kindex G S r (Group)
3452 @findex gnus-group-sort-groups-by-rank
3453 Sort the group buffer by group level
3454 (@code{gnus-group-sort-groups-by-rank}). 
3455
3456 @item G S m
3457 @kindex G S m (Group)
3458 @findex gnus-group-sort-groups-by-method
3459 Sort the group buffer alphabetically by backend name
3460 (@code{gnus-group-sort-groups-by-method}). 
3461
3462 @end table
3463
3464 When given a prefix, all these commands will sort in reverse order. 
3465
3466
3467
3468 @node Group Maintenance
3469 @section Group Maintenance
3470 @cindex bogus groups
3471
3472 @table @kbd
3473 @item b
3474 @kindex b (Group)
3475 @findex gnus-group-check-bogus-groups
3476 Find bogus groups and delete them
3477 (@code{gnus-group-check-bogus-groups}).
3478
3479 @item F
3480 @kindex F (Group)
3481 @findex gnus-find-new-newsgroups
3482 Find new groups and process them (@code{gnus-find-new-newsgroups}).
3483
3484 @item C-c C-x
3485 @kindex C-c C-x (Group)
3486 @findex gnus-group-expire-articles
3487 Run all expirable articles in the current group through the expiry
3488 process (if any) (@code{gnus-group-expire-articles}).
3489
3490 @item C-c M-C-x
3491 @kindex C-c M-C-x (Group)
3492 @findex gnus-group-expire-all-groups
3493 Run all articles in all groups through the expiry process
3494 (@code{gnus-group-expire-all-groups}).
3495
3496 @end table
3497
3498
3499 @node Browse Foreign Server
3500 @section Browse Foreign Server
3501 @cindex foreign servers
3502 @cindex browsing servers
3503
3504 @table @kbd
3505 @item B
3506 @kindex B (Group)
3507 @findex gnus-group-browse-foreign-server
3508 You will be queried for a select method and a server name.  Gnus will
3509 then attempt to contact this server and let you browse the groups there
3510 (@code{gnus-group-browse-foreign-server}).
3511 @end table
3512
3513 @findex gnus-browse-server-mode
3514 A new buffer with a list of available groups will appear.  This buffer
3515 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
3516 (well, a lot) like a normal group buffer, but with one major difference
3517 - you can't enter any of the groups.  If you want to read any of the
3518 news available on that server, you have to subscribe to the groups you
3519 think may be interesting, and then you have to exit this buffer.  The
3520 new groups will be added to the group buffer, and then you can read them
3521 as you would any other group.
3522
3523 Future versions of Gnus may possibly permit reading groups straight from
3524 the browse buffer.
3525
3526 Here's a list of keystrokes available in the browse mode:
3527
3528 @table @kbd
3529 @item n
3530 @kindex n (Browse)
3531 @findex gnus-group-next-group
3532 Go to the next group (@code{gnus-group-next-group}).
3533
3534 @item p
3535 @kindex p (Browse)
3536 @findex gnus-group-prev-group
3537 Go to the previous group (@code{gnus-group-prev-group}).
3538
3539 @item SPACE
3540 @kindex SPACE (Browse)
3541 @findex gnus-browse-read-group
3542 Enter the current group and display the first article
3543 (@code{gnus-browse-read-group}). 
3544
3545 @item RET
3546 @kindex RET (Browse)
3547 @findex gnus-browse-select-group
3548 Enter the current group (@code{gnus-browse-select-group}). 
3549
3550 @item u
3551 @kindex u (Browse)
3552 @findex gnus-browse-unsubscribe-current-group
3553 Unsubscribe to the current group, or, as will be the case here,
3554 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
3555
3556 @item l
3557 @itemx q
3558 @kindex q (Browse)
3559 @kindex l (Browse)
3560 @findex gnus-browse-exit
3561 Exit browse mode (@code{gnus-browse-exit}).
3562
3563 @item ?
3564 @kindex ? (Browse)
3565 @findex gnus-browse-describe-briefly
3566 Describe browse mode briefly (well, there's not much to describe, is
3567 there) (@code{gnus-browse-describe-briefly}).
3568 @end table
3569
3570 @node Exiting Gnus
3571 @section Exiting Gnus
3572 @cindex exiting Gnus
3573
3574 Yes, Gnus is ex(c)iting.
3575
3576 @table @kbd
3577 @item z
3578 @kindex z (Group)
3579 @findex gnus-group-suspend
3580 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
3581 but it kills all buffers except the Group buffer.  I'm not sure why this
3582 is a gain, but then who am I to judge?
3583
3584 @item q
3585 @kindex q (Group)
3586 @findex gnus-group-exit
3587 Quit Gnus (@code{gnus-group-exit}).
3588
3589 @item Q
3590 @kindex Q (Group)
3591 @findex gnus-group-quit
3592 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
3593 @end table
3594
3595 @vindex gnus-exit-gnus-hook
3596 @vindex gnus-suspend-gnus-hook
3597 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3598 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
3599
3600 @findex gnus-unload
3601 @cindex unloading
3602 If you wish to completely unload Gnus and all its adherents, you can use
3603 the @code{gnus-unload} command.  This command is also very handy when
3604 trying to custoize meta-variables.
3605
3606 Note:
3607
3608 @quotation
3609 Miss Lisa Cannifax, while sitting in English class, feels her feet go
3610 numbly heavy and herself fall into a hazy trance as the boy sitting
3611 behind her drew repeated lines with his pencil across the back of her
3612 plastic chair.
3613 @end quotation
3614
3615
3616 @node Group Topics
3617 @section Group Topics
3618 @cindex topics
3619
3620 If you read lots and lots of groups, it might be convenient to group
3621 them hierarchically according to topics.  You put your Emacs groups over
3622 here, your sex groups over there, and the rest (what, two groups or so?)
3623 you put in some misc section that you never bother with anyway.  You can
3624 even group the Emacs sex groups as a sub-topic to either the Emacs
3625 groups or the sex groups---or both!  Go wild!
3626
3627 @findex gnus-topic-mode
3628 @kindex t (Group)
3629 To get this @emph{fab} functionality you simply turn on (ooh!) the
3630 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
3631 is a toggling command.)
3632
3633 Go ahead, just try it.  I'll still be here when you get back.  La de
3634 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
3635 press @kbd{l}.  There.  All your groups are now listed under
3636 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
3637 bothered?
3638
3639 If you want this permanently enabled, you should add that minor mode to
3640 the hook for the group mode:
3641
3642 @lisp
3643 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3644 @end lisp
3645
3646 @menu 
3647 * Topic Variables::    How to customize the topics the Lisp Way.
3648 * Topic Commands::     Interactive E-Z commands.
3649 * Topic Topology::     A map of the world.
3650 @end menu
3651
3652
3653 @node Topic Variables
3654 @subsection Topic Variables
3655 @cindex topic variables
3656
3657
3658 @vindex gnus-group-topic-topics-only
3659 Whoo, this is complicated.  If @code{gnus-group-topic-topics-only} is
3660 @code{nil}, all groups and topics will be listed, as you would expect.
3661 If this variable is non-@code{nil}, only the topics will be listed, and
3662 the groups will not be listed.  This makes the group buffer much shorter,
3663 I'm sure you'll agree.  This is all modified on a topic-by-topic basis
3664 by the @var{show} parameter.   It makes perfect sense, really.
3665
3666 @vindex gnus-topic-unique
3667 If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
3668 of (tops) one topic each.  If this is @code{nil}, each group might end
3669 up being a member of several topics.
3670
3671 Now, if you select a topic, if will fold/unfold that topic, which is
3672 really neat, I think.
3673
3674 @vindex gnus-topic-line-format
3675 The topic lines themselves are created according to the
3676 @code{gnus-topic-line-format} variable.  @xref{Formatting Variables}.
3677 Elements allowed are:
3678
3679 @table @samp
3680 @item i
3681 Indentation.
3682 @item n
3683 Topic name.
3684 @item v
3685 Visibility.
3686 @item l
3687 Level.
3688 @item g
3689 Number of groups in the topic.
3690 @item a
3691 Number of unread articles in the topic.
3692 @end table
3693
3694
3695 @node Topic Commands
3696 @subsection Topic Commands
3697 @cindex topic commands
3698
3699 When the topic minor mode is turned on, a new @kbd{T} submap will be
3700 available.  In addition, a few of the standard keys change their
3701 definitions slightly.
3702
3703 @table @kbd
3704
3705 @item T n
3706 @kindex T n (Group)
3707 @findex gnus-topic-create-topic
3708 Create a new topic (@code{gnus-topic-create-subtopic}).  You will be
3709 prompted for a topic name and the name of the parent topic.
3710
3711 @item T m
3712 @kindex T m (Group)
3713 @findex gnus-topic-move-group
3714 Move the current group to some other topic
3715 (@code{gnus-topic-move-group}).  This command understands the
3716 process/prefix convention (@pxref{Process/Prefix}).
3717
3718 @item T c
3719 @kindex T c (Group)
3720 @findex gnus-topic-copy-group
3721 Copy the current group to some other topic
3722 (@code{gnus-topic-copy-group}).  This command understands the
3723 process/prefix convention (@pxref{Process/Prefix}).
3724
3725 @item T M
3726 @kindex T M (Group)
3727 @findex gnus-topic-move-matching
3728 Move all groups that match some regular expression to a topic
3729 (@code{gnus-topic-move-matching}). 
3730
3731 @item T C
3732 @kindex T C (Group)
3733 @findex gnus-topic-copy-matching
3734 Copy all groups that match some regular expression to a topic
3735 (@code{gnus-topic-copy-matching}). 
3736
3737 @item RET
3738 @kindex RET (Group)
3739 @findex gnus-topic-select-group
3740 @itemx SPACE
3741 Either select a group or fold a topic (@code{gnus-topic-select-group}).
3742 When you perform this command on a group, you'll enter the group, as
3743 usual.  When done on a topic line, the topic will be folded (if it was
3744 visible) or unfolded (if it was folded already).  So it's basically a
3745 toggling command on topics.  In addition, if you give a numerical
3746 prefix, group on that level (and lower) will be displayed.
3747
3748 @item C-k
3749 @kindex C-k (Group)
3750 @findex gnus-topic-kill-group
3751 Kill a group or topic (@code{gnus-topic-kill-group}).  
3752
3753 @item C-y
3754 @kindex C-y (Group)
3755 @findex gnus-topic-yank-group
3756 Yank the previosuly killed group or topic (@code{gnus-topic-yank-group}).
3757 Note that all topics will be yanked before all groups.
3758
3759 @item T r
3760 @kindex T r (Group)
3761 @findex gnus-topic-rename
3762 Rename a topic (@code{gnus-topic-rename}). 
3763
3764 @item T DEL
3765 @kindex T DEL (Group)
3766 @findex gnus-topic-delete
3767 Delete an empty topic (@code{gnus-topic-delete}). 
3768
3769 @end table
3770
3771
3772 @node Topic Topology
3773 @subsection Topic Topology
3774 @cindex topic topology
3775 @cindex topology
3776
3777 So, let's have a look at an example group buffer:
3778
3779 @example
3780 Gnus
3781   Emacs -- I wuw it!
3782        3: comp.emacs
3783        2: alt.religion.emacs
3784     Naughty Emacs
3785      452: alt.sex.emacs
3786        0: comp.talk.emacs.recovery
3787   Misc
3788        8: comp.binaries.fractals
3789       13: comp.sources.unix
3790 @end example
3791
3792 So, here we have one top-level topic, two topics under that, and one
3793 sub-topic under one of the sub-topics.  (There is always just one (1)
3794 top-level topic).  This topology can be expressed as follows:
3795
3796 @lisp
3797 (("Gnus" visible)
3798  (("Emacs -- I wuw it!" visible) 
3799   (("Naughty Emacs" visible)))
3800  (("Misc" visible)))
3801 @end lisp
3802
3803 This is in fact how the variable @code{gnus-topic-topology} would look
3804 for the display above.  That variable is saved in the @file{.newsrc.eld}
3805 file, and shouldn't be messed with manually---unless you really want
3806 to.  Since this variable is read from the @file{.newsrc.eld} file,
3807 setting it in any other startup files will have no effect.  
3808
3809 This topology shows what topics are sub-topics of what topics (right),
3810 and which topics are visible.  Two settings are currently
3811 allowed---@code{visible} and @code{invisible}.
3812
3813 @vindex gnus-topic-hide-subtopics
3814 If @code{gnus-topic-hide-subtopics} is non-@code{nil} (which it is by
3815 default), sub-topics will be folded along with any groups that belong to
3816 the topic.  If this variable is @code{nil}, all topics will always be
3817 visible, even though the parent topics are folded.
3818
3819
3820 @node Misc Group Stuff
3821 @section Misc Group Stuff
3822
3823 @table @kbd
3824
3825 @item g
3826 @kindex g (Group)
3827 @findex gnus-group-get-new-news
3828 Check the server(s) for new articles.  If the numerical prefix is used,
3829 this command will check only groups of level @var{arg} and lower
3830 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
3831 command will force a total rereading of the active file(s) from the
3832 backend(s).
3833
3834 @item M-g
3835 @kindex M-g (Group)
3836 @findex gnus-group-get-new-news-this-group
3837 Check whether new articles have arrived in the current group
3838 (@code{gnus-group-get-new-news-this-group}).
3839
3840 @findex gnus-activate-all-groups
3841 @item C-c M-g
3842 @kindex C-c M-g (Group)
3843 Activate absolutely all groups (@code{gnus-activate-all-groups}). 
3844
3845 @item ^
3846 @kindex ^ (Group)
3847 @findex gnus-group-enter-server-mode
3848 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
3849 Server Buffer}.
3850
3851 @item M-f
3852 @kindex M-f (Group)
3853 @findex gnus-group-fetch-faq
3854 Try to fetch the FAQ for the current group
3855 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
3856 @code{gnus-group-faq-directory}, which is usually a directory on a
3857 remote machine.  @code{ange-ftp} will be used for fetching the file.
3858
3859 @item R
3860 @kindex R (Group)
3861 @findex gnus-group-restart
3862 Restart Gnus (@code{gnus-group-restart}).
3863
3864 @item r
3865 @kindex r (Group)
3866 @findex gnus-group-read-init-file
3867 @vindex gnus-init-file
3868 Read the init file (@code{gnus-init-file}, which defaults to
3869 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
3870
3871 @item s
3872 @kindex s (Group)
3873 @findex gnus-group-save-newsrc
3874 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
3875 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
3876 file(s) whether Gnus thinks it is necessary or not.
3877
3878 @item Z
3879 @kindex Z (Group)
3880 @findex gnus-group-clear-dribble
3881 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
3882
3883 @item D
3884 @kindex D (Group)
3885 @findex gnus-group-describe-group
3886 Describe the current group (@code{gnus-group-describe-group}).  If given
3887 a prefix, force Gnus to re-read the description from the server.
3888
3889 @item G a
3890 @kindex G a (Group)
3891 @findex gnus-group-apropos
3892 List all groups that have names that match a regexp
3893 (@code{gnus-group-apropos}).
3894
3895 @item G d
3896 @kindex G d (Group)
3897 @findex gnus-group-description-apropos
3898 List all groups that have names or descriptions that match a regexp
3899 (@code{gnus-group-description-apropos}).
3900
3901 @item a
3902 @kindex a (Group)
3903 @findex gnus-group-post-news
3904 Post an article to a group (@code{gnus-group-post-news}).  The current
3905 group name will be used as the default.
3906
3907 @item m
3908 @kindex m (Group)
3909 @findex gnus-group-mail
3910 Mail a message somewhere (@code{gnus-group-mail}).
3911
3912 @item C-x C-t
3913 @kindex C-x C-t (Group)
3914 @findex gnus-group-transpose-groups
3915 Transpose two groups (@code{gnus-group-transpose-groups}).
3916
3917 @item V
3918 @kindex V (Group)
3919 @findex gnus-version
3920 Display current Gnus version numbers (@code{gnus-version}).
3921
3922 @item M-d
3923 @kindex M-d (Group)
3924 @findex gnus-group-describe-all-groups
3925 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
3926 prefix, force Gnus to re-read the description file from the server.
3927
3928 @item ?
3929 @kindex ? (Group)
3930 @findex gnus-group-describe-briefly
3931 Give a very short help message (@code{gnus-group-describe-briefly}).
3932
3933 @item C-c C-i
3934 @kindex C-c C-i (Group)
3935 @findex gnus-info-find-node
3936 Go to the Gnus info node (@code{gnus-info-find-node}).
3937 @end table
3938
3939 @vindex gnus-group-prepare-hook
3940 @code{gnus-group-prepare-hook} is called after the group buffer is
3941 generated.  It may be used to modify the buffer in some strange,
3942 unnatural way.
3943
3944 @node The Summary Buffer
3945 @chapter The Summary Buffer
3946 @cindex summary buffer
3947
3948 A line for each article is displayed in the summary buffer.  You can
3949 move around, read articles, post articles and reply to articles.
3950
3951 @menu
3952 * Summary Buffer Format::       Deciding how the summary buffer is to look.
3953 * Summary Maneuvering::         Moving around the summary buffer.
3954 * Choosing Articles::           Reading articles.
3955 * Paging the Article::          Scrolling the current article.
3956 * Reply Followup and Post::     Posting articles.
3957 * Canceling and Superseding::   "Whoops, I shouldn't have called him that."
3958 * Marking Articles::            Marking articles as read, expirable, etc.
3959 * Limiting::                    You can limit the summary buffer.
3960 * Threading::                   How threads are made.
3961 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
3962 * Article Caching::             You may store articles in a cache.
3963 * Persistent Articles::         Making articles expiry-resistant.
3964 * Article Backlog::             Having already read articles hang around.
3965 * Exiting the Summary Buffer::  Returning to the Group buffer.
3966 * Process/Prefix::              A convention used by many treatment commands.
3967 * Saving Articles::             Ways of customizing article saving.
3968 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
3969 * Article Treatment::           The article buffer can be mangled at will.
3970 * Summary Sorting::             You can sort the summary buffer four ways.
3971 * Finding the Parent::          No child support? Get the parent.
3972 * Mail Group Commands::         Some commands can only be used in mail groups.
3973 * Various Summary Stuff::       What didn't fit anywhere else.
3974 @end menu
3975
3976
3977 @node Summary Buffer Format
3978 @section Summary Buffer Format
3979 @cindex summary buffer format
3980
3981 @menu
3982 * Summary Buffer Lines::     You can specify how summary lines should look.
3983 * Summary Buffer Mode Line:: You can say how the mode line should look.
3984 @end menu
3985
3986 @findex mail-extract-address-components
3987 @findex gnus-extract-address-components
3988 @vindex gnus-extract-address-components
3989 Gnus will use the value of the @code{gnus-extract-address-components}
3990 variable as a function for getting the name and address parts of a
3991 @code{From} header.  Two pre-defined function exist:
3992 @code{gnus-extract-address-components}, which is the default, quite
3993 fast, and too simplistic solution; and
3994 @code{mail-extract-address-components}, which works very nicely, but is
3995 slower.
3996
3997 @vindex gnus-summary-same-subject
3998 @code{gnus-summary-same-subject} is a string indicating that the current
3999 article has the same subject as the previous.  This string will be used
4000 with those specs that require it.  The default is @samp{""}.
4001
4002 @node Summary Buffer Lines
4003 @subsection Summary Buffer Lines
4004
4005 @vindex gnus-summary-line-format
4006 You can change the format of the lines in the summary buffer by changing
4007 the @code{gnus-summary-line-format} variable.  It works along the same
4008 lines a a normal @code{format} string, with some extensions.
4009
4010 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
4011
4012 The following format specification characters are understood:
4013
4014 @table @samp
4015 @item N 
4016 Article number.
4017 @item S
4018 Subject string.
4019 @item s
4020 Subject if the article is the root, @code{gnus-summary-same-subject}
4021 otherwise. 
4022 @item F
4023 Full @code{From} line.
4024 @item n
4025 The name (from the @code{From} header).
4026 @item a
4027 The name (from the @code{From} header).  This differs from the @code{n}
4028 spec in that it uses @code{gnus-extract-address-components}, which is
4029 slower, but may be more thorough.
4030 @item A
4031 The address (from the @code{From} header).  This works the same way as
4032 the @code{a} spec.
4033 @item L
4034 Number of lines in the article.
4035 @item c
4036 Number of characters in the article.
4037 @item I
4038 Indentation based on thread level (@pxref{Customizing Threading}).
4039 @item T
4040 Nothing if the article is a root and lots of spaces if it isn't (it
4041 pushes everything after it off the screen).
4042 @item \[
4043 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
4044 for adopted articles.
4045 @item \]
4046 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
4047 for adopted articles.
4048 @item <
4049 One space for each thread level.
4050 @item >
4051 Twenty minus thread level spaces.
4052 @item U
4053 Unread.
4054 @item R
4055 Replied.
4056 @item i
4057 Score as a number.
4058 @item z
4059 @vindex gnus-summary-zcore-fuzz
4060 Zcore, @samp{+} if above the default level and @samp{-} if below the
4061 default level.  If the difference between
4062 @code{gnus-summary-default-level} and the score is less than
4063 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
4064 @item x
4065 @code{Xref}.
4066 @item D
4067 @code{Date}.
4068 @item M
4069 @code{Message-ID}.
4070 @item r
4071 @code{References}.
4072 @item t
4073 Number of articles in the current sub-thread.  Using this spec will slow
4074 down summary buffer generation somewhat.
4075 @item e
4076 A single character will be displayed if the article has any children. 
4077 @item u
4078 User defined specifier.  The next character in the format string should
4079 be a letter.  @sc{gnus} will call the function
4080 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
4081 following @samp{%u}.  The function will be passed the current header as
4082 argument.  The function should return a string, which will be inserted
4083 into the summary just like information from any other summary specifier.
4084 @end table
4085
4086 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
4087 have to be handled with care.  For reasons of efficiency, Gnus will
4088 compute what column these characters will end up in, and "hard-code"
4089 that.  This means that it is illegal to have these specs after a
4090 variable-length spec.  Well, you might not be arrested, but your summary
4091 buffer will look strange, which is bad enough.
4092
4093 The smart choice is to have these specs as far to the left as possible.
4094 (Isn't that the case with everything, though?  But I digress.)
4095
4096 This restriction may disappear in later versions of Gnus.
4097
4098 @node Summary Buffer Mode Line
4099 @subsection Summary Buffer Mode Line
4100
4101 @vindex gnus-summary-mode-line-format
4102 You can also change the format of the summary mode bar.  Set
4103 @code{gnus-summary-mode-line-format} to whatever you like.  Here are the
4104 elements you can play with:
4105
4106 @table @samp
4107 @item G
4108 Group name.
4109 @item p
4110 Unprefixed group name.
4111 @item A
4112 Current article number.
4113 @item V
4114 Gnus version.
4115 @item U
4116 Number of unread articles in this group.
4117 @item e
4118 Number of unselected articles in this group.
4119 @item Z
4120 A string with the number of unread and unselected articles represented
4121 either as @samp{<%U(+%u) more>} if there are both unread and unselected
4122 articles, and just as @samp{<%U more>} if there are just unread articles
4123 and no unselected ones.
4124 @item g
4125 Shortish group name.  For instance, @samp{rec.arts.anime} will be
4126 shortened to @samp{r.a.anime}. 
4127 @item S
4128 Subject of the current article.
4129 @item u
4130 Used-defined spec.
4131 @item s
4132 Name of the current score file.
4133 @item d
4134 Number of dormant articles.
4135 @item t
4136 Number of ticked articles.
4137 @item r
4138 Number of articles that have been marked as read in this session. 
4139 @item E
4140 Number of articles expunged by the score files.
4141 @end table
4142
4143
4144 @node Summary Maneuvering
4145 @section Summary Maneuvering
4146 @cindex summary movement
4147
4148 All the straight movement commands understand the numeric prefix and
4149 behave pretty much as you'd expect. 
4150
4151 None of these commands select articles.
4152
4153 @table @kbd
4154 @item G M-n
4155 @itemx M-n
4156 @kindex M-n (Summary)
4157 @kindex G M-n (Summary)
4158 @findex gnus-summary-next-unread-subject
4159 Go to the next summary line of an unread article
4160 (@code{gnus-summary-next-unread-subject}). 
4161
4162 @item G M-p
4163 @itemx M-p
4164 @kindex M-p (Summary)
4165 @kindex G M-p (Summary)
4166 @findex gnus-summary-prev-unread-subject
4167 Go to the previous summary line of an unread article
4168 (@code{gnus-summary-prev-unread-subject}). 
4169
4170 @item G g
4171 @itemx j
4172 @kindex j (Summary)
4173 @kindex G g (Summary)
4174 @findex gnus-summary-goto-subject
4175 Ask for an article number and then go to this summary line
4176 (@code{gnus-summary-goto-subject}). 
4177 @end table
4178
4179 @vindex gnus-auto-select-next
4180 If you are at the end of the group and issue one of the movement
4181 commands, Gnus will offer to go to the next group.  If
4182 @code{gnus-auto-select-next} is @code{t} and the next group is empty,
4183 Gnus will exit summary mode and return to the group buffer.  If this
4184 variable is neither @code{t} nor @code{nil}, Gnus will select the next
4185 group, no matter whether it has any unread articles or not.  As a
4186 special case, if this variable is @code{quietly}, Gnus will select the
4187 next group without asking for confirmation.  If this variable is
4188 @code{almost-quietly}, the same will happen only if you are located on
4189 the last article in the group.  Also @xref{Group Levels}.
4190
4191 If Gnus asks you to press a key to confirm going to the next group, you
4192 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
4193 buffer, searching for the next group to read without actually returning
4194 to the group buffer.
4195
4196 @vindex gnus-auto-select-same
4197 If @code{gnus-auto-select-same} is non-@code{nil}, all the movement
4198 commands will try to go to the next article with the same subject as the
4199 current.  This variable is not particularly useful if you use a threaded
4200 display.
4201
4202 @vindex gnus-summary-check-current
4203 If @code{gnus-summary-check-current} is non-@code{nil}, all the "unread"
4204 movement commands will not proceed to the next (or previous) article if
4205 the current article is unread.  Instead, they will choose the current
4206 article.  
4207
4208 @vindex gnus-auto-center-summary
4209 If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the
4210 point in the summary buffer centered at all times.  This makes things
4211 quite tidy, but if you have a slow network connection, or simply do not
4212 like this un-Emacsism, you can set this variable to @code{nil} to get
4213 the normal Emacs scrolling action.
4214
4215 @node Choosing Articles
4216 @section Choosing Articles
4217 @cindex selecting articles
4218
4219 None of the following movement commands understand the numeric prefix,
4220 and they all select and display an article.
4221
4222 @table @kbd
4223 @item SPACE
4224 @kindex SPACE (Summary)
4225 @findex gnus-summary-next-page
4226 Select the current article, or, if that one's read already, the next
4227 unread article (@code{gnus-summary-next-page}).
4228
4229 @item G n
4230 @itemx n
4231 @kindex n (Summary)
4232 @kindex G n (Summary)
4233 @findex gnus-summary-next-unread-article
4234 Go to next unread article (@code{gnus-summary-next-unread-article}).
4235
4236 @item G p
4237 @itemx p
4238 @kindex p (Summary)
4239 @findex gnus-summary-prev-unread-article
4240 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
4241
4242 @item G N
4243 @itemx N
4244 @kindex N (Summary)
4245 @kindex G N (Summary)
4246 @findex gnus-summary-next-article
4247 Go to the next article (@code{gnus-summary-next-article}).
4248
4249 @item G P
4250 @itemx P
4251 @kindex P (Summary)
4252 @kindex G P (Summary)
4253 @findex gnus-summary-prev-article
4254 Go to the previous article (@code{gnus-summary-prev-article}).
4255
4256 @item G C-n
4257 @kindex G C-n (Summary)
4258 @findex gnus-summary-next-same-subject
4259 Go to the next article with the same subject
4260 (@code{gnus-summary-next-same-subject}). 
4261
4262 @item G C-p
4263 @kindex G C-p (Summary)
4264 @findex gnus-summary-prev-same-subject
4265 Go to the previous article with the same subject
4266 (@code{gnus-summary-prev-same-subject}). 
4267
4268 @item G f
4269 @itemx .
4270 @kindex G f  (Summary)
4271 @kindex .  (Summary)
4272 @findex gnus-summary-first-unread-article
4273 Go to the first unread article
4274 (@code{gnus-summary-first-unread-article}).
4275
4276 @item G b
4277 @itemx ,
4278 @kindex G b (Summary)
4279 @kindex , (Summary)
4280 Go to the article with the highest score
4281 (@code{gnus-summary-best-unread-article}). 
4282
4283 @item G l
4284 @itemx l
4285 @kindex l (Summary)
4286 @kindex G l (Summary)
4287 @findex gnus-summary-goto-last-article
4288 Go to the previous article read (@code{gnus-summary-goto-last-article}).
4289
4290 @item G p
4291 @kindex G p (Summary)
4292 @findex gnus-summary-pop-article
4293 Pop an article off the summary history and go to this article
4294 (@code{gnus-summary-pop-article}).  This command differs from the
4295 command above in that you can pop as many previous articles off the
4296 history as you like.
4297 @end table
4298
4299 Some variables that are relevant for moving and selecting articles:
4300
4301 @table @code
4302 @item gnus-auto-extend-newsgroup
4303 @vindex gnus-auto-extend-newsgroup
4304 All the movement commands will try to go to the previous (or next)
4305 article, even if that article isn't displayed in the Summary buffer if
4306 this variable is non-@code{nil}.  Gnus will then fetch the article from
4307 the server and display it in the article buffer.
4308
4309 @item gnus-select-article-hook
4310 @vindex gnus-select-article-hook
4311 This hook is called whenever an article is selected.  By default it
4312 exposes any threads hidden under the selected article.
4313
4314 @item gnus-mark-article-hook
4315 @vindex gnus-mark-article-hook
4316 This hook is called whenever an article is selected.  It is intended to
4317 be used for marking articles as read.
4318
4319 @item gnus-visual-mark-article-hook
4320 @vindex gnus-visual-mark-article-hook
4321 This hook is run after selecting an article.  It is meant to be used for
4322 highlighting the article in some way.  It is not run if
4323 @code{gnus-visual} is @code{nil}.
4324
4325 @item gnus-summary-update-hook
4326 @vindex gnus-summary-update-hook
4327 This hook is called when a summary line is changed.  It is not run if
4328 @code{gnus-visual} is @code{nil}.
4329
4330 @item gnus-summary-selected-face
4331 @vindex gnus-summary-selected-face
4332 This is the face (or @dfn{font} as some people call it) that is used to
4333 highlight the current article in the summary buffer.
4334
4335 @item gnus-summary-highlight
4336 @vindex gnus-summary-highlight
4337 Summary lines are highlighted according to this variable, which is a
4338 list where the elements are on the format @code{(FORM . FACE)}.  If you
4339 would, for instance, like ticked articles to be italic and high-scored
4340 articles to be bold, you could set this variable to something like
4341 @lisp
4342 (((eq mark gnus-ticked-mark) . italic)
4343  ((> score default) . bold))
4344 @end lisp
4345 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
4346 @var{FACE} will be applied to the line.
4347 @end table
4348
4349 @node Paging the Article
4350 @section Scrolling the Article
4351 @cindex article scrolling
4352
4353 @table @kbd
4354
4355 @item SPACE
4356 @kindex SPACE (Summary)
4357 @findex gnus-summary-next-page
4358 Pressing @kbd{SPACE} will scroll the current article forward one page,
4359 or, if you have come to the end of the current article, will choose the
4360 next article (@code{gnus-summary-next-page}).
4361
4362 @item DEL
4363 @kindex DEL (Summary)
4364 @findex gnus-summary-prev-page
4365 Scroll the current article back one page (@code{gnus-summary-prev-page}). 
4366
4367 @item RET
4368 @kindex RET (Summary)
4369 @findex gnus-summary-scroll-up
4370 Scroll the current article one line forward
4371 (@code{gnus-summary-scroll-up}).
4372
4373 @item A <
4374 @itemx <
4375 @kindex < (Summary)
4376 @kindex A < (Summary)
4377 @findex gnus-summary-beginning-of-article
4378 Scroll to the beginning of the article
4379 (@code{gnus-summary-beginning-of-article}).
4380
4381 @item A >
4382 @itemx >
4383 @kindex > (Summary)
4384 @kindex A > (Summary)
4385 @findex gnus-summary-end-of-article
4386 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
4387
4388 @item A s 
4389 @kindex A s (Summary)
4390 @findex gnus-summary-isearch-article
4391 Perform an isearch in the article buffer
4392 (@code{gnus-summary-isearch-article}). 
4393
4394 @end table
4395
4396 @node Reply Followup and Post
4397 @section Reply, Followup and Post
4398 @cindex reply
4399 @cindex followup
4400 @cindex post
4401
4402 @kindex C-c C-c (Post)
4403 All the commands for posting and mailing will put you in a post or mail
4404 buffer where you can edit the article all you like, before you send the
4405 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
4406 and you wish to post the article using the foreign server, you can give
4407 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
4408 server. 
4409
4410 @menu 
4411 * Mail::                 Mailing & replying.
4412 * Post::                 Posting and following up.
4413 * Posting Server::       What server should you post via?
4414 * Mail & Post::          Mailing and posting at the same time.
4415 * Posting Styles::       An easier way to configure some key elements.
4416 * Drafts::               Postponing messages and rejected messages.
4417 * Rejected Articles::    What happens if the server doesn't like your article?
4418 @end menu
4419
4420 @node Mail
4421 @subsection Mail
4422
4423 Commands for composing a mail message:
4424
4425 @table @kbd
4426
4427 @item S r
4428 @itemx r
4429 @kindex S r (Summary)
4430 @kindex r (Summary)
4431 @findex gnus-summary-reply
4432 Mail a reply to the author of the current article
4433 (@code{gnus-summary-reply}). 
4434
4435 @item S R
4436 @itemx R
4437 @kindex R (Summary)
4438 @kindex S R (Summary)
4439 @findex gnus-summary-reply-with-original
4440 Mail a reply to the author of the current article and include the
4441 original message (@code{gnus-summary-reply-with-original}).  This
4442 command uses the process/prefix convention.
4443
4444 @item S o m
4445 @kindex S o m (Summary)
4446 @findex gnus-summary-mail-forward
4447 Forward the current article to some other person
4448 (@code{gnus-summary-mail-forward}). 
4449
4450 @item S o p
4451 @kindex S o p (Summary)
4452 @findex gnus-summary-post-forward
4453 Forward the current article to a newsgroup
4454 (@code{gnus-summary-post-forward}).
4455
4456 @item S m
4457 @itemx m
4458 @kindex m (Summary)
4459 @kindex S m (Summary)
4460 @findex gnus-summary-mail-other-window
4461 Send a mail to some other person
4462 (@code{gnus-summary-mail-other-window}).
4463
4464 @item S D b
4465 @kindex S D b (Summary)
4466 @findex gnus-summary-resend-bounced-mail
4467 If you have sent a mail, but the mail was bounced back to you for some
4468 reason (wrong address, transient failure), you can use this command to
4469 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
4470 will be popped into a mail buffer where you can edit the headers before
4471 sending the mail off again.  The headers that match the regexp
4472 @code{gnus-bounced-headers-junk} (default @samp{^Received:}) are
4473 automatically deleted first.  If you give a prefix to this command, and
4474 the bounced mail is a reply to some other mail, Gnus will try to fetch
4475 that mail and display it for easy perusal of its headers.  This might
4476 very well fail, though.
4477
4478 @item S D r
4479 @kindex S D r (Summary)
4480 @findex gnus-summary-resend-message
4481 Not to be confused with the previous command,
4482 @code{gnus-summary-resend-message} will prompt you for an address to
4483 send the current message off to, and then send it to that place.  The
4484 headers of the message won't be altered---but lots of headers that say
4485 @samp{Resent-To}, @samp{Resent-From} and so on will be added.  This
4486 means that you actually send a mail to someone that has a @samp{To}
4487 header that (proabbly) points to yourself.  This will confuse people.
4488 So, natcherly you'll only do that if you're really eVIl.  
4489
4490 This command is mainly used if you have several accounts and want to
4491 ship a mail to a different account of yours.  (If you're both
4492 @samp{root} and @samp{postmaster} and get a mail for @samp{postmaster}
4493 to the @samp{root} account, you may want to resend it to
4494 @samp{postmaster}.  Ordnung muss sein!
4495
4496 @item S O m
4497 @kindex S O m (Summary)
4498 @findex gnus-uu-digest-mail-forward
4499 Digest the current series and forward the result using mail
4500 (@code{gnus-uu-digest-mail-forward}).  This command uses the
4501 process/prefix convention (@pxref{Process/Prefix}). 
4502
4503 @item S O p
4504 @kindex S O p (Summary)
4505 @findex gnus-uu-digest-post-forward
4506 Digest the current series and forward the result to a newsgroup
4507 (@code{gnus-uu-digest-mail-forward}).  
4508 @end table
4509
4510 Variables for customizing outgoing mail:
4511
4512 @table @code
4513 @item gnus-reply-to-function
4514 @vindex gnus-reply-to-function
4515 Gnus uses the normal methods to determine where replies are to go, but
4516 you can change the behavior to suit your needs by fiddling with this
4517 variable.
4518
4519 If you want the replies to go to the @samp{Sender} instead of the
4520 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4521 like this:
4522
4523 @lisp
4524 (setq gnus-reply-to-function
4525       (lambda (group)
4526        (cond ((string= group "mail.stupid-list")
4527                (mail-fetch-field "sender"))
4528              (t
4529               nil))))
4530 @end lisp
4531
4532 This function will be called narrowed to the head of the article that is
4533 being replied to.
4534
4535 As you can see, this function should return a string if it has an
4536 opinion as to what the To header should be.  If it does not, it should
4537 just return @code{nil}, and the normal methods for determining the To
4538 header will be used.
4539
4540 This function can also return a list.  In that case, each list element
4541 should be a cons, where the car should be the name of an header
4542 (eg. @samp{Cc}) and the cdr should be the header value
4543 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
4544 the head of the outgoing mail. 
4545
4546 @item gnus-mail-send-method
4547 @vindex gnus-mail-send-method
4548 This variable says how a mail should be mailed.  It uses the function in
4549 the @code{send-mail-function} variable as the default.
4550
4551 @item gnus-uu-digest-headers
4552 @vindex gnus-uu-digest-headers
4553 List of regexps to match headers included in digested messages.  The
4554 headers will be included in the sequence they are matched.
4555
4556 @item gnus-mail-hook
4557 @vindex gnus-mail-hook
4558 Hook called as the last thing after setting up a mail buffer.
4559
4560 @item gnus-required-mail-headers
4561 @vindex gnus-required-mail-headers
4562 Gnus will generate headers in all outgoing mail instead of letting
4563 @code{sendmail} do it for us.  This makes it possible to do more neat
4564 stuff, like putting mail without sending it, do hairy @code{Fcc}
4565 handling, and much more.  This variable controls what headers Gnus will
4566 generate, and is of the exact same form as @code{gnus-required-headers},
4567 which does the same for news articles (@pxref{Post}). 
4568
4569 The @code{Newsgroups} header is illegal in this list, while @code{To} is
4570 required, and @code{X-Mailer} can be added if you so should want.
4571
4572 @findex gnus-forward-start-separator
4573 @item gnus-forward-start-separator
4574 Delimiter inserted before forwarded messages.
4575
4576 @findex gnus-forward-end-separator
4577 @item gnus-forward-end-separator
4578 Delimiter inserted after forwarded messages.
4579
4580 @findex gnus-signature-before-forwarded-message
4581 @item gnus-signature-before-forwarded-message
4582 If this variable is @code{t}, which it is by default, your personal
4583 signature will be inserted before the forwarded message.  If not, the
4584 forwarded message will be inserted first in the new mail.
4585
4586 @end table
4587
4588 @kindex C-c C-c (Mail)
4589 @kindex C-c C-p (Mail)
4590 @findex gnus-put-message
4591 You normally send a mail message by pressing @kbd{C-c C-c}.  However,
4592 you may wish to just put the mail message you have just written in your
4593 own local mail group instead of sending it.  Sounds quite unlikely, but
4594 I found that useful, so you can now also press @kbd{C-c C-p} to
4595 @dfn{put} the article in the current mail group, or, if there is no such
4596 thing, you will be prompted for a mail group, and then the article will
4597 be put there.  This means that the article is @dfn{not} mailed.  
4598
4599 There are three "methods" for handling all mail.  The default is
4600 @code{sendmail}.  Some people like what @code{mh} does better, and some
4601 people prefer @code{vm}.
4602
4603 Three variables for customizing what to use when:
4604
4605 @table @code
4606
4607 @vindex gnus-mail-reply-method
4608 @item gnus-mail-reply-method
4609 This function is used to compose replies.  The three functions avaibale
4610 are:
4611
4612 @findex gnus-mail-reply-using-vm
4613 @findex gnus-mail-reply-using-mhe
4614 @findex gnus-mail-reply-using-mail
4615 @itemize @bullet
4616 @item 
4617 @code{gnus-mail-reply-using-mail} (sendmail)
4618 @item 
4619 @code{gnus-mail-reply-using-mhe} (mh)
4620 @item
4621 @code{gnus-mail-reply-using-vm} (vm)
4622 @end itemize
4623
4624 @vindex gnus-mail-forward-method
4625 @item gnus-mail-forward-method
4626 This function is used to forward messages.  The three functions avaibale
4627 are:
4628
4629 @findex gnus-mail-forward-using-vm
4630 @findex gnus-mail-forward-using-mhe
4631 @findex gnus-mail-forward-using-mail
4632 @itemize @bullet
4633 @item 
4634 @code{gnus-mail-forward-using-mail} (sendmail)
4635 @item 
4636 @code{gnus-mail-forward-using-mhe} (mh)
4637 @item
4638 @code{gnus-mail-forward-using-vm} (vm)
4639 @end itemize
4640
4641 @vindex gnus-mail-other-window-method
4642 @item gnus-mail-other-window-method
4643 This function is used to send mails.  The three functions avaibale are:
4644
4645 @findex gnus-mail-other-window-using-vm
4646 @findex gnus-mail-other-window-using-mhe
4647 @findex gnus-mail-other-window-using-mail
4648 @itemize @bullet
4649 @item 
4650 @code{gnus-mail-other-window-using-mail} (sendmail)
4651 @item 
4652 @code{gnus-mail-other-window-using-mhe} (mh)
4653 @item
4654 @code{gnus-mail-other-window-using-vm} (vm)
4655 @end itemize
4656
4657 @end table
4658
4659
4660 @node Post
4661 @subsection Post
4662
4663 Commands for posting an article:
4664
4665 @table @kbd
4666 @item S p
4667 @itemx a
4668 @kindex a (Summary)
4669 @kindex S p (Summary)
4670 @findex gnus-summary-post-news
4671 Post an article to the current group
4672 (@code{gnus-summary-post-news}).
4673
4674 @item S f
4675 @itemx f
4676 @kindex f (Summary)
4677 @kindex S f (Summary)
4678 @findex gnus-summary-followup
4679 Post a followup to the current article (@code{gnus-summary-followup}).
4680
4681 @item S F
4682 @itemx F
4683 @kindex S F (Summary)
4684 @kindex F (Summary)
4685 @findex gnus-summary-followup-with-original
4686 Post a followup to the current article and include the original message
4687 (@code{gnus-summary-followup-with-original}).   This command uses the
4688 process/prefix convention.
4689
4690 @item S u
4691 @kindex S u (Summary)
4692 @findex gnus-uu-post-news
4693 Uuencode a file, split it into parts, and post it as a series
4694 (@code{gnus-uu-post-news}). 
4695 @c (@pxref{Uuencoding & Posting}). 
4696 @end table
4697
4698 @vindex gnus-required-headers
4699 @code{gnus-required-headers} a list of header symbols.  These headers
4700 will either be automatically generated, or, if that's impossible, they
4701 will be prompted for.  The following symbols are legal:
4702
4703 @table @code
4704
4705 @item From
4706 This required header will be filled out with the result of the
4707 @code{gnus-inews-user-name} function, which depends on the
4708 @code{gnus-user-from-line}, @code{gnus-user-login-name},
4709 @code{gnus-local-domain} and @code{user-mail-address} variables.
4710
4711 @item Subject
4712 This required header will be prompted for if not present already. 
4713
4714 @item Newsgroups
4715 This required header says which newsgroups the article is to be posted
4716 to.  If it isn't present already, it will be prompted for.
4717
4718 @item Organization
4719 @cindex organization
4720 @vindex gnus-local-organization
4721 @vindex gnus-organization-file
4722 This optional header will be filled out depending on the
4723 @code{gnus-local-organization} variable.  @code{gnus-organization-file}
4724 will be used if that variable is nil.
4725
4726 @item Lines
4727 This optional header will be computed by Gnus.
4728
4729 @item Message-ID
4730 @cindex Message-ID
4731 This required header will be generated by Gnus.  A unique ID will be
4732 created based on date, time, user name and system name.
4733
4734 @item X-Newsreader
4735 @cindex X-Newsreader
4736 This optional header will be filled out with the Gnus version numbers. 
4737
4738 @item Expires
4739 @vindex gnus-article-expires
4740 @cindex Expires
4741 This extremely optional header will be inserted according to the
4742 @code{gnus-article-expires} variable.  It is highly deprecated and
4743 shouldn't be used unless you know what you're doing.
4744
4745 @item Distribution
4746 This optional header is filled out according to the
4747 @code{gnus-distribution-function} variable.  It is a deprecated and much
4748 misunderstood header.
4749 @end table
4750
4751 In addition, you can enter conses into this list.  The car of this cons
4752 should be a symbol.  This symbol's name is the name of the header, and
4753 the cdr can either be a string to be entered verbatim as the value of
4754 this header, or it can be a function to be called.  This function should
4755 return a string to be inserted.  For instance, if you want to insert
4756 @samp{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
4757 into the list.  If you want to insert a funny quote, you could enter
4758 something like @code{(X-Yow . yow)} into the list.  The function
4759 @code{yow} will then be called without any arguments.
4760
4761 The list contains a cons where the car of the cons is @code{optional},
4762 the cdr of this cons will only be inserted if it is non-@code{nil}.
4763
4764 Other variables for customizing outgoing articles:
4765
4766 @table @code
4767 @item nntp-news-default-headers
4768 @vindex nntp-news-default-headers
4769 If non-@code{nil}, this variable will override
4770 @code{mail-default-headers} when posting.  This variable should then be
4771 a string.  This string will be inserted, as is, in the head of all
4772 outgoing articles.
4773
4774 @item gnus-use-followup-to
4775 @vindex gnus-use-followup-to
4776 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
4777 use its value, but ignore the special value @samp{poster}, which will
4778 send the followup as a reply mail to the person you are responding to.
4779 If it is the symbol @code{ask}, query the user before posting.
4780 If it is the symbol @code{use}, always use the value.
4781
4782 @item gnus-followup-to-function
4783 @vindex gnus-followup-to-function
4784 This variable is most useful in mail groups, where "following up" really
4785 means sending a mail to a list address.  Gnus uses the normal methods to
4786 determine where follow-ups are to go, but you can change the behavior
4787 to suit your needs by fiddling with this variable.
4788
4789 If you want the followups to go to the @samp{Sender} instead of the
4790 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4791 like this:
4792
4793 @lisp
4794 (setq gnus-followup-to-function
4795       (lambda (group)
4796        (cond ((string= group "mail.stupid-list")
4797                (mail-fetch-field "sender"))
4798              (t
4799               nil))))
4800 @end lisp
4801
4802 This function will be called narrowed to header of the article that is
4803 being followed up.
4804
4805 @item gnus-removable-headers
4806 @vindex gnus-removable-headers
4807 Some headers that are generated are toxic to the @sc{nntp} server.
4808 These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
4809 so these headers are deleted if they are present in this list of
4810 symbols.
4811
4812 @item gnus-deletable-headers
4813 @vindex gnus-deletable-headers
4814 Headers in this list that were previously generated by Gnus will be
4815 deleted before posting.  Let's say you post an article.  Then you decide
4816 to post it again to some other group, you naughty boy, so you jump back
4817 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
4818 ship it off again.  By default, this variable makes sure that the old
4819 generated @code{Message-ID} is deleted, and a new one generated.  If
4820 this isn't done, the entire empire would probably crumble, anarchy would
4821 prevail, and cats would start walking on two legs and rule the world.
4822 Allegedly. 
4823
4824 @item gnus-signature-function
4825 @vindex gnus-signature-function
4826 If non-@code{nil}, this variable should be a function that returns a
4827 signature file name.  The function will be called with the name of the
4828 group being posted to.  If the function returns a string that doesn't
4829 correspond to a file, the string itself is inserted.  If the function
4830 returns @code{nil}, the @code{gnus-signature-file} variable will be used
4831 instead.
4832
4833 @item gnus-post-prepare-function
4834 @vindex gnus-post-prepare-function
4835 This function is called with the name of the current group after the
4836 post buffer has been initialized, and can be used for inserting a
4837 signature.  Nice if you use different signatures in different groups.
4838
4839 @item gnus-post-prepare-hook
4840 @vindex gnus-post-prepare-hook
4841 This hook is called after a post buffer has been prepared.  If you want
4842 to insert a signature at this point, you could put
4843 @code{gnus-inews-insert-signature} into this hook.
4844
4845 @item news-reply-header-hook
4846 @vindex news-reply-header-hook
4847 A related variable when following up and replying is this variable,
4848 which inserts the @dfn{quote line}.  The default value is:
4849
4850 @lisp
4851 (defvar news-reply-header-hook
4852   (lambda ()
4853     (insert "In article " news-reply-yank-message-id
4854             " " news-reply-yank-from " writes:\n\n")))
4855 @end lisp
4856
4857 This will create lines like:
4858
4859 @example
4860 In article <zngay8jrql@@eyesore.no> Lars Mars <lars@@eyesore.no> writes:
4861 @end example
4862
4863 Having the @code{Message-ID} in this line is probably overkill, so I
4864 would suggest this hook instead:
4865
4866 @lisp
4867 (setq news-reply-header-hook
4868   (lambda () (insert news-reply-yank-from " writes:\n\n")))
4869 @end lisp
4870
4871 @item gnus-prepare-article-hook
4872 @vindex gnus-prepare-article-hook
4873 This hook is called before the headers have been prepared.  
4874
4875 @item gnus-inews-article-function
4876 @vindex gnus-inews-article-function
4877 This function is used to do the actual article processing and header
4878 checking/generation.  
4879
4880 @item gnus-inews-article-hook
4881 @vindex gnus-inews-article-hook
4882 This hook is called right before the article is posted.  By default it
4883 handles FCC processing (i.e., saving the article to a file.)  You can
4884 also have this hook add a score to all followups to the article you've
4885 written (@pxref{Followups To Yourself}). 
4886
4887 @item gnus-inews-article-header-hook
4888 @vindex gnus-inews-article-header-hook
4889 This hook is called after inserting the required headers in an article
4890 to be posted.  The hook is called from the @code{*post-news*} buffer,
4891 narrowed to the head, and is intended for people who would like to
4892 insert additional headers, or just change headers in some way or other.
4893
4894 @item gnus-check-before-posting
4895 @vindex gnus-check-before-posting
4896 If non-@code{nil}, Gnus will attempt to check the legality of the
4897 headers, as well as some other stuff, before posting.  You can control
4898 the granularity of the check by adding or removing elements from this
4899 list.  Legal elemetents are:
4900
4901 @table @code
4902 @item subject-cmsg 
4903 Check the subject for commands.
4904 @item sender
4905 Insert a new @code{Sender} header if the @code{From} header looks odd. 
4906 @item multiple-headers 
4907 Check for the existence of multiple equal headers.
4908 @item sendsys 
4909 Check for the existence of version and sendsys commands.
4910 @item message-id
4911 Check whether the @code{Message-ID} looks ok.
4912 @item from
4913 Check whether the @code{From} header seems nice.
4914 @item long-lines 
4915 Check for too long lines.
4916 @item control-chars
4917 Check for illegal characters.
4918 @item size
4919 Check for excessive size.
4920 @item new-text
4921 Check whether there is any new text in the messages.
4922 @item signature
4923 Check the length of the signature.
4924 @item approved
4925 Check whether the article has an @code{Approved} header, which is
4926 something only moderators should include.
4927 @end table
4928
4929 @end table
4930
4931
4932 @node Posting Server
4933 @subsection Posting Server
4934
4935 When you press those magical @kbd{C-c C-c} keys to ship off your latest
4936 (extremely intelligent, of course) article, where does it go?
4937
4938 Thank you for asking.  I hate you.
4939
4940 @vindex gnus-post-method
4941
4942 It can be quite complicated.  Normally, Gnus will use the same native
4943 server.  However.  If your native server doesn't allow posting, just
4944 reading, you probably want to use some other server to post your
4945 (extremely intelligent and fabulously interesting) articles.  You can
4946 then set the @code{gnus-post-method} to some other method:
4947
4948 @lisp
4949 (setq gnus-post-method '(nnspool ""))
4950 @end lisp
4951
4952 Now, if you've done this, and then this server rejects your article, or
4953 this server is down, what do you do then?  To override this variable you
4954 can use a prefix to the @kbd{C-c C-c} command to force using the
4955 "current" server for posting.
4956
4957
4958 @node Mail & Post
4959 @subsection Mail & Post
4960
4961 Commands for sending mail and post at the same time:
4962
4963 @table @kbd
4964 @item S b
4965 @kindex S b (Summary)
4966 @findex gnus-summary-followup-and-reply
4967 Post a followup and send a reply to the current article
4968 (@code{gnus-summary-followup-and-reply}).
4969
4970 @item S B
4971 @kindex S B (Summary)
4972 @findex gnus-summary-followup-and-reply-with-original
4973 Post a followup and send a reply to the current article and include the
4974 original message (@code{gnus-summary-followup-and-reply-with-original}).
4975 This command uses the process/prefix convention.
4976 @end table
4977
4978 Here's a list of variables that are relevant to both mailing and
4979 posting:
4980
4981 @table @code
4982 @item gnus-signature-file
4983 @itemx mail-signature
4984 @vindex mail-signature
4985 @vindex gnus-signature-file
4986 @cindex double signature
4987 @cindex signature
4988 If @code{gnus-signature-file} is non-@code{nil}, it should be the name
4989 of a file containing a signature (@samp{~/.signature} by default).  This
4990 signature will be appended to all outgoing post.  Most people find it
4991 more convenient to use @code{mail-signature}, which (sort of) does the
4992 same, but inserts the signature into the buffer before you start editing
4993 the post (or mail).  So---if you have both of these variables set, you
4994 will get two signatures.  Note that @code{mail-signature} does not work
4995 the same way as @code{gnus-signature-file}, which is a bit confusing.
4996 If @code{mail-signature} is @code{t}, it will insert
4997 @file{~/.signature}.  If it is a string, this string will be inserted. 
4998
4999 Note that RFC1036 says that a signature should be preceded by the three
5000 characters @samp{-- } on a line by themselves.  This is to make it
5001 easier for the recipient to automatically recognize and process the
5002 signature.  So don't remove those characters, even though you might feel
5003 that they ruin you beautiful design, like, totally.
5004
5005 Also note that no signature should be more than four lines long.
5006 Including ASCII graphics is an efficient way to get everybody to believe
5007 that you are silly and have nothing important to say.
5008
5009 @item mail-yank-prefix
5010 @vindex mail-yank-prefix
5011 @cindex yanking
5012 @cindex quoting
5013 When you are replying to or following up an article, you normally want
5014 to quote the person you are answering.  Inserting quoted text is done by
5015 @dfn{yanking}, and each quoted line you yank will have
5016 @code{mail-yank-prefix} prepended to it.  This is @samp{ } by default,
5017 which isn't very pretty.  Most everybody prefers that lines are
5018 prepended with @samp{> }, so @code{(setq mail-yank-prefix "> ")} in your
5019 @file{.emacs} file.
5020
5021 @item mail-yank-ignored-headers
5022 @vindex mail-yank-ignored-headers
5023 When you yank a message, you do not want to quote any headers, so
5024 @code{(setq mail-yank-ignored-headers "^")}.
5025
5026 @item user-mail-address
5027 @vindex user-mail-address
5028 If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and
5029 @code{gnus-local-domain} are @code{nil}, Gnus will use
5030 @code{user-mail-address} as the address part of the @code{From} header.
5031
5032 @item gnus-local-domain
5033 @vindex gnus-local-domain
5034 @cindex domain
5035 The local doman name excluding the host name.  If your host is called
5036 @samp{"narfi.ifi.uio.no"}, then this variable should be
5037 @samp{"ifi.uio.no"}. 
5038
5039 @item gnus-local-domain
5040 @vindex gnus-local-domain
5041 @cindex domain
5042 The local doman name excluding the host name.  If your host is called
5043 @samp{"narfi.ifi.uio.no"}, then this variable should be
5044 @samp{"ifi.uio.no"}. 
5045
5046 @item gnus-user-from-line
5047 @vindex gnus-user-from-line
5048 Your full, complete e-mail address with name.  This variable overrides
5049 the other Gnus variables if it is non-@code{nil}.
5050
5051 Here are two example values of this variable: @samp{"larsi@@ifi.uio.no
5052 (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen
5053 <larsi@@ifi.uio.no>"}.  The latter version is recommended in news (and is
5054 probably illegal in mail), but the name has to be quoted if it contains
5055 non-alpha-numerical characters---@samp{"\"Lars M. Ingebrigtsen\"
5056 <larsi@@ifi.uio.no>"}.
5057
5058 @item mail-default-headers
5059 @vindex mail-default-headers
5060 This is a string that will be inserted into the header of all outgoing
5061 mail messages and news articles.  Convenient to use to insert standard
5062 headers.  If @code{nntp-news-default-headers} is non-@code{nil}, that
5063 variable will override this one when posting articles.
5064
5065 @item gnus-auto-mail-to-author
5066 @vindex gnus-auto-mail-to-author
5067 If @code{ask}, you will be prompted for whether you want to send a mail
5068 copy to the author of the article you are following up.  If
5069 non-@code{nil} and not @code{ask}, Gnus will send a mail with a copy of
5070 all follow-ups to the authors of the articles you follow up.  It's nice
5071 in one way---you make sure that the person you are responding to gets
5072 your response.  Other people loathe this method and will hate you dearly
5073 for it, because it means that they will first get a mail, and then have
5074 to read the same article later when they read the news.  It is
5075 @code{nil} by default.
5076
5077 @item gnus-mail-courtesy-message
5078 @vindex gnus-mail-courtesy-message
5079 This is a string that will be prepended to all mails that are the result
5080 of using the variable described above.  
5081
5082 @item gnus-outgoing-message-group 
5083 @vindex gnus-outgoing-message-group 
5084 All outgoing messages will be put in this group.  If you want to store
5085 all your outgoing mail and articles in the group @samp{nnml:archive},
5086 you set this variable to that value.  This variable can also be a list of
5087 group names.
5088
5089 If you want to have greater control over what group to put each
5090 message in, you can set this variable to a function that checks the
5091 current newsgroup name and then returns a suitable group name (or list
5092 of names).
5093
5094 @item gnus-mailing-list-groups
5095 @findex gnus-mailing-list-groups
5096 @cindex mailing lists
5097
5098 If your newsserver offer groups that are really mailing lists that are
5099 gatewayed to the @sc{nntp} server, you can read those groups without
5100 problems, but you can't post/followup to them without some difficulty.
5101 One solution is to add a @code{to-address} to the group parameters
5102 (@pxref{Group Parameters}).  An easier thing to do is set the
5103 @code{gnus-mailing-list-groups} to a regexp that match the groups that
5104 really are mailing lists.  Then, at least, followups to the mailing
5105 lists will work most of the time.  Posting to these groups (@kbd{a}) is
5106 still a pain, though.
5107
5108
5109 @end table
5110
5111 You may want to do spell-checking on messages that you send out.  Or, if
5112 you don't want to spell-check by hand, you could add automatic
5113 spell-checking via the @code{ispell} package:
5114
5115 @vindex news-inews-hook
5116 @lisp
5117 (add-hook 'news-inews-hook 'ispell-message)     ;For news posts
5118 (add-hook 'mail-send-hook 'ispell-message)      ;for mail posts via sendmail
5119 @end lisp
5120
5121 @findex gnus-inews-insert-mime-headers
5122 If you want to insert some @sc{mime} headers into the articles you post,
5123 without doing any actual encoding, you could add
5124 @code{gnus-inews-insert-mime-headers} to @code{gnus-inews-article-hook}.
5125
5126
5127 @node Posting Styles
5128 @subsection Posting Styles
5129 @cindex posting styles
5130 @cindex styles
5131
5132 All them variables, they make my head swim.  
5133
5134 So what if you want a different @code{Organization} and signature based
5135 on what groups you post to?  And you post both from your home machine
5136 and your work machine, and you want different @code{From} lines, and so
5137 on? 
5138
5139 @vindex gnus-posting-styles
5140 One way to do stuff like that is to write clever hooks that change the
5141 variables you need to have changed.  That's a bit boring, so somebody
5142 came up with the bright idea of letting the user specify these things in
5143 a handy alist.  Here's an example of a @code{gnus-posting-styles}
5144 variable: 
5145
5146 @lisp
5147 ((".*" (signature . "Peace and happiness") (organization . "What me?"))
5148  ("^comp" (signature . "Death to everybody"))
5149  ("comp.emacs.i-love-it" (organization . "Emacs is it")))
5150 @end lisp
5151
5152 As you might surmise from this example, this alist consists of several
5153 @dfn{styles}.  Each style will be applicable if the first element
5154 "matches", in some form or other.  The entire alist will be iterated
5155 over, from the beginning towards the end, and each match will be
5156 applied, which means that attributes in later styles that match override
5157 the same attributes in earlier matching styles.  So
5158 @samp{comp.programming.literate} will have the @samp{Death to everybody}
5159 signature and the @samp{What me?} @code{Organization} header. 
5160
5161 The first element in each style is called the @code{match}.  If it's a
5162 string, then Gnus will try to regexp match it against the group name.
5163 If it's a function symbol, that function will be called with no
5164 arguments.  If it's a variable symbol, then the variable will be
5165 referenced.  If it's a list, then that list will be @code{eval}ed.  In
5166 any case, if this returns a non-@code{nil} value, then the style is said
5167 to @dfn{match}.
5168
5169 Each style may contain a random amount of @dfn{attributes}.  Each
5170 attribute consists of a @var{(name  . value)} pair.  The attribute name
5171 can be one of @code{signature}, @code{organization} or @code{from}.  
5172 The attribute name can also be a string.  In that case, this will be
5173 used as a header name, and the value will be inserted in the headers of
5174 the article. 
5175
5176 The attribute value can be a string (used verbatim), a function (the
5177 return value will be used), a variable (its value will be used) or a
5178 list (it will be @code{eval}ed and the return value will be used).
5179
5180 So here's a new example:
5181
5182 @lisp
5183 (setq gnus-posting-styles
5184       '((".*" 
5185            (signature . "~/.signature") 
5186            (from . "user@@foo (user)")
5187            ("X-Home-Page" . (getenv "WWW_HOME"))
5188            (organization . "People's Front Against MWM"))
5189         ("^rec.humor" 
5190            (signature . my-funny-signature-randomizer))
5191         ((equal (system-name) "gnarly") 
5192            (signature . my-quote-randomizer))
5193         (posting-from-work-p
5194            (signature . "~/.work-signature")
5195            (from . "user@@bar.foo (user)")
5196            (organization . "Important Work, Inc"))
5197         ("^nn.+:" 
5198            (signature . "~/.mail-signature"))))
5199 @end lisp
5200
5201
5202
5203 @node Drafts
5204 @subsection Drafts
5205 @cindex drafts
5206
5207 If you are writing a message (mail or news) and suddenly remember that
5208 you have a steak in the oven (or some pesto in the food processor, you
5209 craazy vegetarians), you'll probably wish there was a method to save the
5210 message you are writing so that you can continue editing it some other
5211 day, and send it when you feel its finished.
5212
5213 Well, don't worry about it.  Whenever you start composing a message of
5214 some sort using the Gnus mail and post commands, the buffer you get will
5215 automatically associate to an article in a special @dfn{draft} group.
5216 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
5217 article will be saved there.  (Auto-save files also go to the draft
5218 group.) 
5219
5220 The draft group is a special draft group (which is implemented as an
5221 @code{nndraft} group, if you absolutely have to know) called
5222 @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
5223 controls both the name of the group and the location---the leaf element
5224 in the path will be used as the name of the group.  What makes this
5225 group special is that you can't tick any articles in it or mark any
5226 articles as read---all articles in the group are permanently unread.  
5227
5228 If the group doesn't exist, it will be created and you'll be subscribed
5229 to it.
5230
5231 @findex gnus-summary-send-draft
5232 @kindex S D c (Summary)
5233 When you want to continue editing the article, you simply enter the
5234 draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
5235 that.  You will be placed in a buffer where you left off.
5236
5237 Rejected articles will also be put in this draft group (@pxref{Rejected
5238 Articles}).
5239
5240 @findex gnus-summary-send-all-drafts
5241 If you have lots of rejected messages you want to post (or mail) without
5242 doing further editing, you can use the @kbd{S D a} command
5243 (@code{gnus-summary-send-all-drafts}).  This command understands the
5244 process/prefix convention (@pxref{Process/Prefix}).  
5245
5246
5247 @node Rejected Articles
5248 @subsection Rejected Articles
5249 @cindex rejected articles
5250
5251 Sometimes a news server will reject an article.  Perhaps the server
5252 doesn't like your face.  Perhaps it just feels miserable.  Perhaps
5253 @emph{there be demons}.  Perhaps you have included too much cited text.
5254 Perhaps the disk is full.  Perhaps the server is down.
5255
5256 These situations are, of course, totally beyond the control of Gnus.
5257 (Gnus, of course, loves the way you look, always feels great, has angels
5258 fluttering around inside of it, doesn't care about how much cited text
5259 you include, never runs full and never goes down.)  So Gnus saves these
5260 articles until some later time when the server feels better.
5261
5262 The rejected articles will automatically be put in a special draft group
5263 (@pxref{Drafts}).  When the server comes back up again, you'd then
5264 typically enter that group and send all the articles off.
5265
5266
5267 @node Canceling and Superseding
5268 @section Canceling Articles
5269 @cindex canceling articles
5270 @cindex superseding articles
5271
5272 Have you ever written something, and then decided that you really,
5273 really, really wish you hadn't posted that?
5274
5275 Well, you can't cancel mail, but you can cancel posts.
5276
5277 @findex gnus-summary-cancel-article
5278 @kindex C (Summary)
5279 Find the article you wish to cancel (you can only cancel your own
5280 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
5281 c} (@code{gnus-summary-cancel-article}).  Your article will be
5282 canceled---machines all over the world will be deleting your article. 
5283
5284 Be aware, however, that not all sites honor cancels, so your article may
5285 live on here and there, while most sites will delete the article in
5286 question.
5287
5288 If you discover that you have made some mistakes and want to do some
5289 corrections, you can post a @dfn{superseding} article that will replace
5290 your original article.
5291
5292 @findex gnus-summary-supersede-article
5293 @kindex S (Summary)
5294 Go to the original article and press @kbd{S s}
5295 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
5296 where you can edit the article all you want before sending it off the
5297 usual way.
5298
5299 @vindex gnus-delete-supersedes-headers
5300 You probably want to delete some of the old headers before sending the
5301 superseding article---@code{Path} and @code{Date} are probably
5302 incorrect.  Set @code{gnus-delete-supersedes-headers} to a regexp to
5303 match the lines you want removed.  The default is
5304 @samp{"^Path:\\|^Date"}. 
5305
5306 The same goes for superseding as for canceling, only more so: Some
5307 sites do not honor superseding.  On those sites, it will appear that you
5308 have posted almost the same article twice.
5309
5310 If you have just posted the article, and change your mind right away,
5311 there is a trick you can use to cancel/supersede the article without
5312 waiting for the article to appear on your site first.  You simply return
5313 to the post buffer (which is called @code{*post-buf*}).  There you will
5314 find the article you just posted, with all the headers intact.  Change
5315 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
5316 header by substituting one of those words for @samp{Message-ID}.  Then
5317 just press @kbd{C-c C-c} to send the article as you would do normally.
5318 The previous article will be canceled/superseded.
5319
5320 Just remember, kids: There is no 'c' in 'supersede'.
5321
5322 @node Marking Articles
5323 @section Marking Articles
5324 @cindex article marking
5325 @cindex article ticking
5326 @cindex marks
5327
5328 There are several marks you can set on an article. 
5329
5330 You have marks that decide the @dfn{readed-ness} (whoo, neato-keano
5331 neologism ohoy!) of the article.  Alphabetic marks generally mean
5332 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
5333
5334 In addition, you also have marks that do not affect readedness.
5335
5336 @menu
5337 * Unread Articles::      Marks for unread articles.
5338 * Read Articles::        Marks for read articles.
5339 * Other Marks::          Marks that do not affect readedness.
5340 @end menu
5341
5342 @ifinfo
5343 There's a plethora of commands for manipulating these marks:
5344 @end ifinfo
5345
5346 @menu
5347 * Setting Marks::           How to set and remove marks.
5348 * Setting Process Marks::   How to mark articles for later processing.
5349 @end menu
5350
5351 @node Unread Articles
5352 @subsection Unread Articles
5353
5354 The following marks mark articles as unread, in one form or other.
5355
5356 @vindex gnus-dormant-mark
5357 @vindex gnus-ticked-mark
5358 @table @samp
5359 @item !
5360 @dfn{Ticked articles} are articles that will remain visible always.  If
5361 you see an article that you find interesting, or you want to put off
5362 reading it, or replying to it, until sometime later, you'd typically
5363 tick it.  However, articles can be expired, so if you want to keep an
5364 article forever, you'll have to save it.  Ticked articles have a
5365 @samp{!} (@code{gnus-ticked-mark}) in the first column.
5366
5367 @item ?
5368 A @dfn{dormant} article is marked with a @samp{?}
5369 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
5370 if there are followups to it.
5371
5372 @item SPC
5373 An @dfn{unread} article is marked with a @samp{SPC}
5374 (@code{gnus-unread-mark}).  These are articles that haven't been read at
5375 all yet.
5376 @end table
5377
5378 @node Read Articles
5379 @subsection Read Articles
5380 @cindex expirable mark
5381
5382 All the following marks mark articles as read.
5383
5384 @table @samp
5385
5386 @item r
5387 Articles that are marked as read.  They have a @samp{r}
5388 (@code{gnus-del-mark}) in the first column.  These are articles that the
5389 user has marked as read more or less manually.
5390
5391 @item R
5392 Articles that are actually read are marked with @samp{R}
5393 (@code{gnus-read-mark}). 
5394
5395 @item O
5396 Articles that were marked as read in previous sessions are now
5397 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). 
5398
5399 @item K
5400 Marked as killed (@code{gnus-killed-mark}).
5401
5402 @item X
5403 Marked as killed by kill files (@code{gnus-kill-file-mark}).
5404
5405 @item Y
5406 Marked as read by having a too low score (@code{gnus-low-score-mark}).
5407
5408 @item C
5409 Marked as read by a catchup (@code{gnus-catchup-mark}).
5410
5411 @item G
5412 Canceled article (@code{gnus-cancelled-mark})
5413 @end table
5414
5415 All these marks just mean that the article is marked as read, really.
5416 They are interpreted differently by the adaptive scoring scheme,
5417 however.
5418
5419 One more special mark, though:
5420
5421 @table @samp
5422 @item E
5423 You can also mark articles as @dfn{expirable} (or have them marked as
5424 such automatically).  That doesn't make much sense in normal groups,
5425 because a user does not control the expiring of news articles, but in
5426 mail groups, for instance, articles that are marked as @dfn{expirable}
5427 can be deleted by Gnus at any time.  Expirable articles are marked with
5428 @samp{E} (@code{gnus-expirable-mark}).
5429 @end table
5430
5431 @node Other Marks
5432 @subsection Other Marks
5433 @cindex process mark
5434 @cindex bookmarks
5435
5436 There are some marks that have nothing to do with whether the article is
5437 read or not.
5438
5439 @itemize @bullet
5440
5441 @item 
5442 You can set a bookmark in the current article.  Say you are reading a
5443 long thesis on cats' urinary tracts, and have to go home for dinner
5444 before you've finished reading the thesis.  You can then set a bookmark
5445 in the article, and Gnus will jump to this bookmark the next time it
5446 encounters the article.
5447
5448 @item
5449 All articles that you have replied to or made a followup to (i.e., have
5450 answered) will be marked with an @samp{A} in the second column
5451 (@code{gnus-replied-mark}).
5452
5453 @item 
5454 Articles that are stored in the article cache will be marked with an
5455 @samp{*} in the second column (@code{gnus-cached-mark}).
5456
5457 @item 
5458 Articles that are "saved" (in some manner or other; not necessarily
5459 religously) are marked with an @samp{S} in the second column
5460 (@code{gnus-saved-mark}.  
5461
5462 @item 
5463 @vindex gnus-not-empty-thread-mark
5464 @vindex gnus-empty-thread-mark
5465 It the @samp{%e} spec is used, the presence of threads or not will be
5466 marked with @code{gnus-not-empty-thread-mark} and
5467 @code{gnus-empty-thread-mark} in the third column, respectively.
5468
5469 @item 
5470 @vindex gnus-process-mark
5471 Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
5472 variety of commands react to the presence of the process mark.  For
5473 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
5474 all articles that have been marked with the process mark.  Articles
5475 marked with the process mark have a @samp{#} in the second column.
5476
5477 @end itemize
5478
5479 You might have noticed that most of these "non-readedness" marks appear
5480 in the second column by default.  So if you have a cached, saved,
5481 replied article that you have process-marked, what will that look like?
5482
5483 Nothing much.  The presedence rules go as follows: process -> cache ->
5484 replied -> saved.  So if the article is in the cache and is replied,
5485 you'll only see the cache mark and not the replied mark.
5486
5487
5488 @node Setting Marks
5489 @subsection Setting Marks
5490 @cindex setting marks
5491
5492 All the marking commands understand the numeric prefix.
5493
5494 @table @kbd
5495 @item M t
5496 @itemx !
5497 @kindex ! (Summary)
5498 @kindex M t (Summary)
5499 @findex gnus-summary-tick-article-forward
5500 Tick the current article (@code{gnus-summary-tick-article-forward}).
5501
5502 @item M ?
5503 @itemx ?
5504 @kindex ? (Summary)
5505 @kindex M ? (Summary)
5506 @findex gnus-summary-mark-as-dormant
5507 Mark the current article as dormant
5508 (@code{gnus-summary-mark-as-dormant}).
5509
5510 @item M d
5511 @itemx d
5512 @kindex M d (Summary)
5513 @kindex d (Summary)
5514 @findex gnus-summary-mark-as-read-forward
5515 Mark the current article as read
5516 (@code{gnus-summary-mark-as-read-forward}).
5517
5518 @item M k
5519 @itemx k
5520 @kindex k (Summary)
5521 @kindex M k (Summary)
5522 @findex gnus-summary-kill-same-subject-and-select
5523 Mark all articles that have the same subject as the current one as read,
5524 and then select the next unread article
5525 (@code{gnus-summary-kill-same-subject-and-select}).
5526
5527 @item M K
5528 @itemx C-k
5529 @kindex M K (Summary)
5530 @kindex C-k (Summary)
5531 @findex gnus-summary-kill-same-subject
5532 Mark all articles that have the same subject as the current one as read
5533 (@code{gnus-summary-kill-same-subject}).  
5534
5535 @item M C
5536 @kindex M C (Summary)
5537 @findex gnus-summary-catchup
5538 Mark all unread articles in the group as read
5539 (@code{gnus-summary-catchup}).
5540
5541 @item M C-c
5542 @kindex M C-c (Summary)
5543 @findex gnus-summary-catchup-all
5544 Mark all articles in the group as read---even the ticked and dormant
5545 articles (@code{gnus-summary-catchup-all}).
5546
5547 @item M H
5548 @kindex M H (Summary)
5549 @findex gnus-summary-catchup-to-here
5550 Catchup the current group to point
5551 (@code{gnus-summary-catchup-to-here}). 
5552
5553 @item C-w
5554 @kindex C-w (Summary)
5555 @findex gnus-summary-mark-region-as-read
5556 Mark all articles between point and mark as read
5557 (@code{gnus-summary-mark-region-as-read}). 
5558
5559 @item M V k
5560 @kindex M V k (Summary)
5561 @findex gnus-summary-kill-below
5562 Kill all articles with scores below the default score (or below the
5563 numeric prefix) (@code{gnus-summary-kill-below}).
5564
5565 @item M c
5566 @itemx M-u
5567 @kindex M c (Summary)
5568 @kindex M-u (Summary)
5569 @findex gnus-summary-clear-mark-forward
5570 Clear all readedness-marks from the current article
5571 (@code{gnus-summary-clear-mark-forward}).
5572
5573 @item M e
5574 @itemx E
5575 @kindex M e (Summary)
5576 @kindex E (Summary)
5577 @findex gnus-summary-mark-as-expirable
5578 Mark the current article as expirable
5579 (@code{gnus-summary-mark-as-expirable}).
5580
5581 @item M b
5582 @kindex M b (Summary)
5583 @findex gnus-summary-set-bookmark
5584 Set a bookmark in the current article
5585 (@code{gnus-summary-set-bookmark}).
5586
5587 @item M B
5588 @kindex M B (Summary)
5589 @findex gnus-summary-remove-bookmark
5590 Remove the bookmark from the current article
5591 (@code{gnus-summary-remove-bookmark}).
5592
5593 @item M V c
5594 @kindex M V c (Summary)
5595 @findex gnus-summary-clear-above
5596 Clear all marks from articles with scores over the default score (or
5597 over the numeric prefix) (@code{gnus-summary-clear-above}).
5598
5599 @item M V u
5600 @kindex M V u (Summary)
5601 @findex gnus-summary-tick-above
5602 Tick all articles with scores over the default score (or over the
5603 numeric prefix) (@code{gnus-summary-tick-above}).
5604
5605 @item M V m
5606 @kindex M V m (Summary)
5607 @findex gnus-summary-mark-above
5608 Prompt for a mark, and mark all articles with scores over the default
5609 score (or over the numeric prefix) with this mark
5610 (@code{gnus-summary-clear-above}).
5611 @end table
5612
5613 @code{gnus-summary-goto-unread}
5614 The @code{gnus-summary-goto-unread} variable controls what action should
5615 be taken after setting a mark.  If non-@code{nil}, point will move to
5616 the next/previous unread article.  If @code{nil}, point will just move
5617 one line up or down.  The default is @code{t}.
5618
5619
5620 @node Setting Process Marks
5621 @subsection Setting Process Marks
5622 @cindex setting process marks
5623
5624 @table @kbd
5625
5626 @item M P p
5627 @itemx #
5628 @kindex # (Summary)
5629 @kindex M P p (Summary)
5630 @findex gnus-summary-mark-as-processable
5631 Mark the current article with the process mark
5632 (@code{gnus-summary-mark-as-processable}). 
5633 @findex gnus-summary-unmark-as-processable
5634
5635 @item M P u 
5636 @itemx M-#
5637 @kindex M P u (Summary)
5638 @kindex M-# (Summary)
5639 Remove the process mark, if any, from the current article
5640 (@code{gnus-summary-unmark-as-processable}).
5641
5642 @item M P U
5643 @kindex M P U (Summary)
5644 @findex gnus-summary-unmark-all-processable
5645 Remove the process mark from all articles
5646 (@code{gnus-summary-unmark-all-processable}). 
5647
5648 @item M P R
5649 @kindex M P R (Summary)
5650 @findex gnus-uu-mark-by-regexp
5651 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
5652
5653 @item M P r
5654 @kindex M P r (Summary)
5655 @findex gnus-uu-mark-region
5656 Mark articles in region (@code{gnus-uu-mark-region}).
5657
5658 @item M P t
5659 @kindex M P t (Summary)
5660 @findex gnus-uu-mark-thread
5661 Mark all articles in the current (sub)thread
5662 (@code{gnus-uu-mark-thread}).
5663
5664 @item M P T
5665 @kindex M P T (Summary)
5666 @findex gnus-uu-unmark-thread
5667 Unmark all articles in the current (sub)thread
5668 (@code{gnus-uu-unmark-thread}).
5669
5670 @item M P s
5671 @kindex M P s (Summary)
5672 @findex gnus-uu-mark-series
5673 Mark all articles in the current series (@code{gnus-uu-mark-series}).
5674
5675 @item M P S
5676 @kindex M P S (Summary)
5677 @findex gnus-uu-mark-sparse
5678 Mark all series that have already had some articles marked
5679 (@code{gnus-uu-mark-sparse}).
5680
5681 @item M P a
5682 @kindex M P a (Summary)
5683 @findex gnus-uu-mark-all
5684 Mark all articles in series order (@code{gnus-uu-mark-series}).
5685
5686 @item M P b
5687 @kindex M P b (Summary)
5688 @findex gnus-uu-mark-buffer
5689 Mark all articles in the buffer in the order they appear
5690 (@code{gnus-uu-mark-buffer}). 
5691 @end table
5692
5693
5694 @node Limiting
5695 @section Limiting
5696 @cindex limiting
5697
5698 It can be convenient to limit the summary buffer to just show some
5699 subset of the articles currently in the group.  The effect most limit
5700 commands have is to remove a few (or many) articles from the summary
5701 buffer. 
5702
5703 @table @kbd
5704
5705 @item / /
5706 @kindex / / (Summary)
5707 @findex gnus-summary-limit-to-subject
5708 Limit the summary buffer to articles that match some subject
5709 (@code{gnus-summary-limit-to-subject}). 
5710
5711 @item / u
5712 @itemx x
5713 @kindex / u (Summary)
5714 @kindex x (Summary)
5715 @findex gnus-summary-limit-to-unread
5716 Limit the summary buffer to articles that are not marked as read
5717 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
5718 buffer to articles that are strictly unread.  This means that ticked and
5719 dormant articles will also be excluded.
5720
5721 @item / m
5722 @kindex / m (Summary)
5723 @findex gnus-summary-limit-to-marks
5724 Ask for a mark and then limit to all articles that have not been marked
5725 with that mark (@code{gnus-summary-limit-to-marks}).
5726
5727 @item / n
5728 @kindex / n (Summary)
5729 @findex gnus-summary-limit-to-articles
5730 Limit the summary buffer to the current article
5731 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
5732 convention (@pxref{Process/Prefix}).
5733
5734 @item / w
5735 @kindex / w (Summary)
5736 @findex gnus-summary-pop-limit
5737 Pop the previous limit off the stack and restore it
5738 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
5739 the stack.
5740
5741 @item / s
5742 @itemx /
5743 @kindex / s (Summary)
5744 @kindex / (Summary)
5745 @findex gnus-summary-limit-to-subject
5746 Limit the summary buffer to articles that have a subject that matches a
5747 regexp (@code{gnus-summary-limit-to-subject}).
5748
5749 @item / v
5750 @kindex / v (Summary)
5751 @findex gnus-summary-limit-to-score
5752 Limit the summary buffer to articles that have a score at or above some
5753 score (@code{gnus-summary-limit-to-score}).
5754
5755 @item / E
5756 @itemx M S
5757 @kindex M S (Summary)
5758 @kindex / E (Summary)
5759 @findex gnus-summary-limit-include-expunged
5760 Display all expunged articles
5761 (@code{gnus-summary-limit-include-expunged}). 
5762
5763 @item / D
5764 @kindex / D (Summary)
5765 @findex gnus-summary-limit-include-dormant
5766 Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
5767
5768 @item / d
5769 @kindex / d (Summary)
5770 @findex gnus-summary-limit-exclude-dormant
5771 Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
5772
5773 @item / c
5774 @kindex / c (Summary)
5775 @findex gnus-summary-limit-exclude-childless-dormant
5776 Hide all dormant articles that have no children
5777 (@code{gnus-summary-limit-exclude-childless-dormant}). 
5778
5779 @end table
5780
5781
5782 @node Threading
5783 @section Threading
5784 @cindex threading
5785 @cindex article threading
5786
5787 Gnus threads articles by default.  @dfn{To thread} is to put replies to
5788 articles directly after the articles they reply to---in a hierarchical
5789 fashion.
5790
5791 @menu
5792 * Customizing Threading::     Variables you can change to affect the threading.
5793 * Thread Commands::           Thread based commands in the summary buffer.
5794 @end menu
5795
5796 @node Customizing Threading
5797 @subsection Customizing Threading
5798 @cindex customizing threading
5799 @cindex <
5800 @cindex >
5801
5802 @table @code
5803
5804 @item gnus-show-threads
5805 @vindex gnus-show-threads
5806 If this variable is @code{nil}, no threading will be done, and all of
5807 the rest of the variables here will have no effect.  Turning threading
5808 off will speed group selection up a bit, but it is sure to make reading
5809 slower and more awkward.
5810
5811 @item gnus-fetch-old-headers
5812 @vindex gnus-fetch-old-headers
5813 If non-@code{nil}, Gnus will attempt to build old threads by fetching
5814 more old headers---headers to articles that are marked as read.  If you
5815 would like to display as few summary lines as possible, but still
5816 connect as many loose threads as possible, you should set this variable
5817 to @code{some} or a number.  If you set it to a number, no more than
5818 that number of extra old headers will be fetched.  In either case,
5819 fetching old headers only works if the backend you are using carries
5820 overview files---this would normally be @code{nntp}, @code{nnspool} and
5821 @code{nnml}.  Also remember that if the root of the thread has been
5822 expired by the server, there's not much Gnus can do about that.
5823
5824 @item gnus-summary-gather-subject-limit
5825 Loose threads are gathered by comparing subjects of articles.  If this
5826 variable is @code{nil}, Gnus requires an exact match between the
5827 subjects of the loose threads before gathering them into one big
5828 super-thread.  This might be too strict a requirement, what with the
5829 presence of stupid newsreaders that chop off long subjects lines.  If
5830 you think so, set this variable to, say, 20 to require that only the
5831 first 20 characters of the subjects have to match.  If you set this
5832 variable to a real low number, you'll find that Gnus will gather
5833 everything in sight into one thread, which isn't very helpful.
5834
5835 @cindex fuzzy article gathering
5836 If you set this variable to the special value @code{fuzzy}, Gnus will
5837 use a fuzzy string comparison algorithm on the subjects.
5838
5839 @vindex gnus-summary-gather-exclude-subject
5840 Since loose thread gathering is done on subjects only, that might lead
5841 to many false hits, especially with certain common subjects like
5842 @samp{""} and @samp{"(none)"}.  To make the situation slightly better,
5843 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
5844 what subjects should be excluded from the gathering process.  The
5845 default is @samp{"^ *$\\|^(none)$"}.  
5846
5847 @item gnus-summary-make-false-root
5848 @vindex gnus-summary-make-false-root
5849 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
5850 and create a dummy root at the top.  (Wait a minute.  Root at the top?
5851 Yup.)  Loose subtrees occur when the real root has expired, or you've
5852 read or killed the root in a previous session.
5853
5854 When there is no real root of a thread, Gnus will have to fudge
5855 something.  This variable says what fudging method Gnus should use.
5856 There are four possible values:
5857
5858 @cindex adopting articles
5859
5860 @table @code
5861
5862 @item adopt
5863 Gnus will make the first of the orphaned articles the parent.  This
5864 parent will adopt all the other articles.  The adopted articles will be
5865 marked as such by pointy brackets (@samp{<>}) instead of the standard
5866 square brackets (@samp{[]}).  This is the default method.
5867
5868 @item dummy
5869 Gnus will create a dummy summary line that will pretend to be the
5870 parent.  This dummy line does not correspond to any real article, so
5871 selecting it will just select the first real article after the dummy
5872 article.
5873
5874 @item empty
5875 Gnus won't actually make any article the parent, but simply leave the
5876 subject field of all orphans except the first empty.  (Actually, it will
5877 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
5878 Buffer Format}).)
5879
5880 @item none
5881 Don't make any article parent at all.  Just gather the threads and
5882 display them after one another.
5883
5884 @item nil
5885 Don't gather loose threads.
5886 @end table
5887
5888 @item gnus-thread-hide-subtree
5889 @vindex gnus-thread-hide-subtree
5890 If non-@code{nil}, all threads will be hidden when the summary buffer is
5891 generated.
5892
5893 @item gnus-thread-hide-killed
5894 @vindex gnus-thread-hide-killed
5895 if you kill a thread and this variable is non-@code{nil}, the subtree
5896 will be hidden.
5897
5898 @item gnus-thread-ignore-subject
5899 @vindex gnus-thread-ignore-subject
5900 Sometimes somebody changes the subject in the middle of a thread.  If
5901 this variable is non-@code{nil}, the subject change is ignored.  If it
5902 is @code{nil}, which is the default, a change in the subject will result
5903 in a new thread.
5904
5905 @item gnus-thread-indent-level
5906 @vindex gnus-thread-indent-level
5907 This is a number that says how much each sub-thread should be indented.
5908 The default is @samp{4}.
5909 @end table
5910
5911 @node Thread Commands
5912 @subsection Thread Commands
5913 @cindex thread commands
5914
5915 @table @kbd
5916
5917 @item T k
5918 @itemx M-C-k
5919 @kindex T k (Summary)
5920 @kindex M-C-k (Summary)
5921 @findex gnus-summary-kill-thread
5922 Mark all articles in the current sub-thread as read
5923 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
5924 remove all marks instead.  If the prefix argument is negative, tick
5925 articles instead.
5926
5927 @item T l
5928 @itemx M-C-l
5929 @kindex T l (Summary)
5930 @kindex M-C-l (Summary)
5931 @findex gnus-summary-lower-thread
5932 Lower the score of the current thread
5933 (@code{gnus-summary-lower-thread}). 
5934
5935 @item T i
5936 @kindex T i (Summary)
5937 @findex gnus-summary-raise-thread
5938 Increase the score of the current thread
5939 (@code{gnus-summary-raise-thread}).
5940
5941 @item T #
5942 @kindex T # (Summary)
5943 @findex gnus-uu-mark-thread
5944 Set the process mark on the current thread
5945 (@code{gnus-uu-mark-thread}).
5946
5947 @item T M-#
5948 @kindex T M-# (Summary)
5949 @findex gnus-uu-unmark-thread
5950 Remove the process mark from the current thread
5951 (@code{gnus-uu-unmark-thread}).
5952
5953 @item T T
5954 @kindex T T (Summary)
5955 @findex gnus-summary-toggle-threads
5956 Toggle threading (@code{gnus-summary-toggle-threads}).
5957
5958 @item T s
5959 @kindex T s (Summary)
5960 @findex gnus-summary-show-thread
5961 Expose the thread hidden under the current article, if any
5962 (@code{gnus-summary-show-thread}).
5963
5964 @item T h
5965 @kindex T h (Summary)
5966 @findex gnus-summary-hide-thread
5967 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
5968
5969 @item T S
5970 @kindex T S (Summary)
5971 @findex gnus-summary-show-all-threads
5972 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
5973
5974 @item T H
5975 @kindex T H (Summary)
5976 @findex gnus-summary-hide-all-threads
5977 Hide all threads (@code{gnus-summary-hide-all-threads}).
5978
5979 @item T R
5980 @kindex T R (Summary)
5981 @findex gnus-summary-rethread-current
5982 Re-thread the thread the current article is part of
5983 (@code{gnus-summary-rethread-current}).  This works even when the
5984 summary buffer is otherwise unthreaded.
5985
5986 @end table
5987
5988 The following commands are thread movement commands.  They all
5989 understand the numeric prefix.
5990
5991 @table @kbd
5992
5993 @item T n
5994 @kindex T n (Summary)
5995 @findex gnus-summary-next-thread
5996 Go to the next thread (@code{gnus-summary-next-thread}).
5997
5998 @item T p
5999 @kindex T p (Summary)
6000 @findex gnus-summary-prev-thread
6001 Go to the previous thread (@code{gnus-summary-prev-thread}).
6002
6003 @item T d
6004 @kindex T d (Summary)
6005 @findex gnus-summary-down-thread
6006 Descend the thread (@code{gnus-summary-down-thread}).
6007
6008 @item T u
6009 @kindex T u (Summary)
6010 @findex gnus-summary-up-thread
6011 Ascend the thread (@code{gnus-summary-up-thread}).
6012 @end table
6013
6014 @vindex gnus-thread-operation-ignore-subject 
6015 If you ignore subject while threading, you'll naturally end up with
6016 threads that have several different subjects in them.  If you then issue
6017 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
6018 wish to kill the entire thread, but just those parts of the thread that
6019 have the same subject as the current article.  If you like this idea,
6020 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If is
6021 is non-@code{nil} (which it is by default), subjects will be ignored
6022 when doing thread commands.  If this variable is @code{nil}, articles in
6023 the same thread with different subjects will not be included in the
6024 operation in question.  If this variable is @code{fuzzy}, only articles
6025 that have subjects that are fuzzily equal will be included.
6026
6027
6028 @node Asynchronous Fetching
6029 @section Asynchronous Article Fetching
6030 @cindex asynchronous article fetching
6031
6032 If you read your news from an @sc{nntp} server that's far away, the
6033 network latencies may make reading articles a chore.  You have to wait
6034 for a while after pressing @kbd{n} to go to the next article before the
6035 article appears.  Why can't Gnus just go ahead and fetch the article
6036 while you are reading the previous one? Why not, indeed.
6037
6038 First, some caveats.  There are some pitfalls to using asynchronous
6039 article fetching, especially the way Gnus does it.  
6040
6041 Let's say you are reading article 1, which is short, and article 2 is
6042 quite long, and you are not interested in reading that.  Gnus does not
6043 know this, so it goes ahead and fetches article 2.  You decide to read
6044 article 3, but since Gnus is in the process of fetching article 2, the
6045 connection is blocked.
6046
6047 To avoid these situations, Gnus will open two (count 'em two)
6048 connections to the server.  Some people may think this isn't a very nice
6049 thing to do, but I don't see any real alternatives.  Setting up that
6050 extra connection takes some time, so Gnus startup will be slower.
6051
6052 Gnus will fetch more articles than you will read.  This will mean that
6053 the link between your machine and the @sc{nntp} server will become more
6054 loaded than if you didn't use article pre-fetch.  The server itself will
6055 also become more loaded---both with the extra article requests, and the
6056 extra connection.
6057
6058 Ok, so now you know that you shouldn't really use this thing...  unless
6059 you really want to.
6060
6061 @vindex gnus-asynchronous
6062 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
6063 happen automatically.
6064
6065 @vindex nntp-async-number
6066 You can control how many articles that are to be pre-fetched by setting
6067 @code{nntp-async-number}.  This is five by default, which means that when
6068 you read an article in the group, @code{nntp} will pre-fetch the next
6069 five articles.  If this variable is @code{t}, @code{nntp} will pre-fetch
6070 all the articles that it can without bound.  If it is @code{nil}, no
6071 pre-fetching will be made.
6072
6073 @vindex gnus-asynchronous-article-function
6074 You may wish to create some sort of scheme for choosing which articles
6075 that @code{nntp} should consider as candidates for pre-fetching.  For
6076 instance, you may wish to pre-fetch all articles with high scores, and
6077 not pre-fetch low-scored articles.  You can do that by setting the
6078 @code{gnus-asynchronous-article-function}, which will be called with an
6079 alist where the keys are the article numbers.  Your function should
6080 return an alist where the articles you are not interested in have been
6081 removed.  You could also do sorting on article score and the like. 
6082
6083 @node Article Caching
6084 @section Article Caching
6085 @cindex article caching
6086 @cindex caching
6087
6088 If you have an @emph{extremely} slow @sc{nntp} connection, you may
6089 consider turning article caching on.  Each article will then be stored
6090 locally under your home directory.  As you may surmise, this could
6091 potentially use @emph{huge} amounts of disk space, as well as eat up all
6092 your inodes so fast it will make your head swim.  In vodka.
6093
6094 Used carefully, though, it could be just an easier way to save articles.
6095
6096 @vindex gnus-use-long-file-name
6097 @vindex gnus-cache-directory
6098 @vindex gnus-use-cache
6099 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
6100 all articles that are ticked or marked as dormant will then be copied
6101 over to your local cache (@code{gnus-cache-directory}).  Whether this
6102 cache is flat or hierarchal is controlled by the
6103 @code{gnus-use-long-file-name} variable, as usual.
6104
6105 When re-select a ticked or dormant article, it will be fetched from the
6106 cache instead of from the server.  As articles in your cache will never
6107 expire, this might serve as a method of saving articles while still
6108 keeping them where they belong.  Just mark all articles you want to save
6109 as dormant, and don't worry.
6110
6111 When an article is marked as read, is it removed from the cache.
6112
6113 @vindex gnus-cache-remove-articles
6114 @vindex gnus-cache-enter-articles
6115 The entering/removal of articles from the cache is controlled by the
6116 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
6117 variables.  Both are lists of symbols.  The first is @code{(ticked
6118 dormant)} by default, meaning that ticked and dormant articles will be
6119 put in the cache.  The latter is @code{(read)} by default, meaning that
6120 articles that are marked as read are removed from the cache.  Possibly
6121 symbols in these two lists are @code{ticked}, @code{dormant},
6122 @code{unread} and @code{read}.
6123
6124 @findex gnus-jog-cache
6125 So where does the massive article-fetching and storing come into the
6126 picture?  The @code{gnus-jog-cache} command will go through all
6127 subscribed newsgroups, request all unread articles, and store them in
6128 the cache.  You should only ever, ever ever ever, use this command if 1)
6129 your connection to the @sc{nntp} server is really, really, really slow
6130 and 2) you have a really, really, really huge disk.  Seriously.
6131
6132 @vindex gnus-uncacheable-groups
6133 It is likely that you do not want caching on some groups.  For instance,
6134 if your @code{nnml} mail is located under your home directory, it makes no
6135 sense to cache it somewhere else under your home directory.  Unless you
6136 feel that it's neat to use twice as much space.  To limit the caching,
6137 you could set the @code{gnus-uncacheable-groups} regexp to
6138 @samp{"^nnml"}, for instance.  This variable is @samp{"^nnvirtual"} by
6139 default, since caching doesn't really work in @code{nnvirtual} groups,
6140 since @code{nnvirtual} assigns random article numbers to its articles.
6141
6142 @findex gnus-cache-generate-nov-databases
6143 @findex gnus-cache-generate-active
6144 If your cache becomes all messed up for some reason or other,  Gnus
6145 offers two functions that will try to set things right.  @kbd{M-x
6146 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
6147 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
6148 file. 
6149
6150
6151 @node Persistent Articles
6152 @section Persistent Articles
6153 @cindex persistent articles
6154
6155 Closely related to article caching, we have @dfn{persistent articles}.
6156 In fact, it's just a different way of looking at caching, and much more
6157 useful in my opinion.
6158
6159 Say you're reading a newsgroup, and you happen on to some valuable gem
6160 that you want to keep and treasure forever.  You'd normally just save it
6161 (using one of the many saving commands) in some file.  The problem with
6162 that is that it's just, well, yucky.  Ideally you'd prefer just having
6163 the article remain in the group where you found it forever; untouched by
6164 the expiry going on at the news server.
6165
6166 This is what a @dfn{persistent article} is---an article that just won't
6167 be deleted.  It's implemented using the normal cache functions, but
6168 you use two explicit commands for managing persistent articles:
6169
6170 @table @kbd
6171
6172 @item *
6173 @kindex * (Summary)
6174 @findex gnus-cache-enter-article
6175 Make the current article persistent (@code{gnus-cache-enter-article}). 
6176
6177 @item M-*
6178 @kindex M-* (Summary)
6179 @findex gnus-cache-remove-article
6180 Remove the current article from the persistent articles
6181 (@code{gnus-cache-remove-article}).  This will normally delete the
6182 article. 
6183 @end table
6184
6185 Both these commands understand the process/prefix convention. 
6186
6187 To avoid having all ticked articles (and stuff) entered into the cache,
6188 you should set @code{gnus-use-cache} to @code{passive} if you're just
6189 interested in persistent articles:
6190
6191 @lisp
6192 (setq gnus-use-cache 'passive)
6193 @end lisp
6194
6195
6196 @node Article Backlog
6197 @section Article Backlog
6198 @cindex backlog
6199 @cindex article backlog
6200
6201 If you have a slow connection, but the idea of using caching seems
6202 unappealing to you (and it is, really), you can help the situation some
6203 by switching on the @dfn{backlog}.  This is where Gnus will buffer
6204 already read articles so that it doesn't have to re-fetch articles
6205 you've already read.  This only helps if you are in the habit of
6206 re-selecting articles you've recently read, of course.  If you never do
6207 that, turning the backlog on will slow Gnus down a little bit, and
6208 increase memory usage some.
6209
6210 @vindex gnus-keep-backlog
6211 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
6212 at most @var{n} old articles in a buffer for later re-fetching.  If this
6213 variable is non-@code{nil} and is not a number, Gnus will store
6214 @emph{all} read articles, which means that your Emacs will group without
6215 bound before exploding and taking your machine down with you.  I put
6216 that in there just to keep y'all on your toes.  
6217
6218 This variable is @code{nil} by default.
6219
6220
6221 @node Exiting the Summary Buffer
6222 @section Exiting the Summary Buffer
6223 @cindex summary exit
6224
6225 Exiting from the summary buffer will normally update all info on the
6226 group and return you to the group buffer. 
6227
6228 @table @kbd
6229
6230 @item Z Z
6231 @itemx q
6232 @kindex Z Z (Summary)
6233 @kindex q (Summary)
6234 @findex gnus-summary-exit
6235 @vindex gnus-summary-exit-hook
6236 @vindex gnus-summary-prepare-exit-hook
6237 Exit the current group and update all information on the group
6238 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
6239 called before doing much of the exiting, and calls
6240 @code{gnus-summary-expire-articles} by default.
6241 @code{gnus-summary-exit-hook} is called after finishing the exiting
6242 process. 
6243
6244 @item Z E
6245 @itemx Q
6246 @kindex Z E (Summary)
6247 @kindex Q (Summary)
6248 @findex gnus-summary-exit-no-update
6249 Exit the current group without updating any information on the group
6250 (@code{gnus-summary-exit-no-update}).
6251
6252 @item Z c
6253 @itemx c
6254 @kindex Z c (Summary)
6255 @kindex c (Summary)
6256 @findex gnus-summary-catchup-and-exit
6257 Mark all unticked articles in the group as read and then exit
6258 (@code{gnus-summary-catchup-and-exit}).
6259
6260 @item Z C
6261 @kindex Z C (Summary)
6262 @findex gnus-summary-catchup-all-and-exit
6263 Mark all articles, even the ticked ones, as read and then exit
6264 (@code{gnus-summary-catchup-all-and-exit}).
6265
6266 @item Z n
6267 @kindex Z n (Summary)
6268 @findex gnus-summary-catchup-and-goto-next-group
6269 Mark all articles as read and go to the next group
6270 (@code{gnus-summary-catchup-and-goto-next-group}). 
6271
6272 @item Z R
6273 @kindex Z R (Summary)
6274 @findex gnus-summary-reselect-current-group
6275 Exit this group, and then enter it again
6276 (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
6277 all articles, both read and unread.
6278
6279 @item Z G
6280 @itemx M-g
6281 @kindex Z G (Summary)
6282 @kindex M-g (Summary)
6283 @findex gnus-summary-rescan-group
6284 Exit the group, check for new articles in the group, and select the
6285 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
6286 articles, both read and unread.
6287
6288 @item Z N
6289 @kindex Z N (Summary)
6290 @findex gnus-summary-next-group
6291 Exit the group and go to the next group
6292 (@code{gnus-summary-next-group}). 
6293
6294 @item Z P
6295 @kindex Z P (Summary)
6296 @findex gnus-summary-prev-group
6297 Exit the group and go to the previous group
6298 (@code{gnus-summary-prev-group}). 
6299 @end table
6300
6301 @vindex gnus-exit-group-hook
6302 @code{gnus-exit-group-hook} is called when you exit the current
6303 group.  
6304
6305 @findex gnus-summary-wake-up-the-dead
6306 @findex gnus-dead-summary-mode
6307 @vindex gnus-kill-summary-on-exit
6308 If you're in the habit of exiting groups, and then changing your mind
6309 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
6310 If you do that, Gnus won't kill the summary buffer when you exit it.
6311 (Quelle surprise!)  Instead it will change the name of the buffer to
6312 something like @samp{"*Dead Summary ... *"} and install a minor mode
6313 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
6314 buffer, you'll find that all keys are mapped to a function called
6315 @code{gnus-summary-wake-up-the-dead}.  So tapping any keys in a dead
6316 summary buffer will result in a live, normal summary buffer.  
6317
6318 There will never be more than one dead summary buffer at any one time. 
6319
6320 @vindex gnus-use-cross-reference
6321 The data on the current group will be updated (which articles you have
6322 read, which articles you have replied to, etc.) when you exit the
6323 summary buffer.  If the @code{gnus-use-cross-reference} variable is
6324 @code{t} (which is the default), articles that are cross-referenced to
6325 this group and are marked as read, will also be marked as read in the
6326 other subscribed groups they were cross-posted to.  If this variable is
6327 neither @code{nil} nor @code{t}, the article will be marked as read in
6328 both subscribed and unsubscribed groups.
6329
6330 Marking cross-posted articles as read ensures that you'll never have to
6331 read the same article more than once.  Unless, of course, somebody has
6332 posted it to several groups separately.  Posting the same article to
6333 several groups (not cross-posting) is called @dfn{spamming}, and you are
6334 by law required to send nasty-grams to anyone who perpetrates such a
6335 heinous crime.
6336
6337 Remember: Cross-posting is kinda ok, but posting the same article
6338 separately to several groups is not.
6339
6340 One thing that may cause Gnus to not do the cross-posting thing
6341 correctly is if you use an @sc{nntp} server that supports @sc{xover}
6342 (which is very nice, because it speeds things up considerably) which
6343 does not include the @code{Xref} header in its @sc{nov} lines.  This is
6344 Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
6345 even with @sc{xover} by registering the @code{Xref} lines of all
6346 articles you actually read, but if you kill the articles, or just mark
6347 them as read without reading them, Gnus will not get a chance to snoop
6348 the @code{Xref} lines out of these articles, and will be unable to use
6349 the cross reference mechanism.
6350
6351 @vindex gnus-nov-is-evil
6352 If you want Gnus to get the @code{Xref}s right all the time, you have to
6353 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
6354 considerably.
6355
6356 C'est la vie.
6357
6358
6359 @node Process/Prefix
6360 @section Process/Prefix
6361 @cindex process/prefix convention
6362
6363 Many functions, among them functions for moving, decoding and saving
6364 articles, use what is known as the @dfn{Process/Prefix convention}.
6365
6366 This is a method for figuring out what articles that the user wants the
6367 command to be performed on.
6368
6369 It goes like this:
6370
6371 If the numeric prefix is N, perform the operation on the next N
6372 articles, starting with the current one.  If the numeric prefix is
6373 negative, perform the operation on the previous N articles, starting
6374 with the current one.
6375
6376 If @code{transient-mark-mode} in non-@code{nil} and the region is
6377 active, all articles in the region will be worked upon.
6378
6379 If there is no numeric prefix, but some articles are marked with the
6380 process mark, perform the operation on the articles that are marked with
6381 the process mark.
6382
6383 If there is neither a numeric prefix nor any articles marked with the
6384 process mark, just perform the operation on the current article.
6385
6386 Quite simple, really, but it needs to be made clear so that surprises
6387 are avoided.
6388
6389 @vindex gnus-summary-goto-unread
6390 One thing that seems to shock & horrify lots of people is that, for
6391 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
6392 Since each @kbd{d} (which marks the current article as read) by default
6393 goes to the next unread article after marking, this means that @kbd{3 d}
6394 will mark the next three unread articles as read, no matter what the
6395 summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
6396 @code{nil} for a more straightforward action.
6397
6398
6399 @node Saving Articles
6400 @section Saving Articles
6401 @cindex saving articles
6402
6403 Gnus can save articles in a number of ways.  Below is the documentation
6404 for saving articles in a fairly straight-forward fashion (i.e., little
6405 processing of the article is done before it is saved).  For a different
6406 approach (uudecoding, unsharing) you should use @code{gnus-uu}
6407 (@pxref{Decoding Articles}).
6408
6409 @vindex gnus-save-all-headers
6410 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
6411 unwanted headers before saving the article.
6412
6413 @vindex gnus-saved-headers
6414 If the preceeding variable is @code{nil}, all headers that match the
6415 @code{gnus-saved-headers} regexp will be kept, while the rest will be
6416 deleted before saving.
6417
6418 @table @kbd
6419
6420 @item O o
6421 @itemx o
6422 @kindex O o (Summary)
6423 @kindex o (Summary)
6424 @findex gnus-summary-save-article
6425 Save the current article using the default article saver
6426 (@code{gnus-summary-save-article}). 
6427
6428 @item O m
6429 @kindex O m (Summary)
6430 @findex gnus-summary-save-article-mail
6431 Save the current article in mail format
6432 (@code{gnus-summary-save-article-mail}). 
6433
6434 @item O r
6435 @kindex O r (Summary)
6436 @findex gnus-summary-save-article-mail
6437 Save the current article in rmail format
6438 (@code{gnus-summary-save-article-rmail}). 
6439
6440 @item O f
6441 @kindex O f (Summary)
6442 @findex gnus-summary-save-article-file
6443 Save the current article in plain file format
6444 (@code{gnus-summary-save-article-file}). 
6445
6446 @item O b
6447 @kindex O b (Summary)
6448 @findex gnus-summary-save-article-body-file
6449 Save the current article body in plain file format
6450 (@code{gnus-summary-save-article-body-file}). 
6451
6452 @item O h
6453 @kindex O h (Summary)
6454 @findex gnus-summary-save-article-folder
6455 Save the current article in mh folder format
6456 (@code{gnus-summary-save-article-folder}). 
6457
6458 @item O p
6459 @kindex O p (Summary)
6460 @findex gnus-summary-pipe-output
6461 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
6462 the current article to a process (@code{gnus-summary-pipe-output}).
6463 @end table
6464
6465 @vindex gnus-prompt-before-saving
6466 All these commands use the process/prefix convention
6467 (@pxref{Process/Prefix}).  If you save bunches of articles using these
6468 functions, you might get tired of being prompted for files to save each
6469 and every article in.  The prompting action is controlled by
6470 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
6471 default, giving you that excessive prompting action you know and
6472 loathe.  If you set this variable to @code{t} instead, you'll be promted
6473 just once for each series of articles you save.  If you like to really
6474 have Gnus do all your thinking for you, you can even set this variable
6475 to @code{nil}, which means that you will never be prompted for files to
6476 save articles in.  Gnus will simply save all the articles in the default
6477 files. 
6478
6479
6480 @vindex gnus-default-article-saver
6481 You can customize the @code{gnus-default-article-saver} variable to make
6482 Gnus do what you want it to.  You can use any of the four ready-made
6483 functions below, or you can create your own.
6484
6485 @table @code
6486
6487 @item gnus-summary-save-in-rmail
6488 @findex gnus-summary-save-in-rmail
6489 This is the default format, @dfn{babyl}.  Uses the function in the
6490 @code{gnus-rmail-save-name} variable to get a file name to save the
6491 article in.  The default is @code{gnus-plain-save-name}.
6492
6493 @item gnus-summary-save-in-mail
6494 @findex gnus-summary-save-in-mail
6495 Save in a Unix mail (mbox) file.  Uses the function in the
6496 @code{gnus-mail-save-name} variable to get a file name to save the
6497 article in.  The default is @code{gnus-plain-save-name}.
6498
6499 @item gnus-summary-save-in-file
6500 @findex gnus-summary-save-in-file
6501 Append the article straight to an ordinary file.  Uses the function in
6502 the @code{gnus-file-save-name} variable to get a file name to save the
6503 article in.  The default is @code{gnus-numeric-save-name}.
6504
6505 @item gnus-summary-save-body-in-file
6506 @findex gnus-summary-save-body-in-file
6507 Append the article body to an ordinary file.  Uses the function in the
6508 @code{gnus-file-save-name} variable to get a file name to save the
6509 article in.  The default is @code{gnus-numeric-save-name}.
6510
6511 @item gnus-summary-save-in-folder
6512 @findex gnus-summary-save-in-folder
6513 Save the article to an MH folder using @code{rcvstore} from the MH
6514 library.
6515
6516 @item gnus-summary-save-in-vm
6517 @findex gnus-summary-save-in-vm
6518 Save the article in a VM folder.  You have to have the VM mail
6519 reader to use this setting.
6520 @end table
6521
6522 All of these functions, except for the last one, will save the article
6523 in the @code{gnus-article-save-directory}, which is initialized from the
6524 @samp{SAVEDIR} environment variable.  This is @file{~/News/} by
6525 default. 
6526
6527 As you can see above, the functions use different functions to find a
6528 suitable name of a file to save the article in.  Below is a list of
6529 available functions that generate names:
6530
6531 @table @code
6532
6533 @item gnus-Numeric-save-name
6534 @findex gnus-Numeric-save-name
6535 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
6536
6537 @item gnus-numeric-save-name
6538 @findex gnus-numeric-save-name
6539 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
6540
6541 @item gnus-Plain-save-name
6542 @findex gnus-Plain-save-name
6543 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
6544
6545 @item gnus-plain-save-name
6546 @findex gnus-plain-save-name
6547 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
6548 @end table
6549
6550 @vindex gnus-split-methods
6551 You can have Gnus suggest where to save articles by plonking regexp into
6552 the @code{gnus-split-methods} alist.  For instance, if you would like to
6553 save articles related to Gnus in the file @file{gnus-stuff}, and articles
6554 related to VM in @code{vm-stuff}, you could set this variable to something
6555 like:
6556
6557 @lisp
6558 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
6559  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
6560  (my-choosing-function "../other-dir/my-stuff")
6561  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
6562 @end lisp
6563
6564 We see that this is a list where each element is a list that has two
6565 elements---the @dfn{match} and the @dfn{file}.  The match can either be
6566 a string (in which case it is used as a regexp to match on the article
6567 head); it can be a symbol (which will be called as a function); or it
6568 can be a list (which will be @code{eval}ed).  If any of these actions
6569 have a non-@code{nil} result, the @dfn{file} will be used as a default
6570 prompt.  In addition, the result of the operation itself will be used if
6571 the function or form called returns a string or a list of strings. 
6572
6573 You basically end up with a list of file names that might be used when
6574 saving the current article.  (All "matches" will be used.)  You will
6575 then be prompted for what you really want to use as a name, with file
6576 name completion over the results from applying this variable.
6577
6578 This variable is @code{((gnus-article-archive-name))} by default, which
6579 means that Gnus will look at the articles it saves for an
6580 @samp{Archive-name} line and use that as a suggestion for the file
6581 name. 
6582
6583 @vindex gnus-use-long-file-name
6584 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
6585 @code{nil}, all the preceding functions will replace all periods
6586 (@samp{.}) in the group names with slashes (@samp{/})---which means that
6587 the functions will generate hierarchies of directories instead of having
6588 all the files in the toplevel directory
6589 (@samp{~/News/alt/andrea-dworkin} instead of
6590 @samp{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
6591 on most systems.  However, for historical reasons, this is @code{nil} on
6592 Xenix and usg-unix-v machines by default.
6593
6594 This function also affects kill and score file names.  If this variable
6595 is a list, and the list contains the element @code{not-score}, long file
6596 names will not be used for score files, if it contains the element
6597 @code{not-save}, long file names will not be used for saving, and if it
6598 contains the element @code{not-kill}, long file names will not be used
6599 for kill files.
6600
6601 If you'd like to save articles in a hierarchy that looks something like
6602 a spool, you could
6603
6604 @lisp
6605 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
6606 (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding
6607 @end lisp
6608
6609 Then just save with @kbd{o}.  You'd then read this hierarchy with
6610 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
6611 the toplevel directory as the argument (@file{~/News/}).  Then just walk
6612 around to the groups/directories with @code{nneething}.
6613
6614
6615 @node Decoding Articles
6616 @section Decoding Articles
6617 @cindex decoding articles
6618
6619 Sometime users post articles (or series of articles) that have been
6620 encoded in some way or other.  Gnus can decode them for you.
6621
6622 @menu 
6623 * Uuencoded Articles::    Uudecode articles.
6624 * Shared Articles::       Unshar articles.
6625 * PostScript Files::      Split PostScript.
6626 * Decoding Variables::    Variables for a happy decoding.
6627 * Viewing Files::         You want to look at the result of the decoding?
6628 @end menu
6629
6630 All these functions use the process/prefix convention
6631 (@pxref{Process/Prefix}) for finding out what articles to work on, with
6632 the extension that a "single article" means "a single series".  Gnus can
6633 find out by itself what articles belong to a series, decode all the
6634 articles and unpack/view/save the resulting file(s).
6635
6636 Gnus guesses what articles are in the series according to the following
6637 simplish rule: The subjects must be (nearly) identical, except for the
6638 last two numbers of the line.  (Spaces are largely ignored, however.)
6639
6640 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
6641 will find all the articles that match the regexp @samp{^cat.gif
6642 ([0-9]+/[0-9]+).*$}.  
6643
6644 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
6645 series}, will not be properly recognized by any of the automatic viewing
6646 commands, and you have to mark the articles manually with @key{#}.
6647
6648 @node Uuencoded Articles
6649 @subsection Uuencoded Articles
6650 @cindex uudecode
6651 @cindex uuencoded articles
6652
6653 @table @kbd
6654
6655 @item X u
6656 @kindex X u (Summary)
6657 @findex gnus-uu-decode-uu
6658 Uudecodes the current series (@code{gnus-uu-decode-uu}).
6659
6660 @item X U
6661 @kindex X U (Summary)
6662 @findex gnus-uu-decode-uu-and-save
6663 Uudecodes and saves the current series
6664 (@code{gnus-uu-decode-uu-and-save}).
6665
6666 @item X v u
6667 @kindex X v u (Summary)
6668 @findex gnus-uu-decode-uu-view
6669 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
6670
6671 @item X v U
6672 @kindex X v U (Summary)
6673 @findex gnus-uu-decode-uu-and-save-view
6674 Uudecodes, views and saves the current series
6675 (@code{gnus-uu-decode-uu-and-save-view}). 
6676 @end table
6677
6678 Remember that these all react to the presence of articles marked with
6679 the process mark.  If, for instance, you'd like to uncode and save an
6680 entire newsgroup, you'd typically do @kbd{M P a}
6681 (@code{gnus-uu-mark-all}) and then @kbd{X U}
6682 (@code{gnus-uu-decode-uu-and-save}).
6683
6684 All this is very much different from how @code{gnus-uu} worked with
6685 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
6686 the sun.  This version of @code{gnus-uu} generally assumes that you mark
6687 articles in some way (@pxref{Setting Process Marks}) and then press
6688 @kbd{X u}.
6689
6690 Note: When trying to decode articles that have names matching
6691 @code{gnus-uu-notify-files}, which is hard-coded to
6692 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
6693 automatically post an article on @samp{comp.unix.wizards} saying that
6694 you have just viewed the file in question.  This feature can't be turned
6695 off.
6696
6697 @node Shared Articles
6698 @subsection Shared Articles
6699 @cindex unshar
6700 @cindex shared articles
6701
6702 @table @kbd
6703
6704 @item X s
6705 @kindex X s (Summary)
6706 @findex gnus-uu-decode-unshar
6707 Unshars the current series (@code{gnus-uu-decode-unshar}).
6708
6709 @item X S
6710 @kindex X S (Summary)
6711 @findex gnus-uu-decode-unshar-and-save
6712 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
6713
6714 @item X v s
6715 @kindex X v s (Summary)
6716 @findex gnus-uu-decode-unshar-view
6717 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
6718
6719 @item X v S
6720 @kindex X v S (Summary)
6721 @findex gnus-uu-decode-unshar-and-save-view
6722 Unshars, views and saves the current series
6723 (@code{gnus-uu-decode-unshar-and-save-view}). 
6724 @end table
6725
6726 @node PostScript Files
6727 @subsection PostScript Files
6728 @cindex PostScript
6729
6730 @table @kbd
6731
6732 @item X p
6733 @kindex X p (Summary)
6734 @findex gnus-uu-decode-postscript
6735 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
6736
6737 @item X P
6738 @kindex X P (Summary)
6739 @findex gnus-uu-decode-postscript-and-save
6740 Unpack and save the current PostScript series
6741 (@code{gnus-uu-decode-postscript-and-save}).
6742
6743 @item X v p
6744 @kindex X v p (Summary)
6745 @findex gnus-uu-decode-postscript-view
6746 View the current PostScript series
6747 (@code{gnus-uu-decode-postscript-view}).
6748
6749 @item X v P
6750 @kindex X v P (Summary)
6751 @findex gnus-uu-decode-postscript-and-save-view
6752 View and save the current PostScript series
6753 (@code{gnus-uu-decode-postscript-and-save-view}). 
6754 @end table
6755
6756 @node Decoding Variables
6757 @subsection Decoding Variables
6758
6759 Adjective, not verb.
6760
6761 @menu 
6762 * Rule Variables::          Variables that say how a file is to be viewed.
6763 * Other Decode Variables::  Other decode variables.
6764 * Uuencoding & Posting::    Variables for customizing uuencoding.
6765 @end menu
6766
6767 @node Rule Variables
6768 @subsubsection Rule Variables
6769 @cindex rule variables
6770
6771 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
6772 variables are on the form
6773   
6774 @lisp
6775       (list '(regexp1 command2)
6776             '(regexp2 command2)
6777             ...)
6778 @end lisp
6779
6780 @table @code
6781
6782 @item gnus-uu-user-view-rules
6783 @vindex gnus-uu-user-view-rules
6784 This variable is consulted first when viewing files.  If you wish to use,
6785 for instance, @code{sox} to convert an @samp{.au} sound file, you could
6786 say something like:
6787 @lisp
6788        (setq gnus-uu-user-view-rules
6789          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
6790 @end lisp
6791
6792 @item gnus-uu-user-view-rules-end
6793 @vindex gnus-uu-user-view-rules-end
6794 This variable is consulted if Gnus couldn't make any matches from the
6795 user and default view rules.
6796
6797 @item gnus-uu-user-archive-rules
6798 @vindex gnus-uu-user-archive-rules
6799 This variable can be used to say what commands should be used to unpack
6800 archives.
6801 @end table
6802
6803
6804 @node Other Decode Variables
6805 @subsubsection Other Decode Variables
6806
6807 @table @code
6808 @vindex gnus-uu-grabbed-file-functions
6809
6810 @item gnus-uu-grabbed-file-functions
6811 All functions in this list will be called right each file has been
6812 successfully decoded---so that you can move or view files right away,
6813 and don't have to wait for all files to be decoded before you can do
6814 anything.  Ready-made functions you can put in this list are:
6815
6816 @table @code
6817
6818 @item gnus-uu-grab-view
6819 @findex gnus-uu-grab-view
6820 View the file.
6821
6822 @item gnus-uu-grab-move
6823 @findex gnus-uu-grab-move
6824 Move the file (if you're using a saving function.)
6825 @end table
6826
6827 @item gnus-uu-ignore-files-by-name
6828 @vindex gnus-uu-ignore-files-by-name
6829 Files with name matching this regular expression won't be viewed.
6830
6831 @item gnus-uu-ignore-files-by-type
6832 @vindex gnus-uu-ignore-files-by-type
6833 Files with a @sc{mime} type matching this variable won't be viewed.
6834 Note that Gnus tries to guess what type the file is based on the name.
6835 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
6836 kludgey.
6837
6838 @item gnus-uu-tmp-dir
6839 @vindex gnus-uu-tmp-dir
6840 Where @code{gnus-uu} does its work.
6841
6842 @item gnus-uu-do-not-unpack-archives
6843 @vindex gnus-uu-do-not-unpack-archives
6844 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
6845 looking for files to display.
6846
6847 @item gnus-uu-view-and-save
6848 @vindex gnus-uu-view-and-save
6849 Non-@code{nil} means that the user will always be asked to save a file
6850 after viewing it.
6851
6852 @item gnus-uu-ignore-default-view-rules
6853 @vindex gnus-uu-ignore-default-view-rules
6854 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
6855 rules.
6856
6857 @item gnus-uu-ignore-default-archive-rules
6858 @vindex gnus-uu-ignore-default-archive-rules
6859 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
6860 unpacking commands.
6861
6862 @item gnus-uu-kill-carriage-return
6863 @vindex gnus-uu-kill-carriage-return
6864 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
6865 from articles.
6866
6867 @item gnus-uu-unmark-articles-not-decoded
6868 @vindex gnus-uu-unmark-articles-not-decoded
6869 Non-@code{nil} means that @code{gnus-uu} will mark articles that were
6870 unsuccessfully decoded as unread.
6871
6872 @item gnus-uu-correct-stripped-uucode
6873 @vindex gnus-uu-correct-stripped-uucode
6874 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
6875 uuencoded files that have had trailing spaces deleted.
6876
6877 @item gnus-uu-view-with-metamail
6878 @vindex gnus-uu-view-with-metamail
6879 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
6880 commands defined by the rule variables and just fudge a @sc{mime}
6881 content type based on the file name.  The result will be fed to
6882 @code{metamail} for viewing.
6883
6884 @item gnus-uu-save-in-digest
6885 @vindex gnus-uu-save-in-digest
6886 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
6887 decoding, will save in digests.  If this variable is @code{nil},
6888 @code{gnus-uu} will just save everything in a file without any
6889 embellishments.  The digesting almost conforms to RFC1153---no easy way
6890 to specify any meaningful volume and issue numbers were found, so I
6891 simply dropped them.
6892
6893 @end table
6894
6895 @node Uuencoding & Posting
6896 @subsubsection Uuencoding & Posting
6897
6898 @table @code
6899
6900 @item gnus-uu-post-include-before-composing
6901 @vindex gnus-uu-post-include-before-composing
6902 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
6903 before you compose the article.  If this variable is @code{t}, you can
6904 either include an encoded file with @key{C-c C-i} or have one included
6905 for you when you post the article.
6906
6907 @item gnus-uu-post-length
6908 @vindex gnus-uu-post-length
6909 Maximum length of an article.  The encoded file will be split into how
6910 many articles it takes to post the entire file.
6911
6912 @item gnus-uu-post-threaded
6913 @vindex gnus-uu-post-threaded
6914 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
6915 thread.  This may not be smart, as no other decoder I have seen are able
6916 to follow threads when collecting uuencoded articles.  (Well, I have
6917 seen one package that does that---@code{gnus-uu}, but somehow, I don't
6918 think that counts...) Default is @code{nil}.
6919
6920 @item gnus-uu-post-separate-description
6921 @vindex gnus-uu-post-separate-description
6922 Non-@code{nil} means that the description will be posted in a separate
6923 article.  The first article will typically be numbered (0/x).  If this
6924 variable is @code{nil}, the description the user enters will be included
6925 at the beginning of the first article, which will be numbered (1/x).
6926 Default is @code{t}.
6927
6928 @end table
6929
6930 @node Viewing Files
6931 @subsection Viewing Files
6932 @cindex viewing files
6933 @cindex pseudo-articles
6934
6935 After decoding, if the file is some sort of archive, Gnus will attempt
6936 to unpack the archive and see if any of the files in the archive can be
6937 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
6938 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
6939 uncompress and detar the main file, and then view the two pictures.
6940 This unpacking process is recursive, so if the archive contains archives
6941 of archives, it'll all be unpacked.
6942
6943 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
6944 extracted file into the summary buffer.  If you go to these "articles",
6945 you will be prompted for a command to run (usually Gnus will make a
6946 suggestion), and then the command will be run.
6947
6948 @vindex gnus-view-pseudo-asynchronously
6949 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
6950 until the viewing is done before proceeding.
6951
6952 @vindex gnus-view-pseudos
6953 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
6954 the pseudo-articles into the summary buffer, but view them
6955 immediately.  If this variable is @code{not-confirm}, the user won't even
6956 be asked for a confirmation before viewing is done.
6957
6958 @vindex gnus-view-pseudos-separately 
6959 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
6960 pseudo-article will be created for each file to be viewed.  If
6961 @code{nil}, all files that use the same viewing command will be given as
6962 a list of parameters to that command.
6963
6964 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
6965 pseudo-articles when decoding.  It is @code{t} by default.
6966
6967 So; there you are, reading your @emph{pseudo-articles} in your
6968 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
6969 Why isn't anything real anymore? How did we get here?
6970
6971
6972 @node Article Treatment
6973 @section Article Treatment
6974
6975 Reading through this huge manual, you may have quite forgotten that the
6976 object of newsreaders are to actually, like, read what people have
6977 written.  Reading articles.  Unfortunately, people are quite bad at
6978 writing, so there are tons of functions and variables to make reading
6979 these articles easier.
6980
6981 @menu
6982 * Article Highlighting::    You want to make the article look like fruit salad.
6983 * Article Hiding::          You also want to make certain info go away.
6984 * Article Washing::         Lots of way-neat functions to make life better.
6985 * Article Buttons::         Clcik on URLs, Message-IDs, addresses and the like.
6986 * Article Date::            Grumble, UT!
6987 @end menu
6988
6989
6990 @node Article Highlighting
6991 @subsection Article Highlighting
6992 @cindex highlight
6993
6994 Not only do you want your article buffer to look like fruit salad, but
6995 you want it to look like technicolor fruit salad.
6996
6997 @table @kbd
6998
6999 @item W H a
7000 @kindex W H a (Summary)
7001 @findex gnus-article-highlight
7002 Highlight the current article (@code{gnus-article-highlight}).
7003
7004 @item W H h
7005 @kindex W H h (Summary)
7006 @findex gnus-article-highlight-headers
7007 @vindex gnus-header-face-alist
7008 Highlight the headers (@code{gnus-article-highlight-headers}).  The
7009 highlighting will be done according to the @code{gnus-header-face-alist}
7010 variable, which is a list where each element has the form @var{(regexp
7011 name content)}.  @var{regexp} is a regular expression for matching the
7012 header,  @var{name} is the face used for highling the header name and
7013 @var{content} is the face for highlighting the header value.  The first
7014 match made will be used.
7015
7016 @item W H c
7017 @kindex W H c (Summary)
7018 @findex gnus-article-highlight-citation
7019 Highlight cited text (@code{gnus-article-highlight-citation}). 
7020
7021 Some variables to customize the citation highlights:
7022
7023 @table @code
7024 @vindex gnus-cite-parse-max-size
7025
7026 @item gnus-cite-parse-max-size
7027 If the article size if bigger than this variable (which is 25000 by
7028 default), no citation highlighting will be performed.  
7029
7030 @item gnus-cite-prefix-regexp
7031 @vindex gnus-cite-prefix-regexp
7032 Regexp mathcing the longest possible citation prefix on a line. 
7033
7034 @item gnus-cite-max-prefix
7035 @vindex gnus-cite-max-prefix
7036 Maximum possible length for a citation prefix (default 20).
7037
7038 @item gnus-supercite-regexp
7039 @vindex gnus-supercite-regexp
7040 Regexp matching normal SuperCite attribution lines.  
7041
7042 @item gnus-supercite-secondary-regexp
7043 @vindex gnus-supercite-secondary-regexp
7044 Regexp matching mangled SuperCite attribution lines.
7045
7046 @item gnus-cite-minimum-match-count
7047 @vindex gnus-cite-minimum-match-count
7048 Minimum number of identical prefixes we have to see before we believe
7049 that it's a citation.
7050
7051 @item gnus-cite-attribution-prefix
7052 @vindex gnus-cite-attribution-prefix
7053 Regexp matching the beginning of an attribution line.
7054
7055 @item gnus-cite-addtribution-suffix
7056 @vindex gnus-cite-addtribution-suffix
7057 Regexp matching the end of an attribution line.
7058
7059 @item gnus-cite-attribution-face
7060 @vindex gnus-cite-attribution-face
7061 Face used for attribution lines.  It is merged with the face for the
7062 cited text belonging to the attribution.
7063
7064 @end table
7065
7066
7067 @item W H s
7068 @kindex W H s (Summary)
7069 @vindex gnus-signature-separator
7070 @findex gnus-article-highlight-signature
7071 Highlight the signature (@code{gnus-article-highlight-signature}).
7072 Everything after @code{gnus-signature-separator} in an article will be
7073 considered a signature.
7074
7075 @end table
7076
7077
7078 @node Article Hiding
7079 @subsection Article Hiding
7080 @cindex article hiding
7081
7082 Or rather, hiding certain things in each article.  There usually is much
7083 to much gruft in most articles.  
7084
7085 @table @kbd
7086
7087 @item W W a
7088 @kindex W W a (Summary)
7089 @findex gnus-article-hide
7090 Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}). 
7091
7092 @item W W h
7093 @kindex W W h (Summary)
7094 @findex gnus-article-hide-headers
7095 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
7096 Headers}. 
7097
7098 @item W W s
7099 @kindex W W s (Summary)
7100 @findex gnus-article-hide-signature
7101 Hide signature (@code{gnus-article-hide-signature}).
7102
7103 @item W W p
7104 @kindex W W p (Summary)
7105 @findex gnus-article-hide-pgp
7106 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 
7107
7108 @item W W c
7109 @kindex W W c (Summary)
7110 @findex gnus-article-hide-citation
7111 Hide citation (@code{gnus-article-hide-citation}).  Two variables for
7112 customizing the hiding:
7113
7114 @table @code
7115
7116 @item gnus-cite-hide-percentage
7117 @vindex gnus-cite-hide-percentage
7118 If the cited text is of a bigger percentage than this variable (default
7119 50), hide the cited text.
7120
7121 @item gnus-cite-hide-absolute
7122 @vindex gnus-cite-hide-absolute
7123 The cited text must be have at least this length (default 10) before it
7124 is hidden.
7125
7126 @end table
7127
7128 @item W W C
7129 @kindex W W C (Summary)
7130 @findex gnus-article-hide-citation-in-followups
7131 Hide cited text in articles that aren't roots
7132 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
7133 useful as an interactive command, but might be a handy function to stick
7134 in @code{gnus-article-display-hook} (@pxref{Customizing Articles}). 
7135
7136 @end table
7137
7138 All these "hide" functions take a prefix to undo the hiding.  @kbd{C-u W
7139 W c} will show any hidden signatures, for instance.
7140
7141 Also see @xref{Article Highlighting} for further variables for
7142 citation customization.
7143
7144
7145 @node Article Washing
7146 @subsection Article Washing
7147 @cindex washing
7148 @cindex article washing
7149
7150 We call this "article washing" for a really good reason.  Namely, the
7151 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
7152
7153 @dfn{Washing} is defined by us as "changing something from something to
7154 something else", but normally results in something looking better.
7155 Cleaner, perhaps.
7156
7157 @table @kbd
7158
7159 @item W l
7160 @kindex W l (Summary)
7161 @findex gnus-summary-stop-page-breaking
7162 Remove page breaks from the current article
7163 (@code{gnus-summary-stop-page-breaking}).
7164
7165 @item W r
7166 @kindex W r (Summary)
7167 @findex gnus-summary-caesar-message
7168 Do a Caesar rotate (rot13) on the article buffer
7169 (@code{gnus-summary-caesar-message}). 
7170
7171 @item A g
7172 @kindex A g (Summary)
7173 @findex gnus-summary-show-article
7174 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
7175 given a prefix, fetch the current article, but don't run any of the
7176 article treatment functions.  This will give you a "raw" article, just
7177 the way it came from the server.
7178
7179 @item W t
7180 @kindex W t (Summary)
7181 @findex gnus-summary-toggle-header
7182 Toggle whether to display all headers in the article buffer
7183 (@code{gnus-summary-toggle-header}). 
7184
7185 @item W m
7186 @kindex W m (Summary)
7187 @findex gnus-summary-toggle-mime
7188 Toggle whether to run the article through @sc{mime} before displaying
7189 (@code{gnus-summary-toggle-mime}).
7190
7191 @item W o
7192 @kindex W o (Summary)
7193 @findex gnus-article-treat-overstrike
7194 Treat overstrike (@code{gnus-article-treat-overstrike}).
7195
7196 @item W w
7197 @kindex W w (Summary)
7198 @findex gnus-article-word-wrap
7199 Do word wrap (@code{gnus-article-word-wrap}).
7200
7201 @item W c
7202 @kindex W c (Summary)
7203 @findex gnus-article-remove-cr
7204 Remove CR (@code{gnus-article-remove-cr}).
7205
7206 @item W q
7207 @kindex W q (Summary)
7208 @findex gnus-article-de-quoted-unreadable
7209 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
7210
7211 @item W f
7212 @kindex W f (Summary)
7213 @cindex x-face
7214 @findex gnus-article-display-x-face
7215 @findex gnus-article-x-face-command
7216 @vindex gnus-article-x-face-command
7217 @vindex gnus-article-x-face-too-ugly
7218 Look for and display any X-Face headers
7219 (@code{gnus-article-display-x-face}).  The command executed by this
7220 function is given by the @code{gnus-article-x-face-command} variable.  If
7221 this variable is a string, this string will be executed in a sub-shell.
7222 If it is a function, this function will be called with the face as the
7223 argument.  If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
7224 matches the @code{From} header, the face will not be shown.
7225
7226 @item W b
7227 @kindex W b (Summary)
7228 @findex gnus-article-add-buttons
7229 Add clickable buttons to the article (@code{gnus-article-add-buttons}). 
7230
7231 @item W B
7232 @kindex W B (Summary)
7233 @findex gnus-article-add-buttons-to-head
7234 Add clickable buttons to the article headers
7235 (@code{gnus-article-add-buttons-to-head}).  
7236
7237 @end table
7238
7239
7240 @node Article Buttons
7241 @subsection Article Buttons
7242 @cindex buttons
7243
7244 People often include references to other stuff in articles, and it would
7245 be nice if Gnus could just fetch whatever it is that people talk about
7246 with the minimum of fuzz.
7247
7248 Gnus adds @dfn{buttons} to certain standard references by default:
7249 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
7250 two variables, one that handles article bodies and one that handles
7251 article heads:
7252
7253 @table @code
7254
7255 @item gnus-button-alist
7256 @vindex gnus-header-button-alist
7257 This is an alist where each entry has this form:
7258
7259 @lisp
7260 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7261 @end lisp
7262
7263 @table @var
7264
7265 @item regexp
7266 All text that match this regular expression will be considered an
7267 external reference.  Here's a typical regexp that match embedded URLs:
7268 @samp{"<URL:\\([^\n\r>]*\\)>"}. 
7269
7270 @item button-par
7271 Gnus has to know which parts of the match is to be highlighted.  This is
7272 a number that says what sub-expression of the regexp that is to be
7273 highlighted.  If you want it all highlighted, you use @samp{0} here.
7274
7275 @item use-p
7276 This form will be @code{eval}ed, and if the result is non-@code{nil},
7277 this is considered a match.  This is useful if you want extra sifting to
7278 avoid false matches.
7279
7280 @item function
7281 This function will be called when you click on this button.
7282
7283 @item data-par
7284 As with @var{button-par}, this is a sub-expression number, but this one
7285 says which part of the match is to be sent as data to @var{function}. 
7286
7287 @end table
7288
7289 So the full entry for buttonizing URLs is then
7290
7291 @lisp
7292 ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
7293 @end lisp
7294
7295 @item gnus-header-button-alist
7296 @vindex gnus-header-button-alist
7297 This is just like the other alist, except that it is applied to the
7298 article head only, and that each entry has an additional element that is
7299 used to say what headers to apply the buttonize coding to:
7300
7301 @lisp
7302 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7303 @end lisp
7304
7305 @var{header} is a regular expression.
7306
7307 @end table
7308
7309 @vindex gnus-article-button-face
7310 @vindex gnus-article-mouse-face
7311 Buttons are highlighted with @code{gnus-article-button-face}, while
7312 @code{gnus-article-mouse-face} is used when the mouse cursor is over the
7313 button.
7314
7315
7316 @node Article Date
7317 @subsection Article Date
7318
7319 The date is most likely generated in some obscure timezone you've never
7320 heard of, so it's quite nice to be able to find out what the time was
7321 when the article was sent.
7322
7323 @table @kbd
7324
7325 @item W T u
7326 @kindex W T u (Summary)
7327 @findex gnus-article-date-ut
7328 Display the date in UT (aka. GMT, aka ZULU)
7329 (@code{gnus-article-date-ut}). 
7330
7331 @item W T l
7332 @kindex W T l (Summary)
7333 @findex gnus-article-date-local
7334 Display the date in the local timezone (@code{gnus-article-date-local}).
7335
7336 @item W T e
7337 @kindex W T e (Summary)
7338 @findex gnus-article-date-lapsed
7339 Say how much time has (e)lapsed between the article was posted and now
7340 (@code{gnus-article-date-lapsed}).
7341
7342 @item W T o
7343 @kindex W T o (Summary)
7344 @findex gnus-article-date-original
7345 Display the original date (@code{gnus-article-date-original}).  This can
7346 be useful if you normally use some other conversion function and is
7347 worried that it might be doing something totally wrong.  Say, claiming
7348 that the article was posted in 1854.  Although something like that is
7349 @emph{totally} impossible.  Don't you trust me? *titter*
7350
7351 @end table
7352
7353
7354 @node Summary Sorting
7355 @section Summary Sorting
7356 @cindex summary sorting
7357
7358 You can have the summary buffer sorted in various ways, even though I
7359 can't really see why you'd want that.
7360
7361 @table @kbd
7362
7363 @item C-c C-s C-n
7364 @kindex C-c C-s C-n (Summary)
7365 @findex gnus-summary-sort-by-number
7366 Sort by article number (@code{gnus-summary-sort-by-number}).
7367
7368 @item C-c C-s C-a
7369 @kindex C-c C-s C-a (Summary)
7370 @findex gnus-summary-sort-by-author
7371 Sort by author (@code{gnus-summary-sort-by-author}).
7372
7373 @item C-c C-s C-s
7374 @kindex C-c C-s C-s (Summary)
7375 @findex gnus-summary-sort-by-subject
7376 Sort by subject (@code{gnus-summary-sort-by-subject}).
7377
7378 @item C-c C-s C-d
7379 @kindex C-c C-s C-d (Summary)
7380 @findex gnus-summary-sort-by-date
7381 Sort by date (@code{gnus-summary-sort-by-date}).
7382
7383 @item C-c C-s C-i
7384 @kindex C-c C-s C-i (Summary)
7385 @findex gnus-summary-sort-by-score
7386 Sort by score (@code{gnus-summary-sort-by-score}).
7387 @end table
7388
7389 These functions will work both when you use threading and when you don't
7390 use threading.  In the latter case, all summary lines will be sorted,
7391 line by line.  In the former case, sorting will be done on a
7392 root-by-root basis, which might not be what you were looking for.  To
7393 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
7394 Commands}).
7395
7396
7397 @node Finding the Parent
7398 @section Finding the Parent
7399 @cindex parent articles
7400 @cindex referring articles
7401
7402 @findex gnus-summary-refer-parent-article
7403 @kindex ^ (Summary)
7404 If you'd like to read the parent of the current article, and it is not
7405 displayed in the article buffer, you might still be able to.  That is,
7406 if the current group is fetched by @sc{nntp}, the parent hasn't expired
7407 and the @code{References} in the current article are not mangled, you
7408 can just press @kbd{^} or @kbd{A r}
7409 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
7410 you'll get the parent.  If the parent is already displayed in the
7411 summary buffer, point will just move to this article.
7412
7413 @findex gnus-summary-refer-references
7414 @kindex A R (Summary)
7415 You can have Gnus fetch all articles mentioned in the @code{References}
7416 header of the article by pushing @kbd{A R}
7417 (@code{gnus-summary-refer-references}). 
7418
7419 @findex gnus-summary-refer-article
7420 @kindex M-^ (Summary)
7421 You can also ask the @sc{nntp} server for an arbitrary article, no
7422 matter what group it belongs to.  @kbd{M-^}
7423 (@code{gnus-summary-refer-article}) will ask you for a
7424 @code{Message-ID}, which is one of those long thingies that look
7425 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get
7426 it all exactly right.  No fuzzy searches, I'm afraid.
7427
7428 @vindex gnus-refer-article-method
7429 If the group you are reading is located on a backend that does not
7430 support fetching by @code{Message-ID} very well (like @code{nnspool}),
7431 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
7432 would, perhaps, be best if the @sc{nntp} server you consult is the same
7433 as the one that keeps the spool you are reading from updated, but that's
7434 not really necessary.
7435
7436 Most of the mail backends support fetching by @code{Message-ID}, but do
7437 not do a particularly excellent job of it.  That is, @code{nnmbox} and
7438 @code{nnbabyl} are able to locate articles from any groups, while
7439 @code{nnml} and @code{nnfolder} are only able to locate articles that
7440 have been posted to the current group.  (Anything else would be too time
7441 consuming.)  @code{nnmh} does not support this at all.
7442
7443
7444 @node Mail Group Commands
7445 @section Mail Group Commands
7446 @cindex mail group commands
7447
7448 Some commands only make sense in mail groups.  If these commands are
7449 illegal in the current group, they will raise a hell and let you know.
7450
7451 All these commands (except the expiry and edit commands) use the
7452 process/prefix convention (@pxref{Process/Prefix}).
7453
7454 @table @kbd
7455
7456 @item B e
7457 @kindex B e (Summary)
7458 @findex gnus-summary-expire-articles
7459 Expire all expirable articles in the group
7460 (@code{gnus-summary-expire-articles}).
7461
7462 @item B M-C-e
7463 @kindex B M-C-e (Summary)
7464 @findex gnus-summary-expire-articles-now
7465 Expunge all the expirable articles in the group
7466 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
7467 articles that are eligeble for expiry in the current group will
7468 disappear forever into that big @file{/dev/null} in the sky.
7469
7470 @item B DEL
7471 @kindex B DEL (Summary)
7472 @findex gnus-summary-delete-articles
7473 Delete the mail article.  This is "delete" as in "delete it from your
7474 disk forever and ever, never to return again." Use with caution.
7475 (@code{gnus-summary-delete-article}).
7476
7477 @item B m
7478 @kindex B m (Summary)
7479 @cindex move mail
7480 @findex gnus-summary-move-article
7481 Move the article from one mail group to another
7482 (@code{gnus-summary-move-article}). 
7483
7484 @item B c
7485 @kindex B c (Summary)
7486 @cindex copy mail
7487 @findex gnus-summary-copy-article
7488 Copy the article from one group (mail group or not) to a mail group
7489 (@code{gnus-summary-copy-article}).
7490
7491 @item B i
7492 @kindex B i (Summary)
7493 @findex gnus-summary-import-article
7494 Import a random file into the current mail newsgroup
7495 (@code{gnus-summary-import-article}).  You will be prompted for a file
7496 name, a @code{From} header and a @code{Subject} header.
7497
7498 Something similar can be done by just starting to compose a mail
7499 message.  Instead of typing @kbd{C-c C-c} to mail it off, you can type
7500 @kbd{C-c C-p} instead.  This will put the message you have just created
7501 into the current mail group.
7502
7503 @item B r
7504 @kindex B r (Summary)
7505 @findex gnus-summary-respool-article
7506 Respool the mail article (@code{gnus-summary-move-article}).
7507
7508 @item B w
7509 @itemx e
7510 @kindex B w (Summary)
7511 @kindex e (Summary)
7512 @findex gnus-summary-edit-article
7513 @kindex C-c C-c (Article)
7514 Edit the current article (@code{gnus-summary-edit-article}).  To finish
7515 editing and make the changes permanent, type @kbd{C-c C-c}
7516 (@kbd{gnus-summary-edit-article-done}).
7517
7518 @item B q
7519 @kindex B q (Summary)
7520 @findex gnus-summary-respool-query
7521 If you want to respool an article, you might be curious as to what group
7522 the article will end up in before you do the respooling.  This command
7523 will tell you (@code{gnus-summary-fancy-query}). 
7524 @end table
7525
7526 If you move (or copy) articles regularly, you might wish to have Gnus
7527 suggest where to put the articles.  @code{gnus-move-split-methods} is a
7528 variable that uses the same syntax as @code{gnus-split-methods}
7529 (@pxref{Saving Articles}).  You may customize that variable to create
7530 suggestions you find reasonable.
7531
7532
7533 @node Various Summary Stuff
7534 @section Various Summary Stuff
7535
7536 @menu
7537 * Group Information::                 Information oriented commands.
7538 * Searching for Articles::            Multiple article commands.
7539 * Really Various Summary Commands::   Those pesky non-conformant commands.
7540 @end menu
7541
7542 @vindex gnus-summary-generate-hook
7543 @code{gnus-summary-generate-hook} is called as the last thing before
7544 doing the threading and the generation of the summary buffer.  It's
7545 quite convenient for customizing the threading variables based on what
7546 data the newsgroup has.  This hook is called from the summary buffer
7547 after most summary buffer variables has been set.
7548
7549 @vindex gnus-summary-prepare-hook
7550 @code{gnus-summary-prepare-hook} is called after the summary buffer has
7551 been generated.  You might use it to, for instance, highlight lines or
7552 modify the look of the buffer in some other ungodly manner.  I don't
7553 care.
7554
7555 @node Group Information
7556 @subsection Group Information
7557
7558 @table @kbd
7559
7560 @item H f
7561 @kindex H f (Summary)
7562 @findex gnus-summary-fetch-faq
7563 @vindex gnus-group-faq-directory
7564 Try to fetch the FAQ (list of frequently asked questions) for the
7565 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
7566 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
7567 on a remote machine.  This variable can also be a list of directories.
7568 In that case, giving a prefix to this command will allow you to choose
7569 between the various sites.  @code{ange-ftp} probably will be used for
7570 fetching the file.
7571
7572 @item H d
7573 @kindex H d (Summary)
7574 @findex gnus-summary-describe-group
7575 Give a brief description of the current group
7576 (@code{gnus-summary-describe-group}).  If given a prefix, force
7577 rereading the description from the server.
7578
7579 @item H h
7580 @kindex H h (Summary)
7581 @findex gnus-summary-describe-briefly
7582 Give a very brief description of the most important summary keystrokes
7583 (@code{gnus-summary-describe-briefly}). 
7584
7585 @item H i
7586 @kindex H i (Summary)
7587 @findex gnus-info-find-node
7588 Go to the Gnus info node (@code{gnus-info-find-node}).
7589 @end table
7590
7591 @node Searching for Articles
7592 @subsection Searching for Articles
7593
7594 @table @kbd
7595
7596 @item M-s
7597 @kindex M-s (Summary)
7598 @findex gnus-summary-search-article-forward
7599 Search through all subsequent articles for a regexp
7600 (@code{gnus-summary-search-article-forward}). 
7601
7602 @item M-r
7603 @kindex M-r (Summary)
7604 @findex gnus-summary-search-article-backward
7605 Search through all previous articles for a regexp
7606 (@code{gnus-summary-search-article-backward}). 
7607
7608 @item &
7609 @kindex & (Summary)
7610 @findex gnus-summary-execute-command
7611 This command will prompt you for a header field, a regular expression to
7612 match on this field, and a command to be executed if the match is made
7613 (@code{gnus-summary-execute-command}).
7614
7615 @item M-&
7616 @kindex M-& (Summary)
7617 @findex gnus-summary-universal-argument
7618 Perform any operation on all articles that have been marked with
7619 the process mark (@code{gnus-summary-universal-argument}).
7620 @end table
7621
7622 @node Really Various Summary Commands
7623 @subsection Really Various Summary Commands
7624
7625 @table @kbd
7626
7627 @item A D
7628 @kindex A D (Summary)
7629 @findex gnus-summary-enter-digest-group
7630 If the current article is a collection of other articles (for instance,
7631 a digest), you might use this command to enter a group based on the that
7632 article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
7633 guess what article type is currently displayed unless you give a prefix
7634 to this command, which forces a "digest" interpretation.  Basically,
7635 whenever you see a message that is a collection of other messages on
7636 some format, you @kbd{A D} and read these messages in a more convenient
7637 fashion. 
7638
7639 @item C-t
7640 @kindex C-t (Summary)
7641 @findex gnus-summary-toggle-truncation
7642 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
7643
7644 @item =
7645 @kindex = (Summary)
7646 @findex gnus-summary-expand-window
7647 Expand the summary buffer window (@code{gnus-summary-expand-window}).
7648 If given a prefix, force an @code{article} window configuration. 
7649 @end table
7650
7651
7652 @node The Article Buffer
7653 @chapter The Article Buffer
7654 @cindex article buffer
7655
7656 The articles are displayed in the article buffer, of which there is only
7657 one.  All the summary buffer share the same article buffer.
7658
7659 @menu
7660 * Hiding Headers::        Deciding what headers should be displayed.
7661 * Using Mime::            Pushing articles through @sc{mime} before reading them.
7662 * Customizing Articles::  Tailoring the look of the articles.
7663 * Article Keymap::        Keystrokes available in the article buffer
7664 * Misc Article::          Other stuff.
7665 @end menu
7666
7667
7668 @node Hiding Headers
7669 @section Hiding Headers
7670 @cindex hiding headers
7671 @cindex deleting headers
7672
7673 The top section of each article is the @dfn{head}.  (The rest is the
7674 @dfn{body}, but you may have guessed that already.)
7675
7676 @vindex gnus-show-all-headers
7677 There is a lot of useful information in the head: the name of the person
7678 who wrote the article, the date it was written and the subject of the
7679 article.  That's well and nice, but there's also lots of information
7680 most people do not want to see---what systems the article has passed
7681 through before reaching you, the @code{Message-ID}, the
7682 @code{References}, etc. ad nauseum---and you'll probably want to get rid
7683 of some of those lines.  If you want to keep all those lines in the
7684 article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
7685
7686 Gnus provides you with two variables for sifting headers:
7687
7688 @table @code
7689
7690 @item gnus-visible-headers
7691 @vindex gnus-visible-headers
7692 If this variable is non-@code{nil}, it should be a regular expression
7693 that says what headers you wish to keep in the article buffer.  All
7694 headers that do not match this variable will be hidden.
7695
7696 For instance, if you only want to see the name of the person who wrote
7697 the article and the subject, you'd say:
7698
7699 @lisp
7700 (setq gnus-visible-headers "^From:\\|^Subject:")
7701 @end lisp
7702
7703 This variable can also be a list of regexps to match headers that are to
7704 remain visible.
7705
7706 @item gnus-ignored-headers
7707 @vindex gnus-ignored-headers
7708 This variable is the reverse of @code{gnus-visible-headers}.  If this
7709 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
7710 should be a regular expression that matches all lines that you want to
7711 hide.  All lines that do not match this variable will remain visible.
7712
7713 For instance, if you just want to get rid of the @code{References} line
7714 and the @code{Xref} line, you might say:
7715
7716 @lisp
7717 (setq gnus-ignored-headers "^References:\\|^Xref:")
7718 @end lisp
7719
7720 This variable can also be a list of regexps to match headers that are to
7721 be removed.
7722
7723 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
7724 variable will have no effect.
7725
7726 @end table
7727
7728 @vindex gnus-sorted-header-list
7729 Gnus can also sort the headers for you.  (It does this by default.)  You
7730 can control the sorting by setting the @code{gnus-sorted-header-list}
7731 variable.  It is a list of regular expressions that says in what order
7732 the headers are to be displayed.
7733
7734 For instance, if you want the name of the author of the article first,
7735 and then the subject, you might say something like:
7736
7737 @lisp
7738 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
7739 @end lisp
7740
7741 Any headers that are to remain visible, but are not listed in this
7742 variable, will be displayed in random order after all the headers that
7743 are listed in this variable.
7744
7745 @node Using Mime
7746 @section Using Mime
7747 @cindex @sc{mime}
7748
7749 Mime is a standard for waving your hands through the air, aimlessly,
7750 while people stand around yawning.
7751
7752 @sc{mime}, however, is a standard for encoding your articles, aimlessly,
7753 while all newsreaders die of fear.
7754
7755 @sc{mime} may specify what character set the article uses, the encoding
7756 of the characters, and it also makes it possible to embed pictures and
7757 other naughty stuff in innocent-looking articles.
7758
7759 @vindex gnus-show-mime
7760 @vindex gnus-show-mime-method
7761 Gnus handles @sc{mime} by shoving the articles through
7762 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
7763 default.  If @code{gnus-strict-mime} is non-@code{nil}, the @sc{mime}
7764 method will only be used it there are @sc{mime} headers in the article.
7765 Set @code{gnus-show-mime} to @code{t} if you want to use @sc{mime} all
7766 the time; it might be best to just use the toggling functions from the
7767 summary buffer to avoid getting nasty surprises. (For instance, you
7768 enter the group @samp{alt.sing-a-long} and, before you know it,
7769 @sc{mime} has decoded the sound file in the article and some horrible
7770 sing-a-long song comes streaming out out your speakers, and you can't
7771 find the volume button, because there isn't one, and people are starting
7772 to look at you, and you try to stop the program, but you can't, and you
7773 can't find the program to control the volume, and everybody else in the
7774 room suddenly decides to look at you disdainfully, and you'll feel
7775 rather stupid.)
7776
7777 Any similarity to real events and people is purely coincidental.  Ahem.
7778
7779
7780 @node Customizing Articles
7781 @section Customizing Articles
7782 @cindex article customization
7783
7784 @vindex gnus-article-display-hook
7785 The @code{gnus-article-display-hook} is called after the article has
7786 been inserted into the article buffer.  It is meant to handle all
7787 treatment of the article before it is displayed. 
7788
7789 By default it contains @code{gnus-article-hide-headers},
7790 @code{gnus-article-treat-overstrike}, and
7791 @code{gnus-article-maybe-highlight}, but there are thousands, nay
7792 millions, of functions you can put in this hook.  For an overview of
7793 functions @xref{Article Highlighting}, @xref{Article Hiding},
7794 @xref{Article Washing}, @xref{Article Buttons} and @xref{Article Date}. 
7795
7796 You can, of course, write your own functions.  The functions are called
7797 from the article buffer, and you can do anything you like, pretty much.
7798 There is no information that you have to keep in the buffer---you can
7799 change everything.  However, you shouldn't delete any headers.  Instead
7800 make them invisible if you want to make them go away.
7801
7802
7803 @node Article Keymap
7804 @section Article Keymap
7805
7806 @c Most of the keystrokes in the summary buffer can also be used in the
7807 @c article buffer.  They should behave as if you typed them in the summary
7808 @c buffer, which means that you don't actually have to have a summary
7809 @c buffer displayed while reading.  You can do it all from the article
7810 @c buffer.
7811
7812 A few additional keystrokes are available:
7813
7814 @table @kbd
7815
7816 @item SPACE
7817 @kindex SPACE (Article)
7818 @findex gnus-article-next-page
7819 Scroll forwards one page (@code{gnus-article-next-page}).
7820
7821 @item DEL
7822 @kindex DEL (Article)
7823 @findex gnus-article-prev-page
7824 Scroll backwards one page (@code{gnus-article-prev-page}).
7825
7826 @item C-c ^
7827 @kindex C-c ^ (Article)
7828 @findex gnus-article-refer-article
7829 If point is in the neighborhood of a @code{Message-ID} and you press
7830 @kbd{r}, Gnus will try to get that article from the server
7831 (@code{gnus-article-refer-article}).
7832
7833 @item C-c C-m
7834 @kindex C-c C-m (Article)
7835 @findex gnus-article-mail
7836 Send a reply to the address near point (@code{gnus-article-mail}).  If
7837 given a prefix, include the mail.
7838
7839 @item s
7840 @kindex s (Article)
7841 @findex gnus-article-show-summary
7842 Reconfigure the buffers so that the summary buffer becomes visible
7843 (@code{gnus-article-show-summary}).
7844
7845 @item ?
7846 @kindex ? (Article)
7847 @findex gnus-article-describe-briefly
7848 Give a very brief description of the available keystrokes
7849 (@code{gnus-article-describe-briefly}). 
7850
7851 @item TAB
7852 @kindex TAB (Article)
7853 @findex gnus-article-next-button
7854 Go to the next button, if any (@code{gnus-article-next-button}.  This
7855 only makes sense if you have buttonizing turned on.
7856
7857 @item M-TAB
7858 @kindex M-TAB (Article)
7859 @findex gnus-article-prev-button
7860 Go to the previous button, if any (@code{gnus-article-prev-button}.  
7861
7862 @end table
7863
7864
7865 @node Misc Article
7866 @section Misc Article
7867
7868 @table @code
7869
7870 @item gnus-single-article-buffer
7871 @vindex gnus-single-article-buffer
7872 If non-@code{nil}, use the same article buffer for all the groups.
7873 (This is the default.)  If @code{nil}, each group will have its own
7874 article buffer.
7875
7876 @vindex gnus-article-prepare-hook
7877
7878 @item gnus-article-prepare-hook
7879 This hook is called right after the article has been inserted into the
7880 article buffer.  It is mainly intended for functions that do something
7881 depending on the contents; it should probably not be used for changing
7882 the contents of the article buffer.
7883 @vindex gnus-article-display-hook
7884
7885 @item gnus-article-display-hook
7886 This hook is called as the last thing when displaying an article, and is
7887 intended for modifying the contents of the buffer, doing highlights,
7888 hiding headers, and the like.
7889 @vindex gnus-article-mode-line-format
7890
7891 @item gnus-article-mode-line-format
7892 This variable is a format string along the same lines as
7893 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
7894 format specifications as that variable.
7895 @vindex gnus-break-pages
7896
7897 @item gnus-break-pages
7898 Controls whether @dfn{page breaking} is to take place.  If this variable
7899 is non-@code{nil}, the articles will be divided into pages whenever a
7900 page delimiter appears in the article.  If this variable is @code{nil},
7901 paging will not be done.
7902
7903 @item gnus-page-delimiter
7904 @vindex gnus-page-delimiter
7905 This is the delimiter mentioned above.  By default, it is @samp{^L}
7906 (form linefeed).
7907 @end table
7908
7909 @node The Server Buffer
7910 @chapter The Server Buffer
7911
7912 Traditionally, a @dfn{server} is a machine or a piece of software that
7913 one connects to, and then requests information from.  Gnus does not
7914 connect directly to any real servers, but does all transactions through
7915 one backend or other.  But that's just putting one layer more between
7916 the actual media and Gnus, so we might just as well say that each
7917 backend represents a virtual server.
7918
7919 For instance, the @code{nntp} backend may be used to connect to several
7920 different actual @sc{nntp} servers, or, perhaps, to many different ports
7921 on the same actual @sc{nntp} server.  You tell Gnus which backend to
7922 use, and what parameters to set by specifying a @dfn{select method}.
7923
7924 These select methods specifications can sometimes become quite
7925 complicated---say, for instance, that you want to read from the
7926 @sc{nntp} server @samp{news.funet.fi} on port number @samp{13}, which
7927 hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
7928 Anyways, if you had to specify that for each group that used this
7929 server, that would be too much work, so Gnus offers a way of putting
7930 names to methods, which is what you do in the server buffer.
7931
7932 To enter the server buffer, user the @kbd{^}
7933 (@code{gnus-group-enter-server-mode}) command in the group buffer.
7934
7935 @menu
7936 * Server Buffer Format::   You can customize the look of this buffer.
7937 * Server Commands::        Commands to manipulate servers.
7938 * Example Methods::        Examples server specifications.
7939 * Servers & Methods::      You can use server names as select methods.
7940 * Unavailable Servers::    Some servers you try to contact may be down.
7941 @end menu
7942
7943 @node Server Buffer Format
7944 @section Server Buffer Format
7945 @cindex server buffer format
7946
7947 @vindex gnus-server-line-format
7948 You can change the look of the server buffer lines by changing the
7949 @code{gnus-server-line-format} variable.  This is a @code{format}-like
7950 variable, with some simple extensions:
7951
7952 @table @samp
7953
7954 @item h 
7955 How the news is fetched---the backend name.
7956
7957 @item n
7958 The name of this server.
7959
7960 @item w
7961 Where the news is to be fetched from---the address.
7962 @end table
7963
7964 @node Server Commands
7965 @section Server Commands
7966 @cindex server commands
7967
7968 @table @kbd
7969
7970 @item SPC
7971 Browse the current server (@code{gnus-server-read-server}).
7972
7973 @item q
7974 Return to the group buffer (@code{gnus-server-exit}).
7975
7976 @item l
7977 List all servers (@code{gnus-server-list-servers}).
7978
7979 @item k
7980 Kill the current server (@code{gnus-server-kill-server}).
7981
7982 @item y
7983 Yank the previously killed server (@code{gnus-server-yank-server}).
7984
7985 @item c
7986 Copy the current server (@code{gnus-server-copy-server}).
7987
7988 @item a
7989 Add a new server (@code{gnus-server-add-server}).
7990
7991 @item e
7992 Edit a server (@code{gnus-server-edit-server}).
7993 @end table
7994
7995 @node Example Methods
7996 @section Example Methods
7997
7998 Most select methods are pretty simple and self-explanatory: 
7999
8000 @lisp
8001 (nntp "news.funet.fi")
8002 @end lisp
8003
8004 Reading directly from the spool is even simpler:
8005
8006 @lisp
8007 (nnspool "")
8008 @end lisp
8009
8010 As you can see, the first element in a select method is the name of the
8011 backend, and the second is the @dfn{address}, or @dfn{name}, if you
8012 will. 
8013
8014 After these two elements, there may be a random number of @var{(variable
8015 form)} pairs.
8016
8017 To go back to the first example---imagine that you want to read from
8018 port @code{15} from that machine.  This is what the select method should
8019 look like then:
8020
8021 @lisp
8022 (nntp "news.funet.fi" (nntp-port-number 15))
8023 @end lisp
8024
8025 You should read the documentation to each backend to find out what
8026 variables are relevant, but here's an @code{nnmh} example. 
8027
8028 @code{nnmh} is a mail backend that reads a spool-like structure.  Say
8029 you have two structures that you wish to access: One is your private
8030 mail spool, and the other is a public one.  Here's the possible spec for
8031 you private mail:
8032
8033 @lisp
8034 (nnmh "private" (nnmh-directory "~/private/mail/"))
8035 @end lisp
8036
8037 (This server is then called @samp{private}, but you may have guessed
8038 that. 
8039
8040 Here's the method for the public spool:
8041
8042 @lisp
8043 (nnmh "public" 
8044       (nnmh-directory "/usr/information/spool/") 
8045       (nnmh-get-new-mail nil))
8046 @end lisp
8047
8048 @node Servers & Methods
8049 @section Servers & Methods
8050
8051 Wherever you would normally use a select method
8052 (eg. @code{gnus-secondary-select-method}, in the group select method,
8053 when browsing a foreign server) you can use a virtual server name
8054 instead.  This could potentially save lots of typing.  And it's nice all
8055 over.
8056
8057
8058 @node Unavailable Servers
8059 @section Unavailable Servers
8060
8061 If a server seems to be unreachable, Gnus will mark that server as
8062 @code{denied}.  That means that any subsequent attempt to make contact
8063 with that server will just be ignored.  "It can't be opened," Gnus will
8064 tell you, without making the least effort to see whether that is
8065 actually the case or not.  
8066
8067 That might seem quite naughty, but it does make sense most of the time.
8068 Let's say you have 10 groups subscribed to the server
8069 @samp{nepholococcygia.com}.  This server is located somewhere quite far
8070 away from you, the machine is quite, so it takes 1 minute just to find
8071 out that it refuses connection from you today.  If Gnus were to attempt
8072 to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
8073 that.  Once it has gotten a single "connection refused", it will regard
8074 that server as "down".
8075
8076 So, what happens if the machine was only feeling unwell temporarily?
8077 How do you test to see whether the machine has come up again?
8078
8079 You jump to the server buffer (@pxref{The Server Buffer}) and poke ut
8080 with the following commands:
8081
8082 @table @kbd
8083
8084 @item O
8085 @kindex O (Server)
8086 @findex gnus-server-open-server
8087 Try to establish connection to the server on the current line
8088 (@code{gnus-server-open-server}).
8089
8090 @item C
8091 @kindex C (Server)
8092 @findex gnus-server-close-server
8093 Close the connection (if any) to the server
8094 (@code{gnus-server-close-server}).
8095
8096 @item D
8097 @kindex D (Server)
8098 @findex gnus-server-deny-server
8099 Mark the current server as unreachable
8100 (@code{gnus-server-deny-server}). 
8101
8102 @item R
8103 @kindex R (Server)
8104 @findex gnus-server-remove-denials
8105 Remove all marks to whether Gnus was denied connection from all servers
8106 (@code{gnus-server-remove-denials}). 
8107
8108 @end table
8109
8110
8111 @node Scoring
8112 @chapter Scoring
8113 @cindex scoring
8114
8115 Other people use @dfn{kill files}, but we here at Gnus Towers like
8116 scoring better than killing, so we'd rather switch than fight.  They do
8117 something completely different as well, so sit up straight and pay
8118 attention!
8119
8120 @vindex gnus-summary-mark-below
8121 All articles have a default score (@code{gnus-summary-default-score}),
8122 which is 0 by default.  This score may be raised or lowered either
8123 interactively or by score files.  Articles that have a score lower than
8124 @code{gnus-summary-mark-below} are marked as read.
8125
8126 Gnus will read any @dfn{score files} that apply to the current group
8127 before generating the summary buffer.
8128
8129 There are several commands in the summary buffer that insert score
8130 entries based on the current article.  You can, for instance, ask Gnus to
8131 lower or increase the score of all articles with a certain subject.
8132
8133 There are two sorts of scoring entries: Permanent and temporary.
8134 Temporary score entries are self-expiring entries.  Any entries that are
8135 temporary and have not been used for, say, a week, will be removed
8136 silently to help keep the sizes of the score files down.
8137
8138 @menu 
8139 * Summary Score Commands::   Adding score entries for the current group.
8140 * Group Score Commands::     General score commands.
8141 * Score Variables::          Customize your scoring.  (My, what terminology).
8142 * Score File Format::        What a score file may contain.
8143 * Score File Editing::       You can edit score files by hand as well.
8144 * Adaptive Scoring::         Big Sister Gnus *knows* what you read.
8145 * Followups To Yourself::    Having Gnus notice when people answer you.
8146 * Scoring Tips::             How to score effectively.
8147 * Reverse Scoring::          That problem child of old is not problem.
8148 * Global Score Files::       Earth-spanning, ear-splitting score files.
8149 * Kill Files::               They are still here, but they can be ignored.
8150 @end menu
8151
8152 @node Summary Score Commands
8153 @section Summary Score Commands
8154 @cindex score commands
8155
8156 The score commands that alter score entries do not actually modify real
8157 score files.  That would be too inefficient.  Gnus maintains a cache of
8158 previously loaded score files, one of which is considered the
8159 @dfn{current score file alist}.  The score commands simply insert
8160 entries into this list, and upon group exit, this list is saved.
8161
8162 The current score file is by default the group's local score file, even
8163 if no such score file actually exists.  To insert score commands into
8164 some other score file (eg. @file{all.SCORE}), you must first make this
8165 score file the current one.
8166
8167 General score commands that don't actually change the score file:
8168
8169 @table @kbd
8170
8171 @item V s
8172 @kindex V s (Summary)
8173 @findex gnus-summary-set-score
8174 Set the score of the current article (@code{gnus-summary-set-score}).  
8175
8176 @item V S
8177 @kindex V S (Summary)
8178 @findex gnus-summary-current-score
8179 Display the score of the current article
8180 (@code{gnus-summary-current-score}).   
8181
8182 @item V t
8183 @kindex V t (Summary)
8184 @findex gnus-score-find-trace
8185 Display all score rules that have been used on the current article
8186 (@code{gnus-score-find-trace}).   
8187
8188 @item V R
8189 @item V R (Summary)
8190 @findex gnus-summary-rescore
8191 Run the current summary through the scoring process
8192 (@code{gnus-summary-rescore}).  This might be useful if you're playing
8193 around with your score files behind Gnus' back and want to see the
8194 effect you're having.
8195
8196 @item V a
8197 @kindex V a (Summary)
8198 @findex gnus-summary-score-entry
8199 Add a new score entry, and allow specifying all elements 
8200 (@code{gnus-summary-score-entry}).
8201
8202 @item V c
8203 @kindex V c (Summary)
8204 @findex gnus-score-change-score-file
8205 Make a different score file the current
8206 (@code{gnus-score-change-score-file}). 
8207
8208 @item V e
8209 @kindex V e (Summary)
8210 @findex gnus-score-edit-alist
8211 Edit the current score file (@code{gnus-score-edit-alist}).  You will be
8212 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
8213 Editing}).
8214
8215 @item V f
8216 @kindex V f (Summary)
8217 @findex gnus-score-edit-file
8218 Edit a score file and make this score file the current one
8219 (@code{gnus-score-edit-file}).
8220
8221 @item V C
8222 @kindex V C (Summary)
8223 @findex gnus-score-customize
8224 Customize a score file in a visually pleasing manner
8225 (@code{gnus-score-customize}). 
8226
8227 @item I C-i
8228 @kindex I C-i (Summary)
8229 @findex gnus-summary-raise-score
8230 Increase the score of the current article
8231 (@code{gnus-summary-raise-score}).
8232
8233 @item L C-l
8234 @kindex L C-l (Summary)
8235 @findex gnus-summary-lower-score
8236 Lower the score of the current article
8237 (@code{gnus-summary-lower-score}). 
8238 @end table
8239
8240 The rest of these commands modify the local score file.
8241
8242 @table @kbd
8243
8244 @item V m
8245 @kindex V m (Summary)
8246 @findex gnus-score-set-mark-below
8247 Prompt for a score, and mark all articles with a score below this as
8248 read (@code{gnus-score-set-mark-below}).
8249
8250 @item V E
8251 @kindex V E (Summary)
8252 @findex gnus-score-set-expunge-below
8253 Expunge all articles with a score below the default score (or the
8254 numeric prefix) (@code{gnus-score-set-expunge-below}).
8255 @end table
8256
8257 The keystrokes for actually making score entries follow a very regular
8258 pattern, so there's no need to list all the commands.  (Hundreds of
8259 them.)  
8260
8261 @enumerate
8262 @item
8263 The first key is either @kbd{I} (upper case i) for increasing the score
8264 or @kbd{L} for lowering the score. 
8265 @item
8266 The second key says what header you want to score on.  The following
8267 keys are available:
8268 @table @kbd
8269
8270 @item a
8271 Score on the author name.
8272
8273 @item s
8274 Score on the subject line.
8275
8276 @item x
8277 Score on the Xref line---i.e., the cross-posting line.
8278
8279 @item t
8280 Score on thread---the References line.
8281
8282 @item d
8283 Score on the date.
8284
8285 @item l
8286 Score on the number of lines.
8287
8288 @item i
8289 Score on the Message-ID.
8290
8291 @item f
8292 Score on followups.
8293
8294 @item b
8295 Score on the body.
8296
8297 @item h
8298 Score on the head.
8299 @end table
8300
8301 @item
8302 The third key is the match type.  Which match types are legal depends on
8303 what headers you are scoring on.
8304
8305 @table @code
8306
8307 @item strings 
8308
8309 @table @kbd
8310
8311 @item e
8312 Exact matching.
8313
8314 @item s
8315 Substring matching.
8316
8317 @item f
8318 Fuzzy matching.
8319
8320 @item r
8321 Regexp matching
8322 @end table
8323
8324 @item date
8325 @table @kbd
8326
8327 @item b
8328 Before date.
8329
8330 @item a
8331 At date.
8332
8333 @item n
8334 This date.
8335 @end table
8336
8337 @item number
8338 @table @kbd
8339
8340 @item <
8341 Less than number.
8342
8343 @item =
8344 Equal to number.
8345
8346 @item >
8347 Greater than number.
8348 @end table
8349 @end table
8350
8351 @item 
8352 The fourth and final key says whether this is a temporary (i.e., expiring)
8353 score entry, or a permanent (i.e., non-expiring) score entry, or whether
8354 it is to be done immediately, without adding to the score file.
8355 @table @kbd
8356
8357 @item t
8358 Temporary score entry.
8359
8360 @item p
8361 Permanent score entry.
8362
8363 @item i
8364 Immediately scoring.
8365 @end table
8366
8367 @end enumerate
8368
8369 So, let's say you want to increase the score on the current author with
8370 exact matching permanently: @kbd{I a e p}.  If you want to lower the
8371 score based on the subject line, using substring matching, and make a
8372 temporary score entry: @kbd{L s s t}.  Pretty easy.
8373
8374 To make things a bit more complicated, there are shortcuts.  If you use
8375 a capital letter on either the second or third keys, Gnus will use
8376 defaults for the remaining one or two keystrokes.  The defaults are
8377 "substring" and "temporary".  So @kbd{I A} is the same as @kbd{I a s t},
8378 and @kbd{I a R} is the same as @kbd{I a r t}.
8379
8380 @vindex gnus-score-mimic-keymap
8381 The @code{gnus-score-mimic-keymap} says whether these commands will
8382 pretend they are keymaps or not.
8383
8384
8385 @node Group Score Commands
8386 @section Group Score Commands
8387 @cindex group score commands
8388
8389 There aren't many of these as yet, I'm afraid.
8390
8391 @table @kbd
8392
8393 @item W f
8394 @kindex W f (Group)
8395 @findex gnus-score-flush-cache
8396 Gnus maintains a cache of score alists to avoid having to reload them
8397 all the time.  This command will flush the cache
8398 (@code{gnus-score-flush-cache}). 
8399
8400 @end table
8401
8402
8403 @node Score Variables
8404 @section Score Variables
8405 @cindex score variables
8406
8407 @table @code
8408
8409 @item gnus-use-scoring
8410 @vindex gnus-use-scoring
8411 If @code{nil}, Gnus will not check for score files, and will not, in
8412 general, do any score-related work.  This is @code{t} by default.
8413
8414 @item gnus-kill-killed
8415 @vindex gnus-kill-killed
8416 If this variable is @code{nil}, Gnus will never apply score files to
8417 articles that have already been through the kill process.  While this
8418 may save you lots of time, it also means that if you apply a kill file
8419 to a group, and then change the kill file and want to run it over you
8420 group again to kill more articles, it won't work.  You have to set this
8421 variable to @code{t} to do that.  (It is @code{t} by default.)
8422
8423 @item gnus-kill-files-directory
8424 @vindex gnus-kill-files-directory
8425 All kill and score files will be stored in this directory, which is
8426 initialized from the @samp{SAVEDIR} environment variable by default.
8427 This is @file{~/News/} by default.
8428
8429 @item gnus-score-file-suffix
8430 @vindex gnus-score-file-suffix
8431 Suffix to add to the group name to arrive at the score file name
8432 (@samp{SCORE} by default.)
8433
8434 @item gnus-score-uncacheable-files
8435 @vindex gnus-score-uncacheable-files
8436 @cindex score cache
8437 All score files are normally cached to avoid excessive re-loading of
8438 score files.  However, if this might make you Emacs grow big and
8439 bloated, so this regexp can be used to weed out score files that are
8440 unlikely to be needed again.  It would be a bad idea to deny caching of
8441 @file{all.SCORE}, while it might be a good idea to not cache
8442 @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
8443 variable is @samp{"ADAPT$"} by default, so no adaptive score files will
8444 be cached.
8445
8446 @item gnus-save-score
8447 @vindex gnus-save-score
8448 If you have really complicated score files, and do lots of batch
8449 scoring, then you might set this variable to @code{t}.  This will make
8450 Gnus save the scores into the @file{.newsrc.eld} file.
8451
8452 @item gnus-save-score
8453 @vindex gnus-save-score
8454 If you have really complicated score files, and do lots of batch
8455 scoring, then you might set this variable to @code{t}.  This will make
8456 Gnus save the scores into the @file{.newsrc.eld} file.
8457
8458 @item gnus-score-interactive-default-score
8459 @vindex gnus-score-interactive-default-score
8460 Score used by all the interactive raise/lower commands to raise/lower
8461 score with.  Default is 1000, which may seem excessive, but this is to
8462 ensure that the adaptive scoring scheme gets enough room to play with.
8463 We don't want the small changes from the adaptive scoring to overwrite
8464 manually entered data.
8465
8466 @item gnus-summary-default-score
8467 @vindex gnus-summary-default-score
8468 Default score of an article, which is 0 by default.
8469
8470 @item gnus-score-over-mark
8471 @vindex gnus-score-over-mark
8472 Mark (in the third column) used for articles with a score over the
8473 default.  Default is @samp{+}.
8474
8475 @item gnus-score-below-mark
8476 @vindex gnus-score-below-mark
8477 Mark (in the third column) used for articles with a score below the
8478 default.  Default is @samp{-}.
8479
8480 @item gnus-score-find-score-files-function
8481 @vindex gnus-score-find-score-files-function
8482 Function used to find score files for the current group.  This function
8483 is called with the name of the group as the argument. 
8484
8485 Predefined functions available are:
8486 @table @code
8487
8488 @item gnus-score-find-single
8489 @findex gnus-score-find-single
8490 Only apply the group's own score file.
8491
8492 @item gnus-score-find-bnews
8493 @findex gnus-score-find-bnews
8494 Apply all score files that match, using bnews syntax.  This is the
8495 default.  For instance, if the current group is @samp{gnu.emacs.gnus},
8496 @samp{all.emacs.all.SCORE}, @samp{not.alt.all.SCORE} and
8497 @samp{gnu.all.SCORE} would all apply.  In short, the instances of
8498 @samp{all} in the score file names are translated into @samp{.*}, and
8499 then a regexp match is done.
8500
8501 This means that if you have some score entries that you want to apply to
8502 all groups, then you put those entries in the @file{all.SCORE} file. 
8503
8504 If @code{gnus-use-long-file-name} is non-@code{nil}, this won't work
8505 very will.  It will find stuff like @file{gnu/all/SCORE}, but will not
8506 find files like @file{not/gnu/all/SCORE}. 
8507
8508 @item gnus-score-find-hierarchical
8509 @findex gnus-score-find-hierarchical
8510 Apply all score files from all the parent groups.  This means that you
8511 can't have score files like @file{all.SCORE} or @file{all.emacs.SCORE},
8512 but you can have @file{SCORE},  @file{comp.SCORE} and
8513 @file{comp.emacs.SCORE}. 
8514
8515 @end table
8516 This variable can also be a list of functions.  In that case, all these
8517 functions will be called, and all the returned lists of score files will
8518 be applied.  These functions can also return lists of score alists
8519 directly.  In that case, the functions that return these non-file score
8520 alists should probably be placed before the "real" score file functions,
8521 to ensure that the last score file returned is the local score file.
8522 Phu. 
8523
8524 @item gnus-score-expiry-days
8525 @vindex gnus-score-expiry-days
8526 This variable says how many days should pass before an unused score file
8527 entry is expired.  The default is 7.
8528 @end table
8529
8530 @node Score File Format
8531 @section Score File Format
8532 @cindex score file format
8533
8534 A score file is an @code{emacs-lisp} file that normally contains just a
8535 single form.  Casual users are not expected to edit these files;
8536 everything can be changed from the summary buffer.
8537
8538 Anyway, if you'd like to dig into it yourself, here's an example:
8539
8540 @lisp
8541 (("from"
8542   ("Lars Ingebrigtsen" -10000)
8543   ("Per Abrahamsen")
8544   ("larsi\\|lmi" -50000 nil R))
8545  ("subject"
8546   ("Ding is Badd" nil 728373))
8547  ("xref"
8548   ("alt.politics" -1000 728372 s))
8549  ("lines"
8550   (2 -100 nil <))
8551  (mark 0)
8552  (expunge -1000)
8553  (mark-and-expunge -10)
8554  (read-only nil)
8555  (orphan -10)
8556  (adapt t)
8557  (files "/hom/larsi/News/gnu.SCORE")
8558  (exclude-files "all.SCORE")
8559  (local (gnus-newsgroup-auto-expire t)
8560         (gnus-summary-make-false-root 'empty))
8561  (eval (ding)))
8562 @end lisp
8563
8564 This example demonstrates absolutely everything about a score file. 
8565
8566 Even though this looks much like lisp code, nothing here is actually
8567 @code{eval}ed.  The lisp reader is used to read this form, though, so it
8568 has to be legal syntactically, if not semantically.
8569
8570 Six keys are supported by this alist:
8571
8572 @table @code
8573
8574 @item STRING
8575 If the key is a string, it is the name of the header to perform the
8576 match on.  Scoring can only be performed on these eight headers:
8577 @samp{From}, @samp{Subject}, @samp{References}, @samp{Message-ID},
8578 @samp{Xref}, @samp{Lines}, @samp{Chars} and @samp{Date}.  In addition to
8579 these headers, there are three strings to tell Gnus to fetch the entire
8580 article and do the match on larger parts of the article: @samp{Body}
8581 will perform the match on the body of the article, @samp{Head} will
8582 perform the match on the head of the article, and @samp{All} will
8583 perform the match on the entire article.  Note that using any of these
8584 last three keys will slow down group entry @emph{considerably}.  The
8585 final "header" you can score on is @samp{Followup}.  These score entries
8586 will result in new score entries being added for all follow-ups to
8587 articles that matches these score entries.
8588
8589 Following this key is a random number of score entries, where each score
8590 entry has one to four elements.
8591 @enumerate
8592
8593 @item 
8594 The first element is the @dfn{match element}.  On most headers this will
8595 be a string, but on the Lines and Chars headers, this must be an
8596 integer. 
8597
8598 @item 
8599 If the second element is present, it should be a number---the @dfn{score
8600 element}.  This number should be an integer in the neginf to posinf
8601 interval.  This number is added to the score of the article if the match
8602 is successful.  If this element is not present, the
8603 @code{gnus-score-interactive-default-score} number will be used
8604 instead.  This is 1000 by default.
8605
8606 @item 
8607 If the third element is present, it should be a number---the @dfn{date
8608 element}.  This date says when the last time this score entry matched,
8609 which provides a mechanism for expiring the score entries.  It this
8610 element is not present, the score entry is permanent.  The date is
8611 represented by the number of days since December 31, 1 ce.
8612
8613 @item 
8614 If the fourth element is present, it should be a symbol---the @dfn{type
8615 element}.  This element specifies what function should be used to see
8616 whether this score entry matches the article.  What match types that can
8617 be used depends on what header you wish to perform the match on.
8618 @table @dfn
8619
8620 @item From, Subject, References, Xref, Message-ID
8621 For most header types, there are the @code{r} and @code{R} (regexp) as
8622 well as @code{s} and @code{S} (substring) types and @code{e} and
8623 @code{E} (exact match) types.  If this element is not present, Gnus will
8624 assume that substring matching should be used.  @code{R} and @code{S}
8625 differ from the other two in that the matches will be done in a
8626 case-sensitive manner.  All these one-letter types are really just
8627 abbreviations for the @code{regexp}, @code{string} and @code{exact}
8628 types, which you can use instead, if you feel like.
8629
8630 @item Lines, Chars
8631 These two headers use different match types: @code{<}, @code{>},
8632 @code{=}, @code{>=} and @code{<=}.
8633
8634 @item Date
8635 For the Date header we have three match types: @code{before}, @code{at}
8636 and @code{after}.  I can't really imagine this ever being useful, but,
8637 like, it would feel kinda silly not to provide this function.  Just in
8638 case.  You never know.  Better safe than sorry.  Once burnt, twice shy.
8639 Don't judge a book by its cover.  Never not have sex on a first date.
8640
8641 @item Head, Body, All
8642 These three match keys use the same match types as the @code{From} (etc)
8643 header uses.
8644
8645 @item Followup
8646 This match key will add a score entry on all articles that followup to
8647 some author.  Uses the same match types as the @code{From} header uses.
8648 @end table
8649 @end enumerate
8650
8651 @item mark
8652 The value of this entry should be a number.  Any articles with a score
8653 lower than this number will be marked as read.
8654
8655 @item expunge
8656 The value of this entry should be a number.  Any articles with a score
8657 lower than this number will be removed from the summary buffer.
8658
8659 @item mark-and-expunge
8660 The value of this entry should be a number.  Any articles with a score
8661 lower than this number will be marked as read and removed from the
8662 summary buffer.
8663
8664 @item thread-mark-and-expunge
8665 The value of this entry should be a number.  All articles that belong to
8666 a thread that has a total score below this number will be marked as read
8667 and removed from the summary buffer.  @code{gnus-thread-score-function}
8668 says how to compute the total score for a thread.
8669
8670 @item files
8671 The value of this entry should be any number of file names.  These files
8672 are assumed to be score files as well, and will be loaded the same way
8673 this one was.
8674
8675 @item exclude-files
8676 The clue of this entry should be any number of files.  This files will
8677 not be loaded, even though they would normally be so, for some reason or
8678 other. 
8679
8680 @item eval
8681 The value of this entry will be @code{eval}el.  This element will be
8682 ignored when handling global score files. 
8683
8684 @item read-only
8685 Read-only score files will not be updated or saved.  Global score files
8686 should feature this atom (@pxref{Global Score Files}).
8687
8688 @item orphan
8689 The value of this entry should be a number.  Articles that do not have
8690 parents will get this number added to their scores.
8691
8692 @item adapt
8693 This entry controls the adaptive scoring.  If it is @code{t}, the
8694 default adaptive scoring rules will be used.  If it is @code{ignore}, no
8695 adaptive scoring will be performed on this group.  If it is a list, this
8696 list will be used as the adaptive scoring rules.  If it isn't present,
8697 or is something other than @code{t} or @code{ignore}, the default
8698 adaptive scoring rules will be used.  If you want to use adaptive
8699 scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
8700 @code{t}, and insert an @code{(adapt ignore)} in the groups where you do
8701 not want adaptive scoring.  If you only want adaptive scoring in a few
8702 groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
8703 insert @code{(adapt t)} in the score files of the groups where you want
8704 it. 
8705
8706 @item adapt-file
8707 All adaptive score entries will go to the file named by this entry.  It
8708 will also be applied when entering the group.  This atom might be handy
8709 if you want to adapt on several groups at once, using the same adaptive
8710 file for a number of groups.
8711
8712 @item local
8713 @cindex local variables
8714 The value of this entry should be a list of @code{(VAR VALUE)} pairs.
8715 Each @var{var} will be made buffer-local to the current summary buffer,
8716 and set to the value specified.  This is a convenient, if somewhat
8717 strange, way of setting variables in some groups if you don't like hooks
8718 much.
8719 @end table
8720
8721 @node Score File Editing
8722 @section Score File Editing
8723
8724 You normally enter all scoring commands from the summary buffer, but you
8725 might feel the urge to edit them by hand as well, so we've supplied you
8726 with a mode for that.  
8727
8728 It's simply a slightly customized @code{emacs-lisp} mode, with these
8729 additional commands:
8730
8731 @table @kbd
8732
8733 @item C-c C-c
8734 @kindex C-c C-c (Score)
8735 @findex gnus-score-edit-done
8736 Save the changes you have made and return to the summary buffer
8737 (@code{gnus-score-edit-done}). 
8738
8739 @item C-c C-d
8740 @kindex C-c C-d (Score)
8741 @findex gnus-score-edit-insert-date
8742 Insert the current date in numerical format
8743 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
8744 you were wondering.
8745 @end table
8746
8747 @node Adaptive Scoring
8748 @section Adaptive Scoring
8749 @cindex adaptive scoring
8750
8751 If all this scoring is getting you down, Gnus has a way of making it all
8752 happen automatically---as if by magic.  Or rather, as if by artificial
8753 stupidity, to be precise.
8754
8755 @vindex gnus-use-adaptive-scoring
8756 When you read an article, or mark an article as read, or kill an
8757 article, you leave marks behind.  On exit from the group, Gnus can sniff
8758 these marks and add score elements depending on what marks it finds.
8759 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
8760 @code{t}. 
8761
8762 @vindex gnus-default-adaptive-score-alist
8763 To give you complete control over the scoring process, you can customize
8764 the @code{gnus-default-adaptive-score-alist} variable.  By default, it
8765 looks something like this:
8766
8767 @lisp
8768 (defvar gnus-default-adaptive-score-alist
8769   '((gnus-unread-mark)
8770     (gnus-ticked-mark (from 4))
8771     (gnus-dormant-mark (from 5))
8772     (gnus-del-mark (from -4) (subject -1))
8773     (gnus-read-mark (from 4) (subject 2))
8774     (gnus-expirable-mark (from -1) (subject -1))
8775     (gnus-killed-mark (from -1) (subject -3))
8776     (gnus-kill-file-mark)
8777     (gnus-catchup-mark (from -1) (subject -1))))
8778 @end lisp
8779
8780 As you see, each element in this alist has a mark as a key (either a
8781 variable name or a "real" mark---a character).  Following this key is a
8782 random number of header/score pairs.  
8783
8784 To take @code{gnus-del-mark} as an example---this alist says that all
8785 articles that have that mark (i.e., are marked with @samp{D}) will have a
8786 score entry added to lower based on the @code{From} header by -4, and
8787 lowered by @code{Subject} by -1.  Change this to fit your prejudices. 
8788
8789 The headers you can score on are @code{from}, @code{subject},
8790 @code{message-id}, @code{references}, @code{xref}, @code{lines},
8791 @code{chars} and @code{date}.  In addition, you can score on
8792 @code{followup}, which will create an adaptive score entry that matches
8793 on the @code{References} header using the @code{Message-ID} of the
8794 current article, thereby matching the following thread.
8795
8796 If you use this scheme, you should set @code{mark-below} to something
8797 small---like -300, perhaps, to avoid having small random changes result
8798 in articles getting marked as read.
8799
8800 After using adaptive scoring for a week or so, Gnus should start to
8801 become properly trained and enhance the authors you like best, and kill
8802 the authors you like least, without you having to say so explicitly. 
8803
8804 You can control what groups the adaptive scoring is to be performed on
8805 by using the score files (@pxref{Score File Format}).  This will also
8806 let you use different rules in different groups.
8807
8808 @vindex gnus-adaptive-file-suffix
8809 The adaptive score entries will be put into a file where the name is the
8810 group name with @code{gnus-adaptive-file-suffix} appended.  The default
8811 is @samp{ADAPT}.
8812
8813 @vindex gnus-score-exact-adapt-limit
8814 When doing adaptive scoring, substring or fuzzy matching would probably
8815 give you the best results in most cases.  However, if the header one
8816 matches is short, the possibility for false positives is great, so if
8817 the length of the match is less than
8818 @code{gnus-score-exact-adapt-limit}, exact matching will be used.  If
8819 this variable is @code{nil}, exact matching will always be used to avoid
8820 this problem.
8821
8822
8823 @node Followups To Yourself
8824 @section Followups To Yourself
8825
8826 Gnus offers two commands for picking out the @code{Message-ID} header in
8827 the current buffer.  Gnus will then add a score rule that scores using
8828 this @code{Message-ID} on the @code{References} header of other
8829 articles.  This will, in effect, increase the score of all articles that
8830 respond to the article in the current buffer.  Quite useful if you want
8831 to easily note when people answer what you've said.
8832
8833 @table @code
8834
8835 @item gnus-score-followup-article
8836 @findex gnus-score-followup-article
8837 This will add a score to articles that directly follow up your own
8838 article. 
8839
8840 @item gnus-score-followup-thread
8841 @findex gnus-score-followup-thread
8842 This will add a score to all articles that appear in a thread "below"
8843 your own article.
8844 @end table
8845
8846 @vindex gnus-inews-article-hook
8847 These two functions are both primarily meant to be used in hooks like
8848 @code{gnus-inews-article-hook}.  
8849
8850
8851 @node Scoring Tips
8852 @section Scoring Tips
8853 @cindex scoring tips
8854
8855 @table @dfn
8856
8857 @item Crossposts
8858 If you want to lower the score of crossposts, the line to match on is
8859 the @code{Xref} header.
8860 @lisp
8861 ("xref" (" talk.politics.misc:" -1000))
8862 @end lisp
8863
8864 @item Multiple crossposts
8865 If you want to lower the score of articles that have been crossposted to
8866 more than, say, 3 groups:
8867 @lisp
8868 ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
8869 @end lisp
8870
8871 @item Matching on the body
8872 This is generally not a very good idea---it takes a very long time.
8873 Gnus actually has to fetch each individual article from the server.  But
8874 you might want to anyway, I guess.  Even though there are three match
8875 keys (@code{Head}, @code{Body} and @code{All}), you should choose one
8876 and stick with it in each score file.  If you use any two, each article
8877 will be fetched @emph{twice}.  If you want to match a bit on the
8878 @code{Head} and a bit on the @code{Body}, just use @code{All} for all
8879 the matches.  
8880
8881 @item Marking as read
8882 You will probably want to mark articles that has a score below a certain
8883 number as read.  This is most easily achieved by putting the following
8884 in your @file{all.SCORE} file:
8885 @lisp
8886 ((mark -100))
8887 @end lisp
8888 You may also consider doing something similar with @code{expunge}.  
8889
8890 @item Negated charater classes
8891 If you say stuff like @code{[^abcd]*}, you may get unexpected results.
8892 That will match newlines, which might lead to, well, The Unknown.  Say
8893 @code{[^abcd\n]*} instead.
8894 @end table
8895
8896 @node Reverse Scoring
8897 @section Reverse Scoring
8898 @cindex reverse scoring
8899
8900 If you want to keep just articles that have @samp{Sex with Emacs} in the
8901 subject header, and expunge all other articles, you could put something
8902 like this in your score file:
8903
8904 @lisp
8905 (("subject"
8906   ("Sex with Emacs" 2))
8907  (mark 1)
8908  (expunge 1))
8909 @end lisp
8910
8911 So, you raise all articles that match @samp{Sex with Emacs} and mark the
8912 rest as read, and expunge them to boot.
8913
8914 @node Global Score Files
8915 @section Global Score Files
8916 @cindex global score files
8917
8918 Sure, other newsreaders have "global kill files".  These are usually
8919 nothing more than a single kill file that applies to all groups, stored
8920 in the user's home directory.  Bah!  Puny, weak newsreaders!
8921
8922 What I'm talking about here are Global Score Files.  Score files from
8923 all over the world, from users everywhere, uniting all nations in one
8924 big, happy score file union!  Ange-score!  New and untested!
8925
8926 @vindex gnus-global-score-files
8927 All you have to do to use other people's score files is to set the
8928 @code{gnus-global-score-files} variable.  One entry for each score file,
8929 or each score file directory.  Gnus will decide by itself what score
8930 files are applicable to which group.
8931
8932 Say you want to use all score files in the
8933 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
8934 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
8935
8936 @lisp
8937 (setq gnus-global-score-files
8938       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
8939         "/ftp@@ftp.some-where:/pub/score/"))
8940 @end lisp
8941
8942 @findex gnus-score-search-global-directories
8943 Simple, eh?  Directory names must end with a @samp{/}.  These
8944 directories are typically scanned only once during each Gnus session.
8945 If you feel the need to manually re-scan the remote directories, you can
8946 use the @code{gnus-score-search-global-directories} command.
8947
8948 Note that, at present, using this option will slow down group entry
8949 somewhat.  (That is---a lot.)
8950
8951 If you want to start maintaining score files for other people to use,
8952 just put your score file up for anonymous ftp and announce it to the
8953 world.  Become a retro-moderator!  Participate in the retro-moderator
8954 wars sure to ensue, where retro-moderators battle it out for the
8955 sympathy of the people, luring them to use their score files on false
8956 premises!  Yay!  The net is saved!
8957
8958 Here are some tips for the would-be retro-moderator, off the top of my
8959 head: 
8960
8961 @itemize @bullet
8962
8963 @item 
8964 Articles that are heavily crossposted are probably junk. 
8965 @item
8966 To lower a single inappropriate article, lower by @code{Message-ID}.
8967 @item
8968 Particularly brilliant authors can be raised on a permanent basis. 
8969 @item
8970 Authors that repeatedly post off-charter for the group can safely be
8971 lowered out of existence.
8972 @item
8973 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
8974 articles completely.
8975
8976 @item 
8977 Use expiring score entries to keep the size of the file down.  You
8978 should probably have a long expiry period, though, as some sites keep
8979 old articles for a long time.
8980 @end itemize
8981
8982 ... I wonder whether other newsreaders will support global score files
8983 in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
8984 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
8985 holding our breath yet?
8986
8987
8988 @node Kill Files
8989 @section Kill Files
8990 @cindex kill files
8991
8992 Gnus still supports those pesky old kill files.  In fact, the kill file
8993 entries can now be expiring, which is something I wrote before Daniel
8994 Quinlan thought of doing score files, so I've left the code in there.
8995
8996 In short, kill processing is a lot slower (and I do mean @emph{a lot})
8997 than score processing, so it might be a good idea to rewrite your kill
8998 files into score files.
8999
9000 Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
9001 forms into this file, which means that you can use kill files as some
9002 sort of primitive hook function to be run on group entry, even though
9003 that isn't a very good idea.
9004
9005 XCNormal kill files look like this:
9006
9007 @lisp
9008 (gnus-kill "From" "Lars Ingebrigtsen")
9009 (gnus-kill "Subject" "ding")
9010 (gnus-expunge "X")
9011 @end lisp
9012
9013 This will mark every article written by me as read, and remove them from
9014 the summary buffer.  Very useful, you'll agree.
9015
9016 Other programs use a totally different kill file syntax.  If Gnus
9017 encounters what looks like a @code{rn} kill file, it will take a stab at
9018 interpreting it. 
9019
9020 Two functions for editing a GNUS kill file:
9021
9022 @table @kbd
9023
9024 @item M-k
9025 @kindex M-k (Summary)
9026 @findex gnus-summary-edit-local-kill
9027 Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
9028
9029 @item M-K
9030 @kindex M-K (Summary)
9031 @findex gnus-summary-edit-global-kill
9032 Edit the general kill file (@code{gnus-summary-edit-global-kill}).
9033 @end table
9034
9035 @vindex gnus-kill-file-name
9036 A kill file for the group @samp{soc.motss} is normally called
9037 @file{soc.motss.KILL}.  The suffix appended to the group name to get
9038 this file name is detailed by the @code{gnus-kill-file-name} variable.
9039 The "global" kill file (not in the score file sense of "global", of
9040 course) is called just @file{KILL}.
9041
9042 @vindex gnus-kill-save-kill-file
9043 If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the
9044 kill file after processing, which is necessary if you use expiring
9045 kills. 
9046
9047
9048
9049
9050 @node Various
9051 @chapter Various
9052
9053 @menu
9054 * Interactive::                Making Gnus ask you many questions.
9055 * Formatting Variables::       How to control the look of the buffers.
9056 * Windows Configuration::      Configuring the Gnus buffer windows.
9057 * Buttons::                    Get tendonitis in ten easy steps!
9058 * Compilation & Init File::    How to speed Gnus up.
9059 * Daemons::                    Gnus can do things behind your back.
9060 * NoCeM::                      How to avoid spam and other fatty foods.
9061 * Various Various::            Things that are really various.
9062 @end menu
9063
9064 @node Interactive
9065 @section Interactive
9066 @cindex interaction
9067
9068 @table @code
9069
9070 @item gnus-novice-user
9071 @vindex gnus-novice-user
9072 If this variable is non-@code{nil}, you are either a newcomer to the
9073 World of Usenet, or you are very cautious, which is a nice thing to be,
9074 really.  You will be given questions of the type "Are you sure you want
9075 to do this?" before doing anything dangerous.  This is @code{t} by
9076 default. 
9077
9078 @item gnus-expert-user
9079 @vindex gnus-expert-user
9080 If this variable is non-@code{nil}, you will never ever be asked any
9081 questions by Gnus.  It will simply assume you know what your are doing,
9082 no matter how strange.
9083
9084 @item gnus-interactive-catchup
9085 @vindex gnus-interactive-catchup
9086 Require confirmation before catching up a group if non-@code{nil}.  It
9087 is @code{t} by default.
9088
9089 @item gnus-interactive-post
9090 @vindex gnus-interactive-post
9091 If non-@code{nil}, the user will be prompted for a group name when
9092 posting an article.  It is @code{t} by default.
9093
9094 @item gnus-interactive-exit
9095 @vindex gnus-interactive-exit
9096 Require confirmation before exiting Gnus.  This variable is @code{t} by
9097 default. 
9098 @end table
9099
9100
9101 @node Formatting Variables
9102 @section Formatting Variables
9103 @cindex formatting variables
9104
9105 Throughout this manual you've probably noticed lots of variables that
9106 are called things like @code{gnus-group-line-format} and
9107 @code{gnus-summary-mode-line-format}.  These control how Gnus is to
9108 output lines in the various buffers.  There's quite a lot of them.
9109 Fortunately, they all use the same syntax, so there's not that much to
9110 be annoyed by.
9111
9112 Here's an example format spec (from the group buffer): @samp{"%M%S%5y:
9113 %(%g%)\n"}.  We see that it is indeed extremely ugly, and that there are
9114 lots of percentages everywhere.  
9115
9116 Each @samp{%} element will be replaced by some string or other when the
9117 buffer in question is generated.  @samp{%5y} means "insert the @samp{y}
9118 spec, and pad with spaces to get a 5-character field".  Just like a
9119 normal format spec, almost.
9120
9121 You can also say @samp{%6,4y}, which means that the field will never be
9122 more than 6 characters wide and never less than 4 characters wide.
9123
9124 There are also specs for highlighting, and these are shared by all the
9125 format variables.  Text inside the @samp{%(} and @samp{%)} specifiers
9126 will get the special @code{mouse-face} property set, which means that it
9127 will be highlighted (with @code{gnus-mouse-face}) when you put the mouse
9128 pointer over it.
9129
9130 Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
9131 normal faces set using @code{gnus-face-0}, which is @code{bold} by
9132 default.  If you say @samp{%1@{} instead, you'll get @code{gnus-face-1}
9133 instead, and so on.  Create as many faces as you wish.  The same goes
9134 for the @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
9135 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
9136
9137 Here's an alternative recipe for the group buffer:
9138
9139 @lisp
9140 ;; Create three face types.
9141 (setq gnus-face-1 'bold)
9142 (setq gnus-face-3 'italic)
9143
9144 ;; We want the article count to be in 
9145 ;; a bold and green face.  So we create 
9146 ;; a new face called `my-green-bold'.
9147 (copy-face 'bold 'my-green-bold)
9148 ;; Set the color.
9149 (set-face-foreground 'my-green-bold "ForestGreen")
9150 (setq gnus-face-2 'my-green-bold)
9151
9152 ;; Set the new & fancy format.
9153 (setq gnus-group-line-format 
9154       "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
9155 @end lisp
9156
9157 I'm sure you'll be able to use this scheme to create totally unreadable
9158 and extremely vulgar displays.  Have fun!
9159
9160 Currently Gnus uses the following formatting variables:
9161 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
9162 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
9163 @code{gnus-group-mode-line-format},
9164 @code{gnus-summary-mode-line-format},
9165 @code{gnus-article-mode-line-format},
9166 @code{gnus-server-mode-line-format}. 
9167
9168 Note that the @samp{%(} specs (and friends) do not make any sense on the
9169 mode-line variables.
9170
9171 All these format variables can also be random elisp forms.  In that
9172 case, they will be @code{eval}ed to insert the required lines.
9173
9174 @kindex M-x gnus-update-format
9175 @findex gnus-update-format
9176 Gnus includes a command to help you while creating your own format
9177 specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
9178 update the spec in question and pop you to a buffer where you can
9179 examine the resulting lisp code to be run to generate the line.  
9180
9181
9182 @node Windows Configuration
9183 @section Windows Configuration
9184 @cindex windows configuration
9185
9186 No, there's nothing here about X, so be quiet.
9187
9188 @vindex gnus-use-full-window
9189 If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
9190 other windows and occupy the entire Emacs screen by itself.  It is
9191 @code{t} by default.
9192
9193 @code{gnus-buffer-configuration} describes how much space each Gnus
9194 buffer should be given.  Here's an excerpt of this variable:
9195
9196 @lisp
9197 ((group (vertical 1.0 (group 1.0 point)
9198                       (if gnus-carpal (group-carpal 4))))
9199  (article (vertical 1.0 (summary 0.25 point) 
9200                         (article 1.0))))
9201 @end lisp
9202
9203 This is an alist.  The @dfn{key} is a symbol that names some action or
9204 other.  For instance, when displaying the group buffer, the window
9205 configuration function will use @code{group} as the key.  A full list of
9206 possible names is listed below.
9207
9208 The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer
9209 should occupy.  To take the @code{article} split as an example -
9210
9211 @lisp
9212 (article (vertical 1.0 (summary 0.25 point)
9213                        (article 1.0)))
9214 @end lisp
9215
9216 This @dfn{split} says that the summary buffer should occupy 25% of upper
9217 half of the screen, and that it is placed over the article buffer.  As
9218 you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all
9219 reaching for that calculator there).  However, the special number
9220 @code{1.0} is used to signal that this buffer should soak up all the
9221 rest of the space avaiable after the rest of the buffers have taken
9222 whatever they need.  There should be only one buffer with the @code{1.0}
9223 size spec per split.
9224
9225 Point will be put in the buffer that has the optional third element
9226 @code{point}. 
9227
9228 Here's a more complicated example:
9229
9230 @lisp
9231 (article (vertical 1.0 (group 4)
9232                        (summary 0.25 point)
9233                        (if gnus-carpal (summary-carpal 4))
9234                        (article 1.0)))
9235 @end lisp
9236
9237 If the size spec is an integer instead of a floating point number, 
9238 then that number will be used to say how many lines a buffer should
9239 occupy, not a percentage.
9240
9241 If the @dfn{split} looks like something that can be @code{eval}ed (to be
9242 precise---if the @code{car} of the split is a function or a subr), this
9243 split will be @code{eval}ed.  If the result is non-@code{nil}, it will
9244 be used as a split.  This means that there will be three buffers if
9245 @code{gnus-carpal} is @code{nil}, and four buffers if @code{gnus-carpal}
9246 is non-@code{nil}.
9247
9248 Not complicated enough for you?  Well, try this on for size:
9249
9250 @lisp
9251 (article (horizontal 1.0 
9252              (vertical 0.5
9253                  (group 1.0)
9254                  (gnus-carpal 4))
9255              (vertical 1.0
9256                  (summary 0.25 point)
9257                  (summary-carpal 4)
9258                  (article 1.0))))
9259 @end lisp
9260
9261 Whoops.  Two buffers with the mystery 100% tag.  And what's that
9262 @code{horizontal} thingie?  
9263
9264 If the first element in one of the split is @code{horizontal}, Gnus will
9265 split the window horizontally, giving you two windows side-by-side.
9266 Inside each of these strips you may carry on all you like in the normal
9267 fashion.  The number following @code{horizontal} says what percentage of
9268 the screen is to be given to this strip.
9269
9270 For each split, there @emph{must} be one element that has the 100% tag.
9271 The splitting is never accurate, and this buffer will eat any leftover
9272 lines from the splits.
9273
9274 To be slightly more formal, here's a definition of what a legal split
9275 may look like:
9276
9277 @example
9278 split       = frame | horizontal | vertical | buffer | form
9279 frame       = "(frame " frame-size *split ")"
9280 horizontal  = "(horizontal " size *split ")"
9281 vertical    = "(vertical " size *split ")"
9282 buffer      = "(" buffer-name " " size *[ "point" ] ")"
9283 frame-size  = "(" number " . " number ")"
9284 size        = number
9285 buffer-name = group | article | summary ...
9286 @end example
9287
9288 The limitations are that the @samp{frame} split can only appear as the
9289 top-level split.  @samp{form} should be an Emacs Lisp form that should
9290 return a valid split.  We see that each split is fully recursive, and
9291 may contain any number of @samp{vertical} and @samp{horizontal} splits. 
9292
9293 Finding the right sizes can be a bit complicated.  No window may be less
9294 than 4 characters high, and all windows must be at least 10 characters
9295 wide.  Gnus will try to enforce this before applying the splits.
9296
9297 If you're not familiar with Emacs terminology, @samp{horizontal} and
9298 @samp{vertical} splits may work the opposite way of what you'd expect.
9299 Windows inside a @samp{horizontal} split are shown side-by-side, and
9300 windows within a @samp{vertical} split are shown above each other.
9301
9302 @findex gnus-configure-frame
9303 If you want to experiment with window placement, a good tip is to call
9304 @code{gnus-configure-frame} directly with a split.  This is the function
9305 that does all the real work when splitting buffers.  Below is a pretty
9306 nonsensical configuration with 5 windows; two for the group buffer and
9307 three for the article buffer.  (I said it was nonsensical.)  If you
9308 @code{eval} the statement below, you can get an idea of how that would
9309 look straight away, without going through the normal Gnus channels.
9310 Play with it until you're satisfied, and then use
9311 @code{gnus-add-configuration} to add your new creation to the buffer
9312 configuration list. 
9313
9314 @example
9315 (gnus-configure-frame
9316  '(horizontal 1.0
9317     (vertical 10
9318       (group 1.0)
9319       (article 0.3 point))
9320     (vertical 1.0
9321       (article 1.0)
9322       (horizontal 4
9323         (group 1.0)
9324         (article 10)))))
9325 @end example
9326
9327 Here's a list of all possible keys for
9328 @code{gnus-buffer-configuaration}:
9329
9330 @code{group}, @code{summary}, @code{article}, @code{server},
9331 @code{browse}, @code{group-mail}, @code{summary-mail},
9332 @code{summary-reply}, @code{info}, @code{summary-faq},
9333 @code{edit-group}, @code{edit-server}, @code{reply}, @code{reply-yank},
9334 @code{followup}, @code{followup-yank}, @code{edit-score}.  
9335
9336 @findex gnus-add-configuration
9337 Since the @code{gnus-buffer-configuration} variable is so long and
9338 complicated, there's a function you can use to ease changing the config
9339 of a single setting: @code{gnus-add-configuration}.  If, for instance,
9340 you want to change the @code{article} setting, you could say:
9341
9342 @lisp
9343 (gnus-add-configuration
9344  '(article (vertical 1.0
9345                (group 4)
9346                (summary .25 point)
9347                (article 1.0))))
9348 @end lisp
9349
9350 You'd typically stick these @code{gnus-add-configuration} calls in your
9351 @file{.gnus} file or in some startup hook -- they should be run after
9352 Gnus has been loaded.
9353
9354
9355 @node Buttons
9356 @section Buttons
9357 @cindex buttons
9358 @cindex mouse
9359 @cindex click
9360
9361 Those new-fangled @dfn{mouse} contraptions is very popular with the
9362 young, hep kids who don't want to learn the proper way to do things
9363 these days.  Why, I remember way back in the summer of '89, when I was
9364 using Emacs on a Tops 20 system.  Three hundred users on one single
9365 machine, and every user was running Simula compilers.  Bah!
9366
9367 Right.
9368
9369 @vindex gnus-carpal
9370 Well, you can make Gnus display bufferfuls of buttons you can click to
9371 do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
9372 really.  Tell the chiropractor I sent you.
9373
9374
9375 @table @code
9376
9377 @item gnus-carpal-mode-hook
9378 @vindex gnus-carpal-mode-hook
9379 Hook run in all carpal mode buffers.
9380
9381 @item gnus-carpal-button-face
9382 @vindex gnus-carpal-button-face
9383 Face used on buttons.
9384
9385 @item gnus-carpal-group-buffer-buttons
9386 @vindex gnus-carpal-group-buffer-buttons
9387 Buttons in the group buffer.
9388
9389 @item gnus-carpal-summary-buffer-buttons
9390 @vindex gnus-carpal-summary-buffer-buttons
9391 Buttons in the summary buffer.
9392
9393 @item gnus-carpal-server-buffer-buttons
9394 @vindex gnus-carpal-server-buffer-buttons
9395 Buttons in the server buffer.
9396
9397 @item gnus-carpal-browse-buffer-buttons
9398 @vindex gnus-carpal-browse-buffer-buttons
9399 Buttons in the browse buffer.
9400 @end table
9401
9402 All the @code{buttons} variables are lists.  The elements in these list
9403 is either a cons cell where the car contains a text to be displayed and
9404 the cdr contains a function symbol, or a simple string.
9405
9406
9407 @node Compilation & Init File
9408 @section Compilation & Init File
9409 @cindex compilation
9410 @cindex init file
9411 @cindex byte-compilation
9412
9413 @vindex gnus-init-file
9414 @findex gnus-compile
9415 When Gnus starts up, it will read the Gnus init file
9416 @code{gnus-init-file}, which is @file{.gnus} by default.  It is
9417 recommended that you keep any Gnus-related functions that you have
9418 written in that file.  If you want to byte-compile the file, Gnus offers
9419 the handy @kbd{M-x gnus-compile} function that will do that for you. 
9420
9421 That's not really why that function was written, though.
9422
9423 Remember all those line format specification variables?
9424 @code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
9425 on.  Now, Gnus will of course heed whatever these variables are, but,
9426 unfortunately, changing them will mean a quite significant slow-down.
9427 (The default values of these variables have byte-compiled functions
9428 associated with them, while the user-generated versions do not, of
9429 course.) 
9430
9431 To help with this, you can run @code{gnus-compile} after you've fiddled
9432 around with the variables and feel that you're (kind of) satisfied.
9433 This will result in the new specs being byte-compiled, and you'll get
9434 top speed again.
9435
9436 The result of these byte-compilations will be written to
9437 @file{.gnus.elc} by default.
9438
9439 Note that Gnus will read @file{.gnus.elc} instead of @file{.gnus} if
9440 @file{.gnus.elc} exists, so if you change @file{.gnus}, you should
9441 remove @file{.gnus.elc}.
9442
9443
9444 @node Daemons
9445 @section Daemons
9446 @cindex demons
9447 @cindex daemons
9448
9449 Gnus, being larger than any program ever written (allegedly), does lots
9450 of strange stuff that you may wish to have done while you're not
9451 present.  For instance, you may want it to check for new mail once in a
9452 while.  Or you may want it to close down all connections to all servers
9453 when you leave Emacs idle.  And stuff like that.
9454
9455 Gnus will let you do stuff like that by defining various
9456 @dfn{handlers}.  Each handler consists of three elements:  A
9457 @var{function}, a @var{time}, and an @var{idle} parameter.
9458
9459 Here's an example of a handler that closes connections when Emacs has
9460 been idle for thirty minutes:
9461
9462 @lisp
9463 (gnus-demon-close-connections nil 30)
9464 @end lisp
9465
9466 Here's a handler that scans for PGP headers every hour when Emacs is
9467 idle: 
9468
9469 @lisp
9470 (gnus-demon-scan-pgp 60 t)
9471 @end lisp
9472
9473 This @var{time} parameter and than @var{idle} parameter works together
9474 in a strange, but wonderful fashion.  Basically, if @var{idle} is
9475 @code{nil}, then the function will be called every @var{time} minutes.
9476
9477 If @var{idle} is @code{t}, then the function will be called after
9478 @var{time} minutes only if Emacs is idle.  So if Emacs is never idle,
9479 the function will never be called.  But once Emacs goes idle, the
9480 function will be called every @var{time} minutes.
9481
9482 If @var{idle} is a number and @var{time} is a number, the function will
9483 be called every @var{time} minutes only when Emacs has been idle for
9484 @var{idle} minutes.
9485
9486 If @var{idle} is a number and @var{time} is @code{nil}, the function
9487 will be called once every time Emacs has been idle for @var{idle}
9488 minutes.  
9489
9490 And if @var{time} is a string, it should look like @samp{"07:31"}, and
9491 the function will then be called once every day somewhere near that
9492 time.  Modified by the @var{idle} parameter, of course.
9493
9494 @vindex gnus-demon-timestep
9495 (When I say "minute" here, I really mean @code{gnus-demon-timestep}
9496 seconds.  This is @samp{60} by default.  If you change that variable,
9497 all the timings in the handlers will be affected.)
9498
9499 @vindex gnus-use-demon
9500 To set the whole thing in motion, though, you have to set
9501 @code{gnus-use-demon} to @code{t}.
9502
9503 @vindex gnus-use-demon
9504 To set the whole thing in motion, though, you have to set
9505 @code{gnus-use-demon} to @code{t}.
9506
9507 So, if you want to add a handler, you could put something like this in
9508 your @file{.gnus} file:
9509
9510 @findex gnus-demon-add-handler
9511 @lisp
9512 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
9513 @end lisp
9514
9515 @findex gnus-demon-add-nocem
9516 @findex gnus-demon-add-scanmail
9517 @findex gnus-demon-add-disconnection
9518 Some ready-made functions to do this has been created:
9519 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, and
9520 @code{gnus-demon-add-scanmail}.  Just put those functions in your
9521 @file{.gnus} if you want those abilities.
9522
9523 @findex gnus-demon-init
9524 @findex gnus-demon-cancel
9525 @vindex gnus-demon-handlers
9526 If you add handlers to @code{gnus-demon-handlers} directly, you should
9527 run @code{gnus-demon-init} to make the changes take hold.  To cancel all
9528 daemons, you can use the @code{gnus-demon-cancel} function.
9529
9530 Note that adding daemons can be pretty naughty if you overdo it.  Adding
9531 functions that scan all news and mail from all servers every two seconds
9532 is a sure-fire way of getting booted off any respectable system.  So
9533 behave. 
9534
9535
9536 @node NoCeM
9537 @section NoCeM
9538 @cindex nocem
9539 @cindex spam
9540
9541
9542
9543 @node Various Various
9544 @section Various Various
9545 @cindex mode lines
9546 @cindex highlights
9547
9548 @table @code
9549
9550 @item gnus-verbose
9551 @vindex gnus-verbose
9552 This variable is an integer between zero and ten.  The higher the value,
9553 the more messages will be displayed.  If this variable is zero, Gnus
9554 will never flash any messages, if it is seven (which is the default),
9555 most important messages will be shown, and if it is ten, Gnus won't ever
9556 shut up, but will flash so many messages it will make your head swim.
9557
9558 @item gnus-updated-mode-lines
9559 @vindex gnus-updated-mode-lines
9560 This is a list of buffers that should keep their mode lines updated.
9561 The list may contain the symbols @code{group}, @code{article} and
9562 @code{summary}.  If the corresponding symbol is present, Gnus will keep
9563 that mode line updated with information that may be pertinent.  If this
9564 variable is @code{nil}, screen refresh may be quicker.
9565
9566 @cindex display-time
9567
9568 @item gnus-mode-non-string-length
9569 @vindex gnus-mode-non-string-length
9570 By default, Gnus displays information on the current article in the mode
9571 lines of the summary and article buffers.  The information Gnus wishes
9572 to display (eg. the subject of the article) is often longer than the
9573 mode lines, and therefore have to be cut off at some point.  This
9574 variable says how long the other elements on the line is (i.e., the
9575 non-info part).  If you put additional elements on the mode line (eg. a
9576 clock), you should modify this variable:
9577
9578 @c Hook written by Keinonen Kari <kk85613@cs.tut.fi>.
9579 @lisp
9580 (add-hook 'display-time-hook
9581           (lambda ()
9582             (setq gnus-mode-non-string-length
9583                   (+ 21 (length display-time-string)))))
9584 @end lisp
9585
9586 If this variable is @code{nil} (which is the default), the mode line
9587 strings won't be chopped off, and they won't be padded either.
9588
9589 @item gnus-visual
9590 @vindex gnus-visual
9591 @cindex visual
9592 @cindex highlighting
9593 @cindex menus
9594
9595 If @code{nil}, Gnus won't attempt to create menus or use fancy colors
9596 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
9597 file.
9598
9599 This variable can also be a list of visual properties that are enabled.
9600 The following elements are legal, and are all set by default:
9601
9602 @table @code
9603
9604 @item summary-highlight
9605 Perform various highlighting in the summary buffer.
9606
9607 @item article-highlight
9608 Perform various highlighting in the article buffer.
9609
9610 @item highlight
9611 Turn on highlighting in all buffers.
9612
9613 @item group-menu
9614 Create menus in the group buffer.
9615
9616 @item summary-menu
9617 Create menus in the summary buffer.
9618
9619 @item article-menu
9620 Create menus in the article buffer.
9621
9622 @item browse-menu
9623 Create menus in the browse buffer.
9624
9625 @item server-menu
9626 Create menus in the server buffer.
9627
9628 @item menu
9629 Create menus in all buffers.
9630
9631 @end table
9632
9633 So if you only want highlighting in the article buffer and menus in all
9634 buffers, you couls say something like:
9635
9636 @lisp
9637 (setq gnus-visual '(article-highlight menu))
9638 @end lisp
9639
9640 If you want only highlighting and no menus whatsoever, you'd say:
9641
9642 @lisp
9643 (setq gnus-visual '(highlight))
9644 @end lisp
9645
9646 @item gnus-mouse-face
9647 @vindex gnus-mouse-face
9648 This is the face (i.e., font) used for mouse highlighting in Gnus.  No
9649 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
9650
9651 @item gnus-display-type
9652 @vindex gnus-display-type
9653 This variable is symbol indicating the display Emacs is running under.
9654 The symbol should be one of @code{color}, @code{grayscale} or
9655 @code{mono}.  If Gnus guesses this display attribute wrongly, either set
9656 this variable in your @file{~/.emacs} or set the resource
9657 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
9658
9659 @item gnus-background-mode 
9660 @vindex gnus-background-mode 
9661 This is a symbol indicating the Emacs background brightness.  The symbol
9662 should be one of @code{light} or @code{dark}.  If Gnus guesses this
9663 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
9664 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}. 
9665 `gnus-display-type'.
9666
9667 @item nnheader-max-head-length
9668 @vindex nnheader-max-head-length
9669 When the backends read straight heads of articles, they all try to read
9670 as little as possible.  This variable (default @code{4096}) specifies
9671 the absolute max length the backends will try to read before giving up
9672 on finding a separator line between the head and the body.  If this
9673 variable is @code{nil}, there is no upper read bound.  If it is
9674 @code{t}, the backends won't try to read the articles piece by piece,
9675 but read the entire articles.  This makes sense with some versions of
9676 @code{ange-ftp}. 
9677
9678
9679 @end table
9680
9681 @node Customization
9682 @chapter Customization
9683 @cindex general customization
9684
9685 All variables are properly documented elsewhere in this manual.  This
9686 section is designed to give general pointers on how to customize Gnus
9687 for some quite common situations.
9688
9689 @menu
9690 * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
9691 * Slow Terminal Connection::  You run a remote Emacs.
9692 * Little Disk Space::         You feel that having large setup files is icky.
9693 * Slow Machine::              You feel like buying a faster machine.
9694 @end menu
9695
9696 @node Slow/Expensive Connection
9697 @section Slow/Expensive @sc{nntp} Connection
9698
9699 If you run Emacs on a machine locally, and get your news from a machine
9700 over some very thin strings, you want to cut down on the amount of data
9701 Gnus has to get from the @sc{nntp} server.
9702
9703 @table @code
9704
9705 @item gnus-read-active-file
9706 Set this to @code{nil}, which will inhibit Gnus from requesting the
9707 entire active file from the server.  This file is often v.  large.  You
9708 also have to set @code{gnus-check-new-news} and
9709 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
9710 doesn't suddenly decide to fetch the active file anyway.
9711
9712 @item gnus-nov-is-evil
9713 This one has to be @code{nil}.  If not, grabbing article headers from
9714 the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
9715 support @sc{xover}; Gnus will detect this by itself.
9716 @end table
9717
9718 @node Slow Terminal Connection
9719 @section Slow Terminal Connection
9720
9721 Let's say you use your home computer for dialing up the system that
9722 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
9723 amount of data that is sent over the wires as much as possible.
9724
9725 @table @code
9726
9727 @item gnus-auto-center-summary
9728 Set this to @code{nil} to inhibit Gnus from recentering the summary
9729 buffer all the time.
9730
9731 @item gnus-visible-headers
9732 Cut down on the headers that are included in the articles to the
9733 minimum.  You can, in fact, make do without them altogether---most of the
9734 useful data is in the summary buffer, anyway.  Set this variable to
9735 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
9736
9737 @item gnus-article-display-hook
9738 Set this hook to all the available hiding commands:
9739 @lisp
9740 (setq gnus-article-display-hook 
9741       '(gnus-article-hide-headers gnus-article-hide-signature
9742         gnus-article-hide-citation))
9743 @end lisp
9744
9745 @item gnus-use-full-window
9746 By setting this to @code{nil}, you can make all the windows smaller.
9747 While this doesn't really cut down much generally, it means that you
9748 have to see smaller portions of articles before deciding that you didn't
9749 want to read them anyway.
9750
9751 @item gnus-thread-hide-subtree
9752 If this is non-@code{nil}, all threads in the summary buffer will be
9753 hidden initially.
9754
9755 @item gnus-updated-mode-lines
9756 If this is @code{nil}, Gnus will not put information in the buffer mode
9757 lines, which might save some time.
9758 @end table
9759
9760 @node Little Disk Space
9761 @section Little Disk Space
9762
9763 The startup files can get rather large, so you may want to cut their
9764 sizes a bit if you are running out of space.
9765
9766 @table @code
9767
9768 @item gnus-save-newsrc-file
9769 If this is @code{nil}, Gnus will never save @file{.newsrc}---it will
9770 only save @file{.newsrc.eld}.  This means that you will not be able to
9771 use any other newsreaders than Gnus.  This variable is @code{t} by
9772 default. 
9773
9774 @item gnus-save-killed-list
9775 If this is @code{nil}, Gnus will not save the list of dead groups.  You
9776 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
9777 and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
9778 variable to @code{nil}.  This variable is @code{t} by default.
9779
9780 @end table
9781
9782
9783 @node Slow Machine
9784 @section Slow Machine
9785
9786 If you have a slow machine, or are just really impatient, there are a
9787 few things you can do to make Gnus run faster.
9788
9789 Set@code{gnus-check-new-newsgroups} and
9790 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
9791
9792 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
9793 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
9794 summary buffer faster.
9795
9796 Set @code{gnus-article-display-hook} to @code{nil} to make article
9797 processing a bit faster.
9798
9799
9800 @node Troubleshooting
9801 @chapter Troubleshooting
9802 @cindex troubleshooting
9803
9804 Gnus works @emph{so} well straight out of the box---I can't imagine any
9805 problems, really.
9806
9807 Ahem.
9808
9809 @enumerate
9810
9811 @item
9812 Make sure your computer is switched on.
9813
9814 @item
9815 Make sure that you really load the current Gnus version.  If you have
9816 been running @sc{gnus}, you need to exit Emacs and start it up again before
9817 Gnus will work.
9818
9819 @item
9820 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
9821 like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
9822 on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
9823 flee}, you have some old @file{.el} files lying around.  Delete these.
9824
9825 @item
9826 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
9827 how-to. 
9828 @end enumerate
9829
9830 If all else fails, report the problem as a bug.
9831
9832 @cindex bugs
9833 @cindex reporting bugs
9834
9835 @kindex M-x gnus-bug
9836 @findex gnus-bug
9837 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
9838 command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
9839 me the backtrace.  I will fix bugs, but I can only fix them if you send
9840 me a precise description as to how to reproduce the bug.
9841
9842 You really can never be too detailed in a bug report.  Always use the
9843 @kbd{M-x gnus-bug} command when you make bug reports, even if it creates
9844 a 10Kb mail each time you use it, and even if you have sent me your
9845 environment 500 times before.  I don't care.  I want the full info each
9846 time.  
9847
9848 It is also important to remember that I have no memory whatsoever.  If
9849 you send a bug report, and I send you a reply, and then you send back
9850 just "No, it's not! Moron!", I will have no idea what you are insulting
9851 me about.  Always overexplain everything.  It's much easier for all of
9852 us---if I don't have all the information I need, I will just mail you
9853 and ask for more info, and everything takes more time.
9854
9855 If you just need help, you are better off asking on
9856 @samp{gnu.emacs.gnus}.  I'm not very helpful.
9857
9858 @cindex gnu.emacs.gnus
9859 @cindex ding mailing list
9860 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
9861 Write to @samp{ding-request@@ifi.uio.no} to subscribe.
9862
9863
9864 @node The End
9865 @chapter The End
9866
9867 Well, that's the manual---you can get on with your life now.  Keep in
9868 touch.  Say hello to your cats from me.  
9869
9870 My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
9871
9872 Ol' Chuck Reznikoff said it pretty well, so I leave the floor to him:
9873
9874 @quotation
9875 @strong{Te Deum}
9876 @sp 1
9877 Not because of victories @*
9878 I sing,@*
9879 having none,@*
9880 but for the common sunshine,@*
9881 the breeze,@*
9882 the largess of the spring.
9883 @sp 1
9884 Not for victory@*
9885 but for the day's work done@*
9886 as well as I was able;@*
9887 not for a seat upon the dais@*
9888 but at the common table.@*
9889 @end quotation
9890
9891 @node Appendices
9892 @chapter Appendices
9893
9894 @menu
9895 * A Programmer@'s Guide to Gnus::   Rilly, rilly technical stuff.
9896 * Emacs for Heathens::             A short intruduction to Emacsian terms.
9897 * Frequently Asked Questions::     A question-and-answer session.
9898 @end menu
9899
9900
9901 @node A Programmer@'s Guide to Gnus
9902 @section A Programmer@'s Guide to Gnus
9903
9904 It is my hope that other people will figure out smart stuff that Gnus
9905 can do, and that other people will write those smart things as well.  To
9906 facilitate that I thought it would be a good idea to describe the inner
9907 workings of Gnus.  And some of the not-so-inner workings, while I'm at
9908 it.
9909
9910 You can never expect the internals of a program not to change, but I
9911 will be defining (in some details) the interface between Gnus and its
9912 backends (this is written in stone), the format of the score files
9913 (ditto), data structures (some are less likely to change than others)
9914 and general method of operations.
9915
9916 @menu 
9917 * Backend Interface::        How Gnus communicates with the servers.
9918 * Score File Syntax::        A BNF definition of the score file standard.
9919 * Headers::                  How Gnus stores headers internally.
9920 * Ranges::                   A handy format for storing mucho numbers.
9921 * Group Info::               The group info format.
9922 * Various File Formats::     Formats of files that Gnus use.
9923 @end menu
9924
9925
9926 @node Backend Interface
9927 @subsection Backend Interface
9928
9929 Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
9930 groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
9931 server is a @dfn{backend} and some @dfn{backend variables}.  As examples
9932 of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
9933 examples of the latter we have @code{nntp-port-number} and
9934 @code{nnmbox-directory}.
9935
9936 When Gnus asks for information from a backend---say @code{nntp}---on
9937 something, it will normally include a virtual server name in the
9938 function parameters.  (If not, the backend should use the "current"
9939 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
9940 server as its only (optional) parameter.  If this virtual server hasn't
9941 been opened, the function should fail.
9942
9943 Note that a virtual server name has no relation to some physical server
9944 name.  Take this example:
9945
9946 @lisp
9947 (nntp "odd-one" 
9948       (nntp-address "ifi.uio.no") 
9949       (nntp-port-number 4324))
9950 @end lisp
9951
9952 Here the virtual server name is @samp{"odd-one"} while the name of
9953 the physical server is @samp{"ifi.uio.no"}. 
9954
9955 The backends should be able to switch between several virtual servers.
9956 The standard backends implement this by keeping an alist of virtual
9957 server environments that it pulls down/pushes up when needed.  
9958
9959 There are two groups of interface functions: @dfn{required functions},
9960 which must be present, and @dfn{optional functions}, which Gnus will
9961 always check whether are present before attempting to call.
9962
9963 All these functions are expected to return data in the buffer
9964 @code{nntp-server-buffer} (@samp{" *nntpd*"}), which is somewhat
9965 unfortunately named, but we'll have to live with it.  When I talk about
9966 "resulting data", I always refer to the data in that buffer.  When I
9967 talk about "return value", I talk about the function value returned by
9968 the function call.
9969
9970 Some backends could be said to be @dfn{server-forming} backends, and
9971 some might be said to not be.  The latter are backends that generally
9972 only operate on one group at a time, and have no concept of "server" --
9973 they have a group, and they deliver info on that group and nothing more.
9974
9975 In the examples and definitions I will refer to the imaginary backend
9976 @code{nnchoke}. 
9977
9978 @cindex @code{nnchoke}
9979
9980 @menu
9981 * Required Backend Functions::        Functions that must be implemented.
9982 * Optional Backend Functions::        Functions that need not be implemented.
9983 @end menu
9984
9985
9986 @node Required Backend Functions
9987 @subsubsection Required Backend Functions
9988
9989 @table @code
9990
9991 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
9992
9993 @var{articles} is either a range of article numbers or a list of
9994 @code{Message-ID}s.  Current backends do not fully support either---only
9995 sequences (lists) of article numbers, and most backends do not support
9996 retrieval of @code{Message-ID}s.  But they should try for both. 
9997
9998 The result data should either be HEADs or NOV lines, and the result
9999 value should either be @code{headers} or @code{nov} to reflect this.
10000 This might later be expanded to @code{various}, which will be a mixture
10001 of HEADs and NOV lines, but this is currently not supported by Gnus.  
10002
10003 If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra
10004 headers, in some meaning of the word.  This is generally done by
10005 fetching (at most) @var{fetch-old} extra headers less than the smallest
10006 article number in @code{articles}, and fill in the gaps as well.  The
10007 presence of this parameter can be ignored if the backend finds it
10008 cumbersome to follow the request.  If this is non-@code{nil} and not a
10009 number, do maximum fetches.
10010
10011 Here's an example HEAD:
10012
10013 @example
10014 221 1056 Article retrieved.
10015 Path: ifi.uio.no!sturles
10016 From: sturles@@ifi.uio.no (Sturle Sunde)
10017 Newsgroups: ifi.discussion
10018 Subject: Re: Something very droll
10019 Date: 27 Oct 1994 14:02:57 +0100
10020 Organization: Dept. of Informatics, University of Oslo, Norway
10021 Lines: 26
10022 Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
10023 References: <38jdmq$4qu@@visbur.ifi.uio.no>
10024 NNTP-Posting-Host: holmenkollen.ifi.uio.no
10025 .
10026 @end example
10027
10028 So a @code{headers} return value would imply that there's a number of
10029 these in the data buffer.
10030
10031 Here's a BNF definition of such a buffer:
10032
10033 @example
10034 headers        = *head
10035 head           = error / valid-head
10036 error-message  = [ "4" / "5" ] 2number " " <error message> eol
10037 valid-head     = valid-message *header "." eol
10038 valid-message  = "221 " <number> " Article retrieved." eol
10039 header         = <text> eol
10040 @end example
10041
10042 If the return value is @code{nov}, the data buffer should contain
10043 @dfn{network overview database} lines.  These are basically fields
10044 separated by tabs. 
10045
10046 @example
10047 nov-buffer = *nov-line
10048 nov-line   = 8*9 [ field <TAB> ] eol
10049 field      = <text except TAB>
10050 @end example
10051
10052 For a closer explanation what should be in those fields,
10053 @xref{Headers}. 
10054
10055
10056 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
10057
10058 @var{server} is here the virtual server name.  @var{definitions} is a
10059 list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
10060
10061 If the server can't be opened, no error should be signaled.  The backend
10062 may then choose to refuse further attempts at connecting to this
10063 server.  In fact, it should do so. 
10064
10065 If the server is opened already, this function should return a
10066 non-@code{nil} value.  There should be no data returned.
10067
10068
10069 @item (nnchoke-close-server &optional SERVER)
10070
10071 Close connection to @var{server} and free all resources connected
10072 to it. 
10073
10074 There should be no data returned.
10075
10076
10077 @item (nnchoke-request-close)
10078
10079 Close connection to all servers and free all resources that the backend
10080 have reserved.  All buffers that have been created by that backend
10081 should be killed.  (Not the @code{nntp-server-buffer}, though.)
10082
10083 There should be no data returned. 
10084
10085
10086 @item (nnchoke-server-opened &optional SERVER)
10087
10088 This function should return whether @var{server} is opened, and that the
10089 connection to it is still alive.  This function should under no
10090 circumstances attempt to reconnect to a server that is has lost
10091 connection to. 
10092
10093 There should be no data returned.
10094
10095
10096 @item (nnchoke-status-message &optional SERVER)
10097
10098 This function should return the last error message from @var{server}. 
10099
10100 There should be no data returned.
10101
10102
10103 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
10104
10105 The result data from this function should be the article specified by
10106 @var{article}.  This might either be a @code{Message-ID} or a number.
10107 It is optional whether to implement retrieval by @code{Message-ID}, but
10108 it would be nice if that were possible.
10109
10110 If @var{to-buffer} is non-@code{nil}, the result data should be returned
10111 in this buffer instead of the normal data buffer.  This is to make it
10112 possible to avoid copying large amounts of data from one buffer to
10113 another, and Gnus mainly request articles to be inserted directly into
10114 its article buffer.
10115
10116
10117 @item (nnchoke-open-group GROUP &optional SERVER)
10118
10119 Make @var{group} the current group.  
10120
10121 There should be no data returned by this function.
10122
10123
10124 @item (nnchoke-request-group GROUP &optional SERVER)
10125
10126 Get data on @var{group}.  This function also has the side effect of
10127 making @var{group} the current group. 
10128
10129 Here's an example of some result data and a definition of the same:
10130
10131 @example
10132 211 56 1000 1059 ifi.discussion
10133 @end example
10134
10135 The first number is the status, which should be @samp{211}.  Next is the
10136 total number of articles in the group, the lowest article number, the
10137 highest article number, and finally the group name.  Note that the total
10138 number of articles may be less than one might think while just
10139 considering the highest and lowest article numbers, but some articles
10140 may have been cancelled.  Gnus just discards the total-number, so
10141 whether one should take the bother to generate it properly (if that is a
10142 problem) is left as an excercise to the reader.
10143
10144 @example
10145 group-status = [ error / info ] eol
10146 error        = [ "4" / "5" ] 2<number> " " <Error message>
10147 info         = "211 " 3* [ <number> " " ] <string>
10148 @end example
10149
10150
10151 @item (nnchoke-close-group GROUP &optional SERVER)
10152
10153 Close @var{group} and free any resources connected to it.  This will be
10154 a no-op on most backends. 
10155
10156 There should be no data returned.
10157
10158
10159 @item (nnchoke-request-list &optional SERVER)
10160
10161 Return a list of all groups available on @var{server}.  And that means
10162 @emph{all}. 
10163
10164 Here's an example from a server that only carries two groups:
10165
10166 @example
10167 ifi.test 0000002200 0000002000 y
10168 ifi.discussion 3324 3300 n
10169 @end example
10170
10171 On each line we have a group name, then the highest article number in
10172 that group, the lowest article number, and finally a flag.
10173
10174 @example
10175 active-file = *active-line
10176 active-line = name " " <number> " " <number> " " flags eol
10177 name        = <string>
10178 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
10179 @end example
10180
10181 The flag says whether the group is read-only (@samp{n}), is moderated
10182 (@samp{m}), is dead (@samp{x}), is aliased to some other group
10183 (@samp{=other-group} or none of the above (@samp{y}). 
10184
10185
10186 @item (nnchoke-request-post &optional SERVER)
10187
10188 This function should post the current buffer.  It might return whether
10189 the posting was successful or not, but that's not required.  If, for
10190 instance, the posting is done asynchronously, it has generally not been
10191 completed by the time this function concludes.  In that case, this
10192 function should set up some kind of sentinel to beep the user loud and
10193 clear if the posting could not be completed.
10194
10195 There should be no result data from this function. 
10196
10197
10198 @item (nnchoke-request-post-buffer POST GROUP SUBJECT HEADER ARTICLE-BUFFER INFO FOLLOW-TO RESPECT-POSTER)
10199
10200 This function should return a buffer suitable for composing an article
10201 to be posted by @code{nnchoke-request-post}.  If @var{post} is
10202 non-@code{nil}, this is not a followup, but a totally new article.
10203 @var{group} is the name of the group to be posted to.  @var{subject} is
10204 the subject of the message.  @var{article-buffer} is the buffer being
10205 followed up, if that is the case.  @var{info} is the group info.
10206 @var{follow-to} is the group that one is supposed to re-direct the
10207 article ot.  If @var{respect-poster} is non-@code{nil}, the special
10208 @samp{"poster"} value of a @code{Followup-To} header is to be respected.
10209
10210 There should be no result data returned.
10211
10212 @end table
10213
10214 @node Optional Backend Functions
10215 @subsubsection Optional Backend Functions
10216
10217 @table @code
10218
10219 @item (nnchoke-retrieve-groups GROUPS &optional SERVER)
10220
10221 @var{groups} is a list of groups, and this function should request data
10222 on all those groups.  How it does it is of no concern to Gnus, but it
10223 should attempt to do this in a speedy fashion.
10224
10225 The return value of this function can be either @code{active} or
10226 @code{group}, which says what the format of the result data is.  The
10227 former is in the same format as the data from
10228 @code{nnchoke-request-list}, while the latter is a buffer full of lines
10229 in the same format as @code{nnchoke-request-group} gives.
10230
10231 @example
10232 group-buffer = *active-line / *group-status
10233 @end example
10234
10235
10236 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
10237
10238 A Gnus group info (@pxref{Group Info}) is handed to the backend for
10239 alterations.  This comes in handy if the backend really carries all the
10240 information (as is the case with virtual an imap groups).  This function
10241 may alter the info in any manner it sees fit, and should return the
10242 (altered) group info.  This function may alter the group info
10243 destructively, so no copying is needed before boogying. 
10244
10245 There should be no result data from this function.
10246
10247
10248 @item (nnchoke-request-scan &optional GROUP SERVER)
10249
10250 This function may be called at any time (by Gnus or anything else) to
10251 request that the backend check for incoming articles, in one way or
10252 another.  A mail backend will typically read the spool file or query the
10253 POP server when this function is invoked.  The @var{group} doesn't have
10254 to be heeded---if the backend decides that it is too much work just
10255 scanning for a single group, it may do a total scan of all groups.  It
10256 would be nice, however, to keep things local if that's practical.
10257
10258 There should be no result data from this function.
10259
10260
10261 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
10262
10263 This is a request to fetch articles asynchronously later.
10264 @var{articles} is an alist of @var{(article-number line-number)}.  One
10265 would generally expect that if one later fetches article number 4, for
10266 instance, some sort of asynchronous fetching of the articles after 4
10267 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
10268 alist) would be fetched asynchronouly, but that is left up to the
10269 backend.  Gnus doesn't care.
10270
10271 There should be no result data from this function.
10272  
10273
10274 @item (nnchoke-request-group-description GROUP &optional SERVER)
10275
10276 The result data from this function should be a description of
10277 @var{group}. 
10278
10279 @example
10280 description-line = name <TAB> description eol
10281 name             = <string>
10282 description      = <text>
10283 @end example
10284
10285 @item (nnchoke-request-list-newsgroups &optional SERVER)
10286
10287 The result data from this function should be the description of all
10288 groups available on the server.
10289
10290 @example
10291 description-buffer = *description-line
10292 @end example
10293
10294
10295 @item (nnchoke-request-newgroups DATE &optional SERVER)
10296
10297 The result data from this function should be all groups that were
10298 created after @samp{date}, which is in normal human-readable date
10299 format.  The data should be in the active buffer format.
10300
10301
10302 @item (nnchoke-request-create-groups GROUP &optional SERVER)
10303
10304 This function should create an empty group with name @var{group}.  
10305
10306 There should be no return data.
10307
10308
10309 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
10310
10311 This function should run the expiry process on all articles in the
10312 @var{articles} range (which is currently a simple list of article
10313 numbers.)  It is left up to the backend to decide how old articles
10314 should be before they are removed by this function.  If @var{force} is
10315 non-@code{nil}, all @var{articles} should be deleted, no matter how new
10316 they are. 
10317
10318 This function should return a list of articles that it did not/was not
10319 able to delete.
10320
10321 There should be no result data returned.
10322
10323
10324 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
10325 &optional LAST)
10326
10327 This function should move @var{article} (which is a number) from
10328 @var{group} by calling @var{accept-form}.  
10329
10330 This function should ready the article in question for moving by
10331 removing any header lines it has added to the article, and generally
10332 should "tidy up" the article.  Then it should @code{eval}
10333 @var{accept-form} in the buffer where the "tidy" article is.  This will
10334 do the actual copying.  If this @code{eval} returns a non-@code{nil}
10335 value, the article should be removed.
10336
10337 If @var{last} is @code{nil}, that means that there is a high likelihood
10338 that there will be more requests issued shortly, so that allows some
10339 optimizations. 
10340
10341 There should be no data returned. 
10342
10343
10344 @item (nnchoke-request-accept-article GROUP &optional LAST)
10345
10346 This function takes the current buffer and inserts it into @var{group}.
10347 If @var{last} in @code{nil}, that means that there will be more calls to
10348 this function in short order.
10349
10350 There should be no data returned.
10351
10352
10353 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
10354
10355 This function should remove @var{article} (which is a number) from
10356 @var{group} and insert @var{buffer} there instead.
10357
10358 There should be no data returned.
10359
10360
10361 @item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
10362
10363 This function should delete @var{group}.  If @var{force}, it should
10364 really delete all the articles in the group, and then delete the group
10365 itself.  (If there is such a thing as "the group itself".)
10366
10367 There should be no data returned.
10368
10369
10370 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
10371
10372 This function should rename @var{group} into @var{new-name}.  All
10373 articles that are in @var{group} should move to @var{new-name}.
10374
10375 There should be no data returned.
10376
10377
10378 @end table
10379
10380
10381 @node Score File Syntax
10382 @subsection Score File Syntax
10383
10384 Score files are meant to be easily parsable, but yet extremely
10385 mallable.   It was decided that something that had the same read syntax
10386 as an Emacs Lisp list would fit that spec.
10387
10388 Here's a typical score file:
10389
10390 @lisp
10391 (("summary"
10392   ("win95" -10000 nil s)
10393   ("Gnus"))
10394  ("from"
10395   ("Lars" -1000))
10396  (mark -100))
10397 @end lisp
10398
10399 BNF definition of a score file:
10400
10401 @example
10402 score-file       = "" / "(" *element ")"
10403 element          = rule / atom
10404 rule             = string-rule / number-rule / date-rule
10405 string-rule      = "(" quote string-header quote space *string-match ")"
10406 number-rule      = "(" quote number-header quote space *number-match ")"
10407 date-rule        = "(" quote date-header quote space *date-match ")"
10408 quote            = <ascii 34>
10409 string-header    = "subject" / "from" / "references" / "message-id" / 
10410                    "xref" / "body" / "head" / "all" / "followup"
10411 number-header    = "lines" / "chars"
10412 date-header      = "date"
10413 string-match     = "(" quote <string> quote [ "" / [ space score [ "" / 
10414                    space date [ "" / [ space string-match-t ] ] ] ] ] ")"
10415 score            = "nil" / <integer>
10416 date             = "nil" / <natural number>
10417 string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" / 
10418                    "r" / "regex" / "R" / "Regex" /
10419                    "e" / "exact" / "E" / "Exact" /
10420                    "f" / "fuzzy" / "F" / "Fuzzy"
10421 number-match     = "(" <integer> [ "" / [ space score [ "" / 
10422                    space date [ "" / [ space number-match-t ] ] ] ] ] ")"
10423 number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
10424 date-match       = "(" quote <string> quote [ "" / [ space score [ "" / 
10425                    space date [ "" / [ space date-match-t ] ] ] ] ")"
10426 date-match-t     = "nil" / "at" / "before" / "after"
10427 atom             = "(" [ required-atom / optional-atom ] ")"
10428 required-atom    = mark / expunge / mark-and-expunge / files /
10429                    exclude-files / read-only / touched
10430 optional-atom    = adapt / local / eval 
10431 mark             = "mark" space nil-or-number
10432 nil-or-number    = "nil" / <integer>
10433 expunge          = "expunge" space nil-or-number
10434 mark-and-expunge = "mark-and-expunge" space nil-or-number
10435 files            = "files" *[ space <string> ]
10436 exclude-files    = "exclude-files" *[ space <string> ]
10437 read-only        = "read-only" [ space "nil" / space "t" ]
10438 adapt            = "adapt" [ space "nil" / space "t" / space adapt-rule ]
10439 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
10440 local            = "local" *[ space "(" <string> space <form> ")" ]
10441 eval             = "eval" space <form>
10442 space            = *[ " " / <TAB> / <NEWLINE> ]
10443 @end example
10444
10445 Any unrecognized elements in a score file should be ignored, but not
10446 discarded.  
10447
10448 As you can see, white space is needed, but the type and amount of white
10449 space is irrelevant.  This means that formatting of the score file is
10450 left up to the programmer---if it's simpler to just spew it all out on
10451 one looong line, then that's ok.
10452
10453 The meaning of the various atoms are explained elsewhere in this
10454 manual. 
10455
10456
10457 @node Headers
10458 @subsection Headers
10459
10460 Gnus uses internally a format for storing article headers that
10461 corresponds to the @sc{nov} format in a mysterious fashion.  One could
10462 almost suspect that the author looked at the @sc{nov} specification and
10463 just shamelessly @emph{stole} the entire thing, and one would be right.
10464
10465 @dfn{Header} is a severly overloaded term.  "Header" is used in RFC1036
10466 to talk about lines in the head of an article (eg., @code{From}).  It is
10467 used by many people as a synonym for "head"---"the header and the
10468 body".  (That should be avoided, in my opinion.)  And Gnus uses a format
10469 interanally that it calls "header", which is what I'm talking about
10470 here.  This is a 9-element vector, basically, with each header (ouch)
10471 having one slot. 
10472
10473 These slots are, in order: @code{number}, @code{subject}, @code{from},
10474 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
10475 @code{xref}.  There are macros for accessing and setting these slots --
10476 they all have predicatable names beginning with @code{mail-header-} and
10477 @code{mail-header-set-}, respectively.  
10478
10479 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
10480 be put in there.
10481
10482
10483 @node Ranges
10484 @subsection Ranges
10485
10486 @sc{gnus} introduced a concept that I found so useful that I've started
10487 using it a lot and have elaborated on it greatly. 
10488
10489 The question is simple: If you have a large amount of objects that are
10490 identified by numbers (say, articles, to take a @emph{wild} example)
10491 that you want to callify as being "included", a normal sequence isn't
10492 very useful.  (A 200,000 length sequence is a bit long-winded.)
10493
10494 The solution is as simple as the question: You just collapse the
10495 sequence. 
10496
10497 @example
10498 (1 2 3 4 5 6 10 11 12)
10499 @end example
10500
10501 is transformed into
10502
10503 @example
10504 ((1 . 6) (10 . 12))
10505 @end example
10506
10507 To avoid having those nasty @samp{(13 . 13)} elements to denote a
10508 lonesome object, a @samp{13} is a valid element:
10509
10510 @example
10511 ((1 . 6) 7 (10 . 12))
10512 @end example
10513
10514 This means that comparing two ranges to find out whether they are equal
10515 is slightly tricky:
10516
10517 @example
10518 ((1 . 5) 7 8 (10 . 12))
10519 @end example
10520
10521 and
10522
10523 @example
10524 ((1 . 5) (7 . 8) (10 . 12))
10525 @end example
10526
10527 are equal.  In fact, any non-descending list is a range:
10528
10529 @example
10530 (1 2 3 4 5)
10531 @end example
10532
10533 is a perfectly valid range, although a pretty longwinded one.  This is
10534 also legal:
10535
10536 @example
10537 (1 . 5)
10538 @end example
10539
10540 and is equal to the previous range.
10541
10542 Here's a BNF definition of ranges.  Of course, one must remember the
10543 semantic requirement that the numbers are non-descending.  (Any number
10544 of repetition of the same number is allowed, but apt to disappear in
10545 range handling.)
10546
10547 @example
10548 range           = simple-range / normal-range
10549 simple-range    = "(" number " . " number ")"
10550 normal-range    = "(" start-contents ")"
10551 contents        = "" / simple-range *[ " " contents ] / 
10552                   number *[ " " contents ]
10553 @end example
10554
10555 Gnus currently uses ranges to keep track of read articles and article
10556 marks.  I plan on implementing a number of range operators in C if The
10557 Powers That Be are willing to let me.  (I haven't asked yet, because I
10558 need to do some more thinking on what operators I need to make life
10559 totally range-based without ever having to convert back to normal
10560 sequences.) 
10561
10562
10563 @node Group Info
10564 @subsection Group Info
10565
10566 Gnus stores all permanent info on groups in a @dfn{group info} list.
10567 This list is from three to six elements (or more) long and exhaustively
10568 describes the group.
10569
10570 Here are two example group infos; one is a very simple group while the
10571 second is a more complex one:
10572
10573 @example
10574 ("no.group" 5 (1 . 54324))
10575
10576 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
10577                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
10578                 (nnml "")
10579                 (auto-expire (to-address "ding@@ifi.uio.no")))
10580 @end example
10581
10582 The first element is the group name as Gnus knows the group; the second
10583 is the group level; the third is the read articles in range format; the
10584 fourth is a list of article marks lists; the fifth is the select method;
10585 and the sixth contains the group parameters.
10586
10587 Here's a BNF definition of the group info format:
10588
10589 @example
10590 info          = "(" group space level space read 
10591                 [ "" / [ space marks-list [ "" / [ space method [ "" /
10592                 space parameters ] ] ] ] ] ")" 
10593 group         = quote <string> quote
10594 level         = <integer in the range of 1 to inf>
10595 read          = range
10596 marks-lists   = nil / "(" *marks ")"
10597 marks         = "(" <string> range ")"
10598 method        = "(" <string> *elisp-forms ")"
10599 parameters    = "(" *elisp-forms ")"
10600 @end example
10601
10602 Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
10603 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
10604 in pseudo-BNF.
10605
10606
10607 @node Various File Formats
10608 @subsection Various File Formats
10609
10610 @menu
10611 * Active File Format::      Information on articles and groups available.
10612 * Newsgroups File Format::  Group descriptions.
10613 @end menu
10614
10615
10616 @node Active File Format
10617 @subsubsection Active File Format
10618
10619 The active file lists all groups that are available on the server in
10620 question.  It also lists the highest and lowest current article numbers
10621 in each group.  
10622
10623 Here's an exceprt from a typical active file:
10624
10625 @example
10626 soc.motss 296030 293865 y
10627 alt.binaries.pictures.fractals 3922 3913 n
10628 comp.sources.unix 1605 1593 m
10629 comp.binaries.ibm.pc 5097 5089 y
10630 no.general 1000 900 y
10631 @end example
10632
10633 Here's a pseudo-BNF definition of this file:
10634
10635 @example
10636 active      = *group-line
10637 group-line  = group space high-number space low-number space flag <NEWLINE>
10638 group       = <non-white-space string>
10639 space       = " "
10640 high-number = <non-negative integer>
10641 low-number  = <positive integer>
10642 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
10643 @end example
10644
10645
10646 @node Newsgroups File Format
10647 @subsubsection Newsgroups File Format
10648
10649 The newsgroups file lists groups along with their descriptions.  Not all
10650 groups on the server have to be listed,  and not all groups in the file
10651 have to exist on the server.  The file is meant purely as information to
10652 the user.
10653
10654 The format is quite simple; a group name, a tab, and the description.
10655 Here's the definition:
10656
10657 @example
10658 newsgroups    = *line
10659 line          = group tab description <NEWLINE>
10660 group         = <non-white-space string>
10661 tab           = <TAB>
10662 description   = <string>
10663 @end example
10664
10665
10666 @node Emacs for Heathens
10667 @section Emacs for Heathens
10668
10669 Believe it or not, but some people who use Gnus haven't really used
10670 Emacs much before they embarked on their journey on the Gnus Love Boat.
10671 If you are one of those unfortunates whom "@kbd{M-C-a}", "kill the
10672 region", and "set @code{gnus-flargblossen} to an alist where the key is
10673 a regexp that is used for matching on the group name" are magical
10674 phrases with little or no meaning, then this appendix is for you.  If
10675 you are already familiar with Emacs, just ignore this and go fondle your
10676 cat instead.
10677
10678 @menu
10679 * Keystrokes::      Entering text and executing commands.
10680 * Emacs Lisp::      The built-in Emacs programming language.
10681 @end menu
10682
10683
10684 @node Keystrokes
10685 @subsection Keystrokes
10686
10687 @itemize @bullet
10688 @item
10689 Q: What is an experienced Emacs user?
10690
10691 @item 
10692 A: A person who wishes that the terminal had pedals.
10693 @end itemize
10694
10695 Yes, when you use Emacs, you are apt to use the control key, the shift
10696 key and the meta key a lot.  This is very annoying to some people
10697 (notably @code{vi}le users), and the rest of us just love the hell out
10698 of it.  Just give up and submit.  Emacs really does stand for
10699 "Escape-Meta-Alt-Control-Shift", and not "Editin Macros", as you may
10700 have heard from other disreputable sources (like the Emacs author).
10701
10702 The shift key is normally located near your pinky fingers, and are
10703 normally used to get capital letters and stuff.  You probably use it all
10704 the time.  The control key is normally marked "CTRL" or something like
10705 that.  The meta key is, funnily enough, never marked as such on any
10706 keyboards.  The one I'm curretly at has a key that's marked "Alt", which
10707 is the meta key on this keyboard.  It's usually located somewhere to the
10708 left hand side of the keyboard, usually on the bottom row.
10709
10710 Now, us Emacs people doesn't say "press the meta-control-m key", because
10711 that's just too inconvenient.  We say "press the @kbd{M-C-m} key".
10712 @kbd{M-} is the prefix that means "meta" and "C-" is the prefix that
10713 means "control".  So "press @kbd{C-k}" means "press down the control
10714 key, and hold it down while you press @kbd{k}".  "Press @kbd{M-C-k}"
10715 means "press down and hold down the meta key and the control key and
10716 then press @kbd{k}".  Simple, ay?
10717
10718 This is somewhat complicated by the fact that not all keyboards have a
10719 meta key.  In that case you can use the "escape" key.  Then @kbd{M-k}
10720 means "press escape, release escape, press @kbd{k}".  That's much more
10721 work than if you have a meta key, so if that's the case, I respectfully
10722 suggest you get a real keyboard with a meta key.  You can't live without
10723 it.
10724
10725
10726
10727 @node Emacs Lisp
10728 @subsection Emacs Lisp
10729
10730 Emacs is the King of Editors because it's really a Lisp interpreter.
10731 Each and every key you tap runs some Emacs Lisp code snippet, and since
10732 Emacs Lisp is an interpreted language, that means that you can configure
10733 any key to run any random code.  You just, like, do it.  
10734
10735 Gnus is written in Emacs Lisp, and is run as a bunch of interpreted
10736 functions.  (These are byte-compiled for speed, but it's still
10737 interpreted.)  If you decide that you don't like the way Gnus does
10738 certain things, it's trivial to have it do something a different way.
10739 (Well, at least if you know how to write Lisp code.)  However, that's
10740 beyond the scope of this manual, so we are simply going to talk about
10741 some common constructs that you normally use in your @file{.emacs} file
10742 to customize Gnus.
10743
10744 If you want to set the variable @code{gnus-florgbnize} to four (4), you
10745 write the following:
10746
10747 @lisp
10748 (setq gnus-florgbnize 4)
10749 @end lisp
10750
10751 This function (really "special form") @code{setq} is the one that can
10752 set a variable to some value.  This is really all you need to know.  Now
10753 you can go and fill your @code{.emacs} file with lots of these to change
10754 how Gnus works.
10755
10756 If you have put that thing in your @code{.emacs} file, it will be read
10757 and @code{eval}ed (which is lispese for "run") the next time you start
10758 Emacs.  If you want to change the variable right away, simply say
10759 @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
10760 previous "form", which here is a simple @code{setq} statement.
10761
10762 Go ahead---just try it, if you're located at your Emacs.  After you
10763 @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which
10764 is the return value of the form you @code{eval}ed.
10765
10766 Some pitfalls:
10767
10768 If the manual says "set @code{gnus-read-active-file} to @code{some}",
10769 that means:
10770
10771 @lisp
10772 (setq gnus-read-active-file 'some)
10773 @end lisp
10774
10775 On the other hand, if the manual says "set @code{gnus-nntp-server} to
10776 @samp{"nntp.ifi.uio.no"}", that means:
10777
10778 @lisp
10779 (setq gnus-nntp-server "nntp.ifi.uio.no")
10780 @end lisp
10781
10782 So be careful not to mix up strings (the latter) with symbols (the
10783 former).  The manual is unambiguous, but it can be confusing.
10784
10785
10786 @include gnus-faq.texi
10787
10788 @node Index
10789 @chapter Index
10790 @printindex cp
10791
10792 @node Key Index
10793 @chapter Key Index
10794 @printindex ky
10795
10796 @summarycontents
10797 @contents
10798 @bye
10799
10800 \f
10801 @c Local Variables:
10802 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
10803 @c End:
10804
10805 \1f