*** empty log message ***
[gnus] / texi / gnus.texi
1 \input texinfo                  @c -*-texinfo-*-
2 @comment %**start of header (This is for running Texinfo on a region.)
3 @setfilename gnus.info
4 @settitle September Gnus Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @iftex
9 @finalout
10 @end iftex
11 @setchapternewpage odd
12 @c      @smallbook
13 @comment %**end of header (This is for running Texinfo on a region.)
14 @tex
15 \overfullrule=0pt
16 %\global\baselineskip 30pt      % For printing in double spaces
17 @end tex
18
19 @ifinfo
20
21 This file documents Gnus, the GNU Emacs newsreader.
22
23 Copyright (C) 1995 Free Software Foundation, Inc.
24
25 Permission is granted to make and distribute verbatim copies of
26 this manual provided the copyright notice and this permission notice
27 are preserved on all copies.
28
29 @ignore
30 Permission is granted to process this file through Tex and print the
31 results, provided the printed document carries copying permission
32 notice identical to this one except for the removal of this paragraph
33 (this paragraph not being relevant to the printed manual).
34
35 @end ignore
36 Permission is granted to copy and distribute modified versions of this
37 manual under the conditions for verbatim copying, provided also that the
38 entire resulting derived work is distributed under the terms of a
39 permission notice identical to this one.
40
41 Permission is granted to copy and distribute translations of this manual
42 into another language, under the above conditions for modified versions.
43 @end ifinfo
44
45 @iftex
46
47 @tex
48
49
50 @end tex
51
52 @titlepage
53 @title September Gnus Manual
54
55 @author by Lars Magne Ingebrigtsen
56 @page
57 @vskip 0pt plus 1filll
58 Copyright @copyright{} 1995 Free Software Foundation, Inc. 
59
60 Permission is granted to make and distribute verbatim copies of
61 this manual provided the copyright notice and this permission notice
62 are preserved on all copies.
63
64 Permission is granted to copy and distribute modified versions of this
65 manual under the conditions for verbatim copying, provided that the
66 entire resulting derived work is distributed under the terms of a
67 permission notice identical to this one.
68
69 Permission is granted to copy and distribute translations of this manual
70 into another language, under the above conditions for modified versions.
71
72 Cover art by Etienne Suvasa.
73 @end titlepage
74 @page
75
76 @end iftex
77
78 @node Top
79 @top The Gnus Newsreader
80
81 You can read news (and mail) from within Emacs by using Gnus.  The news
82 can be gotten by any nefarious means you can think of---@sc{nntp}, local
83 spool or your mbox file.  All at the same time, if you want to push your
84 luck.
85
86 @menu
87 * History::                 How Gnus got where it is today.
88 * Terminology::             We use really difficult, like, words here.
89 * Starting Up::             Finding news can be a pain.
90 * The Group Buffer::        Selecting, subscribing and killing groups.
91 * The Summary Buffer::      Reading, saving and posting articles.
92 * The Article Buffer::      Displaying and handling articles.
93 * The Server Buffer::       Making and editing virtual servers.
94 * Scoring::                 Assigning values to articles.
95 * Various::                 General purpose settings.
96 * Customization::           Tailoring Gnus to your needs.
97 * Troubleshooting::         What you might try if things do not work.
98 * The End::                 Farewell and goodbye.
99 * Appendices::              Technical stuff, Emacs intro, FAQ
100 * Index::                   Variable, function and concept index.
101 * Key Index::               Key Index.
102 @end menu
103
104 @node History
105 @chapter History
106
107 @cindex history
108 @sc{gnus} was written by Masanobu UMEDA.  When autumn crept up in '94,
109 Lars Magne Ingebrigtsen grew bored and decided to rewrite Gnus.
110
111 If you want to investigate the person responsible for this outrage, you
112 can point your (feh!) web browser to
113 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
114 distribution point for the new and spiffy versions of Gnus, also know as
115 The Site That Destroys Newsrcs And Drives People Mad.
116
117 During the first extended alpha period of develpment, the new Gnus was
118 called "(ding) Gnus".  @dfn{(ding)}, is, of course, short for @dfn{ding
119 is not Gnus}, which is a total and utter lie, but who cares? (Besides,
120 the "Gnus" in this abbreviation should probably be pronounced "news" as
121 UMEDA intended, which makes it a more appropriate name, don't you
122 think?)
123
124 In any case, after spending all that energy with coming up with a new
125 and spiffy name, we decided that the name was @emph{too} spiffy, so we
126 renamamed it back again to "Gnus".  But in mixed case.  "Gnus" vs.
127 "@sc{gnus}".  New vs. old.
128
129 Incidentally, the next Gnus generation will be called "September Gnus",
130 and won't be released until February.  Confused?  You will be.
131
132 @menu
133 * Why?::                What's the point of Gnus?
134 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
135 * Conformity::          Gnus tries to conform to all standards.
136 * Emacsen::             Gnus can be run on a few modern Emacsen.
137 * Contributors::        Oodles of people.  
138 * New Features::        Pointers to some of the new stuff in Gnus.
139 * Newest Features::     Features so new that they haven't been written yet.
140 @end menu
141
142 @node Why?
143 @section Why?
144
145 What's the point of Gnus?  
146
147 I want to provide a "rad", "happening", "way cool" and "hep" newsreader,
148 that lets you do anything you can think of.  That was my original
149 motivation, but while working on Gnus, it has become clear to me that
150 this generation of newsreaders really belong in the stone age.
151 Newsreaders haven't developed much since the infancy of the net.  If the
152 volume continues to rise with the current rate of increase, all current
153 newsreaders will be pretty much useless.  How do you deal with
154 newsgroups that have hundreds (or thousands) of new articles each day? 
155
156 Gnus offer no real solutions to these questions, but I would very much
157 like to see Gnus being used as a testing ground for new methods of
158 reading and fetching news.  Expanding on Umeda-san's wise decision to
159 separate the newsreader from the backends, Gnus now offers a simple
160 interface for anybody who wants to write new backends for fetching mail
161 and news from different sources.  I have added hooks for customizations
162 everywhere I can imagine useful.  By doing so, I'm inviting every one of
163 you to explore and invent new ways of reading news.
164
165 May Gnus never be complete. @kbd{C-u 100 M-x hail-emacs}. 
166
167 @node Compatibility
168 @section Compatibility
169
170 @cindex compatibility
171 Gnus was designed to be fully compatible with @sc{gnus}.  Almost all key
172 bindings have been kept.  More key bindings have been added, of course,
173 but only in one or two obscure cases have old bindings been changed.
174
175 Our motto is:
176 @quotation
177 @cartouche
178 @center In a cloud bones of steel.
179 @end cartouche
180 @end quotation
181
182 All commands have kept their names.  Some internal functions have changed
183 their names.
184
185 The @code{gnus-uu} package has changed drastically. @xref{Decoding
186 Articles}. 
187
188 One major compatibility question is the presence of several summary
189 buffers.  All variables that are relevant while reading a group are
190 buffer-local to the summary buffer they belong in.  Although most
191 important variables have their values copied into their global
192 counterparts whenever a command is executed in the summary buffer, this
193 change might lead to incorrect values being used unless you are careful.
194
195 All code that relies on knowledge of @sc{gnus} internals will probably
196 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
197 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
198 maintains a hash table that points to the entries in this assoc (which
199 speeds up many functions), and changing the assoc directly will lead to
200 peculiar results.
201
202 @cindex hilit19
203 @cindex highlighting
204 Old hilit19 code does not work at all.  In fact, you should probably
205 remove all hilit code from all Gnus hooks
206 (@code{gnus-group-prepare-hook}, @code{gnus-summary-prepare-hook} and
207 @code{gnus-summary-article-hook}).  (Well, at the very least the first
208 two.)  Gnus provides various integrated functions for highlighting.
209 These are faster and more accurate.  To make life easier for everybody,
210 Gnus will by default remove all hilit calls from all hilit hooks.
211 Uncleanliness!  Away!
212
213 Packages like @code{expire-kill} will no longer work.  As a matter of
214 fact, you should probably remove all old @sc{gnus} packages (and other
215 code) when you start using Gnus.  More likely than not, Gnus already
216 does what you have written code to make @sc{gnus} do.  (Snicker.)
217
218 Even though old methods of doing things are still supported, only the
219 new methods are documented in this manual.  If you detect a new method of
220 doing something while reading this manual, that does not mean you have
221 to stop doing it the old way.
222
223 Gnus understands all @sc{gnus} startup files.
224
225 @kindex M-x gnus-bug
226 Overall, a casual user who hasn't written much code that depends on
227 @sc{gnus} internals should suffer no problems.  If problems occur,
228 please let me know (@kbd{M-x gnus-bug}).
229
230
231 @node Conformity
232 @section Conformity
233
234 No rebels without a clue here, ma'am.  We conform to all standards known
235 to (wo)man.  Except for those standards and/or conventions we disagree
236 with, of course.
237
238 @table @strong
239
240 @item RFC 822
241 There are no known breaches of this standard.
242
243 @item RFC 1036
244 There are no known breaches of this standard, either.
245
246 @item Usenet Seal of Approval
247 Gnus hasn't been formally through the Seal process, but I have read
248 through the Seal text and I think Gnus would pass.
249
250 @item Son-of-RFC 1036
251 We do have some breaches to this one.
252
253 @table @emph
254
255 @item MIME
256 Gnus does no MIME handling, and this standard-to-be seems to think that
257 MIME is the bees' knees, so we have major breakage here.
258
259 @item X-Newsreader
260 This is considered to be a "vanity header", while I consider it to be
261 consumer information.  After seeing so many badly formatted articles
262 coming from @code{tin} and @code{Netscape} I know not to use either of
263 those for posting articles.  I would not have known that if it wasn't
264 for the @code{X-Newsreader} header.
265
266 @item References
267 Gnus breaks lines if this header is long.  I infer from RFC1036 that
268 being conservative in what you output is not creating 5000-character
269 lines, so it seems like a good idea to me.  However, this standard-to-be
270 says that whitespace in the @code{References} header is to be preserved,
271 so...  It doesn't matter one way or the other to Gnus, so if somebody
272 tells me what The Way is, I'll change it.  Or not.
273 @end table
274
275 @end table
276
277 If you ever see Gnus act noncompliantly to the texts mentioned above,
278 don't hesitate to drop a note to Gnus Towers and let us know.
279
280
281 @node Emacsen
282 @section Emacsen
283 @cindex Emacsen
284 @cindex XEmacs
285 @cindex Mule
286 @cindex Emacs
287
288 Gnus should work on :
289
290 @itemize @bullet 
291
292 @item
293 Emacs 19.30 and up.
294
295 @item
296 XEmacs 19.13 and up.
297
298 @item 
299 Mule versions based on Emacs 19.30 and up.
300
301 @end itemize
302
303 Gnus will absolutely not work on any Emacsen older than that.  Not
304 reliably, at least. 
305
306 There are some vague differences in what Gnus does, though:
307
308 @itemize @bullet
309
310 @item
311 The mouse-face on Gnus lines under Emacs and Mule is delimited to
312 certain parts of the lines while they cover the entire line under
313 XEmacs. 
314
315 @item 
316 The same with current-article marking---XEmacs puts an underline under
317 the entire summary line while Emacs and Mule are nicer and kinder.
318
319 @item
320 XEmacs features more graphics---a logo and a toolbar.
321
322 @item
323 Citation highlighting us better under Emacs and Mule than under XEmacs.
324
325 @item
326 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
327 confusing. 
328
329 @end itemize
330
331
332 @node Contributors
333 @section Contributors
334 @cindex contributors
335
336 The new Gnus version couldn't have been done without the help of all the
337 people on the (ding) mailing list.  Every day for months I have gotten
338 tens of nice bug reports from them, filling me with joy, every single
339 one of them.  Smooches.  The people on the list have been tried beyond
340 endurance, what with my "oh, that's a neat idea <type type>, yup, I'll
341 release it right away <ship off> no wait, that doesn't work at all <type
342 type>, yup, I'll ship that one off right away <ship off> no, wait, that
343 absolutely does not work" policy for releases.  Micro$oft---bah.
344 Amateurs.  I'm @emph{much} worse.  (Or is that "worser"? "much worser"?
345 "worsest"?)
346
347 I would like to take this opportunity to thank the Academy for...  oops,
348 wrong show.
349
350 @itemize @bullet
351 @item
352 Of course, GNUS was written by Masanobu UMEDA.
353 @item 
354 Many excellent functions, especially dealing with scoring and
355 highlighting (as well as the @sc{soup} support) was written
356 by Per Abrahamsen.
357 @item
358 Innumerable bug fixes were written by Sudish Joseph.
359 @item 
360 @code{gnus-topic} was written by Ilja Weis.
361 @item 
362 Lots and lots of bugs were found and fixed by Steven L. Baur. 
363 @item
364 The refcard was written by Vladimir Alexiev.
365 @item
366 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
367 @item 
368 @code{nnfolder} has been much enhanced by Scott Byer.
369 @item
370 The orphan scoring was written by Peter Mutsaers.
371 @item 
372 GNU XEmacs support has been added by Fabrice Popineau. 
373 @item 
374 POP mail support was written by Ken Raeburn.
375 @item 
376 Various bits and pieces, especially dealing with .newsrc files, were
377 suggested and added by Hallvard B Furuseth.
378 @item 
379 Brian Edmonds has written @code{gnus-bbdb}.
380 @item 
381 Ricardo Nassif did the proof-reading.
382 @item
383 Kevin Davidson came up with the name @dfn{ding}, so blame him.
384 @item 
385 Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel
386 Quinlan, Frank D. Cringle, Geoffrey T. Dairiki and Andrew Eskilsson have
387 all contributed code and suggestions.
388 @end itemize
389
390
391 @node New Features
392 @section New Features
393 @cindex new features
394
395 @itemize @bullet
396
397 @item
398 The look of all buffers can be changed by setting format-like variables
399 (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}). 
400  
401 @item 
402 Local spool and several @sc{nntp} servers can be used at once
403 (@pxref{Foreign Groups}).  
404
405 @item 
406 You can combine groups into virtual groups (@pxref{nnvirtual}). 
407
408 @item 
409 You can read a number of different mail formats (@pxref{Reading Mail}).
410 All the mail backends implement a convenient mail expiry scheme
411 (@pxref{Expiring Old Mail Articles}). 
412
413 @item
414 Gnus can use various strategies for gathering threads that have lost
415 their roots (thereby gathering loose sub-threads into one thread) or it
416 can go back and retrieve enough headers to build a complete thread
417 (@pxref{Customizing Threading}).
418
419 @item 
420 Killed groups can be displayed in the group buffer, and you can read
421 them as well.
422
423 @item 
424 Gnus can do partial group updates---you do not have to retrieve the
425 entire active file just to check for new articles in a few groups
426 (@pxref{The Active File}).
427
428 @item 
429 Gnus implements a sliding scale of subscribedness to groups
430 (@pxref{Group Levels}).
431
432 @item 
433 You can score articles according to any number of criteria
434 (@pxref{Scoring}).  You can even get Gnus to find out how to score
435 articles for you (@pxref{Adaptive Scoring}).
436
437 @item 
438 Gnus maintains a dribble buffer that is auto-saved the normal Emacs
439 manner, so it should be difficult to lose much data on what you have
440 read if your machine should go down (@pxref{Auto Save}). 
441
442 @item 
443 Gnus now has its own startup file to avoid cluttering up the
444 @file{.emacs} file.
445
446 @item 
447 You can set the process mark on both groups and articles and perform
448 operations on all the marked items (@pxref{Process/Prefix}).
449
450 @item 
451 You can grep through a subset of groups and create a group from the
452 results (@pxref{nnkiboze}). 
453
454 @item 
455 You can list subsets of groups according to, well, anything
456 (@pxref{Listing Groups}). 
457
458 @item 
459 You can browse foreign servers and subscribe to groups from those
460 servers (@pxref{Browse Foreign Server}). 
461
462 @item 
463 Gnus can fetch articles asynchronously on a second connection to the
464 server (@pxref{Asynchronous Fetching}).
465
466 @item 
467 You can cache articles locally (@pxref{Article Caching}). 
468
469 @item 
470 The uudecode functions have been expanded and generalized
471 (@pxref{Decoding Articles}). 
472
473 @item
474 You can still post uuencoded articles, which was a little-known feature
475 of @sc{gnus}' past (@pxref{Uuencoding & Posting}).
476
477 @item
478 Fetching parents (and other articles) now actually works without
479 glitches (@pxref{Finding the Parent}). 
480
481 @item
482 Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
483
484 @item
485 Digests (and other files) can be used as the basis for groups
486 (@pxref{nndoc}).
487
488 @item 
489 Articles can be highlighted and customized (@pxref{Customizing
490 Articles}). 
491
492 @item 
493 URLs and other external references can be buttonized (@pxref{Article
494 Buttons}). 
495
496 @item
497 All Gnus buffers can be customized in a difficult fashion
498 (@pxref{Windows Configuration}). 
499
500 @item
501 You can click on buttons instead of using the keyboard
502 (@pxref{Buttons}). 
503
504 @item 
505 Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}). 
506
507 @end itemize
508
509 This is, of course, just a @emph{short} overview of the @emph{most}
510 important new features.  No, really.  There are tons more.  Yes, we have
511 feeping creaturism in full effect, but nothing too gratuitous, I would
512 hope. 
513
514
515 @node Newest Features
516 @section Newest Features
517 @cindex todo
518
519 Also known as the @dfn{todo list}.  Sure to be implemented before the
520 next millennium. 
521
522 Be afraid.  Be very afraid.
523
524 @itemize @bullet
525 @item
526 Native @sc{mime} support is something that should be done.  
527 @item
528 A better and simpler method for specifying mail composing methods. 
529 @item
530 Allow posting through mail-to-news gateways.
531 @item
532 Really do unbinhexing.
533 @end itemize
534
535 And much, much, much more.  There is more to come than has already been
536 implemented.  (But that's always true, isn't it?)
537
538 @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
539 up-to-the-second todo list is located, so if you're really curious, you
540 could point your Web browser over that-a-way.
541
542
543 @node Terminology
544 @chapter Terminology
545
546 @cindex terminology
547 @table @dfn
548
549 @item news
550 @cindex news
551 This is what you are supposed to use this thing for---reading news.
552 News is generally fetched from a nearby @sc{nntp} server, and is
553 generally publicly available to everybody.  If you post news, the entire
554 world is likely to read just what you have written, and they'll all
555 snigger mischievously.  Behind your back.
556
557 @item mail
558 @cindex mail
559 Everything that's delivered to you personally is mail.  Some news/mail
560 readers (like Gnus) blur the distinction between mail and news, but
561 there is a difference.  Mail is private.  News is public.  Mailing is
562 not posting, and replying is not following up.
563
564 @item reply
565 Send a mail to the person who has written what you are reading.
566
567 @item follow up
568 Post an article to the current newsgroup responding to the article you
569 are reading.
570
571 @item backend
572 Gnus gets fed articles from a number of backends, both news and mail
573 backends.  Gnus does not handle the underlying media, so to speak---this
574 is all done by the backends.
575
576 @item native
577 Gnus will always use one method (and backend) as the @dfn{native}, or
578 default, way of getting news.
579
580 @item foreign
581 You can also have any number of foreign groups at the same time.  These
582 are groups that use different backends for getting news.
583
584 @item head
585 @cindex head
586 The top part of an article, where administration information (etc.) is
587 put. 
588
589 @item body
590 @cindex body
591 The rest of an article.  Everything that is not in the head is in the
592 body. 
593
594 @item header
595 @cindex header
596 A line from the head of an article. 
597
598 @item headers
599 @cindex headers
600 A collection of such lines, or a collection of heads.  Or even a
601 collection of @sc{nov} lines.
602
603 @item @sc{nov}
604 @cindex nov
605 When Gnus enters a group, it asks the backend for the headers for all
606 the unread articles in the group.  Most servers support the News OverView
607 format, which is much smaller and much faster to read than the normal
608 HEAD format. 
609
610 @item level
611 @cindex levels
612 Each group is subscribed at some @dfn{level} or other (1-9).  The ones
613 that have a lower level are "more" subscribed than the groups with a
614 higher level.  In fact, groups on levels 1-5 are considered
615 @dfn{subscribed}; 6-7 are @dfn{unsubscribed}; 8 are @dfn{zombies}; and 9
616 are @dfn{killed}.  Commands for listing groups and scanning for new
617 articles will all use the numeric prefix as @dfn{working level}.
618
619 @item killed groups
620 @cindex killed groups
621 No information on killed groups is stored or updated, which makes killed
622 groups much easier to handle than subscribed groups.
623
624 @item zombie groups
625 @cindex zombie groups
626 Just like killed groups, only slightly less dead.
627
628 @item active file
629 @cindex active file
630 The news server has to keep track of what articles it carries, and what
631 groups exist.  All this information in stored in the active file, which
632 is rather large, as you might surmise.
633
634 @item bogus groups
635 @cindex bogus groups
636 A group that exists in the @file{.newsrc} file, but isn't known to the
637 server (i. e.,  it isn't in the active file), is a @emph{bogus group}.
638 This means that the group probably doesn't exist (any more).
639 @end table
640
641
642 @node Starting Up
643 @chapter Starting Gnus
644 @cindex starting up
645
646 @kindex M-x gnus
647 @findex gnus
648 If your system administrator has set things up properly, starting Gnus
649 and reading news is extremely easy---you just type @kbd{M-x gnus}.
650
651 @findex gnus-other-frame
652 @kindex M-x gnus-other-frame
653 If you want to start Gnus in a different frame, you can use the command
654 @kbd{M-x gnus-other-frame} instead.
655
656 If things do not go smoothly at startup, you have to twiddle some
657 variables. 
658
659 @menu
660 * Finding the News::    Choosing a method for getting news.
661 * The First Time::      What does Gnus do the first time you start it?
662 * The Server is Down::  How can I read my mail then?
663 * Slave Gnusii::        You can have more than one Gnus active at a time.
664 * Fetching a Group::    Starting Gnus just to read a group.
665 * New Groups::          What is Gnus supposed to do with new groups?
666 * Startup Files::       Those pesky startup files---@file{.newsrc}.
667 * Auto Save::           Recovering from a crash.
668 * The Active File::     Reading the active file over a slow line Takes Time.
669 * Startup Variables::   Other variables you might change.
670 @end menu
671
672 @node Finding the News
673 @section Finding the News
674
675 @vindex gnus-select-method
676 The @code{gnus-select-method} variable controls how Gnus finds news.
677 This variable should be a list where the first element says @dfn{how}
678 and the second element says @dfn{where}.  This method is your native
679 method.  All groups that are not fetched with this method are foreign
680 groups.
681
682 For instance, if you want to get your daily dosage of news from the
683 @samp{news.somewhere.edu} @sc{nntp} server, you'd say:
684
685 @lisp
686 (setq gnus-select-method '(nntp "news.somewhere.edu"))
687 @end lisp
688
689 If you want to read directly from the local spool, say:
690
691 @lisp
692 (setq gnus-select-method '(nnspool ""))
693 @end lisp
694
695 If you can use a local spool, you probably should, as it will almost
696 certainly be much faster.
697
698 @vindex gnus-nntpserver-file
699 @cindex NNTPSERVER
700 @cindex @sc{nntp} server
701 If this variable is not set, Gnus will take a look at the
702 @code{NNTPSERVER} environment variable.  If that variable isn't set,
703 Gnus will see whether @code{gnus-nntpserver-file} (default
704 @file{/etc/nntpserver}) has any opinions in the matter.  It that fails
705 as well, Gnus will will try to use the machine that is running Emacs as
706 an @sc{nntp} server.  That's a longshot, though.
707
708 @vindex gnus-nntp-server
709 If @code{gnus-nntp-server} is set, this variable will override
710 @code{gnus-select-method}.  You should therefore set
711 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
712
713 @vindex gnus-secondary-servers
714 You can also make Gnus prompt you interactively for the name of an
715 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
716 (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
717 in the @code{gnus-secondary-servers} list (if any).  You can also just
718 type in the name of any server you feel like visiting.
719
720 However, if you use one @sc{nntp} server regularly, and are just
721 interested in a couple of groups from a different server, you would be
722 better served by using the @code{gnus-group-browse-foreign-server}
723 command from the group buffer.  It will let you have a look at what
724 groups are available, and you can subscribe to any of the groups you
725 want to.  This also makes @file{.newsrc} maintenance much tidier.
726 @xref{Foreign Groups}.
727
728 @vindex gnus-secondary-select-methods
729 A slightly different approach to foreign groups is to set the
730 @code{gnus-secondary-select-methods} variable.  The select methods
731 listed in this variable are in many ways just as native as the
732 @code{gnus-select-method} server.  They will also be queried for active
733 files during startup (if that's required), and new newsgroups that
734 appear on these servers will be subscribed (or not) just as native
735 groups are.
736
737 For instance, if you use the @code{nnmbox} backend to read you mail, you
738 would typically set this variable to
739
740 @lisp
741 (setq gnus-secondary-select-methods '((nnmbox "")))
742 @end lisp
743
744 @node The First Time
745 @section The First Time
746 @cindex first time usage
747
748 If no startup files exist, Gnus will try to determine what groups should
749 be subscribed by default.
750
751 @vindex gnus-default-subscribed-newsgroups
752 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
753 will subscribe you to just those groups in that list, leaving the rest
754 killed.  Your system administrator should have set this variable to
755 something useful.
756
757 Since she hasn't, Gnus will just subscribe you to a few randomly picked
758 groups (i.e., @samp{*.newusers}).  (@dfn{Random} is here defined as
759 "whatever Lars thinks you should read".)
760
761 You'll also be subscribed to the Gnus documentation group, which should
762 help you with most common problems.  
763
764 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
765 use the normal functions for handling new groups, and not do anything
766 special.
767
768 @node The Server is Down
769 @section The Server is Down
770 @cindex server errors
771
772 If the default server is down, Gnus will understandably have some
773 problems starting.  However, if you have some mail groups in addition to
774 the news groups, you may want to start Gnus anyway.
775
776 Gnus, being the trusting sort of program, will ask whether to proceed
777 without a native select method if that server can't be contacted.  This
778 will happen whether the server doesn't actually exist (i.e., you have
779 given the wrong address) or the server has just momentarily taken ill
780 for some reason or other.  
781
782 If Gnus says "nntp server on <your server> can't be opened.  Continue?",
783 you do not want to continue unless you have some foreign groups that you
784 want to read.  Even if you don't, Gnus will let you continue, but you'll
785 find it difficult to actually do anything in the group buffer.  But,
786 hey, that's your problem.  Blllrph!
787
788 @findex gnus-no-server
789 If you know that the server is definitely down, or you just want to read
790 your mail without bothering with the server at all, you can use the
791 @code{gnus-no-server} command to start Gnus.  That might come in handy
792 if you're in a hurry as well.
793
794
795 @node Slave Gnusii
796 @section Slave Gnusiï
797 @cindex slave
798
799 You might want to run more than one Emacs with more than one Gnus at the
800 same time.  If you are using different @file{.newsrc} files (eg., if you
801 are using the two different Gnusiï to read from two different servers),
802 that is no problem whatsoever.  You just do it.
803
804 The problem appears when you want to run two Gnusiï that use the same
805 @code{.newsrc} file.
806
807 To work around that problem some, we here at the Think-Tank at the Gnus
808 Towers have come up with a new concept: @dfn{Masters} and
809 @dfn{servants}.  (We have applied for a patent on this concept, and have
810 taken out a copyright on those words.  If you wish to use those words in
811 conjunction with each other, you have to send $1 per usage instance to
812 me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
813 Applications}) will be much more expensive, of course.)
814
815 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
816 however you do it).  Each subsequent slave Gnusiï should be started with
817 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
818 files, but some slave files that contains information only on what
819 groups have been read in the slave session.  When a master Gnus starts,
820 it will read (and delete) these slave files, incorporating all
821 information from all of them.  (The slave files will be read in the
822 sequence they were created, so the latest changes will have precedence.)
823
824 Information from the slave files has, of course, presedence over the
825 information in the normal (i. e., master) @code{.newsrc} file.
826
827
828 @node Fetching a Group
829 @section Fetching a Group
830
831 @findex gnus-fetch-group
832 It it sometime convenient to be able to just say "I want to read this
833 group and I don't care whether Gnus has been started or not".  This is
834 perhaps more useful for people who write code than for users, but the
835 command @code{gnus-fetch-group} provides this functionality in any
836 case.  It takes the group name as a paramenter.
837
838
839 @node New Groups
840 @section New Groups
841 @cindex new groups
842
843 @vindex gnus-subscribe-newsgroup-method
844 What Gnus does when it encounters a new group is determined by the
845 @code{gnus-subscribe-newsgroup-method} variable.
846
847 This variable should contain a function.  Some handy pre-fab values
848 are:
849
850 @table @code
851
852 @item gnus-subscribe-randomly
853 @vindex gnus-subscribe-randomly
854 Subscribe all new groups randomly.
855
856 @item gnus-subscribe-alphabetically
857 @vindex gnus-subscribe-alphabetically
858 Subscribe all new groups alphabetically.
859
860 @item gnus-subscribe-hierarchically
861 @vindex gnus-subscribe-hierarchically
862 Subscribe all new groups hierarchically.
863
864 @item gnus-subscribe-interactively
865 @vindex gnus-subscribe-interactively
866 Subscribe new groups interactively.  This means that Gnus will ask
867 you about @strong{all} new groups.
868
869 @item gnus-subscribe-killed
870 @vindex gnus-subscribe-killed
871 Kill all new groups.
872
873 @item gnus-subscribe-zombies
874 @vindex gnus-subscribe-zombies
875 Make all new groups zombies.  You can browse the zombies later (with
876 @kbd{A z}) and either kill them all off properly, or subscribe to them.
877 This is the default.
878 @end table
879
880 @vindex gnus-subscribe-hierarchical-interactive
881 A closely related variable is
882 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
883 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
884 hierarchical fashion whether to subscribe to new groups or not.  Gnus
885 will ask you for each sub-hierarchy whether you want to descend the
886 hierarchy or not.
887
888 One common way to control which new newsgroups should be subscribed or
889 ignored is to put an @dfn{options} line at the start of the
890 @file{.newsrc} file.  Here's an example:
891
892 @example
893 options -n !alt.all !rec.all sci.all
894 @end example
895
896 @vindex gnus-subscribe-options-newsgroup-method
897 This line obviously belongs to a serious-minded intellectual scientific
898 person (or she may just be plain old boring), because it says that all
899 groups that have names beginning with @samp{alt} and @samp{rec} should
900 be ignored, and all groups with names beginning with @samp{sci} should
901 be subscribed.  Gnus will not use the normal subscription method for
902 subscribing these groups.
903 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
904 variable defaults to @code{gnus-subscribe-alphabetically}.
905
906 @vindex gnus-options-not-subscribe
907 @vindex gnus-options-subscribe
908 If you don't want to mess with your @file{.newsrc} file, you can just
909 set the two variables @code{gnus-options-subscribe} and
910 @code{gnus-options-not-subscribe}.  These two variables do exactly the
911 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
912 the the new group matches the first, it will be unconditionally
913 subscribed, and if it matches the latter, it will be ignored.
914
915 @vindex gnus-auto-subscribed-groups
916 Yet another variable that meddles here is
917 @code{gnus-auto-subscribed-groups}.  It works exactly like
918 @code{gnus-options-subscribe}, and is therefore really superfluos, but I
919 thought it would be nice to have two of these.  This variable is more
920 meant for setting some ground rules, while the other variable is used
921 more for user fiddling.  By default this variable makes all new groups
922 that come from mail backends (@code{nnml}, @code{nnbabyl},
923 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you
924 don't like that, just set this variable to @code{nil}.
925
926 @vindex gnus-check-new-newsgroups
927 If you are satisfied that you really never want to see any new groups,
928 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
929 also save you some time at startup.  Even if this variable is
930 @code{nil}, you can always subscribe to the new groups just by pressing
931 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
932 is @code{t} by default.
933
934 Gnus normally determines whether a group is new or not by comparing the
935 list of groups from the active file(s) with the lists of subscribed and
936 dead groups.  This isn't a particularly fast method.  If
937 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
938 server for new groups since the last time.  This is both faster &
939 cheaper.  This also means that you can get rid of the list of killed
940 groups altogether, so you may set @code{gnus-save-killed-list} to
941 @code{nil}, which will save time both at startup, at exit, and all over.
942 Saves disk space, too.  Why isn't this the default, then?
943 Unfortunately, not all servers support this function. 
944
945 I bet I know what you're thinking now:  How do I find out whether my
946 server supports @code{ask-server}?  No?  Good, because I don't have a
947 fail-safe answer.  I would suggest just setting this variable to
948 @code{ask-server} and see whether any new groups appear after a few
949 days.  If they do, then it works.  If they don't, then it doesn't work.
950 I could write a function to make Gnus guess whether the server supports
951 @code{ask-server}, but it would just be a guess.  So I won't.  You could
952 @code{telnet} to the server and say @samp{HELP} and see whether it lists
953 @samp{NEWGROUPS} among the commands it understands.  If it does, then it
954 might work.  (But there are servers that lists @samp{NEWGROUPS} without
955 supporting the function properly.)
956
957 This variable can also be a list of select methods.  If so, Gnus will
958 issue an @code{ask-server} command to each of the select methods, and
959 subscribe them (or not) using the normal methods.  This might be handy
960 if you are monitoring a few servers for new groups.  A side effect is
961 that startup will take much longer, so you can meditate while waiting.
962 Use the mantra "dingnusdingnusdingnus" to achieve permanent happiness.
963
964 @node Startup Files
965 @section Startup Files
966 @cindex startup files
967 @cindex .newsrc
968
969 Now, you all know about the @file{.newsrc} file.  All subscription
970 information is traditionally stored in this file.
971
972 Things got a bit more complicated with @sc{gnus}.  In addition to
973 keeping the @file{.newsrc} file updated, it also used a file called
974 @file{.newsrc.el} for storing all the information that didn't fit into
975 the @file{.newsrc} file.  (Actually, it duplicated everything in the
976 @file{.newsrc} file.)  @sc{gnus} would read whichever one of these files
977 that were the most recently saved, which enabled people to swap between
978 @sc{gnus} and other newsreaders.
979
980 That was kinda silly, so Gnus went one better: In addition to the
981 @file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
982 @file{.newsrc.eld}.  It will read whichever of these files that are most
983 recent, but it will never write a @file{.newsrc.el} file.
984
985 @vindex gnus-save-newsrc-file
986 You can also turn off writing the @file{.newsrc} file by setting
987 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
988 the file and save some space, as well as making exit from Gnus faster.
989 However, this will make it impossible to use other newsreaders than
990 Gnus.  But hey, who would want to, right?
991
992 @vindex gnus-save-killed-list
993 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
994 list of killed groups to the startup file.  This will save both time
995 (when starting and quitting) and space (on disk).  It will also means
996 that Gnus has no record of what groups are new or old, so the automatic
997 new groups subscription methods become meaningless.  You should always
998 set @code{gnus-check-new-newsgroups} to @code{nil} or @code{ask-server}
999 if you set this variable to @code{nil} (@pxref{New Groups}).
1000
1001 @vindex gnus-startup-file
1002 The @code{gnus-startup-file} variable says where the startup files are.
1003 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1004 file being whatever that one is with a @samp{.eld} appended.
1005
1006 @vindex gnus-save-newsrc-hook
1007 @vindex gnus-save-quick-newsrc-hook
1008 @vindex gnus-save-standard-newsrc-hook
1009 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1010 files, while @code{gnus-save-quick-newsrc-hook} is called just before
1011 saving the @file{.newsrc.eld} file, and
1012 @code{gnus-save-standard-newsrc-hook} is called just before saving the
1013 @file{.newsrc} file.  The latter two are commonly used to turn version
1014 control on or off.  Version control is off by default when saving.
1015
1016 @node Auto Save
1017 @section Auto Save
1018 @cindex dribble file
1019 @cindex auto-save
1020
1021 Whenever you do something that changes the Gnus data (reading articles,
1022 catching up, killing/subscribing groups), the change is added to a
1023 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
1024 Emacs way.  If your Emacs should crash before you have saved the
1025 @file{.newsrc} files, all changes you have made can be recovered from
1026 this file.
1027
1028 If Gnus detects this file at startup, it will ask the user whether to
1029 read it.  The auto save file is deleted whenever the real startup file is
1030 saved.
1031
1032 @vindex gnus-use-dribble-file
1033 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1034 maintain a dribble buffer.  The default is @code{t}.
1035
1036 @vindex gnus-dribble-directory
1037 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
1038 this variable is @code{nil}, which it is by default, Gnus will dribble
1039 into the same directory as the @file{.newsrc} file is located.  (This is
1040 normally the user's home directory.)
1041
1042 @node The Active File
1043 @section The Active File
1044 @cindex active file
1045 @cindex ignored groups
1046
1047 When Gnus starts, or indeed whenever it tries to determine whether new
1048 articles have arrived, it reads the active file.  This is a very large
1049 file that lists all the active groups and articles on the @sc{nntp}
1050 server.
1051
1052 @vindex gnus-ignored-newsgroups
1053 Before examining the active file, Gnus deletes all lines that match the
1054 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
1055 any groups with bogus names, but you can use this variable to make Gnus
1056 ignore hierarchies you aren't ever interested in.  
1057 @c This variable is
1058 @c @code{nil} by default, and will slow down active file handling somewhat
1059 @c if you set it to anything else.
1060
1061 @vindex gnus-read-active-file
1062 The active file can be rather Huge, so if you have a slow network, you
1063 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1064 reading the active file.  This variable is @code{t} by default.
1065
1066 Gnus will try to make do by just getting information on the groups
1067 that you actually subscribe to.
1068
1069 Note that if you subscribe to lots and lots of groups, setting this
1070 variable to @code{nil} will probably make Gnus slower, not faster.  At
1071 present, having this variable @code{nil} will slow Gnus down
1072 considerably, unless you read news over a 2400 baud modem.  
1073
1074 This variable can also have the value @code{some}.  Gnus will then
1075 attempt to read active info only on the subscribed groups.  On some
1076 servers this is quite fast (on sparkling, brand new INN servers that
1077 support the @samp{LIST ACTIVE group} command), on others this is not
1078 fast at all.  In any case, @code{some} should be faster than @code{nil},
1079 and is certainly faster than @code{t} over slow lines.
1080
1081 If this variable is @code{nil}, Gnus will as for group info in total
1082 lock-step, which isn't very fast.  If it is @code{some} and you use an
1083 @sc{nntp} server, Gnus will pump out commands as fast as it can, and
1084 read all the replies in one swoop.  This will normally result in better
1085 performance, but if the server does not support the aforementioned
1086 @samp{LIST ACTIVE group} command, this isn't very nice to the server.
1087
1088 In any case, if you use @code{some} or @code{nil}, you should kill all
1089 groups that you aren't interested in.
1090
1091 @node Startup Variables
1092 @section Startup Variables
1093
1094 @table @code
1095
1096 @item gnus-load-hook
1097 @vindex gnus-load-hook
1098 A hook that is run while Gnus is being loaded.  Note that this hook will
1099 normally be run just once in each Emacs session, no matter how many
1100 times you start Gnus.
1101
1102 @item gnus-startup-hook
1103 @vindex gnus-startup-hook
1104 A hook that is run after starting up Gnus successfully.
1105
1106 @item gnus-check-bogus-newsgroups
1107 @vindex gnus-check-bogus-newsgroups
1108 If non-@code{nil}, Gnus will check for and delete all bogus groups at
1109 startup.  A @dfn{bogus group} is a group that you have in your
1110 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
1111 bogus groups isn't very quick, so to save time and resources, it's best
1112 to leave this option off, and instead do the checking for bogus groups
1113 once in a while from the group buffer (@pxref{Group Maintenance}).
1114
1115 @item gnus-inhibit-startup-message
1116 @vindex gnus-inhibit-startup-message
1117 If non-@code{nil}, the startup message won't be displayed.  That way,
1118 your boss might not notice that you are reading news instead of doing
1119 your job.
1120
1121 @item gnus-no-groups-message
1122 @vindex gnus-no-groups-message
1123 Message displayed by Gnus when no groups are available.
1124 @end table
1125
1126 @node The Group Buffer
1127 @chapter The Group Buffer
1128 @cindex group buffer
1129
1130 The @dfn{group buffer} lists all (or parts) of the available groups.  It
1131 is the first buffer shown when Gnus starts, and will never be killed as
1132 long as Gnus is active.
1133
1134 @menu
1135 * Group Buffer Format::    Information listed and how you can change it.
1136 * Group Maneuvering::      Commands for moving in the group buffer.
1137 * Selecting a Group::      Actually reading news.
1138 * Subscription Commands::  Unsubscribing, killing, subscribing.
1139 * Group Levels::           Levels? What are those, then?
1140 * Group Score::            A mechanism for finding out what groups you like.
1141 * Marking Groups::         You can mark groups for later processing.
1142 * Foreign Groups::         How to create foreign groups.
1143 * Group Parameters::       Each group may have different parameters set.
1144 * Listing Groups::         Gnus can list various subsets of the groups.
1145 * Sorting Groups::         Re-arrange the group order.
1146 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
1147 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
1148 * Exiting Gnus::           Stop reading news and get some work done.
1149 * Group Topics::           A folding group mode divided into topics.
1150 * Misc Group Stuff::       Other stuff that you can to do.
1151 @end menu
1152
1153 @node Group Buffer Format
1154 @section Group Buffer Format
1155 @cindex group buffer format
1156
1157 The default format of the group buffer is nice and dull, but you can
1158 make it as exciting and ugly as you feel like.
1159
1160 Here's a couple of example group lines:
1161
1162 @example
1163      25: news.announce.newusers
1164  *    0: alt.fan.andrea-dworkin
1165 @end example
1166
1167 Quite simple, huh?
1168
1169 You can see that there are 25 unread articles in
1170 @samp{news.announce.newusers}.  There are no unread articles, but some
1171 ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1172 asterisk at the beginning of the line?)
1173
1174 @vindex gnus-group-line-format
1175 You can fuck that up to your heart's delight by fiddling with the
1176 @code{gnus-group-line-format} variable.  This variable works along the
1177 lines of a @code{format} specification, which is pretty much the same as
1178 a @code{printf} specifications, for those of you who use (feh!) C.
1179 @xref{Formatting Variables}. 
1180
1181 The default value that produced those lines above is 
1182 @samp{"%M%S%5y: %(%g%)\n"}.
1183
1184 There should always be a colon on the line; the cursor always moves to
1185 the colon after performing an operation.  Nothing else is required---not
1186 even the group name.  All displayed text is just window dressing, and is
1187 never examined by Gnus.  Gnus stores all real information it needs using
1188 text properties.
1189
1190 (Note that if you make a really strange, wonderful, spreadsheet-like
1191 layout, everybody will believe you are hard at work with the accounting
1192 instead of wasting time reading news.)
1193
1194 Here's a list of all available format characters:
1195
1196 @table @samp
1197
1198 @item M    
1199 Only marked articles.
1200
1201 @item S
1202 Whether the group is subscribed.
1203
1204 @item L    
1205 Level of subscribedness.
1206
1207 @item N
1208 Number of unread articles.
1209
1210 @item I
1211 Number of dormant articles.
1212
1213 @item T
1214 Number of ticked articles.
1215
1216 @item R
1217 Number of read articles.
1218
1219 @item t
1220 Total number of articles.
1221
1222 @item y
1223 Number of unread, unticked, non-dormant articles.
1224
1225 @item i
1226 Number of ticked and dormant articles.
1227
1228 @item g
1229 Full group name.
1230
1231 @item G
1232 Group name.
1233
1234 @item D
1235 Newsgroup description.
1236
1237 @item o
1238 Moderated.
1239
1240 @item O
1241 Moderated.
1242
1243 @item s
1244 Select method.
1245
1246 @item n
1247 Select from where.
1248
1249 @item z
1250 A string that looks like @samp{<%s:%n>} if a foreign select method is
1251 used.
1252
1253 @item c
1254 Short (collapsed) group name.
1255
1256 @item u
1257 User defined specifier.  The next character in the format string should
1258 be a letter.  @sc{gnus} will call the function
1259 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1260 following @samp{%u}.  The function will be passed the current headers as
1261 argument.  The function should return a string, which will be inserted
1262 into the buffer just like information from any other specifier.
1263 @end table
1264
1265 @cindex *
1266 All the "number-of" specs will be filled with an asterisk (@samp{*}) if
1267 no info is available---for instance, if it is a non-activated foreign
1268 group, or a bogus (or semi-bogus) native group.
1269
1270 @vindex gnus-group-mode-line-format
1271 The mode line can be changed by setting
1272 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
1273 format specifiers:
1274
1275 @table @samp
1276 @item S
1277 The native news server.
1278 @item M
1279 The native select method.
1280 @end table
1281
1282 @node Group Maneuvering
1283 @section Group Maneuvering
1284 @cindex group movement
1285
1286 All movement commands understand the numeric prefix and will behave as
1287 expected, hopefully. 
1288
1289 @table @kbd
1290
1291 @item n
1292 @kindex n (Group)
1293 @findex gnus-group-next-unread-group
1294 Go to the next group that has unread articles
1295 (@code{gnus-group-next-unread-group}).
1296
1297 @item p
1298
1299 @itemx DEL
1300 @kindex DEL (Group)
1301 @kindex p (Group)
1302 @findex gnus-group-prev-unread-group
1303 Go to the previous group group that has unread articles
1304 (@code{gnus-group-prev-unread-group}).
1305
1306 @item N
1307 @kindex N (Group)
1308 @findex gnus-group-next-group
1309 Go to the next group (@code{gnus-group-next-group}).
1310
1311 @item P
1312 @kindex P (Group)
1313 @findex gnus-group-prev-group
1314 Go to the previous group (@code{gnus-group-prev-group}).
1315
1316 @item M-p
1317 @kindex M-p (Group)
1318 @findex gnus-group-next-unread-group-same-level
1319 Go to the next unread group on the same level (or lower)
1320 (@code{gnus-group-next-unread-group-same-level}). 
1321
1322 @item M-n
1323 @kindex M-n (Group)
1324 @findex gnus-group-prev-unread-group-same-level
1325 Go to the previous unread group on the same level (or lower)
1326 (@code{gnus-group-prev-unread-group-same-level}). 
1327 @end table
1328
1329 Three commands for jumping to groups:
1330
1331 @table @kbd
1332
1333 @item j
1334 @kindex j (Group)
1335 @findex gnus-group-jump-to-group
1336 Jump to a group (and make it visible if it isn't already)
1337 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
1338 like living groups.
1339
1340 @item ,
1341 @kindex , (Group)
1342 @findex gnus-group-best-unread-group
1343 Jump to the unread group with the lowest level
1344 (@code{gnus-group-best-unread-group}). 
1345
1346 @item .
1347 @kindex . (Group)
1348 @findex gnus-group-first-unread-group
1349 Jump to the first group with unread articles
1350 (@code{gnus-group-first-unread-group}).  
1351 @end table
1352
1353 @vindex gnus-group-goto-unread
1354 If @code{gnus-group-goto-unread} is @code{nil}, all the movement
1355 commands will move to the next group, not the next unread group.  Even
1356 the commands that say they move to the next unread group.  The default
1357 is @code{t}.
1358
1359
1360 @node Selecting a Group
1361 @section Selecting a Group
1362 @cindex group selection
1363
1364 @table @kbd
1365
1366 @item SPACE
1367 @kindex SPACE (Group)
1368 @findex gnus-group-read-group
1369 Select the current group, switch to the summary buffer and display the
1370 first unread article (@code{gnus-group-read-group}).  If there are no
1371 unread articles in the group, or if you give a non-numerical prefix to
1372 this command, Gnus will offer to fetch all the old articles in this
1373 group from the server.  If you give a numerical prefix @var{N}, Gnus
1374 will fetch @var{N} number of articles.  If @var{N} is positive, fetch
1375 the @var{N} newest articles, if @var{N} is negative, fetch the
1376 @var{abs(N)} oldest articles.
1377
1378 @item RET
1379 @kindex RET (Group)
1380 @findex gnus-group-select-group
1381 Select the current group and switch to the summary buffer
1382 (@code{gnus-group-select-group}).  Takes the same arguments as
1383 @code{gnus-group-read-group}---the only difference is that this command
1384 does not display the first unread article automatically upon group
1385 entry. 
1386
1387 @item M-RET
1388 @kindex M-RET (Group)
1389 @findex gnus-group-quick-select-group
1390 This does the same as the command above, but tries to do it with the
1391 minimum amount off fuzz (@code{gnus-group-quick-select-group}).  No
1392 scoring/killing will be performed, there will be no highlights and no
1393 expunging.  This might be useful if you're in a real hurry and have to
1394 enter some humongous groups.
1395
1396 @item M-SPACE
1397 @kindex M-RET (Group)
1398 @findex gnus-group-visible-select-group
1399 This is yet one more command that does the same as the one above, but
1400 this one does it without expunging and hiding dormants
1401 (@code{gnus-group-visible-select-group}).  
1402
1403 @item c
1404 @kindex c (Group)
1405 @findex gnus-group-catchup-current
1406 Mark all unticked articles in this group as read
1407 (@code{gnus-group-catchup-current}). 
1408
1409 @item C
1410 @kindex C (Group)
1411 @findex gnus-group-catchup-current-all
1412 Mark all articles in this group, even the ticked ones, as read
1413 (@code{gnus-group-catchup-current-all}). 
1414 @end table
1415
1416 @vindex gnus-large-newsgroup
1417 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1418 to be a big group.  This is 200 by default.  If the group has more
1419 unread articles than this, Gnus will query the user before entering the
1420 group.  The user can then specify how many articles should be fetched
1421 from the server.  If the user specifies a negative number (@samp{-n}),
1422 the @samp{n} oldest articles will be fetched.  If it is positive, the
1423 @samp{n} articles that have arrived most recently will be fetched.
1424
1425 @vindex gnus-select-group-hook
1426 @vindex gnus-auto-select-first
1427 @code{gnus-auto-select-first} control whether any articles are selected
1428 automatically when entering a group.  
1429
1430 @table @code
1431
1432 @item nil
1433 Don't select any articles when entering the group.  Just display the
1434 full summary buffer.
1435
1436 @item t
1437 Select the first unread article when entering the group.  
1438
1439 @item best
1440 Select the most high-scored article in the group when entering the
1441 group. 
1442 @end table
1443         
1444 If you want to prevent automatic selection in some group (say, in a
1445 binary group with Huge articles) you can set this variable to @code{nil}
1446 in @code{gnus-select-group-hook}, which is called when a group is
1447 selected.
1448
1449 @findex gnus-thread-sort-by-total-score
1450 @findex gnus-thread-sort-by-date
1451 @findex gnus-thread-sort-by-score
1452 @findex gnus-thread-sort-by-subject
1453 @findex gnus-thread-sort-by-author
1454 @findex gnus-thread-sort-by-number
1455 @vindex gnus-thread-sort-functions
1456 If you are using a threaded summary display, you can sort the threads by
1457 setting @code{gnus-thread-sort-functions}, which is a list of functions.
1458 By default, sorting is done on article numbers.  Ready-made sorting
1459 predicate functions include @code{gnus-thread-sort-by-number},
1460 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
1461 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and
1462 @code{gnus-thread-sort-by-total-score}.
1463
1464 Each function takes two threads and return non-@code{nil} if the first
1465 thread should be sorted before the other.  Note that sorting really is
1466 normally done by looking only at the roots of each thread.  If you use
1467 more than one function, the primary sort key should be the last function
1468 in the list.  You should probably always include
1469 @code{gnus-thread-sort-by-number} in the list of sorting
1470 functions---preferably first.  This will ensure that threads that are
1471 equal with respect to the other sort criteria will be displayed in
1472 ascending article order.
1473
1474 If you would like to sort by score, then by subject, and finally by
1475 number, you could do something like:
1476
1477 @lisp
1478 (setq gnus-thread-sort-functions 
1479       '(gnus-thread-sort-by-number
1480         gnus-thread-sort-by-subject
1481         gnus-thread-sort-by-score))
1482 @end lisp
1483
1484 The threads that have highest score will be displayed first in the
1485 summary buffer.  When threads have the same score, they will be sorted
1486 alphabetically.  The threads that have the same score and the same
1487 subject will be sorted by number, which is (normally) the sequence in
1488 which the articles arrived.
1489
1490 If you want to sort by score and then reverse arrival order, you could
1491 say something like:
1492
1493 @lisp
1494 (setq gnus-thread-sort-functions
1495       '((lambda (t1 t2) 
1496           (not (gnus-thread-sort-by-number t1 t2)))
1497         gnus-thread-sort-by-score))
1498 @end lisp
1499
1500 @vindex gnus-thread-score-function
1501 The function in the @code{gnus-thread-score-function} variable (default
1502 @code{+}) is used for calculating the total score of a thread.  Useful
1503 functions might be @code{max}, @code{min}, or squared means, or whatever
1504 tickles your fancy.
1505
1506 @findex gnus-article-sort-functions
1507 @findex gnus-article-sort-by-date
1508 @findex gnus-article-sort-by-score
1509 @findex gnus-article-sort-by-subject
1510 @findex gnus-article-sort-by-author
1511 @findex gnus-article-sort-by-number
1512 If you are using an unthreaded display for some strange reason or other,
1513 you have to fiddle with the @code{gnus-article-sort-functions} variable.
1514 It is very similar to the @code{gnus-thread-sort-functions}, except that
1515 is uses slightly different functions for article comparison.  Available
1516 sorting predicate functions are @code{gnus-article-sort-by-number},
1517 @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},
1518 @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.
1519
1520 If you want to sort an unthreaded summary display by subject, you could
1521 say something like:
1522
1523 @lisp
1524 (setq gnus-article-sort-functions 
1525       '(gnus-article-sort-by-number
1526         gnus-article-sort-by-subject))
1527 @end lisp
1528
1529
1530 @node Subscription Commands
1531 @section Subscription Commands
1532 @cindex subscribing
1533
1534 @table @kbd
1535
1536 @item S t
1537 @itemx u
1538 @kindex S t (Group)
1539 @kindex u (Group)
1540 @findex gnus-group-unsubscribe-current-group
1541 Toggle subscription to the current group
1542 (@code{gnus-group-unsubscribe-current-group}).  
1543
1544 @item S s
1545 @itemx U
1546 @kindex S s (Group)
1547 @kindex U (Group)
1548 @findex gnus-group-unsubscribe-group
1549 Prompt for a group to subscribe, and then subscribe it.  If it was
1550 subscribed already, unsubscribe it instead
1551 (@code{gnus-group-unsubscribe-group}).
1552
1553 @item S k
1554 @itemx C-k
1555 @kindex S k (Group)
1556 @kindex C-k (Group)
1557 @findex gnus-group-kill-group
1558 Kill the current group (@code{gnus-group-kill-group}).
1559
1560 @item S y
1561 @itemx C-y
1562 @kindex S y (Group)
1563 @kindex C-y (Group)
1564 @findex gnus-group-yank-group
1565 Yank the last killed group (@code{gnus-group-yank-group}).
1566
1567 @item S w
1568 @itemx C-w
1569 @kindex S w (Group)
1570 @kindex C-w (Group)
1571 @findex gnus-group-kill-region
1572 Kill all groups in the region (@code{gnus-group-kill-region}). 
1573
1574 @item S z
1575 @kindex S z (Group)
1576 @findex gnus-group-kill-all-zombies
1577 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
1578
1579 @item S C-k
1580 @kindex S C-k (Group)
1581 @findex gnus-group-kill-level
1582 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1583 These groups can't be yanked back after killing, so this command should
1584 be used with some caution.  The only thing where this command comes in
1585 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1586 groups that you want to get rid off.  @kbd{S C-k} on level @code{7} will
1587 kill off all unsubscribed groups that do not have message numbers in the
1588 @file{.newsrc} file.  
1589
1590 @end table
1591
1592 Also @xref{Group Levels}.
1593
1594 @node Group Levels
1595 @section Group Levels
1596 @cindex group level
1597
1598 All groups have a level of @dfn{subscribedness}.  For instance, if a
1599 group is on level 2, it is more subscribed than a group on level 5.  You
1600 can ask Gnus to just list groups on a given level or lower
1601 (@pxref{Listing Groups}), or to just check for new articles in groups on
1602 a given level or lower (@pxref{Misc Group Stuff}).
1603
1604 @table @kbd
1605
1606 @item S l
1607 @kindex S l (Group)
1608 @findex gnus-group-set-current-level
1609 Set the level of the current group.  If a numeric prefix is given, the
1610 next @var{n} groups will have their levels set.  The user will be
1611 prompted for a level.
1612 @end table
1613
1614 @vindex gnus-level-killed
1615 @vindex gnus-level-zombie
1616 @vindex gnus-level-unsubscribed
1617 @vindex gnus-level-subscribed
1618 Gnus considers groups on between levels 1 and
1619 @code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
1620 @code{gnus-level-subscribed} (exclusive) and
1621 @code{gnus-level-unsubscribed} (inclusive) (default 7) to be
1622 unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
1623 (default 8) and @code{gnus-level-killed} to be killed (default 9),
1624 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
1625 the same, but zombie and killed groups have no information on what
1626 articles you have read, etc, stored.  This distinction between dead and
1627 living groups isn't done because it is nice or clever, it is done purely
1628 for reasons of efficiency.
1629
1630 It is recommended that you keep all your mail groups (if any) on quite
1631 low levels (eg. 1 or 2).
1632
1633 If you want to play with the level variables, you should show some care.
1634 Set them once, and don't touch them ever again.  Better yet, don't touch
1635 them at all unless you know exactly what you're doing.
1636
1637 @vindex gnus-level-default-unsubscribed
1638 @vindex gnus-level-default-subscribed
1639 Two closely related variables are @code{gnus-level-default-subscribed}
1640 (default 3) and @code{gnus-level-default-unsubscribed} (default 6),
1641 which are the levels that new groups will be put on if they are
1642 (un)subscribed.  These two variables should, of course, be inside the
1643 relevant legal ranges.
1644
1645 @vindex gnus-keep-same-level
1646 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
1647 will only move to groups that are of the same level (or lower).  In
1648 particular, going from the last article in one group to the next group
1649 will go to the next group of the same level (or lower).  This might be
1650 handy if you want to read the most important groups before you read the
1651 rest.
1652
1653 @vindex gnus-group-default-list-level
1654 All groups with a level less than or equal to
1655 @code{gnus-group-default-list-level} will be listed in the group buffer
1656 by default.
1657
1658 @vindex gnus-group-list-inactive-groups
1659 If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
1660 groups will be listed along with the unread groups.  This variable is
1661 @code{t} by default.  If it is @code{nil}, inactive groups won't be
1662 listed. 
1663
1664 @vindex gnus-group-use-permament-levels
1665 If @code{gnus-group-use-permament-levels} is non-@code{nil}, once you
1666 give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
1667 use this level as the "work" level.
1668
1669 @vindex gnus-activate-level
1670 Gnus will normally just activate groups that are on level
1671 @code{gnus-activate-level} or less.  If you don't want to activate
1672 unsubscribed groups, for instance, you might set this variable to
1673 @samp{5}. 
1674
1675
1676 @node Group Score
1677 @section Group Score
1678 @cindex group score
1679
1680 You would normally keep important groups on high levels, but that scheme
1681 is somewhat restrictive.  Don't you wish you could have Gnus sort the
1682 group buffer according to how often you read groups, perhaps?  Within
1683 reason?  
1684
1685 This is what @dfn{group score} is for.  You can assign a score to each
1686 group.  You can then sort the group buffer based on this score.
1687 Alternatively, you can sort on score and then level.  (Taken together,
1688 the level and the score is called the @dfn{rank} of the group.  A group
1689 that is on level 4 and has a score of 1 has a higher rank than a group
1690 on level 5 that has a score of 300.  (The level is the most significant
1691 part and the score is the least significant part.)
1692
1693 @findex gnus-summary-bubble-group
1694 If you want groups you read often to get higher scores than groups you
1695 read seldom you can add the @code{gnus-summary-bubble-group} function to
1696 the @code{gnus-summary-exit-hook} hook.  This will result (after
1697 sorting) in a bubbling sort of action.  If you want to see that in
1698 action after each summary exit, you can add
1699 @code{gnus-group-sort-groups-by-rank} or
1700 @code{gnus-group-sort-groups-by-score} to the same hook, but that will
1701 slow things down somewhat.
1702
1703
1704 @node Marking Groups
1705 @section Marking Groups
1706 @cindex marking groups
1707
1708 If you want to perform some command on several groups, and they appear
1709 subsequently in the group buffer, you would normally just give a
1710 numerical prefix to the command.  Most group commands will then do your
1711 bidding on those groups.
1712
1713 However, if the groups are not in sequential order, you can still
1714 perform a command on several groups.  You simply mark the groups first
1715 with the process mark and then execute the command.
1716
1717 @table @kbd
1718
1719 @item #
1720 @kindex # (Group)
1721 @itemx M m
1722 @kindex M m (Group)
1723 @findex gnus-group-mark-group
1724 Set the mark on the current group (@code{gnus-group-mark-group}). 
1725
1726 @item M-#
1727 @kindex M-# (Group)
1728 @itemx < u
1729 @kindex M u (Group)
1730 @findex gnus-group-unmark-group
1731 Remove the mark from the current group
1732 (@code{gnus-group-unmark-group}). 
1733
1734 @item M U
1735 @kindex M U (Group)
1736 @findex gnus-group-unmark-all-groups
1737 Remove the mark from all groups (@code{gnus-group-unmark-all-groups}). 
1738
1739 @item M w
1740 @kindex M w (Group)
1741 @findex gnus-group-mark-region
1742 Mark all groups between point and mark (@code{gnus-group-mark-region}). 
1743
1744 @item M r
1745 @kindex M r (Group)
1746 @findex gnus-group-mark-regexp
1747 Mark all groups that match some regular expression
1748 (@code{gnus-group-mark-regexp}).  
1749 @end table
1750
1751 Also @xref{Process/Prefix}.
1752
1753 If you want to execute some command on all groups that have been marked
1754 with the process mark, you can use the @kbd{M-&}
1755 (@code{gnus-group-universal-argument}) command.  It will prompt you for
1756 the command to be executed.
1757
1758
1759
1760 @node Foreign Groups
1761 @section Foreign Groups
1762 @cindex foreign groups
1763
1764 A @dfn{foreign group} is a group that is not read by the usual (or
1765 default) means.  It could be, for instance, a group from a different
1766 @sc{nntp} server, it could be a virtual group, or it could be your own
1767 personal mail group.
1768
1769 A foreign group (or any group, really) is specified by a @dfn{name} and
1770 a @dfn{select method}.  To take the latter first, a select method is a
1771 list where the first element says what backend to use (eg. @code{nntp},
1772 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
1773 name}.  There may be additional elements in the select method, where the
1774 value may have special meaning for the backend in question.
1775
1776 One could say that a select method defines a @dfn{virtual server}---so
1777 we do just that (@pxref{The Server Buffer}).
1778
1779 The @dfn{name} of the group is the name the backend will recognize the
1780 group as.
1781
1782 For instance, the group @samp{soc.motss} on the @sc{nntp} server
1783 @samp{some.where.edu} will have the name @samp{soc.motss} and select
1784 method @code{(nntp "some.where.edu")}.  Gnus will call this group, in
1785 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
1786 @code{nntp} backend just knows this group as @samp{soc.motss}.
1787
1788 Here are some commands for making and editing general foreign groups,
1789 and some commands to ease the creation of some special-purpose groups:
1790
1791 @table @kbd
1792
1793 @item G m
1794 @kindex G m (Group)
1795 @findex gnus-group-make-group
1796 Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
1797 for a name, a method and possibly an @dfn{address}.  For an easier way
1798 to subscribe to @sc{nntp} groups, @xref{Browse Foreign Server}.
1799
1800 @item G r
1801 @kindex G m (Group)
1802 @findex gnus-group-rename-group
1803 Rename the current group to something else
1804 (@code{gnus-group-rename-group}).  This is legal only on some groups --
1805 mail groups mostly.  This command might very well be quite slow on some
1806 backends. 
1807
1808 @item G e
1809 @kindex G e (Group)
1810 @findex gnus-group-edit-group-method
1811 Enter a buffer where you can edit the select method of the current
1812 group (@code{gnus-group-edit-group-method}).
1813
1814 @item G p
1815 @kindex G p (Group)
1816 @findex gnus-group-edit-group-parameters
1817 Enter a buffer where you can edit the group parameters
1818 (@code{gnus-group-edit-group-parameters}). 
1819
1820 @item G E
1821 @kindex G E (Group)
1822 @findex gnus-group-edit-group
1823 Enter a buffer where you can edit the group info
1824 (@code{gnus-group-edit-group}).
1825
1826 @item G d
1827 @kindex G d (Group)
1828 @findex gnus-group-make-directory-group
1829 Make a directory group.  You will be prompted for a directory name
1830 (@code{gnus-group-make-directory-group}).  
1831
1832 @item G h 
1833 @kindex G h (Group)
1834 @findex gnus-group-make-help-group
1835 Make the Gnus help group (@code{gnus-group-make-help-group}).
1836
1837 @item G a
1838 @kindex G a (Group)
1839 @findex gnus-group-make-archive-group
1840 @vindex gnus-group-archive-directory
1841 @vindex gnus-group-recent-archive-directory
1842 Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
1843 default a group pointing to the most recent articles will be created
1844 (@code{gnus-group-recent-archibe-directory}), but given a prefix, a full
1845 group will be created from from @code{gnus-group-archive-directory}.
1846
1847 @item G k
1848 @kindex G k (Group)
1849 @findex gnus-group-make-kiboze-group
1850 Make a kiboze group.  You will be prompted for a name, for a regexp to
1851 match groups to be "included" in the kiboze group, and a series of
1852 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1853
1854 @item G D
1855 @kindex G D (Group)
1856 @findex gnus-group-enter-directory
1857 Read a random directory as if with were a newsgroup with the
1858 @code{nneething} backend (@code{gnus-group-enter-directory}).
1859
1860 @item G f
1861 @kindex G f (Group)
1862 @findex gnus-group-make-doc-group
1863 Make a group based on some file or other
1864 (@code{gnus-group-make-doc-group}).  If you give a prefix to this
1865 command, you will be prompted for a file name and a file type.
1866 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1867 @code{mmdf}, @code{news}, @code{rnews}, and @code{forward}.  If you run
1868 this command without a prefix, Gnus will guess at the file type.
1869
1870 @item G DEL
1871 @kindex G DEL (Group)
1872 @findex gnus-group-delete-group
1873 This function will delete the current group
1874 (@code{gnus-group-delete-group}).  If given a prefix, this function will
1875 actually delete all the articles in the group, and forcibly remove the
1876 group itself from the face of the Earth.  Use a prefix only if you are
1877 sure of what you are doing.  
1878
1879 @item G V
1880 @kindex G V (Group)
1881 @findex gnus-group-make-empty-virtual
1882 Make a new, fresh, empty @code{nnvirtual} group
1883 (@code{gnus-group-make-empty-virtual}).
1884
1885 @item G v
1886 @kindex G v (Group)
1887 @findex gnus-group-add-to-virtual
1888 Add the current group to an @code{nnvirtual} group
1889 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
1890 @end table
1891
1892 The different methods all have their peculiarities, of course.
1893
1894 @menu
1895 * nntp::             Reading news from a different @sc{nntp} server.
1896 * nnspool::          Reading news from the local spool.
1897 * nnvirtual::        Combining articles from many groups.
1898 * nnkiboze::         Looking through parts of the newsfeed for articles.
1899 * nndir::            You can read a directory as if it was a newsgroup.
1900 * nneething::        Dired?  Who needs dired?
1901 * nndoc::            Single files can be the basis of a group.
1902 * SOUP::             Reading @sc{SOUP} packets "offline".
1903 * Reading Mail::     Reading your personal mail with Gnus.
1904 @end menu
1905
1906 @vindex gnus-activate-foreign-newsgroups
1907 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1908 Gnus will check all foreign groups with this level or lower at startup.
1909 This might take quite a while, especially if you subscribe to lots of
1910 groups from different @sc{nntp} servers.
1911
1912 @node nntp
1913 @subsection nntp
1914 @cindex @sc{nntp}
1915
1916 Subscribing to a foreign group from an @sc{nntp} server is rather easy.
1917 You just specify @code{nntp} as method and the address of the @sc{nntp}
1918 server as the, uhm, address.
1919
1920 If the @sc{nntp} server is located at a non-standard port, setting the
1921 third element of the select method to this port number should allow you
1922 to connect to the right port.  You'll have to edit the group info for
1923 that (@pxref{Foreign Groups}).
1924
1925 The name of the foreign group can be the same as a native group.  In
1926 fact, you can subscribe to the same group from as many different servers
1927 you feel like.  There will be no name collisions.
1928
1929 The following variables can be used to create a virtual @code{nntp}
1930 server: 
1931
1932 @table @code
1933
1934 @item nntp-server-opened-hook
1935 @vindex nntp-server-opened-hook
1936 @cindex @sc{mode reader}
1937 @cindex authinfo
1938 @cindex authentification
1939 @cindex nntp authentification
1940 @findex nntp-send-authinfo
1941 @findex nntp-send-mode-reader
1942 @code{nntp-server-opened-hook} is run after a connection has been made.
1943 It can be used to send commands to the @sc{nntp} server after it has
1944 been contacted.  By default is sends the command @samp{MODE READER} to
1945 the server with the @code{nntp-send-mode-reader} function.  Another
1946 popular function is @code{nntp-send-authinfo}, which will prompt you for
1947 an @sc{nntp} password and stuff.
1948
1949 @item nntp-server-action-alist 
1950 @vindex nntp-server-action-alist 
1951 This is an list of regexps to match on server types and actions to be
1952 taken when matches are made.  For instance, if you want Gnus to beep
1953 every time you connect to innd, you could say something like:
1954
1955 @lisp
1956 (setq nntp-server-action-alist
1957       '(("innd" (ding))))
1958 @end lisp
1959
1960 You probably don't want to do that, though.
1961
1962 The default value is
1963
1964 @lisp
1965   '(("nntpd 1\\.5\\.11t" 
1966      (remove-hook 'nntp-server-opened-hook nntp-send-mode-reader)))
1967 @end lisp
1968
1969 This ensures that Gnus doesn't send the @samp{MODE READER} command to
1970 nntpd 1.5.11t, since that command chokes that server, I've been told. 
1971
1972 @item nntp-maximum-request
1973 @vindex nntp-maximum-request
1974 If the @sc{nntp} server doesn't support @sc{nov} headers, this backend
1975 will collect headers by sending a series of @code{head} commands.  To
1976 speed things up, the backend sends lots of these commands without
1977 waiting for reply, and then reads all the replies.  This is controlled
1978 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
1979 your network is buggy, you should set this to 1.
1980
1981 @item nntp-connection-timeout
1982 @vindex nntp-connection-timeout
1983 If you have lots of foreign @code{nntp} groups that you connect to
1984 regularly, you're sure to have problems with @sc{nntp} servers not
1985 responding properly, or being too loaded to reply within reasonable
1986 time.  This is can lead to awkward problems, which can be helped
1987 somewhat by setting @code{nntp-connection-timeout}.  This is an integer
1988 that says how many seconds the @code{nntp} backend should wait for a
1989 connection before giving up.  If it is @code{nil}, which is the default,
1990 no timeouts are done.
1991
1992 @item nntp-server-hook
1993 @vindex nntp-server-hook
1994 This hook is run as the last step when connecting to an @sc{nntp}
1995 server.
1996
1997 @c @findex nntp-open-rlogin
1998 @c @findex nntp-open-network-stream
1999 @c @item nntp-open-server-function
2000 @c @vindex nntp-open-server-function
2001 @c This function is used to connect to the remote system.  Two pre-made
2002 @c functions are @code{nntp-open-network-stream}, which is the default, and
2003 @c simply connects to some port or other on the remote system.  The other
2004 @c is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
2005 @c and then does a telnet to the @sc{nntp} server available there.
2006 @c 
2007 @c @item nntp-rlogin-parameters
2008 @c @vindex nntp-rlogin-parameters
2009 @c If you use @code{nntp-open-rlogin} as the
2010 @c @code{nntp-open-server-function}, this list will be used as the
2011 @c parameter list given to @code{rsh}.
2012 @c 
2013 @c @item nntp-rlogin-user-name
2014 @c @vindex nntp-rlogin-user-name
2015 @c User name on the remote system when using the @code{rlogin} connect
2016 @c function. 
2017
2018 @item nntp-address
2019 @vindex nntp-address
2020 The address of the remote system running the @sc{nntp} server.
2021
2022 @item nntp-port-number
2023 @vindex nntp-port-number
2024 Port number to connect to when using the @code{nntp-open-network-stream}
2025 connect function.
2026
2027 @item nntp-buggy-select
2028 @vindex nntp-buggy-select
2029 Set this to non-@code{nil} if your select routine is buggy.
2030
2031 @item nntp-nov-is-evil 
2032 @vindex nntp-nov-is-evil 
2033 If the @sc{nntp} server does not support @sc{nov}, you could set this
2034 variable to @code{t}, but @code{nntp} usually checks whether @sc{nov}
2035 can be used automatically.
2036
2037 @item nntp-xover-commands
2038 @vindex nntp-xover-commands
2039 List of strings that are used as commands to fetch @sc{nov} lines from a
2040 server.  The default value of this variable is @code{("XOVER"
2041 "XOVERVIEW")}. 
2042
2043 @item nntp-nov-gap
2044 @vindex nntp-nov-gap
2045 @code{nntp} normally sends just one big request for @sc{nov} lines to
2046 the server.  The server responds with one huge list of lines.  However,
2047 if you have read articles 2-5000 in the group, and only want to read
2048 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
2049 lines that you do not want, and will not use.  This variable says how
2050 big a gap between two consecutive articles is allowed to be before the
2051 @code{XOVER} request is split into several request.  Note that if your
2052 network is fast, setting this variable to a really small number means
2053 that fetching will probably be slower.  If this variable is @code{nil},
2054 @code{nntp} will never split requests.
2055
2056 @item nntp-prepare-server-hook
2057 @vindex nntp-prepare-server-hook
2058 A hook run before attempting to connect to an @sc{nntp} server.
2059
2060 @item nntp-async-number
2061 @vindex nntp-async-number
2062 How many articles should be pre-fetched when in asynchronous mode.  If
2063 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
2064 that it can without bound.  If it is @code{nil}, no pre-fetching will be
2065 made.
2066
2067 @item nntp-warn-about-losing-connection
2068 @vindex nntp-warn-about-losing-connection
2069 If this variable is non-@code{nil}, some noise will be made when a
2070 server closes connection.
2071
2072
2073 @end table
2074
2075 @node nnspool
2076 @subsection nnspool
2077 @cindex @code{nnspool}
2078 @cindex news spool
2079
2080 Subscribing to a foreign group from the local spool is extremely easy,
2081 and might be useful, for instance, to speed up reading groups like
2082 @samp{alt.binaries.pictures.furniture}.
2083
2084 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
2085 anything else) as the address.
2086
2087 If you have access to a local spool, you should probably use that as the
2088 native select method (@pxref{Finding the News}).  It is normally faster
2089 than using an @code{nntp} select method, but might not be.  It depends.
2090 You just have to try to find out what's best at your site.
2091
2092 @table @code
2093
2094 @item nnspool-inews-program
2095 @vindex nnspool-inews-program
2096 Program used to post an article.
2097
2098 @item nnspool-inews-switches
2099 @vindex nnspool-inews-switches
2100 Parameters given to the inews program when posting an article. 
2101
2102 @item nnspool-spool-directory
2103 @vindex nnspool-spool-directory
2104 Where @code{nnspool} looks for the articles.  This is normally
2105 @file{/usr/spool/news/}.
2106
2107 @item nnspool-nov-directory 
2108 @vindex nnspool-nov-directory 
2109 Where @code{nnspool} will look for @sc{nov} files.  This is normally
2110 @file{/usr/spool/news/over.view/}.
2111
2112 @item nnspool-lib-dir
2113 @vindex nnspool-lib-dir
2114 Where the news lib dir is (@file{/usr/lib/news/} by default).
2115
2116 @item nnspool-active-file
2117 @vindex nnspool-active-file
2118 The path of the active file.
2119
2120 @item nnspool-newsgroups-file
2121 @vindex nnspool-newsgroups-file
2122 The path of the group descriptions file.
2123
2124 @item nnspool-history-file
2125 @vindex nnspool-history-file
2126 The path of the news history file.
2127
2128 @item nnspool-active-times-file
2129 @vindex nnspool-active-times-file
2130 The path of the active date file.
2131
2132 @item nnspool-nov-is-evil
2133 @vindex nnspool-nov-is-evil
2134 If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
2135 that it finds.
2136
2137 @item nnspool-sift-nov-with-sed
2138 @vindex nnspool-sift-nov-with-sed
2139 If non-@code{nil}, which is the default, use @code{sed} to get the
2140 relevant portion from the overview file.  If nil, @code{nnspool} will
2141 load the entire file into a buffer and process it there.
2142
2143 @end table
2144
2145
2146 @node nnvirtual
2147 @subsection nnvirtual
2148 @cindex @code{nnvirtual}
2149 @cindex virtual groups
2150
2151 An @dfn{nnvirtual group} is really nothing more than a collection of
2152 other groups.
2153
2154 For instance, if you are tired of reading many small group, you can
2155 put them all in one big group, and then grow tired of reading one
2156 big, unwieldy group.  The joys of computing!
2157
2158 You specify @code{nnvirtual} as the method.  The address should be a
2159 regexp to match component groups.
2160
2161 All marks in the virtual group will stick to the articles in the
2162 component groups.  So if you tick an article in a virtual group, the
2163 article will also be ticked in the component group from whence it came.
2164 (And vice versa---marks from the component groups will also be shown in
2165 the virtual group.)
2166
2167 Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
2168 newsgroups into one, big, happy newsgroup:
2169
2170 @lisp
2171 (nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
2172 @end lisp
2173
2174 The component groups can be native or foreign; everything should work
2175 smoothly, but if your computer explodes, it was probably my fault.
2176
2177 Collecting the same group from several servers might actually be a good
2178 idea if users have set the Distribution header to limit distribution.
2179 If you would like to read @samp{soc.motss} both from a server in Japan
2180 and a server in Norway, you could use the following as the group regexp:
2181
2182 @example
2183 "^nntp+some.server.jp:soc.motss$\\|^nntp+some.server.no:soc.motss$"
2184 @end example
2185
2186 This should work kinda smoothly---all articles from both groups should
2187 end up in this one, and there should be no duplicates.  Threading (and
2188 the rest) will still work as usual, but there might be problems with the
2189 sequence of articles.  Sorting on date might be an option here
2190 (@pxref{Selecting a Group}.
2191
2192 One limitation, however---all groups that are included in a virtual
2193 group has to be alive (i.e., subscribed or unsubscribed).  Killed or
2194 zombie groups can't be component groups for @code{nnvirtual} groups.
2195
2196 @vindex nnvirtual-always-rescan
2197 If the @code{nnvirtual-always-rescan} is non-@code{nil},
2198 @code{nnvirtual} will always scan groups for unread articles when
2199 entering a virtual group.  If this variable is @code{nil} (which is the
2200 default) and you read articles in a component group after the virtual
2201 group has been activated, the read articles from the component group
2202 will show up when you enter the virtual group.  You'll also see this
2203 effect if you have two virtual groups that contain the same component
2204 group.  If that's the case, you should set this variable to @code{t}.
2205 Or you can just tap @code{M-g} on the virtual group every time before
2206 you enter it---it'll have much the same effect.
2207
2208
2209 @node nnkiboze
2210 @subsection nnkiboze
2211 @cindex @code{nnkiboze}
2212 @cindex kibozing
2213
2214 @dfn{Kibozing} is defined by @sc{oed} as "grepping through (parts of)
2215 the news feed".  @code{nnkiboze} is a backend that will do this for you.  Oh
2216 joy!  Now you can grind any @sc{nntp} server down to a halt with useless
2217 requests!  Oh happiness!
2218
2219 The address field of the @code{nnkiboze} method is, as with
2220 @code{nnvirtual}, a regexp to match groups to be "included" in the
2221 @code{nnkiboze} group.  There most similarities between @code{nnkiboze}
2222 and @code{nnvirtual} ends.
2223
2224 In addition to this regexp detailing component groups, an @code{nnkiboze} group
2225 must have a score file to say what articles that are to be included in
2226 the group (@pxref{Scoring}).
2227
2228 @kindex M-x nnkiboze-generate-groups
2229 @findex nnkiboze-generate-groups
2230 You must run @kbd{M-x nnkiboze-generate-groups} after creating the
2231 @code{nnkiboze} groups you want to have.  This command will take time.  Lots of
2232 time.  Oodles and oodles of time.  Gnus has to fetch the headers from
2233 all the articles in all the components groups and run them through the
2234 scoring process to determine if there are any articles in the groups
2235 that are to be part of the @code{nnkiboze} groups.
2236
2237 Please limit the number of component groups by using restrictive
2238 regexps.  Otherwise your sysadmin may become annoyed with you, and the
2239 @sc{nntp} site may throw you off and never let you back in again.
2240 Stranger things have happened.
2241
2242 @code{nnkiboze} component groups do not have to be alive---they can be dead,
2243 and they can be foreign.  No restrictions.
2244
2245 @vindex nnkiboze-directory
2246 The generation of an @code{nnkiboze} group means writing two files in
2247 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
2248 contains the @sc{nov} header lines for all the articles in the group,
2249 and the other is an additional @file{.newsrc} file to store information
2250 on what groups that have been searched through to find component
2251 articles.
2252
2253 Articles that are marked as read in the @code{nnkiboze} group will have their
2254 @sc{nov} lines removed from the @sc{nov} file.
2255
2256
2257 @node nndir
2258 @subsection nndir
2259 @cindex @code{nndir}
2260 @cindex directory groups
2261
2262 If you have a directory that has lots of articles in separate files in
2263 it, you might treat it as a newsgroup.  The files have to have numerical
2264 names, of course.
2265
2266 This might be an opportune moment to mention @code{ange-ftp}, that most
2267 wonderful of all wonderful Emacs packages.  When I wrote @code{nndir}, I
2268 didn't think much about it---a backend to read directories.  Big deal.
2269
2270 @code{ange-ftp} changes that picture dramatically.  For instance, if you
2271 enter @file{"/ftp@@sina.tcamc.uh.edu:/pub/emacs/ding-list/"} as the the
2272 directory name, ange-ftp will actually allow you to read this directory
2273 over at @samp{sina} as a newsgroup.  Distributed news ahoy!
2274
2275 @code{nndir} will use @sc{nov} files if they are present.
2276
2277 @code{nndir} is a "read-only" backend---you can't delete or expire
2278 articles with this method.  You can use @code{nnmh} or @code{nnml} for
2279 whatever you use @code{nndir} for, so you could switch to any of those
2280 methods if you feel the need to have a non-read-only @code{nndir}.
2281
2282
2283 @node nneething
2284 @subsection nneething
2285 @cindex @code{nneething}
2286
2287 From the @code{nndir} backend (which reads a single spool-like
2288 directory), it's just a hop and a skip to @code{nneething}, which
2289 pretends that any random directory is a newsgroup.  Strange, but true.
2290
2291 When @code{nneething} is presented with a directory, it will scan this
2292 directory and assign article numbers to each file.  When you enter such a
2293 group, @code{nneething} must create "headers" that Gnus can use.  After
2294 all, Gnus is a newsreader, in case you're forgetting. @code{nneething}
2295 does this in a two-step process.  First, it snoops each file in question.
2296 If the file looks like an article (i.e., the first few lines look like
2297 headers), it will use this as the head.  If this is just some random file
2298 without a head (eg. a C source file), @code{nneething} will cobble up a
2299 header out of thin air.  It will use file ownership, name and date and do
2300 whatever it can with these elements.
2301
2302 All this should happen automatically for you, and you will be presented
2303 with something that looks very much like a newsgroup.  Totally like a
2304 newsgroup, to be precise.  If you select an article, it will be displayed
2305 in the article buffer, just as usual.
2306
2307 If you select a line that represents a directory, Gnus will pop you into
2308 a new summary buffer for this @code{nneething} group.  And so on.  You can
2309 traverse the entire disk this way, if you feel like, but remember that
2310 Gnus is not dired, really, and does not intend to be, either.
2311
2312 There are two overall modes to this action---ephemeral or solid.  When
2313 doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
2314 will not store information on what files you have read, and what files
2315 are new, and so on.  If you create a solid @code{nneething} group the
2316 normal way with @kbd{G m}, Gnus will store a mapping table between
2317 article numbers and file names, and you can treat this group like any
2318 other groups.  When you activate a solid @code{nneething} group, you will
2319 be told how many unread articles it contains, etc., etc.
2320
2321 Some variables:
2322
2323 @table @code
2324 @item nneething-map-file-directory
2325 @vindex nneething-map-file-directory
2326 All the mapping files for solid @code{nneething} groups will be stored
2327 in this directory, which defaults to @file{~/.nneething/}.
2328
2329 @item nneething-exclude-files
2330 @vindex nneething-exclude-files
2331 All files that match this regexp will be ignored.  Nice to use to exclude
2332 auto-save files and the like, which is what it does by default.
2333
2334 @item nneething-map-file
2335 @vindex nneething-map-file
2336 Name of the map files.
2337 @end table
2338
2339
2340 @node nndoc
2341 @subsection nndoc
2342 @cindex @code{nndoc}
2343 @cindex documentation group
2344 @cindex help group
2345
2346 @code{nndoc} is a cute little thing that will let you read a single file
2347 as a newsgroup.  Several files types are supported:
2348
2349 @table @code
2350 @cindex babyl
2351 @cindex rmail mbox
2352
2353 @item babyl
2354 The babyl (rmail) mail box.
2355 @cindex mbox
2356 @cindex Unix mbox
2357
2358 @item mbox
2359 The standard Unix mbox file.
2360 @cindex MMDF mail box
2361
2362 @item mmdf
2363 The MMDF mail box format.
2364
2365 @item news
2366 Several news articles appended into a file.
2367
2368 @item rnews
2369 @cindex rnews batch files
2370 The rnews batch transport format.
2371 @cindex forwarded messages
2372
2373 @item forward
2374 Forwarded articles.
2375
2376 @item mime-digest
2377 @cindex digest
2378 @cindex MIME digest
2379 @cindex 1153 digest
2380 @cindex RFC 1153 digest
2381 @cindex RFC 341 digest
2382 MIME (RFC 1341) digest format.
2383
2384 @item standard-digest
2385 The standard (RFC 1153) digest format.
2386
2387 @item slack-digest
2388 Non-standard digest format---matches most things, but does it badly. 
2389 @end table
2390
2391 You can also use the special "file type" @code{guess}, which means that
2392 @code{nndoc} will try to guess what file type it is looking at.
2393 @code{digest} means that @code{nndoc} should guess what digest type the
2394 file is. 
2395
2396 @code{nndoc} will not try to change the file or insert any extra headers into
2397 it---it will simply, like, let you use the file as the basis for a
2398 group.  And that's it.
2399
2400 If you have some old archived articles that you want to insert into your
2401 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
2402 that.  Say you have an old @file{RMAIL} file with mail that you now want
2403 to split into your new @code{nnml} groups.  You look at that file using
2404 @code{nndoc}, set the process mark on all the articles in the buffer
2405 (@kbd{M P b}, for instance), and then respool (@kbd{B r}) using
2406 @code{nnml}.  If all goes well, all the mail in the @file{RMAIL} file is
2407 now also stored in lots of @code{nnml} directories, and you can delete
2408 that pesky @file{RMAIL} file.  If you have the guts!  
2409
2410 Virtual server variables:
2411
2412 @table @code
2413 @item nndoc-article-type
2414 @vindex nndoc-article-type
2415 This should be one of @code{mbox}, @code{babyl}, @code{digest},
2416 @code{mmdf}, @code{forward}, or @code{guess}.
2417 @end table
2418
2419
2420 @node SOUP
2421 @subsection @sc{soup}
2422 @cindex @sc{SOUP}
2423 @cindex offline
2424
2425 In the PC world people often talk about "offline" newsreaders.  These
2426 are thingies that are combined reader/news transport monstrosities.
2427 With built-in modem programs.  Yecchh!  
2428
2429 Of course, us Unix Weenie types of human beans use things like
2430 @code{uucp} and, like, @code{nntpd} and set up proper news and mail
2431 transport things like Ghod inteded.  And then we just use normal
2432 newsreaders.  
2433
2434 However, it can sometimes be convenient to do something a that's a bit
2435 easier on the brain if you have a very slow modem, and you're not really
2436 that interested in doing things properly.  
2437
2438 A file format called @sc{soup} has been developed for transporting news
2439 and mail from servers to home machines and back again.  It can be a bit
2440 fiddly.
2441
2442 @enumerate
2443
2444 @item
2445 You log in on the server and create a @sc{soup} packet.  You can either
2446 use a dedicated @sc{soup} thingie, or you can use Gnus to create the
2447 packet with the @kbd{O s} command.
2448
2449 @item 
2450 You transfer the packet home.  Rail, boat, car or modem will do fine.
2451
2452 @item
2453 You put the packet in your home directory.
2454
2455 @item
2456 You fire up Gnus using the @code{nnsoup} backend as the native server.
2457
2458 @item
2459 You read articles and mail and answer and followup to the things you
2460 want.
2461
2462 @item 
2463 You do the @kbd{G s r} command to pack these replies into a @sc{soup}
2464 packet.
2465
2466 @item 
2467 You transfer this packet to the server.  
2468
2469 @item
2470 You use Gnus to mail this packet out with the @kbd{G s s} command.
2471
2472 @item
2473 You then repeat until you die.
2474
2475 @end enumerate
2476
2477 So you basically have a bipartite system---you use @code{nnsoup} for
2478 reading and Gnus for packing/sending these @sc{soup} packets.
2479
2480 @menu
2481 * SOUP Commands::     Commands for creating and sending @sc{soup} packets
2482 * nnsoup::            A backend for reading @sc{soup} packets.
2483 * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.
2484 @end menu
2485
2486
2487 @node SOUP Commands
2488 @subsubsection @sc{soup} Commands
2489
2490 @table @kbd
2491 @item G s b
2492 @kindex G s b (Group)
2493 @findex gnus-group-brew-soup
2494 Pack all unread articles in the current group
2495 (@code{gnus-group-brew-soup}).  This command understands the
2496 process/prefix convention.
2497
2498 @item G s w
2499 @kindex G s w (Group)
2500 @findex gnus-soup-save-areas
2501 Save all data files (@code{gnus-soup-save-areas}).
2502
2503 @item G s s
2504 @kindex G s s (Group)
2505 @findex gnus-soup-send-replies
2506 Send all replies from the replies packet
2507 (@code{gnus-soup-send-replies}). 
2508
2509 @item G s p
2510 @kindex G s p (Group)
2511 @findex gnus-soup-pack-packet
2512 Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}). 
2513
2514 @item G s r
2515 @kindex G s r (Group)
2516 @findex nnsoup-pack-replies
2517 Pack all replies into a replies packet (@code{nnsoup-pack-replies}). 
2518
2519 @item O s
2520 @kindex O s (Summary)
2521 @findex gnus-soup-add-article
2522 This summary-mode command adds the current article to a @sc{soup} packet
2523 (@code{gnus-soup-add-article}).  It understands the process/prefix
2524 convention. 
2525
2526 @end table
2527
2528
2529 There are a few variables to customize where Gnus will put all these
2530 thingies:  
2531
2532 @table @code
2533
2534 @item gnus-soup-directory
2535 @vindex gnus-soup-directory
2536 Directory where Gnus will save intermediate files while composing
2537 @sc{soup} packets.  The default is @file{~/SoupBrew/}. 
2538
2539 @item gnus-soup-replies-directory
2540 @vindex gnus-soup-replies-directory
2541 This is what Gnus will use as a temporary directory while sending our
2542 reply packets.  The default is @file{~/SoupBrew/SoupReplies/}. 
2543
2544 @item gnus-soup-prefix-file
2545 @vindex gnus-soup-prefix-file
2546 Name of the file where Gnus stores the last used prefix.  The default is
2547 @samp{"gnus-prefix"}. 
2548
2549 @item gnus-soup-packer
2550 @vindex gnus-soup-packer
2551 A format string command for packing a @sc{soup} packet.  The default is
2552 @samp{ "tar cf - %s | gzip > $HOME/Soupout%d.tgz"}. 
2553
2554 @item gnus-soup-unpacker
2555 @vindex gnus-soup-unpacker
2556 Format string command for unpacking a @sc{soup} packet.  The default is
2557 @samp{"gunzip -c %s | tar xvf -"}.
2558
2559 @item gnus-soup-packet-directory
2560 @vindex gnus-soup-packet-directory
2561 Wehre Gnus will look for reply packets.  The default is @file{~/}. 
2562
2563 @item gnus-soup-packet-regexp
2564 @vindex gnus-soup-packet-regexp
2565 Regular expression matching @sc{soup} reply packets in
2566 @code{gnus-soup-packet-directory}. 
2567
2568 @end table
2569  
2570
2571 @node nnsoup
2572 @subsubsection nnsoup
2573 @cindex @code{nnsoup}
2574
2575 @code{nnsoup} is the backend for reading @sc{soup} packets.  It will
2576 read incoming packets, unpack them, and put them in a directory where
2577 you can read them at leisure.
2578
2579 These are the variables you can use to customize its behavior:
2580
2581 @table @code
2582
2583 @item nnsoup-directory
2584 @vindex nnsoup-directory
2585 @code{nnsoup} will move all incoming @sc{soup} packets to this directory
2586 and unpack them there.  The default is @file{~/SOUP/}.
2587
2588 @item nnsoup-replies-directory 
2589 @vindex nnsoup-replies-directory 
2590 All replies will stored in this directory before being packed into a
2591 reply packet.  The default is @file{~/SOUP/replies/"}.
2592
2593 @item nnsoup-replies-format-type
2594 @vindex nnsoup-replies-format-type
2595 The @sc{soup} format of the replies packets.  The default is @samp{?n}
2596 (rnews), and I don't think you should touch that variable.  I probaly
2597 shouldn't even have documented it.  Drats!  Too late!
2598
2599 @item nnsoup-replies-index-type
2600 @vindex nnsoup-replies-index-type
2601 The index type of the replies packet.  The is @samp{?n}, which means
2602 "none".  Don't fiddle with this one either!
2603
2604 @item nnsoup-active-file
2605 @vindex nnsoup-active-file
2606 Where @code{nnsoup} stores lots of information.  This is not an "active
2607 file" in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
2608 this file or mess it up in any way, you're dead.  The default is
2609 @file{~/SOUP/active}.
2610
2611 @item nnsoup-packer
2612 @vindex nnsoup-packer
2613 Format string command for packing a reply @sc{soup} packet.  The default
2614 is @samp{"tar cf - %s | gzip > $HOME/Soupin%d.tgz"}. 
2615
2616 @item nnsoup-unpacker
2617 @vindex nnsoup-unpacker
2618 Format string command for unpacking incoming @sc{soup} packets.  The
2619 default is @samp{"gunzip -c %s | tar xvf -"}. 
2620
2621 @item nnsoup-packet-directory
2622 @vindex nnsoup-packet-directory
2623 Where @code{nnsoup} will look for incoming packets.  The default is
2624 @file{~/}.  
2625
2626 @item nnsoup-packet-regexp
2627 @vindex nnsoup-packet-regexp
2628 Regular expression matching incoming @sc{soup} packets.  The default is
2629 @samp{Soupout}. 
2630
2631 @end table
2632
2633
2634 @node SOUP Replies
2635 @subsubsection @sc{SOUP} Replies
2636
2637 Just using @code{nnsoup} won't mean that your postings and mailings end
2638 up in @sc{soup} reply packets automagically.  You have to work a bit
2639 more for that to happen.
2640
2641 @findex nnsoup-set-variables
2642 The @code{nnsoup-set-variables} command will set the appropriate
2643 variables to ensure that all your followups and replies end up in the
2644 @sc{soup} system.
2645
2646 In specific, this is what it does:
2647
2648 @lisp
2649 (setq gnus-inews-article-function 'nnsoup-request-post)
2650 (setq send-mail-function 'nnsoup-request-mail)
2651 @end lisp
2652
2653 And that's it, really.  If you only want news to go into the @sc{soup}
2654 system you just use the first line.  If you only want mail to be
2655 @sc{soup}ed you use the second.
2656
2657
2658 @node Reading Mail
2659 @subsection Reading Mail
2660 @cindex reading mail
2661 @cindex mail
2662
2663 Reading mail with a newsreader---isn't that just plain WeIrD? But of
2664 course.
2665
2666 Gnus will read the mail spool when you activate a mail group.  The mail
2667 file is first copied to your home directory.  What happens after that
2668 depends on what format you want to store your mail in.
2669
2670 @menu
2671 * Creating Mail Groups::         How to create mail groups.
2672 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
2673 * Mail & Procmail::              Reading mail groups that procmail create.
2674 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
2675 * Not Reading Mail::             Using mail backends for reading other files.
2676 * nnmbox::                       Using the (quite) standard Un*x mbox.
2677 * nnbabyl::                      Emacs programs use the rmail babyl format.
2678 * nnml::                         Store your mail in a private spool?
2679 * nnmh::                         An mhspool-like backend.
2680 * nnfolder::                     Having one file for each group.
2681 @end menu
2682
2683 @vindex nnmail-read-incoming-hook
2684 The mail backends all call @code{nnmail-read-incoming-hook} after
2685 reading new mail.  You can use this hook to notify any mail watch
2686 programs, if you want to.
2687
2688 @vindex nnmail-spool-file
2689 @cindex POP mail
2690 @cindex MAILHOST
2691 @code{nnmail-spool-file} says where to look for new mail.  If this
2692 variable is @code{nil}, the mail backends will never attempt to fetch
2693 mail by themselves.  If you are using a POP mail server and your name is
2694 @samp{"larsi"}, you should set this variable to @samp{"po:larsi"}.  If
2695 your name is not @samp{"larsi"}, you should probably modify that
2696 slightly, but you may have guessed that already, you smart & handsome
2697 devil!  You can also set this variable to @code{pop}, and Gnus will try
2698 to figure out the POP mail string by itself.  In any case, Gnus will
2699 call @code{movemail} which will contact the POP server named in the
2700 @samp{MAILHOST} environment variable.
2701
2702 When you use a mail backend, Gnus will slurp all your mail from your
2703 inbox and plonk it down in your home directory.  Gnus doesn't move any
2704 mail if you're not using a mail backend---you have to do a lot of magic
2705 invocations first.  At the time when you have finished drawing the
2706 pentagram, lightened the candles, and sacrificed the goat, you really
2707 shouldn't be too suprised when Gnus moves your mail.
2708
2709 @vindex nnmail-use-procmail
2710 If @code{nnmail-use-procmail} is non-@code{nil}, the mail backends will
2711 look in @code{nnmail-procmail-directory} for incoming mail.  All the
2712 files in that directory that have names ending in
2713 @code{gnus-procmail-suffix} will be considered incoming mailboxes, and
2714 will be searched for new mail.
2715
2716 @vindex nnmail-prepare-incoming-hook
2717 @code{nnmail-prepare-incoming-hook} is run in a buffer that holds all
2718 the new incoming mail, and can be used for, well, anything, really.
2719
2720 @vindex nnmail-pre-get-new-mail-hook
2721 @vindex nnmail-post-get-new-mail-hook
2722 There are two more useful hooks executed when treating new incoming
2723 mail---@code{nnmail-pre-get-new-mail-hook} (which is called just before
2724 starting to handle the new mail) and
2725 @code{nnmail-post-get-new-mail-hook} (which is called when the mail
2726 handling is done).  Here's and example of using these two hooks to
2727 change the default file modes the new mail files get:
2728
2729 @lisp
2730 (add-hook 'gnus-pre-get-new-mail-hook 
2731           (lambda () (set-default-file-modes 511)))
2732
2733 (add-hook 'gnus-post-get-new-mail-hook 
2734           (lambda () (set-default-file-modes 551)))
2735 @end lisp
2736
2737 @vindex nnmail-tmp-directory
2738 @code{nnmail-tmp-directory} says where to move the incoming mail to
2739 while processing it.  This is usually done in the same directory that
2740 the mail backend inhabits (i.e., @file{~/Mail/}), but if this variable is
2741 non-@code{nil}, it will be used instead.
2742
2743 @vindex nnmail-movemail-program
2744 @code{nnmail-movemail-program} is executed to move mail from the user's
2745 inbox to her home directory.  The default is @samp{"movemail"}.
2746
2747 @vindex nnmail-delete-incoming
2748 If @code{nnmail-delete-incoming} is non-@code{nil}, the mail backends
2749 will delete the temporary incoming file after splitting mail into the
2750 proper groups.  This is @code{nil} by default for reasons of security. 
2751
2752 @vindex nnmail-use-long-file-names
2753 If @code{nnmail-use-long-file-names} is non-@code{nil} the mail backends
2754 will use long file and directory names.  Groups like @samp{mail.misc}
2755 will end up in directories like @file{mail.misc/}.  If it is @code{nil},
2756 the same group will end up in @file{mail/misc/}.
2757
2758 @vindex nnmail-message-id-cache-length
2759 @vindex nnmail-message-id-cache-file
2760 @vindex nnmail-treat-duplicates
2761 @cindex duplicate mails
2762 If you are a member of a couple of mailing list, you will sometime
2763 receive two copies of the same mail.  This can be quite annoying, so
2764 @code{nnmail} checks for and treats any duplicates it might find.  To do
2765 this, it keeps a cache of old @code{Message-ID}s -
2766 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
2767 default.  The approximate maximum number of @code{Message-ID}s stored
2768 there is controlled by the @code{nnmail-message-id-cache-length}
2769 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
2770 stored.) If all this sounds scary to you, you can set
2771 @code{nnmail-delete-duplicates} to @code{warn} (which is what it is by
2772 default), and @code{nnmail} won't delete duplicate mails.  Instead it
2773 will generate a brand new @code{Message-ID} for the mail and insert a
2774 warning into the head of the mail saying that it thinks that this is a
2775 duplicate of a different message.  
2776
2777 This variable can also be a function.  If that's the case, the function
2778 will be called from a buffer narrowed to the message in question with
2779 the @code{Message-ID} as a parameter.  The function must return either
2780 @code{nil}, @code{warn}, or @code{delete}.
2781
2782 You can turn this feature off completely by setting the variable to
2783 @code{nil}.
2784
2785 Here's a neat feature: If you know that the recipient reads her mail
2786 with Gnus, and that she has @code{nnmail-treat-duplicates} set to
2787 @code{delete}, you can send her as many insults as you like, just by
2788 using a @code{Message-ID} of a mail that you know that she's already
2789 received.  Think of all the fun!  She'll never see any of it!  Whee!
2790
2791 Gnus gives you all the opportunity you could possibly want for shooting
2792 yourself in the foot.  Let's say you create a group that will contain
2793 all the mail you get from your boss.  And then you accidentally
2794 unsubscribe from the group.  Gnus will still put all the mail from your
2795 boss in the unsubscribed group, and so, when your boss mails you "Have
2796 that report ready by Monday or you're fired!", you'll never see it and,
2797 come Tuesday, you'll still believe that you're gainfully employed while
2798 you really should be out collecting empty bottles to save up for next
2799 month's rent money.
2800
2801 @node Creating Mail Groups
2802 @subsubsection Creating Mail Groups
2803 @cindex creating mail groups
2804
2805 You can make Gnus read your personal, private, secret mail.
2806
2807 You should first set @code{gnus-secondary-select-methods} to, for
2808 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
2809 this backend for what groups it carries (@samp{mail.misc} by default)
2810 and subscribe it the normal way.  (Which means you may have to look for
2811 it among the zombie groups, I guess, all depending on your
2812 @code{gnus-subscribe-newsgroup-method} variable.)
2813
2814 @vindex nnmail-split-methods
2815 Then you should set the variable @code{nnmail-split-methods} to specify
2816 how the incoming mail is to be split into groups.
2817
2818 @lisp
2819 (setq nnmail-split-methods
2820   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
2821     ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
2822     ("mail.other" "")))
2823 @end lisp
2824
2825 This variable is a list of lists, where the first element of each of
2826 these lists is the name of the mail group (they do not have to be called
2827 something beginning with @samp{mail}, by the way), and the second
2828 element is a regular expression used on the header of each mail to
2829 determine if it belongs in this mail group.
2830
2831 The second element can also be a function.  In that case, it will be
2832 called narrowed to the headers with the first element of the rule as the
2833 argument.  It should return a non-@code{nil} value if it thinks that the
2834 mail belongs in that group.
2835
2836 The last of these groups should always be a general one, and the regular
2837 expression should @emph{always} be @samp{""} so that it matches any
2838 mails that haven't been matched by any of the other regexps.
2839
2840 If you like to tinker with this yourself, you can set this variable to a
2841 function of your choice.  This function will be called without any
2842 arguments in a buffer narrowed to the headers of an incoming mail
2843 message.  The function should return a list of groups names that it
2844 thinks should carry this mail message.
2845
2846 Note that the mail backends are free to maul the poor, innocent
2847 incoming headers all they want to.  They all add @code{Lines} headers;
2848 some add @code{X-Gnus-Group} headers; most rename the Unix mbox
2849 @code{From<SPC>} line to something else.
2850
2851 @vindex nnmail-crosspost
2852 The mail backends all support cross-posting.  If several regexps match,
2853 the mail will be "cross-posted" to all those groups.
2854 @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
2855 that no articles are crossposted to the general (@samp{""}) group. 
2856
2857 @vindex nnmail-crosspost-link-function
2858 @cindex crosspost
2859 @cindex links
2860 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to
2861 the crossposted articles.  However, not all files systems support hard
2862 links.  If that's the case for you, set
2863 @code{nnmail-crosspost-link-function} to @code{copy-file}.  (This
2864 variable is @code{add-name-to-file} by default.)  
2865
2866
2867 @node Fancy Mail Splitting
2868 @subsubsection Fancy Mail Splitting
2869 @cindex mail splitting
2870 @cindex fancy mail splitting
2871
2872 @vindex nnmail-split-fancy
2873 @findex nnmail-split-fancy
2874 If the rather simple, standard method for specifying how to split mail
2875 doesn't allow you to do what you want, you can set
2876 @code{nnmail-split-methods} to @code{nnmail-split-fancy}.  Then you can
2877 play with the @code{nnmail-split-fancy} variable. 
2878
2879 Let's look at an example value of this variable first:
2880
2881 @lisp
2882 ;; Messages from the mailer daemon are not crossposted to any of
2883 ;; the ordinary groups.  Warnings are put in a separate group
2884 ;; from real errors.
2885 (| ("from" mail (| ("subject" "warn.*" "mail.warning")
2886                    "mail.misc"))
2887    ;; Non-error messages are crossposted to all relevant
2888    ;; groups, but we don't crosspost between the group for the
2889    ;; (ding) list and the group for other (ding) related mail.
2890    (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
2891          ("subject" "ding" "ding.misc"))
2892       ;; Other mailing lists...
2893       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
2894       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
2895       ;; People...
2896       (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
2897    ;; Unmatched mail goes to the catch all group.
2898    "misc.misc"))")
2899 @end lisp
2900
2901 This variable has the format of a @dfn{split}.  A split is a (possibly)
2902 recursive structure where each split may contain other splits.  Here are
2903 the four possible split syntaxes:
2904
2905 @table @dfn
2906
2907 @item GROUP 
2908 If the split is a string, that will be taken as a group name. 
2909
2910 @item (FIELD VALUE SPLIT)
2911 If the split is a list, and the first element is a string, then that
2912 means that if header FIELD (a regexp) contains VALUE (also a regexp),
2913 then store the message as specified by SPLIT.
2914
2915 @item (| SPLIT...)
2916 If the split is a list, and the first element is @code{|} (vertical
2917 bar), then process each SPLIT until one of them matches.  A SPLIT is
2918 said to match if it will cause the mail message to be stored in one or
2919 more groups.
2920
2921 @item (& SPLIT...)
2922 If the split is a list, and the first element is @code{&}, then process
2923 all SPLITs in the list.
2924 @end table
2925
2926 In these splits, FIELD must match a complete field name.  VALUE must
2927 match a complete word according to the fundamental mode syntax table.
2928 You can use @code{.*} in the regexps to match partial field names or
2929 words.
2930
2931 @vindex nnmail-split-abbrev-alist
2932 FIELD and VALUE can also be lisp symbols, in that case they are expanded
2933 as specified by the variable @code{nnmail-split-abbrev-alist}.  This is
2934 an alist of cons cells, where the car of the cells contains the key, and
2935 the cdr contains a string.
2936
2937 @node Mail & Procmail
2938 @subsubsection Mail & Procmail
2939 @cindex procmail
2940
2941 Many people use @code{procmail} to split incoming mail into groups.  If
2942 you do that, you should set @code{nnmail-spool-file} to @code{procmail}
2943 to ensure that the mail backends never ever try to fetch mail by
2944 themselves.
2945
2946 This also means that you probably don't want to set
2947 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
2948 side effects.
2949
2950 When a mail backend is queried for what groups it carries, it replies
2951 with the contents of that variable, along with any groups it has figured
2952 out that it carries by other means.  None of the backends (except
2953 @code{nnmh}) actually go out to the disk and check what groups actually
2954 exist.  (It's not trivial to distinguish between what the user thinks is
2955 a basis for a newsgroup and what is just a plain old file or directory.)
2956
2957 This means that you have to tell Gnus (and the backends) what groups
2958 exist by hand.
2959
2960 Let's take the @code{nnmh} backend as an example. 
2961
2962 The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
2963 There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
2964
2965 Go to the group buffer and type @kbd{G m}.  When prompted, answer
2966 @samp{foo} for the name and @samp{nnmh} for the method.  Repeat
2967 twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
2968 to include all your mail groups.
2969
2970 That's it.  You are now set to read your mail.  An active file for this
2971 method will be created automatically.
2972
2973 @vindex nnmail-procmail-suffix
2974 @vindex nnmail-procmail-directory
2975 If you use @code{nnfolder} or any other backend that store more than a
2976 single article in each file, you should never have procmail add mails to
2977 the file that Gnus sees.  Instead, procmail should put all incoming mail
2978 in @code{nnmail-procmail-directory}.  To arrive at the file name to put
2979 the incoming mail in, append @code{nnmail-procmail-suffix} to the group
2980 name.  The mail backends will read the mail from these files.
2981
2982 @vindex nnmail-resplit-incoming
2983 When Gnus reads a file called @file{mail.misc.spool}, this mail will be
2984 put in the @code{mail.misc}, as one would expect.  However, if you want
2985 Gnus to split the mail the normal way, you could set
2986 @code{nnmail-resplit-incoming} to @code{t}.
2987
2988 @vindex nnmail-keep-last-article
2989 If you use @code{procmail} to split things directory into an @code{nnmh}
2990 directory (which you shouldn't do), you should set
2991 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
2992 ever expiring the final article in a mail newsgroup.  This is quite,
2993 quite important.
2994
2995
2996 @node Expiring Old Mail Articles
2997 @subsubsection Expiring Old Mail Articles
2998 @cindex article expiry
2999
3000 Traditional mail readers have a tendency to remove mail articles when
3001 you mark them as read, in some way.  Gnus takes a fundamentally
3002 different approach to mail reading.
3003
3004 Gnus basically considers mail just to be news that has been received in
3005 a rather peculiar manner.  It does not think that it has the power to
3006 actually change the mail, or delete any mail messages.  If you enter a
3007 mail group, and mark articles as "read", or kill them in some other
3008 fashion, the mail articles will still exist on the system.  I repeat:
3009 Gnus will not delete your old, read mail.  Unless you ask it to, of
3010 course.
3011
3012 To make Gnus get rid of your unwanted mail, you have to mark the
3013 articles as @dfn{expirable}.  This does not mean that the articles will
3014 disappear right away, however.  In general, a mail article will be
3015 deleted from your system if, 1) it is marked as expirable, AND 2) it is
3016 more than one week old.  If you do not mark an article as expirable, it
3017 will remain on your system until hell freezes over.  This bears
3018 repeating one more time, with some spurious capitalizations: IF you do
3019 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
3020
3021 @vindex gnus-auto-expirable-newsgroups
3022 You do not have to mark articles as expirable by hand.  Groups that
3023 match the regular expression @code{gnus-auto-expirable-newsgroups} will
3024 have all articles that you read marked as expirable automatically.  All
3025 articles that are marked as expirable have an @samp{E} in the first
3026 column in the summary buffer.
3027
3028 Let's say you subscribe to a couple of mailing lists, and you want the
3029 articles you have read to disappear after a while:
3030
3031 @lisp
3032 (setq gnus-auto-expirable-newsgroups 
3033       "mail.nonsense-list\\|mail.nice-list")
3034 @end lisp
3035
3036 Another way to have auto-expiry happen is to have the element
3037 @code{auto-expire} in the select method of the group. 
3038
3039 @vindex nnmail-expiry-wait
3040 The @code{nnmail-expiry-wait} variable supplies the default time an
3041 expirable article has to live.  The default is seven days.  
3042
3043 Gnus also supplies a function that lets you fine-tune how long articles
3044 are to live, based on what group they are in.  Let's say you want to
3045 have one month expiry period in the @samp{mail.private} group, a one day
3046 expiry period in the @samp{mail.junk} group, and a six day expiry period
3047 everywhere else:
3048
3049 @lisp
3050 (setq nnmail-expiry-wait-function
3051       (lambda (group)
3052        (cond ((string= group "mail.private")
3053                31)
3054              ((string= group "mail.junk")
3055                1)
3056              ((string= group "important")
3057                'never)
3058              (t
3059                6))))
3060 @end lisp
3061
3062 The group names that this function is fed are "unadorned" group
3063 names---no @samp{"nnml:"} prefixes and the like.
3064
3065 The @code{nnmail-expiry-wait} variable and
3066 @code{nnmail-expiry-wait-function} function can be either a number (not
3067 necessarily an integer) or the symbols @code{immediate} or
3068 @code{never}. 
3069
3070 @vindex nnmail-keep-last-article
3071 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
3072 expire the final article in a mail newsgroup.  This is to make life
3073 easier for procmail users.
3074
3075 @vindex gnus-total-expirable-newsgroups
3076 By the way, that line up there about Gnus never expiring non-expirable
3077 articles is a lie.  If you put @code{total-expire} in the group
3078 parameters, articles will not be marked as expirable, but all read
3079 articles will be put through the expiry process.  Use with extreme
3080 caution.  Even more dangerous is the
3081 @code{gnus-total-expirable-newsgroups} variable.  All groups that match
3082 this regexp will have all read articles put through the expiry process,
3083 which means that @emph{all} old mail articles in the groups in question
3084 will be deleted after a while.  Use with extreme caution, and don't come
3085 crying to me when you discover that the regexp you used matched the
3086 wrong group and all your important mail has disappeared.  Be a
3087 @emph{man}!  Or a @emph{woman}!  Whatever you feel more comfortable
3088 with!  So there!
3089
3090
3091 @node Not Reading Mail
3092 @subsubsection Not Reading Mail
3093
3094 If you start using any of the mail backends, they have the annoying
3095 habit of assuming that you want to read mail with them.  This might not
3096 be unreasonable, but it might not be what you want.
3097
3098 If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
3099 will ever attempt to read incoming mail, which should help.
3100
3101 @vindex nnbabyl-get-new-mail
3102 @vindex nnmbox-get-new-mail
3103 @vindex nnml-get-new-mail
3104 @vindex nnmh-get-new-mail
3105 @vindex nnfolder-get-new-mail
3106 This might be too much, if, for instance, you are reading mail quite
3107 happily with @code{nnml} and just want to peek at some old @sc{rmail}
3108 file you have stashed away with @code{nnbabyl}.  All backends have
3109 variables called backend-@code{get-new-mail}.  If you want to disable
3110 the @code{nnbabyl} mail reading, you edit the virtual server for the
3111 group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
3112
3113 All the mail backends will call @code{nn}*@code{-prepare-save-mail-hook}
3114 narrowed to the article to be saved before saving it when reading
3115 incoming mail.
3116
3117 @node nnmbox
3118 @subsubsection nnmbox
3119 @cindex @code{nnmbox}
3120 @cindex unix mail box
3121
3122 @vindex nnmbox-active-file
3123 @vindex nnmbox-mbox-file
3124 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
3125 mail.  @code{nnmbox} will add extra headers to each mail article to say
3126 which group it belongs in.
3127
3128 Virtual server settings:
3129
3130 @table @code
3131 @item nnmbox-mbox-file
3132 @vindex nnmbox-mbox-file
3133 The name of the mail box in the user's home directory. 
3134
3135 @item nnmbox-active-file
3136 @vindex nnmbox-active-file
3137 The name of the active file for the mail box.
3138
3139 @item nnmbox-get-new-mail
3140 @vindex nnmbox-get-new-mail
3141 If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
3142 into groups.
3143 @end table
3144
3145 @node nnbabyl
3146 @subsubsection nnbabyl
3147 @cindex @code{nnbabyl}
3148 @cindex rmail mbox
3149
3150 @vindex nnbabyl-active-file
3151 @vindex nnbabyl-mbox-file
3152 The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
3153 mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
3154 article to say which group it belongs in.
3155
3156 Virtual server settings:
3157
3158 @table @code
3159 @item nnbabyl-mbox-file
3160 @vindex nnbabyl-mbox-file
3161 The name of the rmail mbox file.
3162
3163 @item nnbabyl-active-file
3164 @vindex nnbabyl-active-file
3165 The name of the active file for the rmail box.
3166
3167 @item nnbabyl-get-new-mail
3168 @vindex nnbabyl-get-new-mail
3169 If non-@code{nil}, @code{nnbabyl} will read incoming mail. 
3170 @end table
3171
3172 @node nnml
3173 @subsubsection nnml
3174 @cindex @code{nnml}
3175 @cindex mail @sc{nov} spool
3176
3177 The @dfn{nnml} spool mail format isn't compatible with any other known
3178 format.  It should be used with some caution.
3179
3180 @vindex nnml-directory
3181 If you use this backend, Gnus will split all incoming mail into files;
3182 one file for each mail, and put the articles into the correct
3183 directories under the directory specified by the @code{nnml-directory}
3184 variable.  The default value is @file{~/Mail/}.
3185
3186 You do not have to create any directories beforehand; Gnus will take
3187 care of all that.
3188
3189 If you have a strict limit as to how many files you are allowed to store
3190 in your account, you should not use this backend.  As each mail gets its
3191 own file, you might very well occupy thousands of inodes within a few
3192 weeks.  If this is no problem for you, and it isn't a problem for you
3193 having your friendly systems administrator walking around, madly,
3194 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
3195 know that this is probably the fastest format to use.  You do not have
3196 to trudge through a big mbox file just to read your new mail.
3197
3198 @code{nnml} is probably the slowest backend when it comes to article
3199 splitting.  It has to create lots of files, and it also generates
3200 @sc{nov} databases for the incoming mails.  This makes is the fastest
3201 backend when it comes to reading mail.
3202
3203 Virtual server settings:
3204
3205 @table @code
3206 @item nnml-directory
3207 @vindex nnml-directory
3208 All @code{nnml} directories will be placed under this directory. 
3209
3210 @item nnml-active-file
3211 @vindex nnml-active-file
3212 The active file for the @code{nnml} server.
3213
3214 @item nnml-newsgroups-file
3215 @vindex nnml-newsgroups-file
3216 The @code{nnml} group descriptions file.  @xref{Newsgroups File
3217 Format}. 
3218
3219 @item nnml-get-new-mail
3220 @vindex nnml-get-new-mail
3221 If non-@code{nil}, @code{nnml} will read incoming mail.
3222
3223 @item nnml-nov-is-evil
3224 @vindex nnml-nov-is-evil
3225 If non-@code{nil}, this backend will ignore any @sc{nov} files.  
3226
3227 @item nnml-nov-file-name
3228 @vindex nnml-nov-file-name
3229 The name of the @sc{nov} files.  The default is @file{.overview}. 
3230
3231 @end table
3232
3233 @findex nnml-generate-nov-databases
3234 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
3235 you can do a complete update by typing @kbd{M-x
3236 nnml-generate-nov-databases}.  This command will trawl through the
3237 entire @code{nnml} hierarchy, looking at each and every article, so it
3238 might take a while to complete.
3239
3240 @node nnmh
3241 @subsubsection nnmh
3242 @cindex @code{nnmh}
3243 @cindex mh-e mail spool
3244
3245 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
3246 @sc{nov} databases and it doesn't keep an active file.  This makes
3247 @code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
3248 makes it easier to write procmail scripts for.
3249
3250 Virtual server settings:
3251
3252 @table @code
3253 @item nnmh-directory
3254 @vindex nnmh-directory
3255 All @code{nnmh} directories will be located under this directory.
3256
3257 @item nnmh-get-new-mail
3258 @vindex nnmh-get-new-mail
3259 If non-@code{nil}, @code{nnmh} will read incoming mail.
3260
3261 @item nnmh-be-safe
3262 @vindex nnmh-be-safe
3263 If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
3264 sure that the articles in the folder are actually what Gnus thinks they
3265 are.  It will check date stamps and stat everything in sight, so
3266 setting this to @code{t} will mean a serious slow-down.  If you never
3267 use anything but Gnus to read the @code{nnmh} articles, you do not have
3268 to set this variable to @code{t}.
3269 @end table
3270
3271
3272 @node nnfolder
3273 @subsubsection nnfolder
3274 @cindex @code{nnfolder}
3275 @cindex mbox folders
3276
3277 @code{nnfolder} is a backend for storing each mail group in a separate
3278 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
3279 will add extra headers to keep track of article numbers and arrival
3280 dates.
3281
3282 Virtual server settings:
3283
3284 @table @code
3285 @item nnfolder-directory
3286 @vindex nnfolder-directory
3287 All the @code{nnfolder} mail boxes will be stored under this directory. 
3288
3289 @item nnfolder-active-file
3290 @vindex nnfolder-active-file
3291 The name of the active file.
3292
3293 @item nnfolder-newsgroups-file
3294 @vindex nnfolder-newsgroups-file
3295 The name of the group descriptions file.  @xref{Newsgroups File Format}.
3296
3297 @item nnfolder-get-new-mail
3298 @vindex nnfolder-get-new-mail
3299 If non-@code{nil}, @code{nnfolder} will read incoming mail.
3300 @end table
3301
3302 @findex nnfolder-generate-active-file
3303 @kindex M-x nnfolder-generate-active-file
3304 If you have lots of @code{nnfolder}-like files you'd like to read with
3305 @code{nnfolder}, you can use the @key{M-x nnfolder-generate-active-file}
3306 command to make @code{nnfolder} aware of all likely files in
3307 @code{nnfolder-directory}.
3308
3309
3310 @node Group Parameters
3311 @section Group Parameters
3312 @cindex group parameters
3313
3314 Gnus stores all information on a group in a list that is usually known
3315 as the @dfn{group info}.  This list has from three to six elements.
3316 Here's an example info.
3317
3318 @lisp
3319 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
3320                   (nnml "private") ((to-address . "ding@@ifi.uio.no")))
3321 @end lisp
3322
3323 The first element is the @dfn{group name}, as Gnus knows the group,
3324 anyway.  The second element is the @dfn{subscription level}, which
3325 normally is a small integer.  The third element is a list of ranges of
3326 read articles.  The fourth element is a list of lists of article marks
3327 of various kinds.  The fifth element is the select method (or virtual
3328 server, if you like).  The sixth element is a list of @dfn{group
3329 parameters}, which is what this section is about.
3330
3331 Any of the last three elements may be missing if they are not required.
3332 In fact, the vast majority of groups will normally only have the first
3333 three elements, which saves quite a lot of cons cells.
3334
3335 The group parameters store information local to a particular group:
3336
3337 @table @code
3338 @item to-address
3339 @cindex to-address
3340 If the group parameter list contains an element that looks like
3341 @samp{(to-address .  "some@@where.com")}, that address will be used by
3342 the backend when doing followups and posts.  This is primarily useful in
3343 mail groups that represent closed mailing lists---mailing lists where
3344 it's expected that everybody that writes to the mailing list is
3345 subscribed to it.  Since using this parameter ensures that the mail only
3346 goes to the mailing list itself, it means that members won't receive two
3347 copies of your followups.
3348
3349 Using @code{to-address} will actually work whether the group is foreign
3350 or not.  Let's say there's a group on the server that is called
3351 @samp{fa.4ad-l}.  This is a real newsgroup, but the server has gotten
3352 the articles from a mail-to-news gateway.  Posting directly to this
3353 group is therefore impossible---you have to send mail to the mailing
3354 list address instead.  Also @xref{Mail & Post}.
3355
3356 @item to-list
3357 @cindex to-list
3358 If the group parameter list has an element that looks like
3359 @code{(to-list . "some@@where.com")}, that address will be used when
3360 doing a @kbd{a} in any group.  It is totally ignored when doing a
3361 followup---except that if it is present in a news group, you'll get mail
3362 group semantics when doing @kbd{f}.
3363
3364 @item broken-reply-to
3365 @cindex broken-reply-to
3366 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
3367 headers in this group are to be ignored.  This can be useful if you're
3368 reading a mailing list group where the listserv has inserted
3369 @code{Reply-To} headers that point back to the listserv itself.  This is
3370 broken behavior.  So there!
3371
3372 @item to-group
3373 @cindex to-group
3374 If the group parameter list contains an element like @code{(to-group
3375 . "some.group.name")}, all posts will be sent to that group.
3376
3377 @item auto-expire
3378 @cindex auto-expire
3379 If this symbol is present in the group parameter list, all articles that
3380 are read will be marked as expirable.  For an alternative approach,
3381 @xref{Expiring Old Mail Articles}.
3382
3383 @item total-expire
3384 @cindex total-expire
3385 If this symbol is present, all read articles will be put through the
3386 expiry process, even if they are not marked as expirable.  Use with
3387 caution. 
3388
3389 @item expiry-wait
3390 @cindex expiry-wait
3391 If the group parameter has an element that looks like @samp{(expiry-wait
3392 . 10)}, this value will override any @code{nnmail-expiry-wait} and
3393 @code{nnmail-expiry-wait-functions} when expiring expirable messages.
3394 The value can either be a number of days (not necessarily an integer) or
3395 the symbols @code{never} or @code{immediate}.
3396
3397 @item score-file
3398 Elements that look like @samp{(score-file . "file")} will make
3399 @samp{file} into the current score file for the group in question.  This
3400 means that all score commands you issue will end up in that file. 
3401
3402 @item admin-address
3403 When unsubscribing to a mailing list you should never send the
3404 unsubscription notice to the mailing list itself.  Instead, you'd send
3405 messages to the administrative address.  This parameter allows you to
3406 put the admin address somewhere convenient.
3407
3408 @item comment
3409 This parameter allows you to enter a random comment on the group.
3410
3411 @item @var{(variable form)}
3412 You can use the group parameters to set variables local to the group you
3413 are entering.  Say you want to turn threading off in
3414 @samp{news.answers}.  You'd then put @code{(gnus-show-threads nil)} in
3415 the group parameters of that group.  @code{gnus-show-threads} will be
3416 made into a local variable in the summary buffer you enter, and the form
3417 @code{nil} will be @code{eval}ed there.  
3418
3419 This can also be used as a group-specific hook function, if you'd like.
3420 If you want to hear a beep when you enter the group
3421 @samp{alt.binaries.pictures.furniture}, you could put something like
3422 @code{(dummy-variable (ding))} in the parameters of that group.
3423 @code{dummy-variable} will be set to the result of the @code{(ding)}
3424 form, but who cares?
3425
3426 @end table
3427
3428 If you want to change the group info you can use the @kbd{G E} command
3429 to enter a buffer where you can edit it.
3430
3431 You usually don't want to edit the entire group info, so you'd be better
3432 off using the @kbd{G p} command to just edit the group parameters.
3433
3434 @node Listing Groups
3435 @section Listing Groups
3436 @cindex group listing
3437
3438 These commands all list various slices of the groups that are available.
3439
3440 @table @kbd
3441
3442 @item l
3443 @itemx A s
3444 @kindex A s (Group)
3445 @kindex l (Group)
3446 @findex gnus-group-list-groups
3447 List all groups that have unread articles
3448 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
3449 command will list only groups of level ARG and lower.  By default, it
3450 only lists groups of level five or lower (i.e., just subscribed groups).
3451
3452 @item L
3453 @itemx A u
3454 @kindex A u (Group)
3455 @kindex L (Group)
3456 @findex gnus-group-list-all-groups
3457 List all groups, whether they have unread articles or not
3458 (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
3459 this command will list only groups of level ARG and lower.  By default,
3460 it lists groups of level seven or lower (i.e., just subscribed and
3461 unsubscribed groups).
3462
3463 @item A l
3464 @kindex A l (Group)
3465 @findex gnus-group-list-level
3466 List all unread groups on a specific level
3467 (@code{gnus-group-list-level}).  If given a prefix, also list the groups
3468 with no unread articles.
3469
3470 @item A k
3471 @kindex A k (Group)
3472 @findex gnus-group-list-killed
3473 List all killed groups (@code{gnus-group-list-killed}).  If given a
3474 prefix argument, really list all groups that are available, but aren't
3475 currently (un)subscribed.  This could entail reading the active file
3476 from the server.
3477
3478 @item A z
3479 @kindex A z (Group)
3480 @findex gnus-group-list-zombies
3481 List all zombie groups (@code{gnus-group-list-zombies}).
3482
3483 @item A m
3484 @kindex A m (Group)
3485 @findex gnus-group-list-matching
3486 List all subscribed groups with unread articles that match a regexp
3487 (@code{gnus-group-list-matching}). 
3488
3489 @item A M
3490 @kindex A M (Group)
3491 @findex gnus-group-list-all-matching
3492 List groups that match a regexp (@code{gnus-group-list-all-matching}).
3493
3494 @item A A
3495 @kindex A A (Group)
3496 @findex gnus-group-list-active
3497 List absolutely all groups that are in the active file(s) of the
3498 server(s) you are connected to (@code{gnus-group-list-active}).  This
3499 might very well take quite a while.  It might actually be a better idea
3500 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
3501 thing to match on.
3502
3503 @end table
3504
3505 @vindex gnus-permanently-visible-groups
3506 @cindex visible group paramenter
3507 Groups that match the @code{gnus-permanently-visible-groups} regexp will
3508 always be shown, whether they have unread articles or not.  You can also
3509 add the @code{visible} element to the group parameters in question to
3510 get the same effect.
3511
3512 @vindex gnus-list-groups-with-ticked-articles
3513 Groups that have just ticked articles in it are normally listed in the
3514 group buffer.  If @code{gnus-list-groups-with-ticked-articles} is
3515 @code{nil}, these groups will be treated just like totally empty
3516 groups.  It is @code{t} by default.
3517
3518
3519 @node Sorting Groups
3520 @section Sorting Groups
3521 @cindex sorting groups
3522
3523 @kindex C-c C-s (Group)
3524 @findex gnus-group-sort-groups
3525 @vindex gnus-group-sort-function
3526 The @kbd{C-c C-s} (@code{gnus-group-srot-groups}) command sorts the
3527 group buffer according to the function(s) given by the
3528 @code{gnus-group-sort-function} variable.  Available sorting functions
3529 include: 
3530
3531 @table @code
3532
3533 @item gnus-group-sort-by-alphabet
3534 @findex gnus-group-sort-by-alphabet
3535 Sort the group names alphabetically.  This is the default.
3536
3537 @item gnus-group-sort-by-level
3538 @findex gnus-group-sort-by-level
3539 Sort by group level.
3540
3541 @item gnus-group-sort-by-score
3542 @findex gnus-group-sort-by-score
3543 Sort by group score.
3544
3545 @item gnus-group-sort-by-rank
3546 @findex gnus-group-sort-by-rank
3547 Sort by group score and then the group level.  The level and the score
3548 are, when taken together, the group's @dfn{rank}. 
3549
3550 @item gnus-group-sort-by-unread
3551 @findex gnus-group-sort-by-unread
3552 Sort by number of unread articles.
3553
3554 @item gnus-group-sort-by-method
3555 @findex gnus-group-sort-by-method
3556 Sort by alphabetically on the select method.
3557
3558
3559 @end table
3560
3561 @code{gnus-group-sort-function} can also be a list of sorting
3562 functions.  In that case, the most significant sort key function must be
3563 the last one.
3564
3565
3566 There are also a number of commands for sorting directly according to
3567 some sorting criteria:
3568
3569 @table @kbd
3570 @item G S a
3571 @kindex G S a (Group)
3572 @findex gnus-group-sort-groups-by-alphabet
3573 Sort the group buffer alphabetically by group name
3574 (@code{gnus-group-sort-groups-by-alphabet}). 
3575
3576 @item G S u
3577 @kindex G S u (Group)
3578 @findex gnus-group-sort-groups-by-unread
3579 Sort the group buffer by the number of unread articles
3580 (@code{gnus-group-sort-groups-by-unread}).
3581
3582 @item G S l
3583 @kindex G S l (Group)
3584 @findex gnus-group-sort-groups-by-level
3585 Sort the group buffer by group level
3586 (@code{gnus-group-sort-groups-by-level}). 
3587
3588 @item G S v
3589 @kindex G S v (Group)
3590 @findex gnus-group-sort-groups-by-score
3591 Sort the group buffer by group score
3592 (@code{gnus-group-sort-groups-by-score}). 
3593
3594 @item G S r
3595 @kindex G S r (Group)
3596 @findex gnus-group-sort-groups-by-rank
3597 Sort the group buffer by group level
3598 (@code{gnus-group-sort-groups-by-rank}). 
3599
3600 @item G S m
3601 @kindex G S m (Group)
3602 @findex gnus-group-sort-groups-by-method
3603 Sort the group buffer alphabetically by backend name
3604 (@code{gnus-group-sort-groups-by-method}). 
3605
3606 @end table
3607
3608 When given a prefix, all these commands will sort in reverse order. 
3609
3610
3611
3612 @node Group Maintenance
3613 @section Group Maintenance
3614 @cindex bogus groups
3615
3616 @table @kbd
3617 @item b
3618 @kindex b (Group)
3619 @findex gnus-group-check-bogus-groups
3620 Find bogus groups and delete them
3621 (@code{gnus-group-check-bogus-groups}).
3622
3623 @item F
3624 @kindex F (Group)
3625 @findex gnus-find-new-newsgroups
3626 Find new groups and process them (@code{gnus-find-new-newsgroups}).  If
3627 given a prefix, use the @code{ask-server} method to query the server for
3628 new groups.
3629
3630 @item C-c C-x
3631 @kindex C-c C-x (Group)
3632 @findex gnus-group-expire-articles
3633 Run all expirable articles in the current group through the expiry
3634 process (if any) (@code{gnus-group-expire-articles}).
3635
3636 @item C-c M-C-x
3637 @kindex C-c M-C-x (Group)
3638 @findex gnus-group-expire-all-groups
3639 Run all articles in all groups through the expiry process
3640 (@code{gnus-group-expire-all-groups}).
3641
3642 @end table
3643
3644
3645 @node Browse Foreign Server
3646 @section Browse Foreign Server
3647 @cindex foreign servers
3648 @cindex browsing servers
3649
3650 @table @kbd
3651 @item B
3652 @kindex B (Group)
3653 @findex gnus-group-browse-foreign-server
3654 You will be queried for a select method and a server name.  Gnus will
3655 then attempt to contact this server and let you browse the groups there
3656 (@code{gnus-group-browse-foreign-server}).
3657 @end table
3658
3659 @findex gnus-browse-server-mode
3660 A new buffer with a list of available groups will appear.  This buffer
3661 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
3662 (well, a lot) like a normal group buffer, but with one major difference
3663 - you can't enter any of the groups.  If you want to read any of the
3664 news available on that server, you have to subscribe to the groups you
3665 think may be interesting, and then you have to exit this buffer.  The
3666 new groups will be added to the group buffer, and then you can read them
3667 as you would any other group.
3668
3669 Future versions of Gnus may possibly permit reading groups straight from
3670 the browse buffer.
3671
3672 Here's a list of keystrokes available in the browse mode:
3673
3674 @table @kbd
3675 @item n
3676 @kindex n (Browse)
3677 @findex gnus-group-next-group
3678 Go to the next group (@code{gnus-group-next-group}).
3679
3680 @item p
3681 @kindex p (Browse)
3682 @findex gnus-group-prev-group
3683 Go to the previous group (@code{gnus-group-prev-group}).
3684
3685 @item SPACE
3686 @kindex SPACE (Browse)
3687 @findex gnus-browse-read-group
3688 Enter the current group and display the first article
3689 (@code{gnus-browse-read-group}). 
3690
3691 @item RET
3692 @kindex RET (Browse)
3693 @findex gnus-browse-select-group
3694 Enter the current group (@code{gnus-browse-select-group}). 
3695
3696 @item u
3697 @kindex u (Browse)
3698 @findex gnus-browse-unsubscribe-current-group
3699 Unsubscribe to the current group, or, as will be the case here,
3700 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
3701
3702 @item l
3703 @itemx q
3704 @kindex q (Browse)
3705 @kindex l (Browse)
3706 @findex gnus-browse-exit
3707 Exit browse mode (@code{gnus-browse-exit}).
3708
3709 @item ?
3710 @kindex ? (Browse)
3711 @findex gnus-browse-describe-briefly
3712 Describe browse mode briefly (well, there's not much to describe, is
3713 there) (@code{gnus-browse-describe-briefly}).
3714 @end table
3715
3716 @node Exiting Gnus
3717 @section Exiting Gnus
3718 @cindex exiting Gnus
3719
3720 Yes, Gnus is ex(c)iting.
3721
3722 @table @kbd
3723 @item z
3724 @kindex z (Group)
3725 @findex gnus-group-suspend
3726 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
3727 but it kills all buffers except the Group buffer.  I'm not sure why this
3728 is a gain, but then who am I to judge?
3729
3730 @item q
3731 @kindex q (Group)
3732 @findex gnus-group-exit
3733 Quit Gnus (@code{gnus-group-exit}).
3734
3735 @item Q
3736 @kindex Q (Group)
3737 @findex gnus-group-quit
3738 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
3739 @end table
3740
3741 @vindex gnus-exit-gnus-hook
3742 @vindex gnus-suspend-gnus-hook
3743 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3744 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
3745
3746 @findex gnus-unload
3747 @cindex unloading
3748 If you wish to completely unload Gnus and all its adherents, you can use
3749 the @code{gnus-unload} command.  This command is also very handy when
3750 trying to custoize meta-variables.
3751
3752 Note:
3753
3754 @quotation
3755 Miss Lisa Cannifax, while sitting in English class, feels her feet go
3756 numbly heavy and herself fall into a hazy trance as the boy sitting
3757 behind her drew repeated lines with his pencil across the back of her
3758 plastic chair.
3759 @end quotation
3760
3761
3762 @node Group Topics
3763 @section Group Topics
3764 @cindex topics
3765
3766 If you read lots and lots of groups, it might be convenient to group
3767 them hierarchically according to topics.  You put your Emacs groups over
3768 here, your sex groups over there, and the rest (what, two groups or so?)
3769 you put in some misc section that you never bother with anyway.  You can
3770 even group the Emacs sex groups as a sub-topic to either the Emacs
3771 groups or the sex groups---or both!  Go wild!
3772
3773 @findex gnus-topic-mode
3774 @kindex t (Group)
3775 To get this @emph{fab} functionality you simply turn on (ooh!) the
3776 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
3777 is a toggling command.)
3778
3779 Go ahead, just try it.  I'll still be here when you get back.  La de
3780 dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now
3781 press @kbd{l}.  There.  All your groups are now listed under
3782 @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and
3783 bothered?
3784
3785 If you want this permanently enabled, you should add that minor mode to
3786 the hook for the group mode:
3787
3788 @lisp
3789 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3790 @end lisp
3791
3792 @menu 
3793 * Topic Variables::    How to customize the topics the Lisp Way.
3794 * Topic Commands::     Interactive E-Z commands.
3795 * Topic Topology::     A map of the world.
3796 @end menu
3797
3798
3799 @node Topic Variables
3800 @subsection Topic Variables
3801 @cindex topic variables
3802
3803
3804 @vindex gnus-group-topic-topics-only
3805 Whoo, this is complicated.  If @code{gnus-group-topic-topics-only} is
3806 @code{nil}, all groups and topics will be listed, as you would expect.
3807 If this variable is non-@code{nil}, only the topics will be listed, and
3808 the groups will not be listed.  This makes the group buffer much shorter,
3809 I'm sure you'll agree.  This is all modified on a topic-by-topic basis
3810 by the @var{show} parameter.   It makes perfect sense, really.
3811
3812 @vindex gnus-topic-unique
3813 If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
3814 of (tops) one topic each.  If this is @code{nil}, each group might end
3815 up being a member of several topics.
3816
3817 Now, if you select a topic, if will fold/unfold that topic, which is
3818 really neat, I think.
3819
3820 @vindex gnus-topic-line-format
3821 The topic lines themselves are created according to the
3822 @code{gnus-topic-line-format} variable.  @xref{Formatting Variables}.
3823 Elements allowed are:
3824
3825 @table @samp
3826 @item i
3827 Indentation.
3828 @item n
3829 Topic name.
3830 @item v
3831 Visibility.
3832 @item l
3833 Level.
3834 @item g
3835 Number of groups in the topic.
3836 @item a
3837 Number of unread articles in the topic.
3838 @end table
3839
3840
3841 @node Topic Commands
3842 @subsection Topic Commands
3843 @cindex topic commands
3844
3845 When the topic minor mode is turned on, a new @kbd{T} submap will be
3846 available.  In addition, a few of the standard keys change their
3847 definitions slightly.
3848
3849 @table @kbd
3850
3851 @item T n
3852 @kindex T n (Group)
3853 @findex gnus-topic-create-topic
3854 Create a new topic (@code{gnus-topic-create-subtopic}).  You will be
3855 prompted for a topic name and the name of the parent topic.
3856
3857 @item T m
3858 @kindex T m (Group)
3859 @findex gnus-topic-move-group
3860 Move the current group to some other topic
3861 (@code{gnus-topic-move-group}).  This command understands the
3862 process/prefix convention (@pxref{Process/Prefix}).
3863
3864 @item T c
3865 @kindex T c (Group)
3866 @findex gnus-topic-copy-group
3867 Copy the current group to some other topic
3868 (@code{gnus-topic-copy-group}).  This command understands the
3869 process/prefix convention (@pxref{Process/Prefix}).
3870
3871 @item T M
3872 @kindex T M (Group)
3873 @findex gnus-topic-move-matching
3874 Move all groups that match some regular expression to a topic
3875 (@code{gnus-topic-move-matching}). 
3876
3877 @item T C
3878 @kindex T C (Group)
3879 @findex gnus-topic-copy-matching
3880 Copy all groups that match some regular expression to a topic
3881 (@code{gnus-topic-copy-matching}). 
3882
3883 @item RET
3884 @kindex RET (Group)
3885 @findex gnus-topic-select-group
3886 @itemx SPACE
3887 Either select a group or fold a topic (@code{gnus-topic-select-group}).
3888 When you perform this command on a group, you'll enter the group, as
3889 usual.  When done on a topic line, the topic will be folded (if it was
3890 visible) or unfolded (if it was folded already).  So it's basically a
3891 toggling command on topics.  In addition, if you give a numerical
3892 prefix, group on that level (and lower) will be displayed.
3893
3894 @item C-k
3895 @kindex C-k (Group)
3896 @findex gnus-topic-kill-group
3897 Kill a group or topic (@code{gnus-topic-kill-group}).  
3898
3899 @item C-y
3900 @kindex C-y (Group)
3901 @findex gnus-topic-yank-group
3902 Yank the previosuly killed group or topic (@code{gnus-topic-yank-group}).
3903 Note that all topics will be yanked before all groups.
3904
3905 @item T r
3906 @kindex T r (Group)
3907 @findex gnus-topic-rename
3908 Rename a topic (@code{gnus-topic-rename}). 
3909
3910 @item T DEL
3911 @kindex T DEL (Group)
3912 @findex gnus-topic-delete
3913 Delete an empty topic (@code{gnus-topic-delete}). 
3914
3915 @item A T
3916 @kindex A T (Group)
3917 @findex gnus-topic-list-active
3918 List all groups that Gnus knows about in a topicsified way
3919 (@code{gnus-topic-list-active}).
3920
3921 @end table
3922
3923
3924 @node Topic Topology
3925 @subsection Topic Topology
3926 @cindex topic topology
3927 @cindex topology
3928
3929 So, let's have a look at an example group buffer:
3930
3931 @example
3932 Gnus
3933   Emacs -- I wuw it!
3934        3: comp.emacs
3935        2: alt.religion.emacs
3936     Naughty Emacs
3937      452: alt.sex.emacs
3938        0: comp.talk.emacs.recovery
3939   Misc
3940        8: comp.binaries.fractals
3941       13: comp.sources.unix
3942 @end example
3943
3944 So, here we have one top-level topic, two topics under that, and one
3945 sub-topic under one of the sub-topics.  (There is always just one (1)
3946 top-level topic).  This topology can be expressed as follows:
3947
3948 @lisp
3949 (("Gnus" visible)
3950  (("Emacs -- I wuw it!" visible) 
3951   (("Naughty Emacs" visible)))
3952  (("Misc" visible)))
3953 @end lisp
3954
3955 This is in fact how the variable @code{gnus-topic-topology} would look
3956 for the display above.  That variable is saved in the @file{.newsrc.eld}
3957 file, and shouldn't be messed with manually---unless you really want
3958 to.  Since this variable is read from the @file{.newsrc.eld} file,
3959 setting it in any other startup files will have no effect.  
3960
3961 This topology shows what topics are sub-topics of what topics (right),
3962 and which topics are visible.  Two settings are currently
3963 allowed---@code{visible} and @code{invisible}.
3964
3965 @vindex gnus-topic-hide-subtopics
3966 If @code{gnus-topic-hide-subtopics} is non-@code{nil} (which it is by
3967 default), sub-topics will be folded along with any groups that belong to
3968 the topic.  If this variable is @code{nil}, all topics will always be
3969 visible, even though the parent topics are folded.
3970
3971
3972 @node Misc Group Stuff
3973 @section Misc Group Stuff
3974
3975 @table @kbd
3976
3977 @item g
3978 @kindex g (Group)
3979 @findex gnus-group-get-new-news
3980 Check the server(s) for new articles.  If the numerical prefix is used,
3981 this command will check only groups of level @var{arg} and lower
3982 (@code{gnus-group-get-new-news}).  If given a non-numerical prefix, this
3983 command will force a total rereading of the active file(s) from the
3984 backend(s).
3985
3986 @item M-g
3987 @kindex M-g (Group)
3988 @findex gnus-group-get-new-news-this-group
3989 @vindex gnus-goto-next-group-when-activating
3990 Check whether new articles have arrived in the current group
3991 (@code{gnus-group-get-new-news-this-group}).  The
3992 @code{gnus-goto-next-group-when-activating} variable controls whether
3993 this command is to move point to the next group or not.  It is @code{t}
3994 by default.
3995
3996 @findex gnus-activate-all-groups
3997 @item C-c M-g
3998 @kindex C-c M-g (Group)
3999 Activate absolutely all groups (@code{gnus-activate-all-groups}). 
4000
4001 @item ^
4002 @kindex ^ (Group)
4003 @findex gnus-group-enter-server-mode
4004 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
4005 Server Buffer}.
4006
4007 @item M-f
4008 @kindex M-f (Group)
4009 @findex gnus-group-fetch-faq
4010 Try to fetch the FAQ for the current group
4011 (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from
4012 @code{gnus-group-faq-directory}, which is usually a directory on a
4013 remote machine.  @code{ange-ftp} will be used for fetching the file.
4014
4015 @item R
4016 @kindex R (Group)
4017 @findex gnus-group-restart
4018 Restart Gnus (@code{gnus-group-restart}).
4019
4020 @item r
4021 @kindex r (Group)
4022 @findex gnus-group-read-init-file
4023 @vindex gnus-init-file
4024 Read the init file (@code{gnus-init-file}, which defaults to
4025 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
4026
4027 @item s
4028 @kindex s (Group)
4029 @findex gnus-group-save-newsrc
4030 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
4031 (@code{gnus-group-save-newsrc}).  If given a prefix, force saving the
4032 file(s) whether Gnus thinks it is necessary or not.
4033
4034 @item Z
4035 @kindex Z (Group)
4036 @findex gnus-group-clear-dribble
4037 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
4038
4039 @item D
4040 @kindex D (Group)
4041 @findex gnus-group-describe-group
4042 Describe the current group (@code{gnus-group-describe-group}).  If given
4043 a prefix, force Gnus to re-read the description from the server.
4044
4045 @item G a
4046 @kindex G a (Group)
4047 @findex gnus-group-apropos
4048 List all groups that have names that match a regexp
4049 (@code{gnus-group-apropos}).
4050
4051 @item G d
4052 @kindex G d (Group)
4053 @findex gnus-group-description-apropos
4054 List all groups that have names or descriptions that match a regexp
4055 (@code{gnus-group-description-apropos}).
4056
4057 @item a
4058 @kindex a (Group)
4059 @findex gnus-group-post-news
4060 Post an article to a group (@code{gnus-group-post-news}).  The current
4061 group name will be used as the default.
4062
4063 @item m
4064 @kindex m (Group)
4065 @findex gnus-group-mail
4066 Mail a message somewhere (@code{gnus-group-mail}).
4067
4068 @item C-x C-t
4069 @kindex C-x C-t (Group)
4070 @findex gnus-group-transpose-groups
4071 Transpose two groups (@code{gnus-group-transpose-groups}).
4072
4073 @item V
4074 @kindex V (Group)
4075 @findex gnus-version
4076 Display current Gnus version numbers (@code{gnus-version}).
4077
4078 @item M-d
4079 @kindex M-d (Group)
4080 @findex gnus-group-describe-all-groups
4081 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
4082 prefix, force Gnus to re-read the description file from the server.
4083
4084 @item ?
4085 @kindex ? (Group)
4086 @findex gnus-group-describe-briefly
4087 Give a very short help message (@code{gnus-group-describe-briefly}).
4088
4089 @item C-c C-i
4090 @kindex C-c C-i (Group)
4091 @findex gnus-info-find-node
4092 Go to the Gnus info node (@code{gnus-info-find-node}).
4093 @end table
4094
4095 @vindex gnus-group-prepare-hook
4096 @code{gnus-group-prepare-hook} is called after the group buffer is
4097 generated.  It may be used to modify the buffer in some strange,
4098 unnatural way.
4099
4100 @node The Summary Buffer
4101 @chapter The Summary Buffer
4102 @cindex summary buffer
4103
4104 A line for each article is displayed in the summary buffer.  You can
4105 move around, read articles, post articles and reply to articles.
4106
4107 @menu
4108 * Summary Buffer Format::       Deciding how the summary buffer is to look.
4109 * Summary Maneuvering::         Moving around the summary buffer.
4110 * Choosing Articles::           Reading articles.
4111 * Paging the Article::          Scrolling the current article.
4112 * Reply Followup and Post::     Posting articles.
4113 * Canceling and Superseding::   "Whoops, I shouldn't have called him that."
4114 * Marking Articles::            Marking articles as read, expirable, etc.
4115 * Limiting::                    You can limit the summary buffer.
4116 * Threading::                   How threads are made.
4117 * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
4118 * Article Caching::             You may store articles in a cache.
4119 * Persistent Articles::         Making articles expiry-resistant.
4120 * Article Backlog::             Having already read articles hang around.
4121 * Exiting the Summary Buffer::  Returning to the Group buffer.
4122 * Process/Prefix::              A convention used by many treatment commands.
4123 * Saving Articles::             Ways of customizing article saving.
4124 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
4125 * Article Treatment::           The article buffer can be mangled at will.
4126 * Summary Sorting::             You can sort the summary buffer four ways.
4127 * Finding the Parent::          No child support? Get the parent.
4128 * Alternative Approaches::      Reading using non-default summaries.
4129 * Tree Display::                A more visual display of threads.
4130 * Mail Group Commands::         Some commands can only be used in mail groups.
4131 * Various Summary Stuff::       What didn't fit anywhere else.
4132 @end menu
4133
4134
4135 @node Summary Buffer Format
4136 @section Summary Buffer Format
4137 @cindex summary buffer format
4138
4139 @menu
4140 * Summary Buffer Lines::     You can specify how summary lines should look.
4141 * Summary Buffer Mode Line:: You can say how the mode line should look.
4142 @end menu
4143
4144 @findex mail-extract-address-components
4145 @findex gnus-extract-address-components
4146 @vindex gnus-extract-address-components
4147 Gnus will use the value of the @code{gnus-extract-address-components}
4148 variable as a function for getting the name and address parts of a
4149 @code{From} header.  Two pre-defined function exist:
4150 @code{gnus-extract-address-components}, which is the default, quite
4151 fast, and too simplistic solution; and
4152 @code{mail-extract-address-components}, which works very nicely, but is
4153 slower.
4154
4155 @vindex gnus-summary-same-subject
4156 @code{gnus-summary-same-subject} is a string indicating that the current
4157 article has the same subject as the previous.  This string will be used
4158 with those specs that require it.  The default is @samp{""}.
4159
4160 @node Summary Buffer Lines
4161 @subsection Summary Buffer Lines
4162
4163 @vindex gnus-summary-line-format
4164 You can change the format of the lines in the summary buffer by changing
4165 the @code{gnus-summary-line-format} variable.  It works along the same
4166 lines a a normal @code{format} string, with some extensions.
4167
4168 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
4169
4170 The following format specification characters are understood:
4171
4172 @table @samp
4173 @item N 
4174 Article number.
4175 @item S
4176 Subject string.
4177 @item s
4178 Subject if the article is the root, @code{gnus-summary-same-subject}
4179 otherwise. 
4180 @item F
4181 Full @code{From} line.
4182 @item n
4183 The name (from the @code{From} header).
4184 @item a
4185 The name (from the @code{From} header).  This differs from the @code{n}
4186 spec in that it uses @code{gnus-extract-address-components}, which is
4187 slower, but may be more thorough.
4188 @item A
4189 The address (from the @code{From} header).  This works the same way as
4190 the @code{a} spec.
4191 @item L
4192 Number of lines in the article.
4193 @item c
4194 Number of characters in the article.
4195 @item I
4196 Indentation based on thread level (@pxref{Customizing Threading}).
4197 @item T
4198 Nothing if the article is a root and lots of spaces if it isn't (it
4199 pushes everything after it off the screen).
4200 @item \[
4201 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
4202 for adopted articles.
4203 @item \]
4204 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
4205 for adopted articles.
4206 @item <
4207 One space for each thread level.
4208 @item >
4209 Twenty minus thread level spaces.
4210 @item U
4211 Unread.
4212 @item R
4213 Replied.
4214 @item i
4215 Score as a number.
4216 @item z
4217 @vindex gnus-summary-zcore-fuzz
4218 Zcore, @samp{+} if above the default level and @samp{-} if below the
4219 default level.  If the difference between
4220 @code{gnus-summary-default-level} and the score is less than
4221 @code{gnus-summary-zcore-fuzz}, this spec will not be used.
4222 @item V
4223 Total thread score.
4224 @item x
4225 @code{Xref}.
4226 @item D
4227 @code{Date}.
4228 @item M
4229 @code{Message-ID}.
4230 @item r
4231 @code{References}.
4232 @item t
4233 Number of articles in the current sub-thread.  Using this spec will slow
4234 down summary buffer generation somewhat.
4235 @item e
4236 A single character will be displayed if the article has any children. 
4237 @item u
4238 User defined specifier.  The next character in the format string should
4239 be a letter.  @sc{gnus} will call the function
4240 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
4241 following @samp{%u}.  The function will be passed the current header as
4242 argument.  The function should return a string, which will be inserted
4243 into the summary just like information from any other summary specifier.
4244 @end table
4245
4246 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
4247 have to be handled with care.  For reasons of efficiency, Gnus will
4248 compute what column these characters will end up in, and "hard-code"
4249 that.  This means that it is illegal to have these specs after a
4250 variable-length spec.  Well, you might not be arrested, but your summary
4251 buffer will look strange, which is bad enough.
4252
4253 The smart choice is to have these specs as far to the left as possible.
4254 (Isn't that the case with everything, though?  But I digress.)
4255
4256 This restriction may disappear in later versions of Gnus.
4257
4258 @node Summary Buffer Mode Line
4259 @subsection Summary Buffer Mode Line
4260
4261 @vindex gnus-summary-mode-line-format
4262 You can also change the format of the summary mode bar.  Set
4263 @code{gnus-summary-mode-line-format} to whatever you like.  Here are the
4264 elements you can play with:
4265
4266 @table @samp
4267 @item G
4268 Group name.
4269 @item p
4270 Unprefixed group name.
4271 @item A
4272 Current article number.
4273 @item V
4274 Gnus version.
4275 @item U
4276 Number of unread articles in this group.
4277 @item e
4278 Number of unselected articles in this group.
4279 @item Z
4280 A string with the number of unread and unselected articles represented
4281 either as @samp{<%U(+%u) more>} if there are both unread and unselected
4282 articles, and just as @samp{<%U more>} if there are just unread articles
4283 and no unselected ones.
4284 @item g
4285 Shortish group name.  For instance, @samp{rec.arts.anime} will be
4286 shortened to @samp{r.a.anime}. 
4287 @item S
4288 Subject of the current article.
4289 @item u
4290 Used-defined spec.
4291 @item s
4292 Name of the current score file.
4293 @item d
4294 Number of dormant articles.
4295 @item t
4296 Number of ticked articles.
4297 @item r
4298 Number of articles that have been marked as read in this session. 
4299 @item E
4300 Number of articles expunged by the score files.
4301 @end table
4302
4303
4304 @node Summary Maneuvering
4305 @section Summary Maneuvering
4306 @cindex summary movement
4307
4308 All the straight movement commands understand the numeric prefix and
4309 behave pretty much as you'd expect. 
4310
4311 None of these commands select articles.
4312
4313 @table @kbd
4314 @item G M-n
4315 @itemx M-n
4316 @kindex M-n (Summary)
4317 @kindex G M-n (Summary)
4318 @findex gnus-summary-next-unread-subject
4319 Go to the next summary line of an unread article
4320 (@code{gnus-summary-next-unread-subject}). 
4321
4322 @item G M-p
4323 @itemx M-p
4324 @kindex M-p (Summary)
4325 @kindex G M-p (Summary)
4326 @findex gnus-summary-prev-unread-subject
4327 Go to the previous summary line of an unread article
4328 (@code{gnus-summary-prev-unread-subject}). 
4329
4330 @item G g
4331 @itemx j
4332 @kindex j (Summary)
4333 @kindex G g (Summary)
4334 @findex gnus-summary-goto-subject
4335 Ask for an article number and then go to this summary line
4336 (@code{gnus-summary-goto-subject}). 
4337 @end table
4338
4339 If Gnus asks you to press a key to confirm going to the next group, you
4340 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
4341 buffer, searching for the next group to read without actually returning
4342 to the group buffer.
4343
4344 Variables related to summary movement:
4345
4346 @table @code
4347
4348 @vindex gnus-auto-select-next
4349 @item gnus-auto-select-next
4350 If you are at the end of the group and issue one of the movement
4351 commands, Gnus will offer to go to the next group.  If this variable is
4352 @code{t} and the next group is empty, Gnus will exit summary mode and
4353 return to the group buffer.  If this variable is neither @code{t} nor
4354 @code{nil}, Gnus will select the next group, no matter whether it has
4355 any unread articles or not.  As a special case, if this variable is
4356 @code{quietly}, Gnus will select the next group without asking for
4357 confirmation.  If this variable is @code{almost-quietly}, the same will
4358 happen only if you are located on the last article in the group.  Also
4359 @xref{Group Levels}.
4360
4361 @item gnus-auto-select-same
4362 @vindex gnus-auto-select-same
4363 If non-@code{nil}, all the movement commands will try to go to the next
4364 article with the same subject as the current.  This variable is not
4365 particularly useful if you use a threaded display.
4366
4367 @item gnus-summary-check-current
4368 @vindex gnus-summary-check-current
4369 If non-@code{nil}, all the "unread" movement commands will not proceed
4370 to the next (or previous) article if the current article is unread.
4371 Instead, they will choose the current article.
4372
4373 @item gnus-auto-center-summary
4374 @vindex gnus-auto-center-summary
4375 If non-@code{nil}, Gnus will keep the point in the summary buffer
4376 centered at all times.  This makes things quite tidy, but if you have a
4377 slow network connection, or simply do not like this un-Emacsism, you can
4378 set this variable to @code{nil} to get the normal Emacs scrolling
4379 action.  This will also inhibit horizontal recentering of the summary
4380 buffer, which might make it more inconvenient to read extremely long
4381 threads.
4382
4383 @end table
4384
4385
4386 @node Choosing Articles
4387 @section Choosing Articles
4388 @cindex selecting articles
4389
4390 None of the following movement commands understand the numeric prefix,
4391 and they all select and display an article.
4392
4393 @table @kbd
4394 @item SPACE
4395 @kindex SPACE (Summary)
4396 @findex gnus-summary-next-page
4397 Select the current article, or, if that one's read already, the next
4398 unread article (@code{gnus-summary-next-page}).
4399
4400 @item G n
4401 @itemx n
4402 @kindex n (Summary)
4403 @kindex G n (Summary)
4404 @findex gnus-summary-next-unread-article
4405 Go to next unread article (@code{gnus-summary-next-unread-article}).
4406
4407 @item G p
4408 @itemx p
4409 @kindex p (Summary)
4410 @findex gnus-summary-prev-unread-article
4411 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
4412
4413 @item G N
4414 @itemx N
4415 @kindex N (Summary)
4416 @kindex G N (Summary)
4417 @findex gnus-summary-next-article
4418 Go to the next article (@code{gnus-summary-next-article}).
4419
4420 @item G P
4421 @itemx P
4422 @kindex P (Summary)
4423 @kindex G P (Summary)
4424 @findex gnus-summary-prev-article
4425 Go to the previous article (@code{gnus-summary-prev-article}).
4426
4427 @item G C-n
4428 @kindex G C-n (Summary)
4429 @findex gnus-summary-next-same-subject
4430 Go to the next article with the same subject
4431 (@code{gnus-summary-next-same-subject}). 
4432
4433 @item G C-p
4434 @kindex G C-p (Summary)
4435 @findex gnus-summary-prev-same-subject
4436 Go to the previous article with the same subject
4437 (@code{gnus-summary-prev-same-subject}). 
4438
4439 @item G f
4440 @itemx .
4441 @kindex G f  (Summary)
4442 @kindex .  (Summary)
4443 @findex gnus-summary-first-unread-article
4444 Go to the first unread article
4445 (@code{gnus-summary-first-unread-article}).
4446
4447 @item G b
4448 @itemx ,
4449 @kindex G b (Summary)
4450 @kindex , (Summary)
4451 Go to the article with the highest score
4452 (@code{gnus-summary-best-unread-article}). 
4453
4454 @item G l
4455 @itemx l
4456 @kindex l (Summary)
4457 @kindex G l (Summary)
4458 @findex gnus-summary-goto-last-article
4459 Go to the previous article read (@code{gnus-summary-goto-last-article}).
4460
4461 @item G p
4462 @kindex G p (Summary)
4463 @findex gnus-summary-pop-article
4464 Pop an article off the summary history and go to this article
4465 (@code{gnus-summary-pop-article}).  This command differs from the
4466 command above in that you can pop as many previous articles off the
4467 history as you like.
4468 @end table
4469
4470 Some variables that are relevant for moving and selecting articles:
4471
4472 @table @code
4473 @item gnus-auto-extend-newsgroup
4474 @vindex gnus-auto-extend-newsgroup
4475 All the movement commands will try to go to the previous (or next)
4476 article, even if that article isn't displayed in the Summary buffer if
4477 this variable is non-@code{nil}.  Gnus will then fetch the article from
4478 the server and display it in the article buffer.
4479
4480 @item gnus-select-article-hook
4481 @vindex gnus-select-article-hook
4482 This hook is called whenever an article is selected.  By default it
4483 exposes any threads hidden under the selected article.
4484
4485 @item gnus-mark-article-hook
4486 @vindex gnus-mark-article-hook
4487 This hook is called whenever an article is selected.  It is intended to
4488 be used for marking articles as read.
4489
4490 @item gnus-visual-mark-article-hook
4491 @vindex gnus-visual-mark-article-hook
4492 This hook is run after selecting an article.  It is meant to be used for
4493 highlighting the article in some way.  It is not run if
4494 @code{gnus-visual} is @code{nil}.
4495
4496 @item gnus-summary-update-hook
4497 @vindex gnus-summary-update-hook
4498 This hook is called when a summary line is changed.  It is not run if
4499 @code{gnus-visual} is @code{nil}.
4500
4501 @item gnus-summary-selected-face
4502 @vindex gnus-summary-selected-face
4503 This is the face (or @dfn{font} as some people call it) that is used to
4504 highlight the current article in the summary buffer.
4505
4506 @item gnus-summary-highlight
4507 @vindex gnus-summary-highlight
4508 Summary lines are highlighted according to this variable, which is a
4509 list where the elements are on the format @code{(FORM . FACE)}.  If you
4510 would, for instance, like ticked articles to be italic and high-scored
4511 articles to be bold, you could set this variable to something like
4512 @lisp
4513 (((eq mark gnus-ticked-mark) . italic)
4514  ((> score default) . bold))
4515 @end lisp
4516 As you may have guessed, if @var{FORM} returns a non-@code{nil} value,
4517 @var{FACE} will be applied to the line.
4518 @end table
4519
4520 @node Paging the Article
4521 @section Scrolling the Article
4522 @cindex article scrolling
4523
4524 @table @kbd
4525
4526 @item SPACE
4527 @kindex SPACE (Summary)
4528 @findex gnus-summary-next-page
4529 Pressing @kbd{SPACE} will scroll the current article forward one page,
4530 or, if you have come to the end of the current article, will choose the
4531 next article (@code{gnus-summary-next-page}).
4532
4533 @item DEL
4534 @kindex DEL (Summary)
4535 @findex gnus-summary-prev-page
4536 Scroll the current article back one page (@code{gnus-summary-prev-page}). 
4537
4538 @item RET
4539 @kindex RET (Summary)
4540 @findex gnus-summary-scroll-up
4541 Scroll the current article one line forward
4542 (@code{gnus-summary-scroll-up}).
4543
4544 @item A <
4545 @itemx <
4546 @kindex < (Summary)
4547 @kindex A < (Summary)
4548 @findex gnus-summary-beginning-of-article
4549 Scroll to the beginning of the article
4550 (@code{gnus-summary-beginning-of-article}).
4551
4552 @item A >
4553 @itemx >
4554 @kindex > (Summary)
4555 @kindex A > (Summary)
4556 @findex gnus-summary-end-of-article
4557 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
4558
4559 @item A s 
4560 @kindex A s (Summary)
4561 @findex gnus-summary-isearch-article
4562 Perform an isearch in the article buffer
4563 (@code{gnus-summary-isearch-article}). 
4564
4565 @end table
4566
4567 @node Reply Followup and Post
4568 @section Reply, Followup and Post
4569 @cindex reply
4570 @cindex followup
4571 @cindex post
4572
4573 @kindex C-c C-c (Post)
4574 All the commands for posting and mailing will put you in a post or mail
4575 buffer where you can edit the article all you like, before you send the
4576 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
4577 and you wish to post the article using the foreign server, you can give
4578 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
4579 server. 
4580
4581 @menu 
4582 * Mail::                 Mailing & replying.
4583 * Post::                 Posting and following up.
4584 * Posting Server::       What server should you post via?
4585 * Mail & Post::          Mailing and posting at the same time.
4586 * Archived Messages::    Where Gnus stores the messages you've sent.
4587 * Posting Styles::       An easier way to configure some key elements.
4588 * Drafts::               Postponing messages and rejected messages.
4589 * Rejected Articles::    What happens if the server doesn't like your article?
4590 @end menu
4591
4592 @node Mail
4593 @subsection Mail
4594
4595 Commands for composing a mail message:
4596
4597 @table @kbd
4598
4599 @item S r
4600 @itemx r
4601 @kindex S r (Summary)
4602 @kindex r (Summary)
4603 @findex gnus-summary-reply
4604 Mail a reply to the author of the current article
4605 (@code{gnus-summary-reply}). 
4606
4607 @item S R
4608 @itemx R
4609 @kindex R (Summary)
4610 @kindex S R (Summary)
4611 @findex gnus-summary-reply-with-original
4612 Mail a reply to the author of the current article and include the
4613 original message (@code{gnus-summary-reply-with-original}).  This
4614 command uses the process/prefix convention.
4615
4616 @item S o m
4617 @kindex S o m (Summary)
4618 @findex gnus-summary-mail-forward
4619 Forward the current article to some other person
4620 (@code{gnus-summary-mail-forward}). 
4621
4622 @item S o p
4623 @kindex S o p (Summary)
4624 @findex gnus-summary-post-forward
4625 Forward the current article to a newsgroup
4626 (@code{gnus-summary-post-forward}).
4627
4628 @item S m
4629 @itemx m
4630 @kindex m (Summary)
4631 @kindex S m (Summary)
4632 @findex gnus-summary-mail-other-window
4633 Send a mail to some other person
4634 (@code{gnus-summary-mail-other-window}).
4635
4636 @item S D b
4637 @kindex S D b (Summary)
4638 @findex gnus-summary-resend-bounced-mail
4639 If you have sent a mail, but the mail was bounced back to you for some
4640 reason (wrong address, transient failure), you can use this command to
4641 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
4642 will be popped into a mail buffer where you can edit the headers before
4643 sending the mail off again.  The headers that match the regexp
4644 @code{gnus-bounced-headers-junk} (default @samp{^Received:}) are
4645 automatically deleted first.  If you give a prefix to this command, and
4646 the bounced mail is a reply to some other mail, Gnus will try to fetch
4647 that mail and display it for easy perusal of its headers.  This might
4648 very well fail, though.
4649
4650 @item S D r
4651 @kindex S D r (Summary)
4652 @findex gnus-summary-resend-message
4653 Not to be confused with the previous command,
4654 @code{gnus-summary-resend-message} will prompt you for an address to
4655 send the current message off to, and then send it to that place.  The
4656 headers of the message won't be altered---but lots of headers that say
4657 @samp{Resent-To}, @samp{Resent-From} and so on will be added.  This
4658 means that you actually send a mail to someone that has a @samp{To}
4659 header that (proabbly) points to yourself.  This will confuse people.
4660 So, natcherly you'll only do that if you're really eVIl.  
4661
4662 This command is mainly used if you have several accounts and want to
4663 ship a mail to a different account of yours.  (If you're both
4664 @samp{root} and @samp{postmaster} and get a mail for @samp{postmaster}
4665 to the @samp{root} account, you may want to resend it to
4666 @samp{postmaster}.  Ordnung muss sein!
4667
4668 @item S O m
4669 @kindex S O m (Summary)
4670 @findex gnus-uu-digest-mail-forward
4671 Digest the current series and forward the result using mail
4672 (@code{gnus-uu-digest-mail-forward}).  This command uses the
4673 process/prefix convention (@pxref{Process/Prefix}). 
4674
4675 @item S O p
4676 @kindex S O p (Summary)
4677 @findex gnus-uu-digest-post-forward
4678 Digest the current series and forward the result to a newsgroup
4679 (@code{gnus-uu-digest-mail-forward}).  
4680 @end table
4681
4682 Variables for customizing outgoing mail:
4683
4684 @table @code
4685 @item gnus-reply-to-function
4686 @vindex gnus-reply-to-function
4687 Gnus uses the normal methods to determine where replies are to go, but
4688 you can change the behavior to suit your needs by fiddling with this
4689 variable.
4690
4691 If you want the replies to go to the @samp{Sender} instead of the
4692 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4693 like this:
4694
4695 @lisp
4696 (setq gnus-reply-to-function
4697       (lambda (group)
4698        (cond ((string= group "mail.stupid-list")
4699                (mail-fetch-field "sender"))
4700              (t
4701               nil))))
4702 @end lisp
4703
4704 This function will be called narrowed to the head of the article that is
4705 being replied to.
4706
4707 As you can see, this function should return a string if it has an
4708 opinion as to what the To header should be.  If it does not, it should
4709 just return @code{nil}, and the normal methods for determining the To
4710 header will be used.
4711
4712 This function can also return a list.  In that case, each list element
4713 should be a cons, where the car should be the name of an header
4714 (eg. @samp{Cc}) and the cdr should be the header value
4715 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
4716 the head of the outgoing mail. 
4717
4718 @item gnus-mail-send-method
4719 @vindex gnus-mail-send-method
4720 This variable says how a mail should be mailed.  It uses the function in
4721 the @code{send-mail-function} variable as the default.
4722
4723 @item gnus-uu-digest-headers
4724 @vindex gnus-uu-digest-headers
4725 List of regexps to match headers included in digested messages.  The
4726 headers will be included in the sequence they are matched.
4727
4728 @item gnus-mail-hook
4729 @vindex gnus-mail-hook
4730 Hook called as the last thing after setting up a mail buffer.
4731
4732 @item gnus-required-mail-headers
4733 @vindex gnus-required-mail-headers
4734 Gnus will generate headers in all outgoing mail instead of letting
4735 @code{sendmail} do it for us.  This makes it possible to do more neat
4736 stuff, like putting mail without sending it, do hairy @code{Fcc}
4737 handling, and much more.  This variable controls what headers Gnus will
4738 generate, and is of the exact same form as @code{gnus-required-headers},
4739 which does the same for news articles (@pxref{Post}). 
4740
4741 The @code{Newsgroups} header is illegal in this list, while @code{To} is
4742 required, and @code{X-Mailer} can be added if you so should want.
4743
4744 @findex gnus-forward-start-separator
4745 @item gnus-forward-start-separator
4746 Delimiter inserted before forwarded messages.
4747
4748 @findex gnus-forward-end-separator
4749 @item gnus-forward-end-separator
4750 Delimiter inserted after forwarded messages.
4751
4752 @vindex gnus-signature-before-forwarded-message
4753 @item gnus-signature-before-forwarded-message
4754 If this variable is @code{t}, which it is by default, your personal
4755 signature will be inserted before the forwarded message.  If not, the
4756 forwarded message will be inserted first in the new mail.
4757
4758 @item gnus-forward-included-headers
4759 @vindex gnus-forward-included-headers
4760 Regexp matching header lines to be included in forwarded messages.  It
4761 usese the same regexp as @code{gnus-visible-headers} by default.
4762
4763 @end table
4764
4765 @kindex C-c C-c (Mail)
4766 @kindex C-c C-p (Mail)
4767 @findex gnus-put-message
4768 You normally send a mail message by pressing @kbd{C-c C-c}.  However,
4769 you may wish to just put the mail message you have just written in your
4770 own local mail group instead of sending it.  Sounds quite unlikely, but
4771 I found that useful, so you can now also press @kbd{C-c C-p} to
4772 @dfn{put} the article in the current mail group, or, if there is no such
4773 thing, you will be prompted for a mail group, and then the article will
4774 be put there.  This means that the article is @dfn{not} mailed.  
4775
4776 There are three "methods" for handling all mail.  The default is
4777 @code{sendmail}.  Some people like what @code{mh} does better, and some
4778 people prefer @code{vm}.
4779
4780 Three variables for customizing what to use when:
4781
4782 @table @code
4783
4784 @vindex gnus-mail-reply-method
4785 @item gnus-mail-reply-method
4786 This function is used to compose replies.  The three functions avaibale
4787 are:
4788
4789 @findex gnus-mail-reply-using-vm
4790 @findex gnus-mail-reply-using-mhe
4791 @findex gnus-mail-reply-using-mail
4792 @itemize @bullet
4793 @item 
4794 @code{gnus-mail-reply-using-mail} (sendmail)
4795 @item 
4796 @code{gnus-mail-reply-using-mhe} (mh)
4797 @item
4798 @code{gnus-mail-reply-using-vm} (vm)
4799 @end itemize
4800
4801 @vindex gnus-mail-forward-method
4802 @item gnus-mail-forward-method
4803 This function is used to forward messages.  The three functions avaibale
4804 are:
4805
4806 @findex gnus-mail-forward-using-vm
4807 @findex gnus-mail-forward-using-mhe
4808 @findex gnus-mail-forward-using-mail
4809 @itemize @bullet
4810 @item 
4811 @code{gnus-mail-forward-using-mail} (sendmail)
4812 @item 
4813 @code{gnus-mail-forward-using-mhe} (mh)
4814 @item
4815 @code{gnus-mail-forward-using-vm} (vm)
4816 @end itemize
4817
4818 @vindex gnus-mail-other-window-method
4819 @item gnus-mail-other-window-method
4820 This function is used to send mails.  The three functions avaibale are:
4821
4822 @findex gnus-mail-other-window-using-vm
4823 @findex gnus-mail-other-window-using-mhe
4824 @findex gnus-mail-other-window-using-mail
4825 @itemize @bullet
4826 @item 
4827 @code{gnus-mail-other-window-using-mail} (sendmail)
4828 @item 
4829 @code{gnus-mail-other-window-using-mhe} (mh)
4830 @item
4831 @code{gnus-mail-other-window-using-vm} (vm)
4832 @end itemize
4833
4834 @end table
4835
4836
4837 @node Post
4838 @subsection Post
4839
4840 Commands for posting an article:
4841
4842 @table @kbd
4843 @item S p
4844 @itemx a
4845 @kindex a (Summary)
4846 @kindex S p (Summary)
4847 @findex gnus-summary-post-news
4848 Post an article to the current group
4849 (@code{gnus-summary-post-news}).
4850
4851 @item S f
4852 @itemx f
4853 @kindex f (Summary)
4854 @kindex S f (Summary)
4855 @findex gnus-summary-followup
4856 Post a followup to the current article (@code{gnus-summary-followup}).
4857
4858 @item S F
4859 @itemx F
4860 @kindex S F (Summary)
4861 @kindex F (Summary)
4862 @findex gnus-summary-followup-with-original
4863 Post a followup to the current article and include the original message
4864 (@code{gnus-summary-followup-with-original}).   This command uses the
4865 process/prefix convention.
4866
4867 @item S u
4868 @kindex S u (Summary)
4869 @findex gnus-uu-post-news
4870 Uuencode a file, split it into parts, and post it as a series
4871 (@code{gnus-uu-post-news}). 
4872 @c (@pxref{Uuencoding & Posting}). 
4873 @end table
4874
4875 @vindex gnus-required-headers
4876 @code{gnus-required-headers} a list of header symbols.  These headers
4877 will either be automatically generated, or, if that's impossible, they
4878 will be prompted for.  The following symbols are legal:
4879
4880 @table @code
4881
4882 @item From
4883 This required header will be filled out with the result of the
4884 @code{gnus-inews-user-name} function, which depends on the
4885 @code{gnus-user-from-line}, @code{gnus-user-login-name},
4886 @code{gnus-local-domain} and @code{user-mail-address} variables.
4887
4888 @item Subject
4889 This required header will be prompted for if not present already. 
4890
4891 @item Newsgroups
4892 This required header says which newsgroups the article is to be posted
4893 to.  If it isn't present already, it will be prompted for.
4894
4895 @item Organization
4896 @cindex organization
4897 @vindex gnus-local-organization
4898 @vindex gnus-organization-file
4899 This optional header will be filled out depending on the
4900 @code{gnus-local-organization} variable.  @code{gnus-organization-file}
4901 will be used if that variable is nil.
4902
4903 @item Lines
4904 This optional header will be computed by Gnus.
4905
4906 @item Message-ID
4907 @cindex Message-ID
4908 This required header will be generated by Gnus.  A unique ID will be
4909 created based on date, time, user name and system name.
4910
4911 @item X-Newsreader
4912 @cindex X-Newsreader
4913 This optional header will be filled out with the Gnus version numbers. 
4914
4915 @item Expires
4916 @vindex gnus-article-expires
4917 @cindex Expires
4918 This extremely optional header will be inserted according to the
4919 @code{gnus-article-expires} variable.  It is highly deprecated and
4920 shouldn't be used unless you know what you're doing.
4921
4922 @item Distribution
4923 This optional header is filled out according to the
4924 @code{gnus-distribution-function} variable.  It is a deprecated and much
4925 misunderstood header.
4926 @end table
4927
4928 In addition, you can enter conses into this list.  The car of this cons
4929 should be a symbol.  This symbol's name is the name of the header, and
4930 the cdr can either be a string to be entered verbatim as the value of
4931 this header, or it can be a function to be called.  This function should
4932 return a string to be inserted.  For instance, if you want to insert
4933 @samp{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
4934 into the list.  If you want to insert a funny quote, you could enter
4935 something like @code{(X-Yow . yow)} into the list.  The function
4936 @code{yow} will then be called without any arguments.
4937
4938 The list contains a cons where the car of the cons is @code{optional},
4939 the cdr of this cons will only be inserted if it is non-@code{nil}.
4940
4941 Other variables for customizing outgoing articles:
4942
4943 @table @code
4944 @item nntp-news-default-headers
4945 @vindex nntp-news-default-headers
4946 If non-@code{nil}, this variable will override
4947 @code{mail-default-headers} when posting.  This variable should then be
4948 a string.  This string will be inserted, as is, in the head of all
4949 outgoing articles.
4950
4951 @item gnus-use-followup-to
4952 @vindex gnus-use-followup-to
4953 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
4954 use its value, but ignore the special value @samp{poster}, which will
4955 send the followup as a reply mail to the person you are responding to.
4956 If it is the symbol @code{ask}, query the user before posting.
4957 If it is the symbol @code{use}, always use the value.
4958
4959 @item gnus-followup-to-function
4960 @vindex gnus-followup-to-function
4961 This variable is most useful in mail groups, where "following up" really
4962 means sending a mail to a list address.  Gnus uses the normal methods to
4963 determine where follow-ups are to go, but you can change the behavior
4964 to suit your needs by fiddling with this variable.
4965
4966 If you want the followups to go to the @samp{Sender} instead of the
4967 @samp{From} in the group @samp{mail.stupid-list}, you could do something
4968 like this:
4969
4970 @lisp
4971 (setq gnus-followup-to-function
4972       (lambda (group)
4973        (cond ((string= group "mail.stupid-list")
4974                (mail-fetch-field "sender"))
4975              (t
4976               nil))))
4977 @end lisp
4978
4979 This function will be called narrowed to header of the article that is
4980 being followed up.
4981
4982 @item gnus-removable-headers
4983 @vindex gnus-removable-headers
4984 Some headers that are generated are toxic to the @sc{nntp} server.
4985 These include the @code{NNTP-Posting-Host}, @code{Bcc} and @code{Xref},
4986 so these headers are deleted if they are present in this list of
4987 symbols.
4988
4989 @item gnus-deletable-headers
4990 @vindex gnus-deletable-headers
4991 Headers in this list that were previously generated by Gnus will be
4992 deleted before posting.  Let's say you post an article.  Then you decide
4993 to post it again to some other group, you naughty boy, so you jump back
4994 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
4995 ship it off again.  By default, this variable makes sure that the old
4996 generated @code{Message-ID} is deleted, and a new one generated.  If
4997 this isn't done, the entire empire would probably crumble, anarchy would
4998 prevail, and cats would start walking on two legs and rule the world.
4999 Allegedly. 
5000
5001 @item gnus-signature-function
5002 @vindex gnus-signature-function
5003 If non-@code{nil}, this variable should be a function that returns a
5004 signature file name.  The function will be called with the name of the
5005 group being posted to.  If the function returns a string that doesn't
5006 correspond to a file, the string itself is inserted.  If the function
5007 returns @code{nil}, the @code{gnus-signature-file} variable will be used
5008 instead.
5009
5010 @item gnus-post-prepare-function
5011 @vindex gnus-post-prepare-function
5012 This function is called with the name of the current group after the
5013 post buffer has been initialized, and can be used for inserting a
5014 signature.  Nice if you use different signatures in different groups.
5015
5016 @item gnus-post-prepare-hook
5017 @vindex gnus-post-prepare-hook
5018 This hook is called after a post buffer has been prepared.  If you want
5019 to insert a signature at this point, you could put
5020 @code{gnus-inews-insert-signature} into this hook.
5021
5022 @item news-reply-header-hook
5023 @vindex news-reply-header-hook
5024 A related variable when following up and replying is this variable,
5025 which inserts the @dfn{quote line}.  The default value is:
5026
5027 @lisp
5028 (defvar news-reply-header-hook
5029   (lambda ()
5030     (insert "In article " news-reply-yank-message-id
5031             " " news-reply-yank-from " writes:\n\n")))
5032 @end lisp
5033
5034 This will create lines like:
5035
5036 @example
5037 In article <zngay8jrql@@eyesore.no> Lars Mars <lars@@eyesore.no> writes:
5038 @end example
5039
5040 Having the @code{Message-ID} in this line is probably overkill, so I
5041 would suggest this hook instead:
5042
5043 @lisp
5044 (setq news-reply-header-hook
5045   (lambda () (insert news-reply-yank-from " writes:\n\n")))
5046 @end lisp
5047
5048 @item gnus-prepare-article-hook
5049 @vindex gnus-prepare-article-hook
5050 This hook is called before the headers have been prepared.  
5051
5052 @item gnus-inews-article-function
5053 @vindex gnus-inews-article-function
5054 This function is used to do the actual article processing and header
5055 checking/generation.  
5056
5057 @item gnus-inews-article-hook
5058 @vindex gnus-inews-article-hook
5059 This hook is called right before the article is posted.  By default it
5060 handles FCC processing (i.e., saving the article to a file.)  You can
5061 also have this hook add a score to all followups to the article you've
5062 written (@pxref{Followups To Yourself}). 
5063
5064 @item gnus-inews-article-header-hook
5065 @vindex gnus-inews-article-header-hook
5066 This hook is called after inserting the required headers in an article
5067 to be posted.  The hook is called from the @code{*post-news*} buffer,
5068 narrowed to the head, and is intended for people who would like to
5069 insert additional headers, or just change headers in some way or other.
5070
5071 @item gnus-check-before-posting
5072 @vindex gnus-check-before-posting
5073 If non-@code{nil}, Gnus will attempt to check the legality of the
5074 headers, as well as some other stuff, before posting.  You can control
5075 the granularity of the check by adding or removing elements from this
5076 list.  Legal elements are:
5077
5078 @table @code
5079 @item subject-cmsg 
5080 Check the subject for commands.
5081 @item sender
5082 Insert a new @code{Sender} header if the @code{From} header looks odd. 
5083 @item multiple-headers 
5084 Check for the existence of multiple equal headers.
5085 @item sendsys 
5086 Check for the existence of version and sendsys commands.
5087 @item message-id
5088 Check whether the @code{Message-ID} looks ok.
5089 @item from
5090 Check whether the @code{From} header seems nice.
5091 @item long-lines 
5092 Check for too long lines.
5093 @item control-chars
5094 Check for illegal characters.
5095 @item size
5096 Check for excessive size.
5097 @item new-text
5098 Check whether there is any new text in the messages.
5099 @item signature
5100 Check the length of the signature.
5101 @item approved
5102 Check whether the article has an @code{Approved} header, which is
5103 something only moderators should include.
5104 @item empty
5105 Check whether the article is empty.
5106 @end table
5107
5108 @end table
5109
5110
5111
5112 @node Posting Server
5113 @subsection Posting Server
5114
5115 When you press those magical @kbd{C-c C-c} keys to ship off your latest
5116 (extremely intelligent, of course) article, where does it go?
5117
5118 Thank you for asking.  I hate you.
5119
5120 @vindex gnus-post-method
5121
5122 It can be quite complicated.  Normally, Gnus will use the same native
5123 server.  However.  If your native server doesn't allow posting, just
5124 reading, you probably want to use some other server to post your
5125 (extremely intelligent and fabulously interesting) articles.  You can
5126 then set the @code{gnus-post-method} to some other method:
5127
5128 @lisp
5129 (setq gnus-post-method '(nnspool ""))
5130 @end lisp
5131
5132 Now, if you've done this, and then this server rejects your article, or
5133 this server is down, what do you do then?  To override this variable you
5134 can use a non-zero prefix to the @kbd{C-c C-c} command to force using
5135 the "current" server for posting.
5136
5137 If you give a zero prefix (i. e., @kbd{C-u 0 C-c C-c}) to that command,
5138 Gnus will prompt you for what method to use for posting.  
5139
5140 You can also set @code{gnus-post-method} to a list of select methods.
5141 If that's the case, Gnus will always prompt you for what method to use
5142 for posting. 
5143
5144
5145 @node Mail & Post
5146 @subsection Mail & Post
5147
5148 Commands for sending mail and post at the same time:
5149
5150 @table @kbd
5151 @item S b
5152 @kindex S b (Summary)
5153 @findex gnus-summary-followup-and-reply
5154 Post a followup and send a reply to the current article
5155 (@code{gnus-summary-followup-and-reply}).
5156
5157 @item S B
5158 @kindex S B (Summary)
5159 @findex gnus-summary-followup-and-reply-with-original
5160 Post a followup and send a reply to the current article and include the
5161 original message (@code{gnus-summary-followup-and-reply-with-original}).
5162 This command uses the process/prefix convention.
5163 @end table
5164
5165 Here's a list of variables that are relevant to both mailing and
5166 posting:
5167
5168 @table @code
5169 @item gnus-signature-file
5170 @itemx mail-signature
5171 @vindex mail-signature
5172 @vindex gnus-signature-file
5173 @cindex double signature
5174 @cindex signature
5175 If @code{gnus-signature-file} is non-@code{nil}, it should be the name
5176 of a file containing a signature (@samp{~/.signature} by default).  This
5177 signature will be appended to all outgoing post.  Most people find it
5178 more convenient to use @code{mail-signature}, which (sort of) does the
5179 same, but inserts the signature into the buffer before you start editing
5180 the post (or mail).  So---if you have both of these variables set, you
5181 will get two signatures.  Note that @code{mail-signature} does not work
5182 the same way as @code{gnus-signature-file}, which is a bit confusing.
5183 If @code{mail-signature} is @code{t}, it will insert
5184 @file{~/.signature}.  If it is a string, this string will be inserted. 
5185
5186 Note that RFC1036 says that a signature should be preceded by the three
5187 characters @samp{-- } on a line by themselves.  This is to make it
5188 easier for the recipient to automatically recognize and process the
5189 signature.  So don't remove those characters, even though you might feel
5190 that they ruin you beautiful design, like, totally.
5191
5192 Also note that no signature should be more than four lines long.
5193 Including ASCII graphics is an efficient way to get everybody to believe
5194 that you are silly and have nothing important to say.
5195
5196 @item mail-yank-prefix
5197 @vindex mail-yank-prefix
5198 @cindex yanking
5199 @cindex quoting
5200 When you are replying to or following up an article, you normally want
5201 to quote the person you are answering.  Inserting quoted text is done by
5202 @dfn{yanking}, and each quoted line you yank will have
5203 @code{mail-yank-prefix} prepended to it.  This is @code{nil} by default,
5204 which isn't very pretty---the prefix will just be some spaces.  Most
5205 everybody prefers that lines are prepended with @samp{> }, so
5206 @code{(setq mail-yank-prefix "> ")} in your @file{.emacs} file.
5207
5208 @item mail-yank-ignored-headers
5209 @vindex mail-yank-ignored-headers
5210 When you yank a message, you do not want to quote any headers, so
5211 @code{(setq mail-yank-ignored-headers "^")}.
5212
5213 @item user-mail-address
5214 @vindex user-mail-address
5215 If all of @code{gnus-user-login-name}, @code{gnus-use-generic-from} and
5216 @code{gnus-local-domain} are @code{nil}, Gnus will use
5217 @code{user-mail-address} as the address part of the @code{From} header.
5218
5219 @item gnus-local-domain
5220 @vindex gnus-local-domain
5221 @cindex domain
5222 The local doman name excluding the host name.  If your host is called
5223 @samp{"narfi.ifi.uio.no"}, then this variable should be
5224 @samp{"ifi.uio.no"}. 
5225
5226 @item gnus-local-domain
5227 @vindex gnus-local-domain
5228 @cindex domain
5229 The local doman name excluding the host name.  If your host is called
5230 @samp{"narfi.ifi.uio.no"}, then this variable should be
5231 @samp{"ifi.uio.no"}. 
5232
5233 @item gnus-user-from-line
5234 @vindex gnus-user-from-line
5235 Your full, complete e-mail address with name.  This variable overrides
5236 the other Gnus variables if it is non-@code{nil}.
5237
5238 Here are two example values of this variable: @samp{"larsi@@ifi.uio.no
5239 (Lars Magne Ingebrigtsen)"} and @samp{"Lars Magne Ingebrigtsen
5240 <larsi@@ifi.uio.no>"}.  The latter version is recommended in news (and is
5241 probably illegal in mail), but the name has to be quoted if it contains
5242 non-alpha-numerical characters---@samp{"\"Lars M. Ingebrigtsen\"
5243 <larsi@@ifi.uio.no>"}.
5244
5245 @item mail-default-headers
5246 @vindex mail-default-headers
5247 This is a string that will be inserted into the header of all outgoing
5248 mail messages and news articles.  Convenient to use to insert standard
5249 headers.  If @code{nntp-news-default-headers} is non-@code{nil}, that
5250 variable will override this one when posting articles.
5251
5252 @item gnus-auto-mail-to-author
5253 @vindex gnus-auto-mail-to-author
5254 If @code{ask}, you will be prompted for whether you want to send a mail
5255 copy to the author of the article you are following up.  If
5256 non-@code{nil} and not @code{ask}, Gnus will send a mail with a copy of
5257 all follow-ups to the authors of the articles you follow up.  It's nice
5258 in one way---you make sure that the person you are responding to gets
5259 your response.  Other people loathe this method and will hate you dearly
5260 for it, because it means that they will first get a mail, and then have
5261 to read the same article later when they read the news.  It is
5262 @code{nil} by default.
5263
5264 @item gnus-mail-courtesy-message
5265 @vindex gnus-mail-courtesy-message
5266 This is a string that will be prepended to all mails that are the result
5267 of using the variable described above.  
5268
5269 @item gnus-mailing-list-groups
5270 @findex gnus-mailing-list-groups
5271 @cindex mailing lists
5272
5273 If your newsserver offer groups that are really mailing lists that are
5274 gatewayed to the @sc{nntp} server, you can read those groups without
5275 problems, but you can't post/followup to them without some difficulty.
5276 One solution is to add a @code{to-address} to the group parameters
5277 (@pxref{Group Parameters}).  An easier thing to do is set the
5278 @code{gnus-mailing-list-groups} to a regexp that match the groups that
5279 really are mailing lists.  Then, at least, followups to the mailing
5280 lists will work most of the time.  Posting to these groups (@kbd{a}) is
5281 still a pain, though.
5282
5283
5284 @end table
5285
5286 You may want to do spell-checking on messages that you send out.  Or, if
5287 you don't want to spell-check by hand, you could add automatic
5288 spell-checking via the @code{ispell} package:
5289
5290 @vindex news-inews-hook
5291 @lisp
5292 (add-hook 'news-inews-hook 'ispell-message)        ;For news posts
5293 (add-hook 'mail-send-hook 'ispell-message)        ;for mail posts via sendmail
5294 @end lisp
5295
5296 @findex gnus-inews-insert-mime-headers
5297 If you want to insert some @sc{mime} headers into the articles you post,
5298 without doing any actual encoding, you could add
5299 @code{gnus-inews-insert-mime-headers} to @code{gnus-inews-article-hook}.
5300
5301
5302
5303 @node Archived Messages
5304 @subsection Archived Messages
5305 @cindex archived messages
5306 @cindex sent messages
5307
5308 Gnus provides a few different methods for storing the mail you send.
5309 The default method is to use the @dfn{archive virtual server} to store
5310 the mail.
5311
5312 @vindex gnus-message-archive-method 
5313 @code{gnus-message-archive-method} says what virtual server Gnus is to
5314 use to store sent messages.  It is @code{(nnfolder "archive"
5315 (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any
5316 mail select method (@code{nnml}, @code{nnmbox}, etc.).  However,
5317 @code{nnfolder} is a quite likable select method for doing this sort of
5318 thing.  If you don't like the default directory chosen, you could say
5319 something like:
5320
5321 @lisp
5322 (setq gnus-message-archive-method
5323       '((nnfolder "archive" 
5324                   (nnfolder-inhibit-expiry t)
5325                   (nnfolder-active-file "~/Mail/sent-mail/active")
5326                   (nnfolder-directory "~/News/sent-mail/"))))
5327 @end lisp
5328
5329 @vindex gnus-message-archive-group
5330 Gnus will insert @code{Gcc} headers in all outgoing messages that point
5331 to one or more group(s) on that server.  Which group to use is
5332 determined by the @code{gnus-message-archive-group} variable.  
5333
5334 This variable can be:
5335
5336 @itemize @bullet
5337 @item a string
5338 Messages will be saved in that group.
5339 @item a list of strings
5340 Messages will be saved in all those groups.
5341 @item an alist of regexps, functions and forms
5342 When a key "matches", the result is used.
5343 @end itemize
5344
5345 Let's illustrate:
5346
5347 Just saving to a single group called @samp{"MisK"}:
5348 @lisp
5349 (setq gnus-message-archive-group "MisK")
5350 @end lisp
5351
5352 Saving to two groups, @samp{"MisK"} and @samp{"safe"}:
5353 @lisp
5354 (setq gnus-message-archive-group '("MisK" "safe"))
5355 @end lisp
5356
5357 Save to different groups based on what group you are in:
5358 @lisp
5359 (setq gnus-message-archive-group 
5360       '(("^alt" "sent-to-alt")
5361         ("mail" "sent-to-mail")
5362         (".*" "sent-to-misc")))
5363 @end lisp
5364
5365 More complex stuff:
5366 @lisp
5367 (setq gnus-message-archive-group 
5368       '((if (eq major-mode news-reply-mode) "misc-news" "misc-mail)))
5369 @end lisp       
5370
5371 This last one is the default.
5372
5373 Now, when you send a message off, it will be stored in the appropriate
5374 group.  (If you want to disable storing for just one particular article,
5375 you can just remove the @code{Gcc} header that has been inserted.)  The
5376 archive group will appear in the group buffer the next time you start
5377 Gnus, or the next time you press @key{F} in the group buffer.  You can
5378 enter it and read the articles in it just like you'd read any other
5379 group.  If the group gets really big and annoying, you can simply rename
5380 if (using @kbd{G r} in the group buffer) to something nice --
5381 @samp{"misc-mail-september-1995"}, or whatever.  New messages will
5382 continue to be stored in the old (now empty) group.
5383
5384
5385 That's the default method of archiving sent mail.  Gnus also offers two
5386 other variables for the people who don't like the default method.  In
5387 that case you should set @code{gnus-message-archive-group} to
5388 @code{nil}; this will disable archiving.
5389
5390 @table @code
5391 @item gnus-author-copy
5392 @vindex gnus-author-copy
5393 This is a file name, and all outgoing articles will be saved in that
5394 file.  Initialized from the @code{AUTHORCOPY} environment variable.
5395
5396 If this variable begins with the character @samp{"|"}, outgoing articles
5397 will be piped to the named program. It is possible to save an article in
5398 an MH folder as follows:
5399
5400 @lisp
5401 (setq gnus-author-copy 
5402       "|/usr/local/lib/mh/rcvstore +Article")
5403 @end lisp
5404
5405 If the first character is not a pipe, articles are saved using the
5406 function specified by the @code{gnus-author-copy-saver} variable.
5407
5408 @item gnus-author-copy-saver
5409 @vindex gnus-author-copy-saver
5410 A function called to save outgoing articles.  This function will be
5411 called with the same of the file to store the article in. The default
5412 function is @code{rmail-output} which saves in the Unix mailbox format.
5413
5414 @item gnus-mail-self-blind 
5415 @vindex gnus-mail-self-blind 
5416 Non-@code{nil} means insert a BCC header in all outgoing articles
5417 pointing to yourself.  This will result you receiving a copy of the
5418 article mailed to yourself.  The BCC header is inserted when the post
5419 buffer is initialized, so you can remove or alter the BCC header to
5420 override the default.
5421
5422 @item gnus-outgoing-message-group 
5423 @vindex gnus-outgoing-message-group 
5424 All outgoing messages will be put in this group.  If you want to store
5425 all your outgoing mail and articles in the group @samp{nnml:archive},
5426 you set this variable to that value.  This variable can also be a list of
5427 group names.
5428
5429 If you want to have greater control over what group to put each
5430 message in, you can set this variable to a function that checks the
5431 current newsgroup name and then returns a suitable group name (or list
5432 of names).
5433 @end table
5434
5435
5436 @node Posting Styles
5437 @subsection Posting Styles
5438 @cindex posting styles
5439 @cindex styles
5440
5441 All them variables, they make my head swim.  
5442
5443 So what if you want a different @code{Organization} and signature based
5444 on what groups you post to?  And you post both from your home machine
5445 and your work machine, and you want different @code{From} lines, and so
5446 on? 
5447
5448 @vindex gnus-posting-styles
5449 One way to do stuff like that is to write clever hooks that change the
5450 variables you need to have changed.  That's a bit boring, so somebody
5451 came up with the bright idea of letting the user specify these things in
5452 a handy alist.  Here's an example of a @code{gnus-posting-styles}
5453 variable: 
5454
5455 @lisp
5456 ((".*" (signature . "Peace and happiness") (organization . "What me?"))
5457  ("^comp" (signature . "Death to everybody"))
5458  ("comp.emacs.i-love-it" (organization . "Emacs is it")))
5459 @end lisp
5460
5461 As you might surmise from this example, this alist consists of several
5462 @dfn{styles}.  Each style will be applicable if the first element
5463 "matches", in some form or other.  The entire alist will be iterated
5464 over, from the beginning towards the end, and each match will be
5465 applied, which means that attributes in later styles that match override
5466 the same attributes in earlier matching styles.  So
5467 @samp{comp.programming.literate} will have the @samp{Death to everybody}
5468 signature and the @samp{What me?} @code{Organization} header. 
5469
5470 The first element in each style is called the @code{match}.  If it's a
5471 string, then Gnus will try to regexp match it against the group name.
5472 If it's a function symbol, that function will be called with no
5473 arguments.  If it's a variable symbol, then the variable will be
5474 referenced.  If it's a list, then that list will be @code{eval}ed.  In
5475 any case, if this returns a non-@code{nil} value, then the style is said
5476 to @dfn{match}.
5477
5478 Each style may contain a random amount of @dfn{attributes}.  Each
5479 attribute consists of a @var{(name  . value)} pair.  The attribute name
5480 can be one of @code{signature}, @code{organization} or @code{from}.  
5481 The attribute name can also be a string.  In that case, this will be
5482 used as a header name, and the value will be inserted in the headers of
5483 the article. 
5484
5485 The attribute value can be a string (used verbatim), a function (the
5486 return value will be used), a variable (its value will be used) or a
5487 list (it will be @code{eval}ed and the return value will be used).
5488
5489 So here's a new example:
5490
5491 @lisp
5492 (setq gnus-posting-styles
5493       '((".*" 
5494            (signature . "~/.signature") 
5495            (from . "user@@foo (user)")
5496            ("X-Home-Page" . (getenv "WWW_HOME"))
5497            (organization . "People's Front Against MWM"))
5498         ("^rec.humor" 
5499            (signature . my-funny-signature-randomizer))
5500         ((equal (system-name) "gnarly") 
5501            (signature . my-quote-randomizer))
5502         (posting-from-work-p
5503            (signature . "~/.work-signature")
5504            (from . "user@@bar.foo (user)")
5505            (organization . "Important Work, Inc"))
5506         ("^nn.+:" 
5507            (signature . "~/.mail-signature"))))
5508 @end lisp
5509
5510
5511
5512 @node Drafts
5513 @subsection Drafts
5514 @cindex drafts
5515
5516 If you are writing a message (mail or news) and suddenly remember that
5517 you have a steak in the oven (or some pesto in the food processor, you
5518 craazy vegetarians), you'll probably wish there was a method to save the
5519 message you are writing so that you can continue editing it some other
5520 day, and send it when you feel its finished.
5521
5522 Well, don't worry about it.  Whenever you start composing a message of
5523 some sort using the Gnus mail and post commands, the buffer you get will
5524 automatically associate to an article in a special @dfn{draft} group.
5525 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
5526 article will be saved there.  (Auto-save files also go to the draft
5527 group.) 
5528
5529 The draft group is a special draft group (which is implemented as an
5530 @code{nndraft} group, if you absolutely have to know) called
5531 @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
5532 controls both the name of the group and the location---the leaf element
5533 in the path will be used as the name of the group.  What makes this
5534 group special is that you can't tick any articles in it or mark any
5535 articles as read---all articles in the group are permanently unread.  
5536
5537 If the group doesn't exist, it will be created and you'll be subscribed
5538 to it.
5539
5540 @findex gnus-summary-send-draft
5541 @kindex S D c (Summary)
5542 When you want to continue editing the article, you simply enter the
5543 draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
5544 that.  You will be placed in a buffer where you left off.
5545
5546 Rejected articles will also be put in this draft group (@pxref{Rejected
5547 Articles}).
5548
5549 @findex gnus-summary-send-all-drafts
5550 If you have lots of rejected messages you want to post (or mail) without
5551 doing further editing, you can use the @kbd{S D a} command
5552 (@code{gnus-summary-send-all-drafts}).  This command understands the
5553 process/prefix convention (@pxref{Process/Prefix}).  
5554
5555
5556 @node Rejected Articles
5557 @subsection Rejected Articles
5558 @cindex rejected articles
5559
5560 Sometimes a news server will reject an article.  Perhaps the server
5561 doesn't like your face.  Perhaps it just feels miserable.  Perhaps
5562 @emph{there be demons}.  Perhaps you have included too much cited text.
5563 Perhaps the disk is full.  Perhaps the server is down.
5564
5565 These situations are, of course, totally beyond the control of Gnus.
5566 (Gnus, of course, loves the way you look, always feels great, has angels
5567 fluttering around inside of it, doesn't care about how much cited text
5568 you include, never runs full and never goes down.)  So Gnus saves these
5569 articles until some later time when the server feels better.
5570
5571 The rejected articles will automatically be put in a special draft group
5572 (@pxref{Drafts}).  When the server comes back up again, you'd then
5573 typically enter that group and send all the articles off.
5574
5575
5576 @node Canceling and Superseding
5577 @section Canceling Articles
5578 @cindex canceling articles
5579 @cindex superseding articles
5580
5581 Have you ever written something, and then decided that you really,
5582 really, really wish you hadn't posted that?
5583
5584 Well, you can't cancel mail, but you can cancel posts.
5585
5586 @findex gnus-summary-cancel-article
5587 @kindex C (Summary)
5588 Find the article you wish to cancel (you can only cancel your own
5589 articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
5590 c} (@code{gnus-summary-cancel-article}).  Your article will be
5591 canceled---machines all over the world will be deleting your article. 
5592
5593 Be aware, however, that not all sites honor cancels, so your article may
5594 live on here and there, while most sites will delete the article in
5595 question.
5596
5597 If you discover that you have made some mistakes and want to do some
5598 corrections, you can post a @dfn{superseding} article that will replace
5599 your original article.
5600
5601 @findex gnus-summary-supersede-article
5602 @kindex S (Summary)
5603 Go to the original article and press @kbd{S s}
5604 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
5605 where you can edit the article all you want before sending it off the
5606 usual way.
5607
5608 @vindex gnus-delete-supersedes-headers
5609 You probably want to delete some of the old headers before sending the
5610 superseding article---@code{Path} and @code{Date} are probably
5611 incorrect.  Set @code{gnus-delete-supersedes-headers} to a regexp to
5612 match the lines you want removed.  The default is
5613 @samp{"^Path:\\|^Date"}. 
5614
5615 The same goes for superseding as for canceling, only more so: Some
5616 sites do not honor superseding.  On those sites, it will appear that you
5617 have posted almost the same article twice.
5618
5619 If you have just posted the article, and change your mind right away,
5620 there is a trick you can use to cancel/supersede the article without
5621 waiting for the article to appear on your site first.  You simply return
5622 to the post buffer (which is called @code{*post-buf*}).  There you will
5623 find the article you just posted, with all the headers intact.  Change
5624 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
5625 header by substituting one of those words for @samp{Message-ID}.  Then
5626 just press @kbd{C-c C-c} to send the article as you would do normally.
5627 The previous article will be canceled/superseded.
5628
5629 Just remember, kids: There is no 'c' in 'supersede'.
5630
5631 @node Marking Articles
5632 @section Marking Articles
5633 @cindex article marking
5634 @cindex article ticking
5635 @cindex marks
5636
5637 There are several marks you can set on an article. 
5638
5639 You have marks that decide the @dfn{readed-ness} (whoo, neato-keano
5640 neologism ohoy!) of the article.  Alphabetic marks generally mean
5641 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
5642
5643 In addition, you also have marks that do not affect readedness.
5644
5645 @menu
5646 * Unread Articles::      Marks for unread articles.
5647 * Read Articles::        Marks for read articles.
5648 * Other Marks::          Marks that do not affect readedness.
5649 @end menu
5650
5651 @ifinfo
5652 There's a plethora of commands for manipulating these marks:
5653 @end ifinfo
5654
5655 @menu
5656 * Setting Marks::           How to set and remove marks.
5657 * Setting Process Marks::   How to mark articles for later processing.
5658 @end menu
5659
5660 @node Unread Articles
5661 @subsection Unread Articles
5662
5663 The following marks mark articles as unread, in one form or other.
5664
5665 @vindex gnus-dormant-mark
5666 @vindex gnus-ticked-mark
5667 @table @samp
5668 @item !
5669 @dfn{Ticked articles} are articles that will remain visible always.  If
5670 you see an article that you find interesting, or you want to put off
5671 reading it, or replying to it, until sometime later, you'd typically
5672 tick it.  However, articles can be expired, so if you want to keep an
5673 article forever, you'll have to save it.  Ticked articles have a
5674 @samp{!} (@code{gnus-ticked-mark}) in the first column.
5675
5676 @item ?
5677 A @dfn{dormant} article is marked with a @samp{?}
5678 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
5679 if there are followups to it.
5680
5681 @item SPC
5682 An @dfn{unread} article is marked with a @samp{SPC}
5683 (@code{gnus-unread-mark}).  These are articles that haven't been read at
5684 all yet.
5685 @end table
5686
5687 @node Read Articles
5688 @subsection Read Articles
5689 @cindex expirable mark
5690
5691 All the following marks mark articles as read.
5692
5693 @table @samp
5694
5695 @item r
5696 Articles that are marked as read.  They have a @samp{r}
5697 (@code{gnus-del-mark}) in the first column.  These are articles that the
5698 user has marked as read more or less manually.
5699
5700 @item R
5701 Articles that are actually read are marked with @samp{R}
5702 (@code{gnus-read-mark}). 
5703
5704 @item O
5705 Articles that were marked as read in previous sessions are now
5706 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}). 
5707
5708 @item K
5709 Marked as killed (@code{gnus-killed-mark}).
5710
5711 @item X
5712 Marked as killed by kill files (@code{gnus-kill-file-mark}).
5713
5714 @item Y
5715 Marked as read by having a too low score (@code{gnus-low-score-mark}).
5716
5717 @item C
5718 Marked as read by a catchup (@code{gnus-catchup-mark}).
5719
5720 @item G
5721 Canceled article (@code{gnus-cancelled-mark})
5722 @end table
5723
5724 All these marks just mean that the article is marked as read, really.
5725 They are interpreted differently by the adaptive scoring scheme,
5726 however.
5727
5728 One more special mark, though:
5729
5730 @table @samp
5731 @item E
5732 You can also mark articles as @dfn{expirable} (or have them marked as
5733 such automatically).  That doesn't make much sense in normal groups,
5734 because a user does not control the expiring of news articles, but in
5735 mail groups, for instance, articles that are marked as @dfn{expirable}
5736 can be deleted by Gnus at any time.  Expirable articles are marked with
5737 @samp{E} (@code{gnus-expirable-mark}).
5738 @end table
5739
5740 @node Other Marks
5741 @subsection Other Marks
5742 @cindex process mark
5743 @cindex bookmarks
5744
5745 There are some marks that have nothing to do with whether the article is
5746 read or not.
5747
5748 @itemize @bullet
5749
5750 @item 
5751 You can set a bookmark in the current article.  Say you are reading a
5752 long thesis on cats' urinary tracts, and have to go home for dinner
5753 before you've finished reading the thesis.  You can then set a bookmark
5754 in the article, and Gnus will jump to this bookmark the next time it
5755 encounters the article.
5756
5757 @item
5758 All articles that you have replied to or made a followup to (i.e., have
5759 answered) will be marked with an @samp{A} in the second column
5760 (@code{gnus-replied-mark}).
5761
5762 @item 
5763 Articles that are stored in the article cache will be marked with an
5764 @samp{*} in the second column (@code{gnus-cached-mark}).
5765
5766 @item 
5767 Articles that are "saved" (in some manner or other; not necessarily
5768 religously) are marked with an @samp{S} in the second column
5769 (@code{gnus-saved-mark}.  
5770
5771 @item 
5772 @vindex gnus-not-empty-thread-mark
5773 @vindex gnus-empty-thread-mark
5774 It the @samp{%e} spec is used, the presence of threads or not will be
5775 marked with @code{gnus-not-empty-thread-mark} and
5776 @code{gnus-empty-thread-mark} in the third column, respectively.
5777
5778 @item 
5779 @vindex gnus-process-mark
5780 Finally we have the @dfn{process mark} (@code{gnus-process-mark}.  A
5781 variety of commands react to the presence of the process mark.  For
5782 instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
5783 all articles that have been marked with the process mark.  Articles
5784 marked with the process mark have a @samp{#} in the second column.
5785
5786 @end itemize
5787
5788 You might have noticed that most of these "non-readedness" marks appear
5789 in the second column by default.  So if you have a cached, saved,
5790 replied article that you have process-marked, what will that look like?
5791
5792 Nothing much.  The presedence rules go as follows: process -> cache ->
5793 replied -> saved.  So if the article is in the cache and is replied,
5794 you'll only see the cache mark and not the replied mark.
5795
5796
5797 @node Setting Marks
5798 @subsection Setting Marks
5799 @cindex setting marks
5800
5801 All the marking commands understand the numeric prefix.
5802
5803 @table @kbd
5804 @item M t
5805 @itemx !
5806 @kindex ! (Summary)
5807 @kindex M t (Summary)
5808 @findex gnus-summary-tick-article-forward
5809 Tick the current article (@code{gnus-summary-tick-article-forward}).
5810
5811 @item M ?
5812 @itemx ?
5813 @kindex ? (Summary)
5814 @kindex M ? (Summary)
5815 @findex gnus-summary-mark-as-dormant
5816 Mark the current article as dormant
5817 (@code{gnus-summary-mark-as-dormant}).
5818
5819 @item M d
5820 @itemx d
5821 @kindex M d (Summary)
5822 @kindex d (Summary)
5823 @findex gnus-summary-mark-as-read-forward
5824 Mark the current article as read
5825 (@code{gnus-summary-mark-as-read-forward}).
5826
5827 @item M k
5828 @itemx k
5829 @kindex k (Summary)
5830 @kindex M k (Summary)
5831 @findex gnus-summary-kill-same-subject-and-select
5832 Mark all articles that have the same subject as the current one as read,
5833 and then select the next unread article
5834 (@code{gnus-summary-kill-same-subject-and-select}).
5835
5836 @item M K
5837 @itemx C-k
5838 @kindex M K (Summary)
5839 @kindex C-k (Summary)
5840 @findex gnus-summary-kill-same-subject
5841 Mark all articles that have the same subject as the current one as read
5842 (@code{gnus-summary-kill-same-subject}).  
5843
5844 @item M C
5845 @kindex M C (Summary)
5846 @findex gnus-summary-catchup
5847 Mark all unread articles in the group as read
5848 (@code{gnus-summary-catchup}).
5849
5850 @item M C-c
5851 @kindex M C-c (Summary)
5852 @findex gnus-summary-catchup-all
5853 Mark all articles in the group as read---even the ticked and dormant
5854 articles (@code{gnus-summary-catchup-all}).
5855
5856 @item M H
5857 @kindex M H (Summary)
5858 @findex gnus-summary-catchup-to-here
5859 Catchup the current group to point
5860 (@code{gnus-summary-catchup-to-here}). 
5861
5862 @item C-w
5863 @kindex C-w (Summary)
5864 @findex gnus-summary-mark-region-as-read
5865 Mark all articles between point and mark as read
5866 (@code{gnus-summary-mark-region-as-read}). 
5867
5868 @item M V k
5869 @kindex M V k (Summary)
5870 @findex gnus-summary-kill-below
5871 Kill all articles with scores below the default score (or below the
5872 numeric prefix) (@code{gnus-summary-kill-below}).
5873
5874 @item M c
5875 @itemx M-u
5876 @kindex M c (Summary)
5877 @kindex M-u (Summary)
5878 @findex gnus-summary-clear-mark-forward
5879 Clear all readedness-marks from the current article
5880 (@code{gnus-summary-clear-mark-forward}).
5881
5882 @item M e
5883 @itemx E
5884 @kindex M e (Summary)
5885 @kindex E (Summary)
5886 @findex gnus-summary-mark-as-expirable
5887 Mark the current article as expirable
5888 (@code{gnus-summary-mark-as-expirable}).
5889
5890 @item M b
5891 @kindex M b (Summary)
5892 @findex gnus-summary-set-bookmark
5893 Set a bookmark in the current article
5894 (@code{gnus-summary-set-bookmark}).
5895
5896 @item M B
5897 @kindex M B (Summary)
5898 @findex gnus-summary-remove-bookmark
5899 Remove the bookmark from the current article
5900 (@code{gnus-summary-remove-bookmark}).
5901
5902 @item M V c
5903 @kindex M V c (Summary)
5904 @findex gnus-summary-clear-above
5905 Clear all marks from articles with scores over the default score (or
5906 over the numeric prefix) (@code{gnus-summary-clear-above}).
5907
5908 @item M V u
5909 @kindex M V u (Summary)
5910 @findex gnus-summary-tick-above
5911 Tick all articles with scores over the default score (or over the
5912 numeric prefix) (@code{gnus-summary-tick-above}).
5913
5914 @item M V m
5915 @kindex M V m (Summary)
5916 @findex gnus-summary-mark-above
5917 Prompt for a mark, and mark all articles with scores over the default
5918 score (or over the numeric prefix) with this mark
5919 (@code{gnus-summary-clear-above}).
5920 @end table
5921
5922 @code{gnus-summary-goto-unread} The @code{gnus-summary-goto-unread}
5923 variable controls what action should be taken after setting a mark.  If
5924 non-@code{nil}, point will move to the next/previous unread article.  If
5925 @code{nil}, point will just move one line up or down.  As a special
5926 case, if this variable is @code{never}, all the marking commands as well
5927 as other commands (like @kbd{SPC}) will move to the next article,
5928 whether it is unread or not.  The default is @code{t}.
5929
5930
5931 @node Setting Process Marks
5932 @subsection Setting Process Marks
5933 @cindex setting process marks
5934
5935 @table @kbd
5936
5937 @item M P p
5938 @itemx #
5939 @kindex # (Summary)
5940 @kindex M P p (Summary)
5941 @findex gnus-summary-mark-as-processable
5942 Mark the current article with the process mark
5943 (@code{gnus-summary-mark-as-processable}). 
5944 @findex gnus-summary-unmark-as-processable
5945
5946 @item M P u 
5947 @itemx M-#
5948 @kindex M P u (Summary)
5949 @kindex M-# (Summary)
5950 Remove the process mark, if any, from the current article
5951 (@code{gnus-summary-unmark-as-processable}).
5952
5953 @item M P U
5954 @kindex M P U (Summary)
5955 @findex gnus-summary-unmark-all-processable
5956 Remove the process mark from all articles
5957 (@code{gnus-summary-unmark-all-processable}). 
5958
5959 @item M P R
5960 @kindex M P R (Summary)
5961 @findex gnus-uu-mark-by-regexp
5962 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
5963
5964 @item M P r
5965 @kindex M P r (Summary)
5966 @findex gnus-uu-mark-region
5967 Mark articles in region (@code{gnus-uu-mark-region}).
5968
5969 @item M P t
5970 @kindex M P t (Summary)
5971 @findex gnus-uu-mark-thread
5972 Mark all articles in the current (sub)thread
5973 (@code{gnus-uu-mark-thread}).
5974
5975 @item M P T
5976 @kindex M P T (Summary)
5977 @findex gnus-uu-unmark-thread
5978 Unmark all articles in the current (sub)thread
5979 (@code{gnus-uu-unmark-thread}).
5980
5981 @item M P v
5982 @kindex M P v (Summary)
5983 @findex gnus-uu-mark-over
5984 Mark all articles that have a score above the prefix argumnet
5985 (@code{gnus-uu-mark-over}).
5986
5987 @item M P s
5988 @kindex M P s (Summary)
5989 @findex gnus-uu-mark-series
5990 Mark all articles in the current series (@code{gnus-uu-mark-series}).
5991
5992 @item M P S
5993 @kindex M P S (Summary)
5994 @findex gnus-uu-mark-sparse
5995 Mark all series that have already had some articles marked
5996 (@code{gnus-uu-mark-sparse}).
5997
5998 @item M P a
5999 @kindex M P a (Summary)
6000 @findex gnus-uu-mark-all
6001 Mark all articles in series order (@code{gnus-uu-mark-series}).
6002
6003 @item M P b
6004 @kindex M P b (Summary)
6005 @findex gnus-uu-mark-buffer
6006 Mark all articles in the buffer in the order they appear
6007 (@code{gnus-uu-mark-buffer}). 
6008 @end table
6009
6010
6011 @node Limiting
6012 @section Limiting
6013 @cindex limiting
6014
6015 It can be convenient to limit the summary buffer to just show some
6016 subset of the articles currently in the group.  The effect most limit
6017 commands have is to remove a few (or many) articles from the summary
6018 buffer. 
6019
6020 @table @kbd
6021
6022 @item / /
6023 @itemx / s
6024 @kindex / / (Summary)
6025 @findex gnus-summary-limit-to-subject
6026 Limit the summary buffer to articles that match some subject
6027 (@code{gnus-summary-limit-to-subject}). 
6028
6029 @item / a
6030 @kindex / a (Summary)
6031 @findex gnus-summary-limit-to-author
6032 Limit the summary buffer to articles that match some author
6033 (@code{gnus-summary-limit-to-author}).
6034
6035 @item / u
6036 @itemx x
6037 @kindex / u (Summary)
6038 @kindex x (Summary)
6039 @findex gnus-summary-limit-to-unread
6040 Limit the summary buffer to articles that are not marked as read
6041 (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
6042 buffer to articles that are strictly unread.  This means that ticked and
6043 dormant articles will also be excluded.
6044
6045 @item / m
6046 @kindex / m (Summary)
6047 @findex gnus-summary-limit-to-marks
6048 Ask for a mark and then limit to all articles that have not been marked
6049 with that mark (@code{gnus-summary-limit-to-marks}).
6050
6051 @item / n
6052 @kindex / n (Summary)
6053 @findex gnus-summary-limit-to-articles
6054 Limit the summary buffer to the current article
6055 (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
6056 convention (@pxref{Process/Prefix}).
6057
6058 @item / w
6059 @kindex / w (Summary)
6060 @findex gnus-summary-pop-limit
6061 Pop the previous limit off the stack and restore it
6062 (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
6063 the stack.
6064
6065 @item / v
6066 @kindex / v (Summary)
6067 @findex gnus-summary-limit-to-score
6068 Limit the summary buffer to articles that have a score at or above some
6069 score (@code{gnus-summary-limit-to-score}).
6070
6071 @item / E
6072 @itemx M S
6073 @kindex M S (Summary)
6074 @kindex / E (Summary)
6075 @findex gnus-summary-limit-include-expunged
6076 Display all expunged articles
6077 (@code{gnus-summary-limit-include-expunged}). 
6078
6079 @item / D
6080 @kindex / D (Summary)
6081 @findex gnus-summary-limit-include-dormant
6082 Display all dormant articles (@code{gnus-summary-limit-include-dormant}).
6083
6084 @item / d
6085 @kindex / d (Summary)
6086 @findex gnus-summary-limit-exclude-dormant
6087 Hide all dormant articles (@code{gnus-summary-limit-exclude-dormant}).
6088
6089 @item / c
6090 @kindex / c (Summary)
6091 @findex gnus-summary-limit-exclude-childless-dormant
6092 Hide all dormant articles that have no children
6093 (@code{gnus-summary-limit-exclude-childless-dormant}). 
6094
6095 @item / C
6096 @kindex / C (Summary)
6097 @findex gnus-summary-limit-mark-excluded-as-read
6098 Mark all excluded unread articles as read
6099 (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,
6100 also mark exluded ticked and dormant articles as read.
6101
6102 @end table
6103
6104
6105 @node Threading
6106 @section Threading
6107 @cindex threading
6108 @cindex article threading
6109
6110 Gnus threads articles by default.  @dfn{To thread} is to put replies to
6111 articles directly after the articles they reply to---in a hierarchical
6112 fashion.
6113
6114 @menu
6115 * Customizing Threading::     Variables you can change to affect the threading.
6116 * Thread Commands::           Thread based commands in the summary buffer.
6117 @end menu
6118
6119 @node Customizing Threading
6120 @subsection Customizing Threading
6121 @cindex customizing threading
6122 @cindex <
6123 @cindex >
6124
6125 @table @code
6126
6127 @item gnus-show-threads
6128 @vindex gnus-show-threads
6129 If this variable is @code{nil}, no threading will be done, and all of
6130 the rest of the variables here will have no effect.  Turning threading
6131 off will speed group selection up a bit, but it is sure to make reading
6132 slower and more awkward.
6133
6134 @item gnus-fetch-old-headers
6135 @vindex gnus-fetch-old-headers
6136 If non-@code{nil}, Gnus will attempt to build old threads by fetching
6137 more old headers---headers to articles that are marked as read.  If you
6138 would like to display as few summary lines as possible, but still
6139 connect as many loose threads as possible, you should set this variable
6140 to @code{some} or a number.  If you set it to a number, no more than
6141 that number of extra old headers will be fetched.  In either case,
6142 fetching old headers only works if the backend you are using carries
6143 overview files---this would normally be @code{nntp}, @code{nnspool} and
6144 @code{nnml}.  Also remember that if the root of the thread has been
6145 expired by the server, there's not much Gnus can do about that.
6146
6147 @item gnus-build-sparse-threads
6148 @vindex gnus-build-sparse-threads
6149 Fetching old headers can be slow.  A low-rent similar effect can be
6150 gotten by setting this variable to @code{some}.  Gnus will then look at
6151 the complete @code{References} headers of all articles and try to string
6152 articles that belong in the same thread together.  This will leave
6153 @dfn{gaps} in the threading display where Gnus guesses that an article
6154 is missing from the thread.  (These gaps appear like normal summary
6155 lines.  If you select a gap, Gnus will try to fetch the article in
6156 question.)  If this variable is @code{t}, Gnus will display all these
6157 "gaps" without regard for whether they are useful for completing the
6158 thread or not.  This variable is @code{nil} by default.
6159
6160 @item gnus-summary-gather-subject-limit
6161 @vindex gnus-summary-gather-subject-limit
6162 Loose threads are gathered by comparing subjects of articles.  If this
6163 variable is @code{nil}, Gnus requires an exact match between the
6164 subjects of the loose threads before gathering them into one big
6165 super-thread.  This might be too strict a requirement, what with the
6166 presence of stupid newsreaders that chop off long subjects lines.  If
6167 you think so, set this variable to, say, 20 to require that only the
6168 first 20 characters of the subjects have to match.  If you set this
6169 variable to a really low number, you'll find that Gnus will gather
6170 everything in sight into one thread, which isn't very helpful.
6171
6172 @cindex fuzzy article gathering
6173 If you set this variable to the special value @code{fuzzy}, Gnus will
6174 use a fuzzy string comparison algorithm on the subjects.
6175
6176 @item gnus-simplify-ignored-prefixes
6177 @vindex gnus-simplify-ignored-prefixes
6178 If you set @code{gnus-summary-gather-subject-limit} to something as low
6179 as 10, you might consider setting this variable to something sensible:
6180
6181 @c Written by Michael Ernst <mernst@cs.rice.edu>
6182 @lisp
6183 (setq gnus-simplify-ignored-prefixes
6184       (concat 
6185        "\\`\\[?\\("
6186        (mapconcat 'identity
6187                   '("looking"
6188                      "wanted" "followup" "summary\\( of\\)?"
6189                      "help" "query" "problem" "question" 
6190                      "answer" "reference" "announce"
6191                      "How can I" "How to" "Comparison of"
6192                      ;; ...
6193                      )
6194                   "\\|")
6195                   "\\)\\s *\\("
6196                   (mapconcat 'identity
6197                              '("for" "for reference" "with" "about")
6198                              "\\|")
6199                   "\\)?\\]?:?[ \t]*"))
6200 @end lisp
6201
6202 @item gnus-summary-gather-exclude-subject
6203 @vindex gnus-summary-gather-exclude-subject
6204 Since loose thread gathering is done on subjects only, that might lead
6205 to many false hits, especially with certain common subjects like
6206 @samp{""} and @samp{"(none)"}.  To make the situation slightly better,
6207 you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
6208 what subjects should be excluded from the gathering process.  The
6209 default is @samp{"^ *$\\|^(none)$"}.  
6210
6211 @item gnus-summary-thread-gathering-function
6212 @vindex gnus-summary-thread-gathering-function
6213 Gnus gathers threads by looking at @code{Subject} headers.  This means
6214 that totally unrelated articles may end up in the same "thread", which
6215 is confusing.  An alternate approach is to look at all the
6216 @code{Message-ID}s in all the @code{References} headers to find
6217 matches.  This will ensure that no gathered threads ever includes
6218 unrelated articles, but it's also means that people who have posted with
6219 broken newsreaders won't be gathered properly.  The choice is
6220 yours---plague or cholera:
6221
6222 @table @code
6223 @item gnus-summary-gather-threads-by-subject
6224 @findex gnus-summary-gather-threads-by-subject
6225 This function is the default gathering function and looks at
6226 @code{Subject}s exclusively.
6227
6228 @item gnus-summary-gather-threads-by-references
6229 @findex gnus-summary-gather-threads-by-references
6230 This function looks at @code{References} headers exclusively.
6231 @end table
6232
6233 If you want to test gathering by @code{References}, you could say
6234 something like:
6235
6236 @lisp
6237 (setq gnus-summary-thread-gathering-function
6238       'gnus-summary-gather-threads-by-references)
6239 @end lisp
6240
6241 @item gnus-summary-make-false-root
6242 @vindex gnus-summary-make-false-root
6243 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
6244 and create a dummy root at the top.  (Wait a minute.  Root at the top?
6245 Yup.)  Loose subtrees occur when the real root has expired, or you've
6246 read or killed the root in a previous session.
6247
6248 When there is no real root of a thread, Gnus will have to fudge
6249 something.  This variable says what fudging method Gnus should use.
6250 There are four possible values:
6251
6252 @cindex adopting articles
6253
6254 @table @code
6255
6256 @item adopt
6257 Gnus will make the first of the orphaned articles the parent.  This
6258 parent will adopt all the other articles.  The adopted articles will be
6259 marked as such by pointy brackets (@samp{<>}) instead of the standard
6260 square brackets (@samp{[]}).  This is the default method.
6261
6262 @item dummy
6263 Gnus will create a dummy summary line that will pretend to be the
6264 parent.  This dummy line does not correspond to any real article, so
6265 selecting it will just select the first real article after the dummy
6266 article.
6267
6268 @item empty
6269 Gnus won't actually make any article the parent, but simply leave the
6270 subject field of all orphans except the first empty.  (Actually, it will
6271 use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
6272 Buffer Format}).)
6273
6274 @item none
6275 Don't make any article parent at all.  Just gather the threads and
6276 display them after one another.
6277
6278 @item nil
6279 Don't gather loose threads.
6280 @end table
6281
6282 @item gnus-thread-hide-subtree
6283 @vindex gnus-thread-hide-subtree
6284 If non-@code{nil}, all threads will be hidden when the summary buffer is
6285 generated.
6286
6287 @item gnus-thread-hide-killed
6288 @vindex gnus-thread-hide-killed
6289 if you kill a thread and this variable is non-@code{nil}, the subtree
6290 will be hidden.
6291
6292 @item gnus-thread-ignore-subject
6293 @vindex gnus-thread-ignore-subject
6294 Sometimes somebody changes the subject in the middle of a thread.  If
6295 this variable is non-@code{nil}, the subject change is ignored.  If it
6296 is @code{nil}, which is the default, a change in the subject will result
6297 in a new thread.
6298
6299 @item gnus-thread-indent-level
6300 @vindex gnus-thread-indent-level
6301 This is a number that says how much each sub-thread should be indented.
6302 The default is @samp{4}.
6303 @end table
6304
6305 @node Thread Commands
6306 @subsection Thread Commands
6307 @cindex thread commands
6308
6309 @table @kbd
6310
6311 @item T k
6312 @itemx M-C-k
6313 @kindex T k (Summary)
6314 @kindex M-C-k (Summary)
6315 @findex gnus-summary-kill-thread
6316 Mark all articles in the current sub-thread as read
6317 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
6318 remove all marks instead.  If the prefix argument is negative, tick
6319 articles instead.
6320
6321 @item T l
6322 @itemx M-C-l
6323 @kindex T l (Summary)
6324 @kindex M-C-l (Summary)
6325 @findex gnus-summary-lower-thread
6326 Lower the score of the current thread
6327 (@code{gnus-summary-lower-thread}). 
6328
6329 @item T i
6330 @kindex T i (Summary)
6331 @findex gnus-summary-raise-thread
6332 Increase the score of the current thread
6333 (@code{gnus-summary-raise-thread}).
6334
6335 @item T #
6336 @kindex T # (Summary)
6337 @findex gnus-uu-mark-thread
6338 Set the process mark on the current thread
6339 (@code{gnus-uu-mark-thread}).
6340
6341 @item T M-#
6342 @kindex T M-# (Summary)
6343 @findex gnus-uu-unmark-thread
6344 Remove the process mark from the current thread
6345 (@code{gnus-uu-unmark-thread}).
6346
6347 @item T T
6348 @kindex T T (Summary)
6349 @findex gnus-summary-toggle-threads
6350 Toggle threading (@code{gnus-summary-toggle-threads}).
6351
6352 @item T s
6353 @kindex T s (Summary)
6354 @findex gnus-summary-show-thread
6355 Expose the thread hidden under the current article, if any
6356 (@code{gnus-summary-show-thread}).
6357
6358 @item T h
6359 @kindex T h (Summary)
6360 @findex gnus-summary-hide-thread
6361 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
6362
6363 @item T S
6364 @kindex T S (Summary)
6365 @findex gnus-summary-show-all-threads
6366 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
6367
6368 @item T H
6369 @kindex T H (Summary)
6370 @findex gnus-summary-hide-all-threads
6371 Hide all threads (@code{gnus-summary-hide-all-threads}).
6372
6373 @item T R
6374 @kindex T R (Summary)
6375 @findex gnus-summary-rethread-current
6376 Re-thread the thread the current article is part of
6377 (@code{gnus-summary-rethread-current}).  This works even when the
6378 summary buffer is otherwise unthreaded.
6379
6380 @end table
6381
6382 The following commands are thread movement commands.  They all
6383 understand the numeric prefix.
6384
6385 @table @kbd
6386
6387 @item T n
6388 @kindex T n (Summary)
6389 @findex gnus-summary-next-thread
6390 Go to the next thread (@code{gnus-summary-next-thread}).
6391
6392 @item T p
6393 @kindex T p (Summary)
6394 @findex gnus-summary-prev-thread
6395 Go to the previous thread (@code{gnus-summary-prev-thread}).
6396
6397 @item T d
6398 @kindex T d (Summary)
6399 @findex gnus-summary-down-thread
6400 Descend the thread (@code{gnus-summary-down-thread}).
6401
6402 @item T u
6403 @kindex T u (Summary)
6404 @findex gnus-summary-up-thread
6405 Ascend the thread (@code{gnus-summary-up-thread}).
6406
6407 @item T o
6408 @kindex T o (Summary)
6409 @findex gnus-summary-top-thread
6410 Go to the top of the thread (@code{gnus-summary-top-thread}).
6411 @end table
6412
6413 @vindex gnus-thread-operation-ignore-subject 
6414 If you ignore subject while threading, you'll naturally end up with
6415 threads that have several different subjects in them.  If you then issue
6416 a command like `T k' (@code{gnus-summary-kill-thread}) you might not
6417 wish to kill the entire thread, but just those parts of the thread that
6418 have the same subject as the current article.  If you like this idea,
6419 you can fiddle with @code{gnus-thread-operation-ignore-subject}.  If is
6420 is non-@code{nil} (which it is by default), subjects will be ignored
6421 when doing thread commands.  If this variable is @code{nil}, articles in
6422 the same thread with different subjects will not be included in the
6423 operation in question.  If this variable is @code{fuzzy}, only articles
6424 that have subjects that are fuzzily equal will be included.
6425
6426
6427 @node Asynchronous Fetching
6428 @section Asynchronous Article Fetching
6429 @cindex asynchronous article fetching
6430
6431 If you read your news from an @sc{nntp} server that's far away, the
6432 network latencies may make reading articles a chore.  You have to wait
6433 for a while after pressing @kbd{n} to go to the next article before the
6434 article appears.  Why can't Gnus just go ahead and fetch the article
6435 while you are reading the previous one? Why not, indeed.
6436
6437 First, some caveats.  There are some pitfalls to using asynchronous
6438 article fetching, especially the way Gnus does it.  
6439
6440 Let's say you are reading article 1, which is short, and article 2 is
6441 quite long, and you are not interested in reading that.  Gnus does not
6442 know this, so it goes ahead and fetches article 2.  You decide to read
6443 article 3, but since Gnus is in the process of fetching article 2, the
6444 connection is blocked.
6445
6446 To avoid these situations, Gnus will open two (count 'em two)
6447 connections to the server.  Some people may think this isn't a very nice
6448 thing to do, but I don't see any real alternatives.  Setting up that
6449 extra connection takes some time, so Gnus startup will be slower.
6450
6451 Gnus will fetch more articles than you will read.  This will mean that
6452 the link between your machine and the @sc{nntp} server will become more
6453 loaded than if you didn't use article pre-fetch.  The server itself will
6454 also become more loaded---both with the extra article requests, and the
6455 extra connection.
6456
6457 Ok, so now you know that you shouldn't really use this thing...  unless
6458 you really want to.
6459
6460 @vindex gnus-asynchronous
6461 Here's how:  Set @code{gnus-asynchronous} to @code{t}.  The rest should
6462 happen automatically.
6463
6464 @vindex nntp-async-number
6465 You can control how many articles that are to be pre-fetched by setting
6466 @code{nntp-async-number}.  This is five by default, which means that when
6467 you read an article in the group, @code{nntp} will pre-fetch the next
6468 five articles.  If this variable is @code{t}, @code{nntp} will pre-fetch
6469 all the articles that it can without bound.  If it is @code{nil}, no
6470 pre-fetching will be made.
6471
6472 @vindex gnus-asynchronous-article-function
6473 You may wish to create some sort of scheme for choosing which articles
6474 that @code{nntp} should consider as candidates for pre-fetching.  For
6475 instance, you may wish to pre-fetch all articles with high scores, and
6476 not pre-fetch low-scored articles.  You can do that by setting the
6477 @code{gnus-asynchronous-article-function}, which will be called with an
6478 alist where the keys are the article numbers.  Your function should
6479 return an alist where the articles you are not interested in have been
6480 removed.  You could also do sorting on article score and the like. 
6481
6482 @node Article Caching
6483 @section Article Caching
6484 @cindex article caching
6485 @cindex caching
6486
6487 If you have an @emph{extremely} slow @sc{nntp} connection, you may
6488 consider turning article caching on.  Each article will then be stored
6489 locally under your home directory.  As you may surmise, this could
6490 potentially use @emph{huge} amounts of disk space, as well as eat up all
6491 your inodes so fast it will make your head swim.  In vodka.
6492
6493 Used carefully, though, it could be just an easier way to save articles.
6494
6495 @vindex gnus-use-long-file-name
6496 @vindex gnus-cache-directory
6497 @vindex gnus-use-cache
6498 To turn caching on, set @code{gnus-use-cache} to @code{t}.  By default,
6499 all articles that are ticked or marked as dormant will then be copied
6500 over to your local cache (@code{gnus-cache-directory}).  Whether this
6501 cache is flat or hierarchal is controlled by the
6502 @code{gnus-use-long-file-name} variable, as usual.
6503
6504 When re-select a ticked or dormant article, it will be fetched from the
6505 cache instead of from the server.  As articles in your cache will never
6506 expire, this might serve as a method of saving articles while still
6507 keeping them where they belong.  Just mark all articles you want to save
6508 as dormant, and don't worry.
6509
6510 When an article is marked as read, is it removed from the cache.
6511
6512 @vindex gnus-cache-remove-articles
6513 @vindex gnus-cache-enter-articles
6514 The entering/removal of articles from the cache is controlled by the
6515 @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
6516 variables.  Both are lists of symbols.  The first is @code{(ticked
6517 dormant)} by default, meaning that ticked and dormant articles will be
6518 put in the cache.  The latter is @code{(read)} by default, meaning that
6519 articles that are marked as read are removed from the cache.  Possibly
6520 symbols in these two lists are @code{ticked}, @code{dormant},
6521 @code{unread} and @code{read}.
6522
6523 @findex gnus-jog-cache
6524 So where does the massive article-fetching and storing come into the
6525 picture?  The @code{gnus-jog-cache} command will go through all
6526 subscribed newsgroups, request all unread articles, and store them in
6527 the cache.  You should only ever, ever ever ever, use this command if 1)
6528 your connection to the @sc{nntp} server is really, really, really slow
6529 and 2) you have a really, really, really huge disk.  Seriously.
6530
6531 @vindex gnus-uncacheable-groups
6532 It is likely that you do not want caching on some groups.  For instance,
6533 if your @code{nnml} mail is located under your home directory, it makes no
6534 sense to cache it somewhere else under your home directory.  Unless you
6535 feel that it's neat to use twice as much space.  To limit the caching,
6536 you could set the @code{gnus-uncacheable-groups} regexp to
6537 @samp{"^nnml"}, for instance.  This variable is @code{nil} by
6538 default.
6539
6540 @findex gnus-cache-generate-nov-databases
6541 @findex gnus-cache-generate-active
6542 If your cache becomes all messed up for some reason or other,  Gnus
6543 offers two functions that will try to set things right.  @kbd{M-x
6544 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
6545 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
6546 file. 
6547
6548
6549 @node Persistent Articles
6550 @section Persistent Articles
6551 @cindex persistent articles
6552
6553 Closely related to article caching, we have @dfn{persistent articles}.
6554 In fact, it's just a different way of looking at caching, and much more
6555 useful in my opinion.
6556
6557 Say you're reading a newsgroup, and you happen on to some valuable gem
6558 that you want to keep and treasure forever.  You'd normally just save it
6559 (using one of the many saving commands) in some file.  The problem with
6560 that is that it's just, well, yucky.  Ideally you'd prefer just having
6561 the article remain in the group where you found it forever; untouched by
6562 the expiry going on at the news server.
6563
6564 This is what a @dfn{persistent article} is---an article that just won't
6565 be deleted.  It's implemented using the normal cache functions, but
6566 you use two explicit commands for managing persistent articles:
6567
6568 @table @kbd
6569
6570 @item *
6571 @kindex * (Summary)
6572 @findex gnus-cache-enter-article
6573 Make the current article persistent (@code{gnus-cache-enter-article}). 
6574
6575 @item M-*
6576 @kindex M-* (Summary)
6577 @findex gnus-cache-remove-article
6578 Remove the current article from the persistent articles
6579 (@code{gnus-cache-remove-article}).  This will normally delete the
6580 article. 
6581 @end table
6582
6583 Both these commands understand the process/prefix convention. 
6584
6585 To avoid having all ticked articles (and stuff) entered into the cache,
6586 you should set @code{gnus-use-cache} to @code{passive} if you're just
6587 interested in persistent articles:
6588
6589 @lisp
6590 (setq gnus-use-cache 'passive)
6591 @end lisp
6592
6593
6594 @node Article Backlog
6595 @section Article Backlog
6596 @cindex backlog
6597 @cindex article backlog
6598
6599 If you have a slow connection, but the idea of using caching seems
6600 unappealing to you (and it is, really), you can help the situation some
6601 by switching on the @dfn{backlog}.  This is where Gnus will buffer
6602 already read articles so that it doesn't have to re-fetch articles
6603 you've already read.  This only helps if you are in the habit of
6604 re-selecting articles you've recently read, of course.  If you never do
6605 that, turning the backlog on will slow Gnus down a little bit, and
6606 increase memory usage some.
6607
6608 @vindex gnus-keep-backlog
6609 If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
6610 at most @var{n} old articles in a buffer for later re-fetching.  If this
6611 variable is non-@code{nil} and is not a number, Gnus will store
6612 @emph{all} read articles, which means that your Emacs will group without
6613 bound before exploding and taking your machine down with you.  I put
6614 that in there just to keep y'all on your toes.  
6615
6616 This variable is @code{nil} by default.
6617
6618
6619 @node Exiting the Summary Buffer
6620 @section Exiting the Summary Buffer
6621 @cindex summary exit
6622
6623 Exiting from the summary buffer will normally update all info on the
6624 group and return you to the group buffer. 
6625
6626 @table @kbd
6627
6628 @item Z Z
6629 @itemx q
6630 @kindex Z Z (Summary)
6631 @kindex q (Summary)
6632 @findex gnus-summary-exit
6633 @vindex gnus-summary-exit-hook
6634 @vindex gnus-summary-prepare-exit-hook
6635 Exit the current group and update all information on the group
6636 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
6637 called before doing much of the exiting, and calls
6638 @code{gnus-summary-expire-articles} by default.
6639 @code{gnus-summary-exit-hook} is called after finishing the exiting
6640 process. 
6641
6642 @item Z E
6643 @itemx Q
6644 @kindex Z E (Summary)
6645 @kindex Q (Summary)
6646 @findex gnus-summary-exit-no-update
6647 Exit the current group without updating any information on the group
6648 (@code{gnus-summary-exit-no-update}).
6649
6650 @item Z c
6651 @itemx c
6652 @kindex Z c (Summary)
6653 @kindex c (Summary)
6654 @findex gnus-summary-catchup-and-exit
6655 Mark all unticked articles in the group as read and then exit
6656 (@code{gnus-summary-catchup-and-exit}).
6657
6658 @item Z C
6659 @kindex Z C (Summary)
6660 @findex gnus-summary-catchup-all-and-exit
6661 Mark all articles, even the ticked ones, as read and then exit
6662 (@code{gnus-summary-catchup-all-and-exit}).
6663
6664 @item Z n
6665 @kindex Z n (Summary)
6666 @findex gnus-summary-catchup-and-goto-next-group
6667 Mark all articles as read and go to the next group
6668 (@code{gnus-summary-catchup-and-goto-next-group}). 
6669
6670 @item Z R
6671 @kindex Z R (Summary)
6672 @findex gnus-summary-reselect-current-group
6673 Exit this group, and then enter it again
6674 (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
6675 all articles, both read and unread.
6676
6677 @item Z G
6678 @itemx M-g
6679 @kindex Z G (Summary)
6680 @kindex M-g (Summary)
6681 @findex gnus-summary-rescan-group
6682 Exit the group, check for new articles in the group, and select the
6683 group (@code{gnus-summary-rescan-group}).  If given a prefix, select all
6684 articles, both read and unread.
6685
6686 @item Z N
6687 @kindex Z N (Summary)
6688 @findex gnus-summary-next-group
6689 Exit the group and go to the next group
6690 (@code{gnus-summary-next-group}). 
6691
6692 @item Z P
6693 @kindex Z P (Summary)
6694 @findex gnus-summary-prev-group
6695 Exit the group and go to the previous group
6696 (@code{gnus-summary-prev-group}). 
6697 @end table
6698
6699 @vindex gnus-exit-group-hook
6700 @code{gnus-exit-group-hook} is called when you exit the current
6701 group.  
6702
6703 @findex gnus-summary-wake-up-the-dead
6704 @findex gnus-dead-summary-mode
6705 @vindex gnus-kill-summary-on-exit
6706 If you're in the habit of exiting groups, and then changing your mind
6707 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
6708 If you do that, Gnus won't kill the summary buffer when you exit it.
6709 (Quelle surprise!)  Instead it will change the name of the buffer to
6710 something like @samp{"*Dead Summary ... *"} and install a minor mode
6711 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
6712 buffer, you'll find that all keys are mapped to a function called
6713 @code{gnus-summary-wake-up-the-dead}.  So tapping any keys in a dead
6714 summary buffer will result in a live, normal summary buffer.  
6715
6716 There will never be more than one dead summary buffer at any one time. 
6717
6718 @vindex gnus-use-cross-reference
6719 The data on the current group will be updated (which articles you have
6720 read, which articles you have replied to, etc.) when you exit the
6721 summary buffer.  If the @code{gnus-use-cross-reference} variable is
6722 @code{t} (which is the default), articles that are cross-referenced to
6723 this group and are marked as read, will also be marked as read in the
6724 other subscribed groups they were cross-posted to.  If this variable is
6725 neither @code{nil} nor @code{t}, the article will be marked as read in
6726 both subscribed and unsubscribed groups.
6727
6728 Marking cross-posted articles as read ensures that you'll never have to
6729 read the same article more than once.  Unless, of course, somebody has
6730 posted it to several groups separately.  Posting the same article to
6731 several groups (not cross-posting) is called @dfn{spamming}, and you are
6732 by law required to send nasty-grams to anyone who perpetrates such a
6733 heinous crime.
6734
6735 Remember: Cross-posting is kinda ok, but posting the same article
6736 separately to several groups is not.
6737
6738 One thing that may cause Gnus to not do the cross-posting thing
6739 correctly is if you use an @sc{nntp} server that supports @sc{xover}
6740 (which is very nice, because it speeds things up considerably) which
6741 does not include the @code{Xref} header in its @sc{nov} lines.  This is
6742 Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
6743 even with @sc{xover} by registering the @code{Xref} lines of all
6744 articles you actually read, but if you kill the articles, or just mark
6745 them as read without reading them, Gnus will not get a chance to snoop
6746 the @code{Xref} lines out of these articles, and will be unable to use
6747 the cross reference mechanism.
6748
6749 @vindex gnus-nov-is-evil
6750 If you want Gnus to get the @code{Xref}s right all the time, you have to
6751 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
6752 considerably.
6753
6754 C'est la vie.
6755
6756
6757 @node Process/Prefix
6758 @section Process/Prefix
6759 @cindex process/prefix convention
6760
6761 Many functions, among them functions for moving, decoding and saving
6762 articles, use what is known as the @dfn{Process/Prefix convention}.
6763
6764 This is a method for figuring out what articles that the user wants the
6765 command to be performed on.
6766
6767 It goes like this:
6768
6769 If the numeric prefix is N, perform the operation on the next N
6770 articles, starting with the current one.  If the numeric prefix is
6771 negative, perform the operation on the previous N articles, starting
6772 with the current one.
6773
6774 If @code{transient-mark-mode} in non-@code{nil} and the region is
6775 active, all articles in the region will be worked upon.
6776
6777 If there is no numeric prefix, but some articles are marked with the
6778 process mark, perform the operation on the articles that are marked with
6779 the process mark.
6780
6781 If there is neither a numeric prefix nor any articles marked with the
6782 process mark, just perform the operation on the current article.
6783
6784 Quite simple, really, but it needs to be made clear so that surprises
6785 are avoided.
6786
6787 @vindex gnus-summary-goto-unread
6788 One thing that seems to shock & horrify lots of people is that, for
6789 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
6790 Since each @kbd{d} (which marks the current article as read) by default
6791 goes to the next unread article after marking, this means that @kbd{3 d}
6792 will mark the next three unread articles as read, no matter what the
6793 summary buffer looks like.  Set @code{gnus-summary-goto-unread} to
6794 @code{nil} for a more straightforward action.
6795
6796
6797 @node Saving Articles
6798 @section Saving Articles
6799 @cindex saving articles
6800
6801 Gnus can save articles in a number of ways.  Below is the documentation
6802 for saving articles in a fairly straight-forward fashion (i.e., little
6803 processing of the article is done before it is saved).  For a different
6804 approach (uudecoding, unsharing) you should use @code{gnus-uu}
6805 (@pxref{Decoding Articles}).
6806
6807 @vindex gnus-save-all-headers
6808 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
6809 unwanted headers before saving the article.
6810
6811 @vindex gnus-saved-headers
6812 If the preceeding variable is @code{nil}, all headers that match the
6813 @code{gnus-saved-headers} regexp will be kept, while the rest will be
6814 deleted before saving.
6815
6816 @table @kbd
6817
6818 @item O o
6819 @itemx o
6820 @kindex O o (Summary)
6821 @kindex o (Summary)
6822 @findex gnus-summary-save-article
6823 Save the current article using the default article saver
6824 (@code{gnus-summary-save-article}). 
6825
6826 @item O m
6827 @kindex O m (Summary)
6828 @findex gnus-summary-save-article-mail
6829 Save the current article in mail format
6830 (@code{gnus-summary-save-article-mail}). 
6831
6832 @item O r
6833 @kindex O r (Summary)
6834 @findex gnus-summary-save-article-mail
6835 Save the current article in rmail format
6836 (@code{gnus-summary-save-article-rmail}). 
6837
6838 @item O f
6839 @kindex O f (Summary)
6840 @findex gnus-summary-save-article-file
6841 Save the current article in plain file format
6842 (@code{gnus-summary-save-article-file}). 
6843
6844 @item O b
6845 @kindex O b (Summary)
6846 @findex gnus-summary-save-article-body-file
6847 Save the current article body in plain file format
6848 (@code{gnus-summary-save-article-body-file}). 
6849
6850 @item O h
6851 @kindex O h (Summary)
6852 @findex gnus-summary-save-article-folder
6853 Save the current article in mh folder format
6854 (@code{gnus-summary-save-article-folder}). 
6855
6856 @item O p
6857 @kindex O p (Summary)
6858 @findex gnus-summary-pipe-output
6859 Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
6860 the current article to a process (@code{gnus-summary-pipe-output}).
6861 @end table
6862
6863 @vindex gnus-prompt-before-saving
6864 All these commands use the process/prefix convention
6865 (@pxref{Process/Prefix}).  If you save bunches of articles using these
6866 functions, you might get tired of being prompted for files to save each
6867 and every article in.  The prompting action is controlled by
6868 the @code{gnus-prompt-before-saving} variable, which is @code{always} by
6869 default, giving you that excessive prompting action you know and
6870 loathe.  If you set this variable to @code{t} instead, you'll be promted
6871 just once for each series of articles you save.  If you like to really
6872 have Gnus do all your thinking for you, you can even set this variable
6873 to @code{nil}, which means that you will never be prompted for files to
6874 save articles in.  Gnus will simply save all the articles in the default
6875 files. 
6876
6877
6878 @vindex gnus-default-article-saver
6879 You can customize the @code{gnus-default-article-saver} variable to make
6880 Gnus do what you want it to.  You can use any of the four ready-made
6881 functions below, or you can create your own.
6882
6883 @table @code
6884
6885 @item gnus-summary-save-in-rmail
6886 @findex gnus-summary-save-in-rmail
6887 This is the default format, @dfn{babyl}.  Uses the function in the
6888 @code{gnus-rmail-save-name} variable to get a file name to save the
6889 article in.  The default is @code{gnus-plain-save-name}.
6890
6891 @item gnus-summary-save-in-mail
6892 @findex gnus-summary-save-in-mail
6893 Save in a Unix mail (mbox) file.  Uses the function in the
6894 @code{gnus-mail-save-name} variable to get a file name to save the
6895 article in.  The default is @code{gnus-plain-save-name}.
6896
6897 @item gnus-summary-save-in-file
6898 @findex gnus-summary-save-in-file
6899 Append the article straight to an ordinary file.  Uses the function in
6900 the @code{gnus-file-save-name} variable to get a file name to save the
6901 article in.  The default is @code{gnus-numeric-save-name}.
6902
6903 @item gnus-summary-save-body-in-file
6904 @findex gnus-summary-save-body-in-file
6905 Append the article body to an ordinary file.  Uses the function in the
6906 @code{gnus-file-save-name} variable to get a file name to save the
6907 article in.  The default is @code{gnus-numeric-save-name}.
6908
6909 @item gnus-summary-save-in-folder
6910 @findex gnus-summary-save-in-folder
6911 Save the article to an MH folder using @code{rcvstore} from the MH
6912 library.
6913
6914 @item gnus-summary-save-in-vm
6915 @findex gnus-summary-save-in-vm
6916 Save the article in a VM folder.  You have to have the VM mail
6917 reader to use this setting.
6918 @end table
6919
6920 All of these functions, except for the last one, will save the article
6921 in the @code{gnus-article-save-directory}, which is initialized from the
6922 @samp{SAVEDIR} environment variable.  This is @file{~/News/} by
6923 default. 
6924
6925 As you can see above, the functions use different functions to find a
6926 suitable name of a file to save the article in.  Below is a list of
6927 available functions that generate names:
6928
6929 @table @code
6930
6931 @item gnus-Numeric-save-name
6932 @findex gnus-Numeric-save-name
6933 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
6934
6935 @item gnus-numeric-save-name
6936 @findex gnus-numeric-save-name
6937 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
6938
6939 @item gnus-Plain-save-name
6940 @findex gnus-Plain-save-name
6941 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
6942
6943 @item gnus-plain-save-name
6944 @findex gnus-plain-save-name
6945 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
6946 @end table
6947
6948 @vindex gnus-split-methods
6949 You can have Gnus suggest where to save articles by plonking regexp into
6950 the @code{gnus-split-methods} alist.  For instance, if you would like to
6951 save articles related to Gnus in the file @file{gnus-stuff}, and articles
6952 related to VM in @code{vm-stuff}, you could set this variable to something
6953 like:
6954
6955 @lisp
6956 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
6957  ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
6958  (my-choosing-function "../other-dir/my-stuff")
6959  ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
6960 @end lisp
6961
6962 We see that this is a list where each element is a list that has two
6963 elements---the @dfn{match} and the @dfn{file}.  The match can either be
6964 a string (in which case it is used as a regexp to match on the article
6965 head); it can be a symbol (which will be called as a function); or it
6966 can be a list (which will be @code{eval}ed).  If any of these actions
6967 have a non-@code{nil} result, the @dfn{file} will be used as a default
6968 prompt.  In addition, the result of the operation itself will be used if
6969 the function or form called returns a string or a list of strings. 
6970
6971 You basically end up with a list of file names that might be used when
6972 saving the current article.  (All "matches" will be used.)  You will
6973 then be prompted for what you really want to use as a name, with file
6974 name completion over the results from applying this variable.
6975
6976 This variable is @code{((gnus-article-archive-name))} by default, which
6977 means that Gnus will look at the articles it saves for an
6978 @samp{Archive-name} line and use that as a suggestion for the file
6979 name. 
6980
6981 @vindex gnus-use-long-file-name
6982 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
6983 @code{nil}, all the preceding functions will replace all periods
6984 (@samp{.}) in the group names with slashes (@samp{/})---which means that
6985 the functions will generate hierarchies of directories instead of having
6986 all the files in the toplevel directory
6987 (@samp{~/News/alt/andrea-dworkin} instead of
6988 @samp{~/News/alt.andrea-dworkin}.)  This variable is @code{t} by default
6989 on most systems.  However, for historical reasons, this is @code{nil} on
6990 Xenix and usg-unix-v machines by default.
6991
6992 This function also affects kill and score file names.  If this variable
6993 is a list, and the list contains the element @code{not-score}, long file
6994 names will not be used for score files, if it contains the element
6995 @code{not-save}, long file names will not be used for saving, and if it
6996 contains the element @code{not-kill}, long file names will not be used
6997 for kill files.
6998
6999 If you'd like to save articles in a hierarchy that looks something like
7000 a spool, you could
7001
7002 @lisp
7003 (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
7004 (setq gnus-default-article-save 'gnus-summary-save-in-file) ; no encoding
7005 @end lisp
7006
7007 Then just save with @kbd{o}.  You'd then read this hierarchy with
7008 ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
7009 the toplevel directory as the argument (@file{~/News/}).  Then just walk
7010 around to the groups/directories with @code{nneething}.
7011
7012
7013 @node Decoding Articles
7014 @section Decoding Articles
7015 @cindex decoding articles
7016
7017 Sometime users post articles (or series of articles) that have been
7018 encoded in some way or other.  Gnus can decode them for you.
7019
7020 @menu 
7021 * Uuencoded Articles::    Uudecode articles.
7022 * Shared Articles::       Unshar articles.
7023 * PostScript Files::      Split PostScript.
7024 * Decoding Variables::    Variables for a happy decoding.
7025 * Viewing Files::         You want to look at the result of the decoding?
7026 @end menu
7027
7028 All these functions use the process/prefix convention
7029 (@pxref{Process/Prefix}) for finding out what articles to work on, with
7030 the extension that a "single article" means "a single series".  Gnus can
7031 find out by itself what articles belong to a series, decode all the
7032 articles and unpack/view/save the resulting file(s).
7033
7034 Gnus guesses what articles are in the series according to the following
7035 simplish rule: The subjects must be (nearly) identical, except for the
7036 last two numbers of the line.  (Spaces are largely ignored, however.)
7037
7038 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
7039 will find all the articles that match the regexp @samp{^cat.gif
7040 ([0-9]+/[0-9]+).*$}.  
7041
7042 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
7043 series}, will not be properly recognized by any of the automatic viewing
7044 commands, and you have to mark the articles manually with @key{#}.
7045
7046 @node Uuencoded Articles
7047 @subsection Uuencoded Articles
7048 @cindex uudecode
7049 @cindex uuencoded articles
7050
7051 @table @kbd
7052
7053 @item X u
7054 @kindex X u (Summary)
7055 @findex gnus-uu-decode-uu
7056 Uudecodes the current series (@code{gnus-uu-decode-uu}).
7057
7058 @item X U
7059 @kindex X U (Summary)
7060 @findex gnus-uu-decode-uu-and-save
7061 Uudecodes and saves the current series
7062 (@code{gnus-uu-decode-uu-and-save}).
7063
7064 @item X v u
7065 @kindex X v u (Summary)
7066 @findex gnus-uu-decode-uu-view
7067 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
7068
7069 @item X v U
7070 @kindex X v U (Summary)
7071 @findex gnus-uu-decode-uu-and-save-view
7072 Uudecodes, views and saves the current series
7073 (@code{gnus-uu-decode-uu-and-save-view}). 
7074 @end table
7075
7076 Remember that these all react to the presence of articles marked with
7077 the process mark.  If, for instance, you'd like to uncode and save an
7078 entire newsgroup, you'd typically do @kbd{M P a}
7079 (@code{gnus-uu-mark-all}) and then @kbd{X U}
7080 (@code{gnus-uu-decode-uu-and-save}).
7081
7082 All this is very much different from how @code{gnus-uu} worked with
7083 @sc{gnus 4.1}, where you had explicit keystrokes for everything under
7084 the sun.  This version of @code{gnus-uu} generally assumes that you mark
7085 articles in some way (@pxref{Setting Process Marks}) and then press
7086 @kbd{X u}.
7087
7088 Note: When trying to decode articles that have names matching
7089 @code{gnus-uu-notify-files}, which is hard-coded to
7090 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
7091 automatically post an article on @samp{comp.unix.wizards} saying that
7092 you have just viewed the file in question.  This feature can't be turned
7093 off.
7094
7095 @node Shared Articles
7096 @subsection Shared Articles
7097 @cindex unshar
7098 @cindex shared articles
7099
7100 @table @kbd
7101
7102 @item X s
7103 @kindex X s (Summary)
7104 @findex gnus-uu-decode-unshar
7105 Unshars the current series (@code{gnus-uu-decode-unshar}).
7106
7107 @item X S
7108 @kindex X S (Summary)
7109 @findex gnus-uu-decode-unshar-and-save
7110 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
7111
7112 @item X v s
7113 @kindex X v s (Summary)
7114 @findex gnus-uu-decode-unshar-view
7115 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
7116
7117 @item X v S
7118 @kindex X v S (Summary)
7119 @findex gnus-uu-decode-unshar-and-save-view
7120 Unshars, views and saves the current series
7121 (@code{gnus-uu-decode-unshar-and-save-view}). 
7122 @end table
7123
7124 @node PostScript Files
7125 @subsection PostScript Files
7126 @cindex PostScript
7127
7128 @table @kbd
7129
7130 @item X p
7131 @kindex X p (Summary)
7132 @findex gnus-uu-decode-postscript
7133 Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
7134
7135 @item X P
7136 @kindex X P (Summary)
7137 @findex gnus-uu-decode-postscript-and-save
7138 Unpack and save the current PostScript series
7139 (@code{gnus-uu-decode-postscript-and-save}).
7140
7141 @item X v p
7142 @kindex X v p (Summary)
7143 @findex gnus-uu-decode-postscript-view
7144 View the current PostScript series
7145 (@code{gnus-uu-decode-postscript-view}).
7146
7147 @item X v P
7148 @kindex X v P (Summary)
7149 @findex gnus-uu-decode-postscript-and-save-view
7150 View and save the current PostScript series
7151 (@code{gnus-uu-decode-postscript-and-save-view}). 
7152 @end table
7153
7154 @node Decoding Variables
7155 @subsection Decoding Variables
7156
7157 Adjective, not verb.
7158
7159 @menu 
7160 * Rule Variables::          Variables that say how a file is to be viewed.
7161 * Other Decode Variables::  Other decode variables.
7162 * Uuencoding & Posting::    Variables for customizing uuencoding.
7163 @end menu
7164
7165 @node Rule Variables
7166 @subsubsection Rule Variables
7167 @cindex rule variables
7168
7169 Gnus uses @dfn{rule variables} to decide how to view a file.  All these
7170 variables are on the form
7171   
7172 @lisp
7173       (list '(regexp1 command2)
7174             '(regexp2 command2)
7175             ...)
7176 @end lisp
7177
7178 @table @code
7179
7180 @item gnus-uu-user-view-rules
7181 @vindex gnus-uu-user-view-rules
7182 This variable is consulted first when viewing files.  If you wish to use,
7183 for instance, @code{sox} to convert an @samp{.au} sound file, you could
7184 say something like:
7185 @lisp
7186        (setq gnus-uu-user-view-rules
7187          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
7188 @end lisp
7189
7190 @item gnus-uu-user-view-rules-end
7191 @vindex gnus-uu-user-view-rules-end
7192 This variable is consulted if Gnus couldn't make any matches from the
7193 user and default view rules.
7194
7195 @item gnus-uu-user-archive-rules
7196 @vindex gnus-uu-user-archive-rules
7197 This variable can be used to say what commands should be used to unpack
7198 archives.
7199 @end table
7200
7201
7202 @node Other Decode Variables
7203 @subsubsection Other Decode Variables
7204
7205 @table @code
7206 @vindex gnus-uu-grabbed-file-functions
7207
7208 @item gnus-uu-grabbed-file-functions
7209 All functions in this list will be called right each file has been
7210 successfully decoded---so that you can move or view files right away,
7211 and don't have to wait for all files to be decoded before you can do
7212 anything.  Ready-made functions you can put in this list are:
7213
7214 @table @code
7215
7216 @item gnus-uu-grab-view
7217 @findex gnus-uu-grab-view
7218 View the file.
7219
7220 @item gnus-uu-grab-move
7221 @findex gnus-uu-grab-move
7222 Move the file (if you're using a saving function.)
7223 @end table
7224
7225 @item gnus-uu-ignore-files-by-name
7226 @vindex gnus-uu-ignore-files-by-name
7227 Files with name matching this regular expression won't be viewed.
7228
7229 @item gnus-uu-ignore-files-by-type
7230 @vindex gnus-uu-ignore-files-by-type
7231 Files with a @sc{mime} type matching this variable won't be viewed.
7232 Note that Gnus tries to guess what type the file is based on the name.
7233 @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
7234 kludgey.
7235
7236 @item gnus-uu-tmp-dir
7237 @vindex gnus-uu-tmp-dir
7238 Where @code{gnus-uu} does its work.
7239
7240 @item gnus-uu-do-not-unpack-archives
7241 @vindex gnus-uu-do-not-unpack-archives
7242 Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
7243 looking for files to display.
7244
7245 @item gnus-uu-view-and-save
7246 @vindex gnus-uu-view-and-save
7247 Non-@code{nil} means that the user will always be asked to save a file
7248 after viewing it.
7249
7250 @item gnus-uu-ignore-default-view-rules
7251 @vindex gnus-uu-ignore-default-view-rules
7252 Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
7253 rules.
7254
7255 @item gnus-uu-ignore-default-archive-rules
7256 @vindex gnus-uu-ignore-default-archive-rules
7257 Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
7258 unpacking commands.
7259
7260 @item gnus-uu-kill-carriage-return
7261 @vindex gnus-uu-kill-carriage-return
7262 Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
7263 from articles.
7264
7265 @item gnus-uu-unmark-articles-not-decoded
7266 @vindex gnus-uu-unmark-articles-not-decoded
7267 Non-@code{nil} means that @code{gnus-uu} will mark articles that were
7268 unsuccessfully decoded as unread.
7269
7270 @item gnus-uu-correct-stripped-uucode
7271 @vindex gnus-uu-correct-stripped-uucode
7272 Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
7273 uuencoded files that have had trailing spaces deleted.
7274
7275 @item gnus-uu-view-with-metamail
7276 @vindex gnus-uu-view-with-metamail
7277 Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
7278 commands defined by the rule variables and just fudge a @sc{mime}
7279 content type based on the file name.  The result will be fed to
7280 @code{metamail} for viewing.
7281
7282 @item gnus-uu-save-in-digest
7283 @vindex gnus-uu-save-in-digest
7284 Non-@code{nil} means that @code{gnus-uu}, when asked to save without
7285 decoding, will save in digests.  If this variable is @code{nil},
7286 @code{gnus-uu} will just save everything in a file without any
7287 embellishments.  The digesting almost conforms to RFC1153---no easy way
7288 to specify any meaningful volume and issue numbers were found, so I
7289 simply dropped them.
7290
7291 @end table
7292
7293 @node Uuencoding & Posting
7294 @subsubsection Uuencoding & Posting
7295
7296 @table @code
7297
7298 @item gnus-uu-post-include-before-composing
7299 @vindex gnus-uu-post-include-before-composing
7300 Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
7301 before you compose the article.  If this variable is @code{t}, you can
7302 either include an encoded file with @key{C-c C-i} or have one included
7303 for you when you post the article.
7304
7305 @item gnus-uu-post-length
7306 @vindex gnus-uu-post-length
7307 Maximum length of an article.  The encoded file will be split into how
7308 many articles it takes to post the entire file.
7309
7310 @item gnus-uu-post-threaded
7311 @vindex gnus-uu-post-threaded
7312 Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
7313 thread.  This may not be smart, as no other decoder I have seen are able
7314 to follow threads when collecting uuencoded articles.  (Well, I have
7315 seen one package that does that---@code{gnus-uu}, but somehow, I don't
7316 think that counts...) Default is @code{nil}.
7317
7318 @item gnus-uu-post-separate-description
7319 @vindex gnus-uu-post-separate-description
7320 Non-@code{nil} means that the description will be posted in a separate
7321 article.  The first article will typically be numbered (0/x).  If this
7322 variable is @code{nil}, the description the user enters will be included
7323 at the beginning of the first article, which will be numbered (1/x).
7324 Default is @code{t}.
7325
7326 @end table
7327
7328 @node Viewing Files
7329 @subsection Viewing Files
7330 @cindex viewing files
7331 @cindex pseudo-articles
7332
7333 After decoding, if the file is some sort of archive, Gnus will attempt
7334 to unpack the archive and see if any of the files in the archive can be
7335 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
7336 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
7337 uncompress and detar the main file, and then view the two pictures.
7338 This unpacking process is recursive, so if the archive contains archives
7339 of archives, it'll all be unpacked.
7340
7341 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
7342 extracted file into the summary buffer.  If you go to these "articles",
7343 you will be prompted for a command to run (usually Gnus will make a
7344 suggestion), and then the command will be run.
7345
7346 @vindex gnus-view-pseudo-asynchronously
7347 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
7348 until the viewing is done before proceeding.
7349
7350 @vindex gnus-view-pseudos
7351 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
7352 the pseudo-articles into the summary buffer, but view them
7353 immediately.  If this variable is @code{not-confirm}, the user won't even
7354 be asked for a confirmation before viewing is done.
7355
7356 @vindex gnus-view-pseudos-separately 
7357 If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
7358 pseudo-article will be created for each file to be viewed.  If
7359 @code{nil}, all files that use the same viewing command will be given as
7360 a list of parameters to that command.
7361
7362 If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
7363 pseudo-articles when decoding.  It is @code{t} by default.
7364
7365 So; there you are, reading your @emph{pseudo-articles} in your
7366 @emph{virtual newsgroup} from the @emph{virtual server}; and you think:
7367 Why isn't anything real anymore? How did we get here?
7368
7369
7370 @node Article Treatment
7371 @section Article Treatment
7372
7373 Reading through this huge manual, you may have quite forgotten that the
7374 object of newsreaders are to actually, like, read what people have
7375 written.  Reading articles.  Unfortunately, people are quite bad at
7376 writing, so there are tons of functions and variables to make reading
7377 these articles easier.
7378
7379 @menu
7380 * Article Highlighting::    You want to make the article look like fruit salad.
7381 * Article Hiding::          You also want to make certain info go away.
7382 * Article Washing::         Lots of way-neat functions to make life better.
7383 * Article Buttons::         Clcik on URLs, Message-IDs, addresses and the like.
7384 * Article Date::            Grumble, UT!
7385 @end menu
7386
7387
7388 @node Article Highlighting
7389 @subsection Article Highlighting
7390 @cindex highlight
7391
7392 Not only do you want your article buffer to look like fruit salad, but
7393 you want it to look like technicolor fruit salad.
7394
7395 @table @kbd
7396
7397 @item W H a
7398 @kindex W H a (Summary)
7399 @findex gnus-article-highlight
7400 Highlight the current article (@code{gnus-article-highlight}).
7401
7402 @item W H h
7403 @kindex W H h (Summary)
7404 @findex gnus-article-highlight-headers
7405 @vindex gnus-header-face-alist
7406 Highlight the headers (@code{gnus-article-highlight-headers}).  The
7407 highlighting will be done according to the @code{gnus-header-face-alist}
7408 variable, which is a list where each element has the form @var{(regexp
7409 name content)}.  @var{regexp} is a regular expression for matching the
7410 header,  @var{name} is the face used for highling the header name and
7411 @var{content} is the face for highlighting the header value.  The first
7412 match made will be used.
7413
7414 @item W H c
7415 @kindex W H c (Summary)
7416 @findex gnus-article-highlight-citation
7417 Highlight cited text (@code{gnus-article-highlight-citation}). 
7418
7419 Some variables to customize the citation highlights:
7420
7421 @table @code
7422 @vindex gnus-cite-parse-max-size
7423
7424 @item gnus-cite-parse-max-size
7425 If the article size if bigger than this variable (which is 25000 by
7426 default), no citation highlighting will be performed.  
7427
7428 @item gnus-cite-prefix-regexp
7429 @vindex gnus-cite-prefix-regexp
7430 Regexp mathcing the longest possible citation prefix on a line. 
7431
7432 @item gnus-cite-max-prefix
7433 @vindex gnus-cite-max-prefix
7434 Maximum possible length for a citation prefix (default 20).
7435
7436 @item gnus-supercite-regexp
7437 @vindex gnus-supercite-regexp
7438 Regexp matching normal SuperCite attribution lines.  
7439
7440 @item gnus-supercite-secondary-regexp
7441 @vindex gnus-supercite-secondary-regexp
7442 Regexp matching mangled SuperCite attribution lines.
7443
7444 @item gnus-cite-minimum-match-count
7445 @vindex gnus-cite-minimum-match-count
7446 Minimum number of identical prefixes we have to see before we believe
7447 that it's a citation.
7448
7449 @item gnus-cite-attribution-prefix
7450 @vindex gnus-cite-attribution-prefix
7451 Regexp matching the beginning of an attribution line.
7452
7453 @item gnus-cite-addtribution-suffix
7454 @vindex gnus-cite-addtribution-suffix
7455 Regexp matching the end of an attribution line.
7456
7457 @item gnus-cite-attribution-face
7458 @vindex gnus-cite-attribution-face
7459 Face used for attribution lines.  It is merged with the face for the
7460 cited text belonging to the attribution.
7461
7462 @end table
7463
7464
7465 @item W H s
7466 @kindex W H s (Summary)
7467 @vindex gnus-signature-separator
7468 @findex gnus-article-highlight-signature
7469 Highlight the signature (@code{gnus-article-highlight-signature}).
7470 Everything after @code{gnus-signature-separator} in an article will be
7471 considered a signature.
7472
7473 @end table
7474
7475
7476 @node Article Hiding
7477 @subsection Article Hiding
7478 @cindex article hiding
7479
7480 Or rather, hiding certain things in each article.  There usually is much
7481 too much gruft in most articles.  
7482
7483 @table @kbd
7484
7485 @item W W a
7486 @kindex W W a (Summary)
7487 @findex gnus-article-hide
7488 Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}). 
7489
7490 @item W W h
7491 @kindex W W h (Summary)
7492 @findex gnus-article-hide-headers
7493 Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
7494 Headers}. 
7495
7496 @item W W b
7497 @kindex W W b (Summary)
7498 @findex gnus-article-hide-boring-headers
7499 Hide headers that aren't particularly interesting
7500 (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
7501
7502 @item W W s
7503 @kindex W W s (Summary)
7504 @findex gnus-article-hide-signature
7505 Hide signature (@code{gnus-article-hide-signature}).
7506
7507 @item W W p
7508 @kindex W W p (Summary)
7509 @findex gnus-article-hide-pgp
7510 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 
7511
7512 @item W W c
7513 @kindex W W c (Summary)
7514 @findex gnus-article-hide-citation
7515 Hide citation (@code{gnus-article-hide-citation}).  Two variables for
7516 customizing the hiding:
7517
7518 @table @code
7519
7520 @item gnus-cite-hide-percentage
7521 @vindex gnus-cite-hide-percentage
7522 If the cited text is of a bigger percentage than this variable (default
7523 50), hide the cited text.
7524
7525 @item gnus-cite-hide-absolute
7526 @vindex gnus-cite-hide-absolute
7527 The cited text must be have at least this length (default 10) before it
7528 is hidden.
7529
7530 @end table
7531
7532 @item W W C
7533 @kindex W W C (Summary)
7534 @findex gnus-article-hide-citation-in-followups
7535 Hide cited text in articles that aren't roots
7536 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
7537 useful as an interactive command, but might be a handy function to stick
7538 in @code{gnus-article-display-hook} (@pxref{Customizing Articles}). 
7539
7540 @end table
7541
7542 All these "hiding" commands are toggles, but if you give a negative
7543 prefix to these commands, they will show what they have previously
7544 hidden.  If you give a positive prefix, they will always hide.
7545
7546 Also see @xref{Article Highlighting} for further variables for
7547 citation customization.
7548
7549
7550 @node Article Washing
7551 @subsection Article Washing
7552 @cindex washing
7553 @cindex article washing
7554
7555 We call this "article washing" for a really good reason.  Namely, the
7556 @kbd{A} key was taken, so we had to use the @kbd{W} key instead.
7557
7558 @dfn{Washing} is defined by us as "changing something from something to
7559 something else", but normally results in something looking better.
7560 Cleaner, perhaps.
7561
7562 @table @kbd
7563
7564 @item W l
7565 @kindex W l (Summary)
7566 @findex gnus-summary-stop-page-breaking
7567 Remove page breaks from the current article
7568 (@code{gnus-summary-stop-page-breaking}).
7569
7570 @item W r
7571 @kindex W r (Summary)
7572 @findex gnus-summary-caesar-message
7573 Do a Caesar rotate (rot13) on the article buffer
7574 (@code{gnus-summary-caesar-message}). 
7575
7576 @item A g
7577 @kindex A g (Summary)
7578 @findex gnus-summary-show-article
7579 (Re)fetch the current article (@code{gnus-summary-show-article}).  If
7580 given a prefix, fetch the current article, but don't run any of the
7581 article treatment functions.  This will give you a "raw" article, just
7582 the way it came from the server.
7583
7584 @item W t
7585 @kindex W t (Summary)
7586 @findex gnus-summary-toggle-header
7587 Toggle whether to display all headers in the article buffer
7588 (@code{gnus-summary-toggle-header}). 
7589
7590 @item W m
7591 @kindex W m (Summary)
7592 @findex gnus-summary-toggle-mime
7593 Toggle whether to run the article through @sc{mime} before displaying
7594 (@code{gnus-summary-toggle-mime}).
7595
7596 @item W o
7597 @kindex W o (Summary)
7598 @findex gnus-article-treat-overstrike
7599 Treat overstrike (@code{gnus-article-treat-overstrike}).
7600
7601 @item W w
7602 @kindex W w (Summary)
7603 @findex gnus-article-word-wrap
7604 Do word wrap (@code{gnus-article-word-wrap}).
7605
7606 @item W c
7607 @kindex W c (Summary)
7608 @findex gnus-article-remove-cr
7609 Remove CR (@code{gnus-article-remove-cr}).
7610
7611 @item W L
7612 @kindex W L (Summary)
7613 @findex gnus-article-remove-trailing-blank-lines
7614 Remove all blank lines at the end of the article
7615 (@code{gnus-article-remove-trailing-blank-lines}).
7616
7617 @item W q
7618 @kindex W q (Summary)
7619 @findex gnus-article-de-quoted-unreadable
7620 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
7621
7622 @item W f
7623 @kindex W f (Summary)
7624 @cindex x-face
7625 @findex gnus-article-display-x-face
7626 @findex gnus-article-x-face-command
7627 @vindex gnus-article-x-face-command
7628 @vindex gnus-article-x-face-too-ugly
7629 Look for and display any X-Face headers
7630 (@code{gnus-article-display-x-face}).  The command executed by this
7631 function is given by the @code{gnus-article-x-face-command} variable.  If
7632 this variable is a string, this string will be executed in a sub-shell.
7633 If it is a function, this function will be called with the face as the
7634 argument.  If the @code{gnus-article-x-face-too-ugly} (which is a regexp)
7635 matches the @code{From} header, the face will not be shown.
7636
7637 @item W b
7638 @kindex W b (Summary)
7639 @findex gnus-article-add-buttons
7640 Add clickable buttons to the article (@code{gnus-article-add-buttons}). 
7641
7642 @item W B
7643 @kindex W B (Summary)
7644 @findex gnus-article-add-buttons-to-head
7645 Add clickable buttons to the article headers
7646 (@code{gnus-article-add-buttons-to-head}).  
7647
7648 @end table
7649
7650
7651 @node Article Buttons
7652 @subsection Article Buttons
7653 @cindex buttons
7654
7655 People often include references to other stuff in articles, and it would
7656 be nice if Gnus could just fetch whatever it is that people talk about
7657 with the minimum of fuzz.
7658
7659 Gnus adds @dfn{buttons} to certain standard references by default:
7660 Well-formed URLs, mail addresses and Message-IDs.  This is controlled by
7661 two variables, one that handles article bodies and one that handles
7662 article heads:
7663
7664 @table @code
7665
7666 @item gnus-button-alist
7667 @vindex gnus-header-button-alist
7668 This is an alist where each entry has this form:
7669
7670 @lisp
7671 (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7672 @end lisp
7673
7674 @table @var
7675
7676 @item regexp
7677 All text that match this regular expression will be considered an
7678 external reference.  Here's a typical regexp that match embedded URLs:
7679 @samp{"<URL:\\([^\n\r>]*\\)>"}. 
7680
7681 @item button-par
7682 Gnus has to know which parts of the match is to be highlighted.  This is
7683 a number that says what sub-expression of the regexp that is to be
7684 highlighted.  If you want it all highlighted, you use @samp{0} here.
7685
7686 @item use-p
7687 This form will be @code{eval}ed, and if the result is non-@code{nil},
7688 this is considered a match.  This is useful if you want extra sifting to
7689 avoid false matches.
7690
7691 @item function
7692 This function will be called when you click on this button.
7693
7694 @item data-par
7695 As with @var{button-par}, this is a sub-expression number, but this one
7696 says which part of the match is to be sent as data to @var{function}. 
7697
7698 @end table
7699
7700 So the full entry for buttonizing URLs is then
7701
7702 @lisp
7703 ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
7704 @end lisp
7705
7706 @item gnus-header-button-alist
7707 @vindex gnus-header-button-alist
7708 This is just like the other alist, except that it is applied to the
7709 article head only, and that each entry has an additional element that is
7710 used to say what headers to apply the buttonize coding to:
7711
7712 @lisp
7713 (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
7714 @end lisp
7715
7716 @var{header} is a regular expression.
7717
7718 @end table
7719
7720 @vindex gnus-article-button-face
7721 @vindex gnus-article-mouse-face
7722 Buttons are highlighted with @code{gnus-article-button-face}, while
7723 @code{gnus-article-mouse-face} is used when the mouse cursor is over the
7724 button.
7725
7726
7727 @node Article Date
7728 @subsection Article Date
7729
7730 The date is most likely generated in some obscure timezone you've never
7731 heard of, so it's quite nice to be able to find out what the time was
7732 when the article was sent.
7733
7734 @table @kbd
7735
7736 @item W T u
7737 @kindex W T u (Summary)
7738 @findex gnus-article-date-ut
7739 Display the date in UT (aka. GMT, aka ZULU)
7740 (@code{gnus-article-date-ut}). 
7741
7742 @item W T l
7743 @kindex W T l (Summary)
7744 @findex gnus-article-date-local
7745 Display the date in the local timezone (@code{gnus-article-date-local}).
7746
7747 @item W T e
7748 @kindex W T e (Summary)
7749 @findex gnus-article-date-lapsed
7750 Say how much time has (e)lapsed between the article was posted and now
7751 (@code{gnus-article-date-lapsed}).
7752
7753 @item W T o
7754 @kindex W T o (Summary)
7755 @findex gnus-article-date-original
7756 Display the original date (@code{gnus-article-date-original}).  This can
7757 be useful if you normally use some other conversion function and is
7758 worried that it might be doing something totally wrong.  Say, claiming
7759 that the article was posted in 1854.  Although something like that is
7760 @emph{totally} impossible.  Don't you trust me? *titter*
7761
7762 @end table
7763
7764
7765 @node Summary Sorting
7766 @section Summary Sorting
7767 @cindex summary sorting
7768
7769 You can have the summary buffer sorted in various ways, even though I
7770 can't really see why you'd want that.
7771
7772 @table @kbd
7773
7774 @item C-c C-s C-n
7775 @kindex C-c C-s C-n (Summary)
7776 @findex gnus-summary-sort-by-number
7777 Sort by article number (@code{gnus-summary-sort-by-number}).
7778
7779 @item C-c C-s C-a
7780 @kindex C-c C-s C-a (Summary)
7781 @findex gnus-summary-sort-by-author
7782 Sort by author (@code{gnus-summary-sort-by-author}).
7783
7784 @item C-c C-s C-s
7785 @kindex C-c C-s C-s (Summary)
7786 @findex gnus-summary-sort-by-subject
7787 Sort by subject (@code{gnus-summary-sort-by-subject}).
7788
7789 @item C-c C-s C-d
7790 @kindex C-c C-s C-d (Summary)
7791 @findex gnus-summary-sort-by-date
7792 Sort by date (@code{gnus-summary-sort-by-date}).
7793
7794 @item C-c C-s C-i
7795 @kindex C-c C-s C-i (Summary)
7796 @findex gnus-summary-sort-by-score
7797 Sort by score (@code{gnus-summary-sort-by-score}).
7798 @end table
7799
7800 These functions will work both when you use threading and when you don't
7801 use threading.  In the latter case, all summary lines will be sorted,
7802 line by line.  In the former case, sorting will be done on a
7803 root-by-root basis, which might not be what you were looking for.  To
7804 toggle whether to use threading, type @kbd{T T} (@pxref{Thread
7805 Commands}).
7806
7807
7808 @node Finding the Parent
7809 @section Finding the Parent
7810 @cindex parent articles
7811 @cindex referring articles
7812
7813 @findex gnus-summary-refer-parent-article
7814 @kindex ^ (Summary)
7815 If you'd like to read the parent of the current article, and it is not
7816 displayed in the article buffer, you might still be able to.  That is,
7817 if the current group is fetched by @sc{nntp}, the parent hasn't expired
7818 and the @code{References} in the current article are not mangled, you
7819 can just press @kbd{^} or @kbd{A r}
7820 (@code{gnus-summary-refer-parent-article}).  If everything goes well,
7821 you'll get the parent.  If the parent is already displayed in the
7822 summary buffer, point will just move to this article.
7823
7824 @findex gnus-summary-refer-references
7825 @kindex A R (Summary)
7826 You can have Gnus fetch all articles mentioned in the @code{References}
7827 header of the article by pushing @kbd{A R}
7828 (@code{gnus-summary-refer-references}). 
7829
7830 @findex gnus-summary-refer-article
7831 @kindex M-^ (Summary)
7832 You can also ask the @sc{nntp} server for an arbitrary article, no
7833 matter what group it belongs to.  @kbd{M-^}
7834 (@code{gnus-summary-refer-article}) will ask you for a
7835 @code{Message-ID}, which is one of those long thingies that look
7836 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get
7837 it all exactly right.  No fuzzy searches, I'm afraid.
7838
7839 @vindex gnus-refer-article-method
7840 If the group you are reading is located on a backend that does not
7841 support fetching by @code{Message-ID} very well (like @code{nnspool}),
7842 you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It
7843 would, perhaps, be best if the @sc{nntp} server you consult is the same
7844 as the one that keeps the spool you are reading from updated, but that's
7845 not really necessary.
7846
7847 Most of the mail backends support fetching by @code{Message-ID}, but do
7848 not do a particularly excellent job of it.  That is, @code{nnmbox} and
7849 @code{nnbabyl} are able to locate articles from any groups, while
7850 @code{nnml} and @code{nnfolder} are only able to locate articles that
7851 have been posted to the current group.  (Anything else would be too time
7852 consuming.)  @code{nnmh} does not support this at all.
7853
7854
7855 @node Alternative Approaches
7856 @section Alternative Approaches
7857
7858 Different people like to read news using different methods.  This being
7859 Gnus, we offer a small selection of minor modes for the summary buffers.
7860
7861 @menu
7862 * Pick and Read::               First mark articles and then read them.
7863 * Binary Groups::               Auto-decode all articles.
7864 @end menu
7865
7866
7867 @node Pick and Read
7868 @subsection Pick and Read
7869 @cindex pick and read
7870
7871 Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased
7872 reading interface.  The user first marks the articles she wants to read
7873 from a summary buffer.  Then she starts reading the articles with just
7874 an article buffer displayed.
7875
7876 @findex gnus-pick-mode
7877 @kindex M-x gnus-pick-mode
7878 Gnus provides a summary buffer minor mode that allows
7879 this---@code{gnus-pick-mode}.  This basically means that a few process
7880 mark commands becode one-keystroke commands to allow easy marking, and
7881 it makes one additional command for switching to the summary buffer
7882 available. 
7883
7884 Here are the available keystrokes when using pick mode:
7885
7886 @table @kbd
7887 @item SPC
7888 Pick the article (@code{gnus-summary-mark-as-processable}). 
7889
7890 @item u
7891 Unpick the article (@code{gnus-summary-unmark-as-processable}). 
7892
7893 @item U
7894 Unpick all articles (@code{gnus-summary-unmark-all-processable}). 
7895
7896 @item t
7897 Pick the thread (@code{gnus-uu-mark-thread}). 
7898
7899 @item T
7900 Unpick the thread (@code{gnus-uu-unmark-thread}). 
7901
7902 @item r
7903 Pick the region (@code{gnus-uu-mark-region}). 
7904
7905 @item R
7906 Unpick the region (@code{gnus-uu-unmark-region}). 
7907
7908 @item e
7909 Pick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
7910
7911 @item E
7912 Unpick articles that match a regexp (@code{gnus-uu-unmark-regexp}). 
7913
7914 @item b
7915 Pick the buffer (@code{gnus-uu-mark-buffer}). 
7916
7917 @item B
7918 Unpick the buffer (@code{gnus-uu-unmark-buffer}). 
7919
7920 @item RET
7921 @vindex gnus-pick-display-summary
7922 Start reading the picked articles (@code{gnus-pick-start-reading}).  If
7923 given a prefix, mark all unpicked articles as read first.  If
7924 @code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
7925 will still be visible when you are reading.
7926
7927 @end table
7928
7929 If this sounds like a good idea to you, you could say:
7930
7931 @lisp
7932 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
7933 @end lisp
7934
7935
7936 @node Binary Groups
7937 @subsection Binary Groups
7938 @cindex binary groups
7939
7940 @findex gnus-binary-mode
7941 @kindex M-x gnus-binary-mode
7942 If you spend much time in binary groups, you may grow tired of hitting
7943 @kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
7944 is a minor mode for summary buffers that makes all ordinary Gnus article
7945 selection functions uudecode series of articles and display the result
7946 instead of just displaying the articles the normal way.  
7947
7948 @kindex g (Binary)
7949 @findex gnus-binary-show-article
7950 In fact, the only way to see the actual articles if you have turned this
7951 mode on is the @kbd{g} command (@code{gnus-binary-show-article}). 
7952
7953
7954 @node Tree Display
7955 @section Tree Display
7956 @cindex trees
7957
7958 @vindex gnus-use-trees
7959 If you don't like the normal Gnus summary display, you might try setting
7960 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
7961 additional @dfn{tree buffer}.  You can execute all summary mode commands
7962 in the tree buffer.  
7963
7964 There are a few variables to customize the tree display, of course:
7965
7966 @table @code
7967 @item gnus-tree-mode-hook
7968 A hook called in all tree mode buffers.
7969
7970 @item gnus-tree-mode-line-format
7971 A format string for the mode bar in the tree mode buffers.  The default
7972 is @samp{"Gnus: %%b [%A] %Z"}.  For a list of legal specs, @xref{Summary
7973 Buffer Mode Line}. 
7974
7975 @item gnus-selected-tree-face
7976 Face used for highlighting the selected article in the tree buffer.  The
7977 default is @code{modeline}.
7978
7979 @item gnus-tree-line-format
7980 A format string for the tree nodes.  The name is a bit of a misnomer,
7981 though---it doesn't define a line, but just the node.  The default value
7982 is @samp{"%(%[%3,3n%]%)"}, which displays the first three characters of
7983 the name of the poster.  It is vital that all nodes are of the same
7984 length, so you @emph{must} use @samp{%4,4n}-like specifiers.
7985
7986 Legal specs are:
7987
7988 @table @samp
7989 @item n
7990 The name of the poster.
7991 @item f
7992 The @code{From} header.
7993 @item N
7994 The number of the article.
7995 @item [
7996 The opening bracket.
7997 @item ] 
7998 The closing bracket.
7999 @item s
8000 The subject.
8001 @end table
8002
8003 @xref{Formatting Variables}.
8004
8005 Variables related to the display are:
8006
8007 @table @code
8008 @item gnus-tree-brackets
8009 This is used for differentiating between "real" articles and "sparse"
8010 articles.  The format is @var{((real-open . real-close) (sparse-open
8011 . sparse-close) (dummy-open . dummy-close))}, and the default is
8012 @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}))}.
8013
8014 @item gnus-tree-parent-child-edges
8015 This is a list that contains the characters used for connecting parent
8016 nodes to their children.  The default is @code{(?- ?\\ ?|)}. 
8017
8018 @end table
8019
8020 @item gnus-tree-minimize-window
8021 If this variable is non-@code{nil}, Gnus will try to keep the tree
8022 buffer as small as possible to allow more room for the other Gnus
8023 windows.  If this variable is a number, the tree buffer will never be
8024 higher than that number.  The default is @code{t}.
8025
8026 @item gnus-generate-tree-function
8027 @findex gnus-generate-horizontal-tree
8028 @findex gnus-generate-vertical-tree
8029 The function that actually generates the thread tree.  Two predefined
8030 functions are available: @code{gnus-generate-horizontal-tree} and
8031 @code{gnus-generate-vertical-tree} (which is the default).
8032
8033 @end table
8034
8035 Here's and example from a horizontal tree buffer:
8036
8037 @example
8038 @{***@}-(***)-[odd]-[Gun]
8039      |     \[Jan]
8040      |     \[odd]-[Eri]
8041      |     \(***)-[Eri]
8042      |           \[odd]-[Paa]
8043      \[Bjo]
8044      \[Gun]
8045      \[Gun]-[Jor]
8046 @end example
8047
8048 Here's the same thread displayed in a vertical tree buffer:
8049
8050 @example
8051 @{***@}
8052   |--------------------------\-----\-----\
8053 (***)                         [Bjo] [Gun] [Gun]
8054   |--\-----\-----\                          |
8055 [odd] [Jan] [odd] (***)                   [Jor]
8056   |           |     |--\
8057 [Gun]       [Eri] [Eri] [odd]
8058                           |
8059                         [Paa]
8060 @end example
8061
8062
8063 @node Mail Group Commands
8064 @section Mail Group Commands
8065 @cindex mail group commands
8066
8067 Some commands only make sense in mail groups.  If these commands are
8068 illegal in the current group, they will raise a hell and let you know.
8069
8070 All these commands (except the expiry and edit commands) use the
8071 process/prefix convention (@pxref{Process/Prefix}).
8072
8073 @table @kbd
8074
8075 @item B e
8076 @kindex B e (Summary)
8077 @findex gnus-summary-expire-articles
8078 Expire all expirable articles in the group
8079 (@code{gnus-summary-expire-articles}).
8080
8081 @item B M-C-e
8082 @kindex B M-C-e (Summary)
8083 @findex gnus-summary-expire-articles-now
8084 Expunge all the expirable articles in the group
8085 (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
8086 articles that are eligeble for expiry in the current group will
8087 disappear forever into that big @file{/dev/null} in the sky.
8088
8089 @item B DEL
8090 @kindex B DEL (Summary)
8091 @findex gnus-summary-delete-articles
8092 Delete the mail article.  This is "delete" as in "delete it from your
8093 disk forever and ever, never to return again." Use with caution.
8094 (@code{gnus-summary-delete-article}).
8095
8096 @item B m
8097 @kindex B m (Summary)
8098 @cindex move mail
8099 @findex gnus-summary-move-article
8100 Move the article from one mail group to another
8101 (@code{gnus-summary-move-article}). 
8102
8103 @item B c
8104 @kindex B c (Summary)
8105 @cindex copy mail
8106 @findex gnus-summary-copy-article
8107 Copy the article from one group (mail group or not) to a mail group
8108 (@code{gnus-summary-copy-article}).
8109
8110 @item B C
8111 @kindex B C (Summary)
8112 @cindex crosspost mail
8113 @findex gnus-summary-crosspost-article
8114 Crosspost the current article to some other group
8115 (@code{gnus-summary-crosspost-article}).  This will create a new copy of
8116 the article in the other group, and the Xref headers of the article will
8117 be properly updated.
8118
8119 @item B i
8120 @kindex B i (Summary)
8121 @findex gnus-summary-import-article
8122 Import a random file into the current mail newsgroup
8123 (@code{gnus-summary-import-article}).  You will be prompted for a file
8124 name, a @code{From} header and a @code{Subject} header.
8125
8126 Something similar can be done by just starting to compose a mail
8127 message.  Instead of typing @kbd{C-c C-c} to mail it off, you can type
8128 @kbd{C-c C-p} instead.  This will put the message you have just created
8129 into the current mail group.
8130
8131 @item B r
8132 @kindex B r (Summary)
8133 @findex gnus-summary-respool-article
8134 Respool the mail article (@code{gnus-summary-move-article}).
8135
8136 @item B w
8137 @itemx e
8138 @kindex B w (Summary)
8139 @kindex e (Summary)
8140 @findex gnus-summary-edit-article
8141 @kindex C-c C-c (Article)
8142 Edit the current article (@code{gnus-summary-edit-article}).  To finish
8143 editing and make the changes permanent, type @kbd{C-c C-c}
8144 (@kbd{gnus-summary-edit-article-done}).
8145
8146 @item B q
8147 @kindex B q (Summary)
8148 @findex gnus-summary-respool-query
8149 If you want to respool an article, you might be curious as to what group
8150 the article will end up in before you do the respooling.  This command
8151 will tell you (@code{gnus-summary-fancy-query}). 
8152 @end table
8153
8154 If you move (or copy) articles regularly, you might wish to have Gnus
8155 suggest where to put the articles.  @code{gnus-move-split-methods} is a
8156 variable that uses the same syntax as @code{gnus-split-methods}
8157 (@pxref{Saving Articles}).  You may customize that variable to create
8158 suggestions you find reasonable.
8159
8160
8161 @node Various Summary Stuff
8162 @section Various Summary Stuff
8163
8164 @menu
8165 * Group Information::                 Information oriented commands.
8166 * Searching for Articles::            Multiple article commands.
8167 * Really Various Summary Commands::   Those pesky non-conformant commands.
8168 @end menu
8169
8170 @vindex gnus-summary-generate-hook
8171 @code{gnus-summary-generate-hook} is called as the last thing before
8172 doing the threading and the generation of the summary buffer.  It's
8173 quite convenient for customizing the threading variables based on what
8174 data the newsgroup has.  This hook is called from the summary buffer
8175 after most summary buffer variables has been set.
8176
8177 @vindex gnus-summary-prepare-hook
8178 @code{gnus-summary-prepare-hook} is called after the summary buffer has
8179 been generated.  You might use it to, for instance, highlight lines or
8180 modify the look of the buffer in some other ungodly manner.  I don't
8181 care.
8182
8183 @node Group Information
8184 @subsection Group Information
8185
8186 @table @kbd
8187
8188 @item H f
8189 @kindex H f (Summary)
8190 @findex gnus-summary-fetch-faq
8191 @vindex gnus-group-faq-directory
8192 Try to fetch the FAQ (list of frequently asked questions) for the
8193 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
8194 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
8195 on a remote machine.  This variable can also be a list of directories.
8196 In that case, giving a prefix to this command will allow you to choose
8197 between the various sites.  @code{ange-ftp} probably will be used for
8198 fetching the file.
8199
8200 @item H d
8201 @kindex H d (Summary)
8202 @findex gnus-summary-describe-group
8203 Give a brief description of the current group
8204 (@code{gnus-summary-describe-group}).  If given a prefix, force
8205 rereading the description from the server.
8206
8207 @item H h
8208 @kindex H h (Summary)
8209 @findex gnus-summary-describe-briefly
8210 Give a very brief description of the most important summary keystrokes
8211 (@code{gnus-summary-describe-briefly}). 
8212
8213 @item H i
8214 @kindex H i (Summary)
8215 @findex gnus-info-find-node
8216 Go to the Gnus info node (@code{gnus-info-find-node}).
8217 @end table
8218
8219 @node Searching for Articles
8220 @subsection Searching for Articles
8221
8222 @table @kbd
8223
8224 @item M-s
8225 @kindex M-s (Summary)
8226 @findex gnus-summary-search-article-forward
8227 Search through all subsequent articles for a regexp
8228 (@code{gnus-summary-search-article-forward}). 
8229
8230 @item M-r
8231 @kindex M-r (Summary)
8232 @findex gnus-summary-search-article-backward
8233 Search through all previous articles for a regexp
8234 (@code{gnus-summary-search-article-backward}). 
8235
8236 @item &
8237 @kindex & (Summary)
8238 @findex gnus-summary-execute-command
8239 This command will prompt you for a header field, a regular expression to
8240 match on this field, and a command to be executed if the match is made
8241 (@code{gnus-summary-execute-command}).
8242
8243 @item M-&
8244 @kindex M-& (Summary)
8245 @findex gnus-summary-universal-argument
8246 Perform any operation on all articles that have been marked with
8247 the process mark (@code{gnus-summary-universal-argument}).
8248 @end table
8249
8250 @node Really Various Summary Commands
8251 @subsection Really Various Summary Commands
8252
8253 @table @kbd
8254
8255 @item A D
8256 @kindex A D (Summary)
8257 @findex gnus-summary-enter-digest-group
8258 If the current article is a collection of other articles (for instance,
8259 a digest), you might use this command to enter a group based on the that
8260 article (@code{gnus-summary-enter-digest-group}).  Gnus will try to
8261 guess what article type is currently displayed unless you give a prefix
8262 to this command, which forces a "digest" interpretation.  Basically,
8263 whenever you see a message that is a collection of other messages on
8264 some format, you @kbd{A D} and read these messages in a more convenient
8265 fashion. 
8266
8267 @item C-t
8268 @kindex C-t (Summary)
8269 @findex gnus-summary-toggle-truncation
8270 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
8271
8272 @item =
8273 @kindex = (Summary)
8274 @findex gnus-summary-expand-window
8275 Expand the summary buffer window (@code{gnus-summary-expand-window}).
8276 If given a prefix, force an @code{article} window configuration. 
8277 @end table
8278
8279
8280 @node The Article Buffer
8281 @chapter The Article Buffer
8282 @cindex article buffer
8283
8284 The articles are displayed in the article buffer, of which there is only
8285 one.  All the summary buffers share the same article buffer unless you
8286 tell Gnus otherwise.
8287
8288 @menu
8289 * Hiding Headers::        Deciding what headers should be displayed.
8290 * Using MIME::            Pushing articles through @sc{mime} before reading them.
8291 * Customizing Articles::  Tailoring the look of the articles.
8292 * Article Keymap::        Keystrokes available in the article buffer
8293 * Misc Article::          Other stuff.
8294 @end menu
8295
8296
8297 @node Hiding Headers
8298 @section Hiding Headers
8299 @cindex hiding headers
8300 @cindex deleting headers
8301
8302 The top section of each article is the @dfn{head}.  (The rest is the
8303 @dfn{body}, but you may have guessed that already.)
8304
8305 @vindex gnus-show-all-headers
8306 There is a lot of useful information in the head: the name of the person
8307 who wrote the article, the date it was written and the subject of the
8308 article.  That's well and nice, but there's also lots of information
8309 most people do not want to see---what systems the article has passed
8310 through before reaching you, the @code{Message-ID}, the
8311 @code{References}, etc. ad nauseum---and you'll probably want to get rid
8312 of some of those lines.  If you want to keep all those lines in the
8313 article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
8314
8315 Gnus provides you with two variables for sifting headers:
8316
8317 @table @code
8318
8319 @item gnus-visible-headers
8320 @vindex gnus-visible-headers
8321 If this variable is non-@code{nil}, it should be a regular expression
8322 that says what headers you wish to keep in the article buffer.  All
8323 headers that do not match this variable will be hidden.
8324
8325 For instance, if you only want to see the name of the person who wrote
8326 the article and the subject, you'd say:
8327
8328 @lisp
8329 (setq gnus-visible-headers "^From:\\|^Subject:")
8330 @end lisp
8331
8332 This variable can also be a list of regexps to match headers that are to
8333 remain visible.
8334
8335 @item gnus-ignored-headers
8336 @vindex gnus-ignored-headers
8337 This variable is the reverse of @code{gnus-visible-headers}.  If this
8338 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
8339 should be a regular expression that matches all lines that you want to
8340 hide.  All lines that do not match this variable will remain visible.
8341
8342 For instance, if you just want to get rid of the @code{References} line
8343 and the @code{Xref} line, you might say:
8344
8345 @lisp
8346 (setq gnus-ignored-headers "^References:\\|^Xref:")
8347 @end lisp
8348
8349 This variable can also be a list of regexps to match headers that are to
8350 be removed.
8351
8352 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
8353 variable will have no effect.
8354
8355 @end table
8356
8357 @vindex gnus-sorted-header-list
8358 Gnus can also sort the headers for you.  (It does this by default.)  You
8359 can control the sorting by setting the @code{gnus-sorted-header-list}
8360 variable.  It is a list of regular expressions that says in what order
8361 the headers are to be displayed.
8362
8363 For instance, if you want the name of the author of the article first,
8364 and then the subject, you might say something like:
8365
8366 @lisp
8367 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
8368 @end lisp
8369
8370 Any headers that are to remain visible, but are not listed in this
8371 variable, will be displayed in random order after all the headers that
8372 are listed in this variable.
8373
8374 @findex gnus-article-hide-boring-headers
8375 @vindex gnus-article-display-hook
8376 @vindex gnus-boring-article-headers
8377 You can hide further boring headers by entering
8378 @code{gnus-article-hide-boring-headers} into
8379 @code{gnus-article-display-hook}.  What this function does depends on
8380 the @code{gnus-boring-article-headers} variable.  It's a list, but this
8381 list doesn't actually contain header names.  Instead is lists various
8382 @dfn{boring conditions} that Gnus can check and remove from sight.
8383
8384 These conditions are:
8385 @table @code
8386 @item empty
8387 Remove all empty headers.
8388 @item newsgroups
8389 Remove the @code{Newsgroups} header if it only contains the current group
8390 name. 
8391 @item followup-to
8392 Remove the @code{Followup-To} header if it is identical to the
8393 @code{Newsgroups} header.
8394 @item reply-to
8395 Remove the @code{Reply-To} header if it lists the same address as the
8396 @code{From} header.
8397 @item date
8398 Remove the @code{Date} header if the article is less than three days
8399 old. 
8400 @end table
8401
8402 To include the four first elements, you could say something like;
8403
8404 @lisp
8405 (setq gnus-boring-article-headers 
8406       '(empty newsgroups followup-to reply-to))
8407 @end lisp
8408
8409 This is also the default value for this variable.
8410
8411
8412 @node Using MIME
8413 @section Using @sc{mime}
8414 @cindex @sc{mime}
8415
8416 Mime is a standard for waving your hands through the air, aimlessly,
8417 while people stand around yawning.
8418
8419 @sc{mime}, however, is a standard for encoding your articles, aimlessly,
8420 while all newsreaders die of fear.
8421
8422 @sc{mime} may specify what character set the article uses, the encoding
8423 of the characters, and it also makes it possible to embed pictures and
8424 other naughty stuff in innocent-looking articles.
8425
8426 @vindex gnus-show-mime
8427 @vindex gnus-show-mime-method
8428 @vindex gnus-strict-mime
8429 Gnus handles @sc{mime} by shoving the articles through
8430 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
8431 default.  Set @code{gnus-show-mime} to @code{t} if you want to use
8432 @sc{mime} all the time.  However, if @code{gnus-strict-mime} is
8433 non-@code{nil}, the @sc{mime} method will only be used if there are
8434 @sc{mime} headers in the article.
8435
8436 It might be best to just use the toggling functions from the summary
8437 buffer to avoid getting nasty surprises. (For instance, you enter the
8438 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
8439 decoded the sound file in the article and some horrible sing-a-long song
8440 comes streaming out out your speakers, and you can't find the volume
8441 button, because there isn't one, and people are starting to look at you,
8442 and you try to stop the program, but you can't, and you can't find the
8443 program to control the volume, and everybody else in the room suddenly
8444 decides to look at you disdainfully, and you'll feel rather stupid.)
8445
8446 Any similarity to real events and people is purely coincidental.  Ahem.
8447
8448
8449 @node Customizing Articles
8450 @section Customizing Articles
8451 @cindex article customization
8452
8453 @vindex gnus-article-display-hook
8454 The @code{gnus-article-display-hook} is called after the article has
8455 been inserted into the article buffer.  It is meant to handle all
8456 treatment of the article before it is displayed. 
8457
8458 By default it contains @code{gnus-article-hide-headers},
8459 @code{gnus-article-treat-overstrike}, and
8460 @code{gnus-article-maybe-highlight}, but there are thousands, nay
8461 millions, of functions you can put in this hook.  For an overview of
8462 functions @xref{Article Highlighting}, @xref{Article Hiding},
8463 @xref{Article Washing}, @xref{Article Buttons} and @xref{Article Date}. 
8464
8465 You can, of course, write your own functions.  The functions are called
8466 from the article buffer, and you can do anything you like, pretty much.
8467 There is no information that you have to keep in the buffer---you can
8468 change everything.  However, you shouldn't delete any headers.  Instead
8469 make them invisible if you want to make them go away.
8470
8471
8472 @node Article Keymap
8473 @section Article Keymap
8474
8475 Most of the keystrokes in the summary buffer can also be used in the
8476 article buffer.  They should behave as if you typed them in the summary
8477 buffer, which means that you don't actually have to have a summary
8478 buffer displayed while reading.  You can do it all from the article
8479 buffer.
8480
8481 A few additional keystrokes are available:
8482
8483 @table @kbd
8484
8485 @item SPACE
8486 @kindex SPACE (Article)
8487 @findex gnus-article-next-page
8488 Scroll forwards one page (@code{gnus-article-next-page}).
8489
8490 @item DEL
8491 @kindex DEL (Article)
8492 @findex gnus-article-prev-page
8493 Scroll backwards one page (@code{gnus-article-prev-page}).
8494
8495 @item C-c ^
8496 @kindex C-c ^ (Article)
8497 @findex gnus-article-refer-article
8498 If point is in the neighborhood of a @code{Message-ID} and you press
8499 @kbd{r}, Gnus will try to get that article from the server
8500 (@code{gnus-article-refer-article}).
8501
8502 @item C-c C-m
8503 @kindex C-c C-m (Article)
8504 @findex gnus-article-mail
8505 Send a reply to the address near point (@code{gnus-article-mail}).  If
8506 given a prefix, include the mail.
8507
8508 @item s
8509 @kindex s (Article)
8510 @findex gnus-article-show-summary
8511 Reconfigure the buffers so that the summary buffer becomes visible
8512 (@code{gnus-article-show-summary}).
8513
8514 @item ?
8515 @kindex ? (Article)
8516 @findex gnus-article-describe-briefly
8517 Give a very brief description of the available keystrokes
8518 (@code{gnus-article-describe-briefly}). 
8519
8520 @item TAB
8521 @kindex TAB (Article)
8522 @findex gnus-article-next-button
8523 Go to the next button, if any (@code{gnus-article-next-button}.  This
8524 only makes sense if you have buttonizing turned on.
8525
8526 @item M-TAB
8527 @kindex M-TAB (Article)
8528 @findex gnus-article-prev-button
8529 Go to the previous button, if any (@code{gnus-article-prev-button}.  
8530
8531 @end table
8532
8533
8534 @node Misc Article
8535 @section Misc Article
8536
8537 @table @code
8538
8539 @item gnus-single-article-buffer
8540 @vindex gnus-single-article-buffer
8541 If non-@code{nil}, use the same article buffer for all the groups.
8542 (This is the default.)  If @code{nil}, each group will have its own
8543 article buffer.
8544
8545 @vindex gnus-article-prepare-hook
8546
8547 @item gnus-article-prepare-hook
8548 This hook is called right after the article has been inserted into the
8549 article buffer.  It is mainly intended for functions that do something
8550 depending on the contents; it should probably not be used for changing
8551 the contents of the article buffer.
8552 @vindex gnus-article-display-hook
8553
8554 @item gnus-article-display-hook
8555 This hook is called as the last thing when displaying an article, and is
8556 intended for modifying the contents of the buffer, doing highlights,
8557 hiding headers, and the like.
8558 @vindex gnus-article-mode-line-format
8559
8560 @item gnus-article-mode-line-format
8561 This variable is a format string along the same lines as
8562 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
8563 format specifications as that variable.
8564 @vindex gnus-break-pages
8565
8566 @item gnus-break-pages
8567 Controls whether @dfn{page breaking} is to take place.  If this variable
8568 is non-@code{nil}, the articles will be divided into pages whenever a
8569 page delimiter appears in the article.  If this variable is @code{nil},
8570 paging will not be done.
8571
8572 @item gnus-page-delimiter
8573 @vindex gnus-page-delimiter
8574 This is the delimiter mentioned above.  By default, it is @samp{^L}
8575 (form linefeed).
8576 @end table
8577
8578 @node The Server Buffer
8579 @chapter The Server Buffer
8580
8581 Traditionally, a @dfn{server} is a machine or a piece of software that
8582 one connects to, and then requests information from.  Gnus does not
8583 connect directly to any real servers, but does all transactions through
8584 one backend or other.  But that's just putting one layer more between
8585 the actual media and Gnus, so we might just as well say that each
8586 backend represents a virtual server.
8587
8588 For instance, the @code{nntp} backend may be used to connect to several
8589 different actual @sc{nntp} servers, or, perhaps, to many different ports
8590 on the same actual @sc{nntp} server.  You tell Gnus which backend to
8591 use, and what parameters to set by specifying a @dfn{select method}.
8592
8593 These select methods specifications can sometimes become quite
8594 complicated---say, for instance, that you want to read from the
8595 @sc{nntp} server @samp{news.funet.fi} on port number @samp{13}, which
8596 hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.
8597 Anyways, if you had to specify that for each group that used this
8598 server, that would be too much work, so Gnus offers a way of putting
8599 names to methods, which is what you do in the server buffer.
8600
8601 To enter the server buffer, user the @kbd{^}
8602 (@code{gnus-group-enter-server-mode}) command in the group buffer.
8603
8604 @menu
8605 * Server Buffer Format::   You can customize the look of this buffer.
8606 * Server Commands::        Commands to manipulate servers.
8607 * Example Methods::        Examples server specifications.
8608 * Servers & Methods::      You can use server names as select methods.
8609 * Unavailable Servers::    Some servers you try to contact may be down.
8610 @end menu
8611
8612 @node Server Buffer Format
8613 @section Server Buffer Format
8614 @cindex server buffer format
8615
8616 @vindex gnus-server-line-format
8617 You can change the look of the server buffer lines by changing the
8618 @code{gnus-server-line-format} variable.  This is a @code{format}-like
8619 variable, with some simple extensions:
8620
8621 @table @samp
8622
8623 @item h 
8624 How the news is fetched---the backend name.
8625
8626 @item n
8627 The name of this server.
8628
8629 @item w
8630 Where the news is to be fetched from---the address.
8631 @end table
8632
8633 @node Server Commands
8634 @section Server Commands
8635 @cindex server commands
8636
8637 @table @kbd
8638
8639 @item SPC
8640 Browse the current server (@code{gnus-server-read-server}).
8641
8642 @item q
8643 Return to the group buffer (@code{gnus-server-exit}).
8644
8645 @item l
8646 List all servers (@code{gnus-server-list-servers}).
8647
8648 @item k
8649 Kill the current server (@code{gnus-server-kill-server}).
8650
8651 @item y
8652 Yank the previously killed server (@code{gnus-server-yank-server}).
8653
8654 @item c
8655 Copy the current server (@code{gnus-server-copy-server}).
8656
8657 @item a
8658 Add a new server (@code{gnus-server-add-server}).
8659
8660 @item e
8661 Edit a server (@code{gnus-server-edit-server}).
8662 @end table
8663
8664 @node Example Methods
8665 @section Example Methods
8666
8667 Most select methods are pretty simple and self-explanatory: 
8668
8669 @lisp
8670 (nntp "news.funet.fi")
8671 @end lisp
8672
8673 Reading directly from the spool is even simpler:
8674
8675 @lisp
8676 (nnspool "")
8677 @end lisp
8678
8679 As you can see, the first element in a select method is the name of the
8680 backend, and the second is the @dfn{address}, or @dfn{name}, if you
8681 will. 
8682
8683 After these two elements, there may be a random number of @var{(variable
8684 form)} pairs.
8685
8686 To go back to the first example---imagine that you want to read from
8687 port @code{15} from that machine.  This is what the select method should
8688 look like then:
8689
8690 @lisp
8691 (nntp "news.funet.fi" (nntp-port-number 15))
8692 @end lisp
8693
8694 You should read the documentation to each backend to find out what
8695 variables are relevant, but here's an @code{nnmh} example. 
8696
8697 @code{nnmh} is a mail backend that reads a spool-like structure.  Say
8698 you have two structures that you wish to access: One is your private
8699 mail spool, and the other is a public one.  Here's the possible spec for
8700 you private mail:
8701
8702 @lisp
8703 (nnmh "private" (nnmh-directory "~/private/mail/"))
8704 @end lisp
8705
8706 (This server is then called @samp{private}, but you may have guessed
8707 that. 
8708
8709 Here's the method for the public spool:
8710
8711 @lisp
8712 (nnmh "public" 
8713       (nnmh-directory "/usr/information/spool/") 
8714       (nnmh-get-new-mail nil))
8715 @end lisp
8716
8717 @node Servers & Methods
8718 @section Servers & Methods
8719
8720 Wherever you would normally use a select method
8721 (eg. @code{gnus-secondary-select-method}, in the group select method,
8722 when browsing a foreign server) you can use a virtual server name
8723 instead.  This could potentially save lots of typing.  And it's nice all
8724 over.
8725
8726
8727 @node Unavailable Servers
8728 @section Unavailable Servers
8729
8730 If a server seems to be unreachable, Gnus will mark that server as
8731 @code{denied}.  That means that any subsequent attempt to make contact
8732 with that server will just be ignored.  "It can't be opened," Gnus will
8733 tell you, without making the least effort to see whether that is
8734 actually the case or not.  
8735
8736 That might seem quite naughty, but it does make sense most of the time.
8737 Let's say you have 10 groups subscribed to the server
8738 @samp{nepholococcygia.com}.  This server is located somewhere quite far
8739 away from you, the machine is quite, so it takes 1 minute just to find
8740 out that it refuses connection from you today.  If Gnus were to attempt
8741 to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
8742 that.  Once it has gotten a single "connection refused", it will regard
8743 that server as "down".
8744
8745 So, what happens if the machine was only feeling unwell temporarily?
8746 How do you test to see whether the machine has come up again?
8747
8748 You jump to the server buffer (@pxref{The Server Buffer}) and poke ut
8749 with the following commands:
8750
8751 @table @kbd
8752
8753 @item O
8754 @kindex O (Server)
8755 @findex gnus-server-open-server
8756 Try to establish connection to the server on the current line
8757 (@code{gnus-server-open-server}).
8758
8759 @item C
8760 @kindex C (Server)
8761 @findex gnus-server-close-server
8762 Close the connection (if any) to the server
8763 (@code{gnus-server-close-server}).
8764
8765 @item D
8766 @kindex D (Server)
8767 @findex gnus-server-deny-server
8768 Mark the current server as unreachable
8769 (@code{gnus-server-deny-server}). 
8770
8771 @item R
8772 @kindex R (Server)
8773 @findex gnus-server-remove-denials
8774 Remove all marks to whether Gnus was denied connection from all servers
8775 (@code{gnus-server-remove-denials}). 
8776
8777 @end table
8778
8779
8780 @node Scoring
8781 @chapter Scoring
8782 @cindex scoring
8783
8784 Other people use @dfn{kill files}, but we here at Gnus Towers like
8785 scoring better than killing, so we'd rather switch than fight.  They do
8786 something completely different as well, so sit up straight and pay
8787 attention!
8788
8789 @vindex gnus-summary-mark-below
8790 All articles have a default score (@code{gnus-summary-default-score}),
8791 which is 0 by default.  This score may be raised or lowered either
8792 interactively or by score files.  Articles that have a score lower than
8793 @code{gnus-summary-mark-below} are marked as read.
8794
8795 Gnus will read any @dfn{score files} that apply to the current group
8796 before generating the summary buffer.
8797
8798 There are several commands in the summary buffer that insert score
8799 entries based on the current article.  You can, for instance, ask Gnus to
8800 lower or increase the score of all articles with a certain subject.
8801
8802 There are two sorts of scoring entries: Permanent and temporary.
8803 Temporary score entries are self-expiring entries.  Any entries that are
8804 temporary and have not been used for, say, a week, will be removed
8805 silently to help keep the sizes of the score files down.
8806
8807 @menu 
8808 * Summary Score Commands::   Adding score entries for the current group.
8809 * Group Score Commands::     General score commands.
8810 * Score Variables::          Customize your scoring.  (My, what terminology).
8811 * Score File Format::        What a score file may contain.
8812 * Score File Editing::       You can edit score files by hand as well.
8813 * Adaptive Scoring::         Big Sister Gnus *knows* what you read.
8814 * Followups To Yourself::    Having Gnus notice when people answer you.
8815 * Scoring Tips::             How to score effectively.
8816 * Reverse Scoring::          That problem child of old is not problem.
8817 * Global Score Files::       Earth-spanning, ear-splitting score files.
8818 * Kill Files::               They are still here, but they can be ignored.
8819 @end menu
8820
8821 @node Summary Score Commands
8822 @section Summary Score Commands
8823 @cindex score commands
8824
8825 The score commands that alter score entries do not actually modify real
8826 score files.  That would be too inefficient.  Gnus maintains a cache of
8827 previously loaded score files, one of which is considered the
8828 @dfn{current score file alist}.  The score commands simply insert
8829 entries into this list, and upon group exit, this list is saved.
8830
8831 The current score file is by default the group's local score file, even
8832 if no such score file actually exists.  To insert score commands into
8833 some other score file (eg. @file{all.SCORE}), you must first make this
8834 score file the current one.
8835
8836 General score commands that don't actually change the score file:
8837
8838 @table @kbd
8839
8840 @item V s
8841 @kindex V s (Summary)
8842 @findex gnus-summary-set-score
8843 Set the score of the current article (@code{gnus-summary-set-score}).  
8844
8845 @item V S
8846 @kindex V S (Summary)
8847 @findex gnus-summary-current-score
8848 Display the score of the current article
8849 (@code{gnus-summary-current-score}).   
8850
8851 @item V t
8852 @kindex V t (Summary)
8853 @findex gnus-score-find-trace
8854 Display all score rules that have been used on the current article
8855 (@code{gnus-score-find-trace}).   
8856
8857 @item V R
8858 @item V R (Summary)
8859 @findex gnus-summary-rescore
8860 Run the current summary through the scoring process
8861 (@code{gnus-summary-rescore}).  This might be useful if you're playing
8862 around with your score files behind Gnus' back and want to see the
8863 effect you're having.
8864
8865 @item V a
8866 @kindex V a (Summary)
8867 @findex gnus-summary-score-entry
8868 Add a new score entry, and allow specifying all elements 
8869 (@code{gnus-summary-score-entry}).
8870
8871 @item V c
8872 @kindex V c (Summary)
8873 @findex gnus-score-change-score-file
8874 Make a different score file the current
8875 (@code{gnus-score-change-score-file}). 
8876
8877 @item V e
8878 @kindex V e (Summary)
8879 @findex gnus-score-edit-alist
8880 Edit the current score file (@code{gnus-score-edit-alist}).  You will be
8881 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
8882 Editing}).
8883
8884 @item V f
8885 @kindex V f (Summary)
8886 @findex gnus-score-edit-file
8887 Edit a score file and make this score file the current one
8888 (@code{gnus-score-edit-file}).
8889
8890 @item V C
8891 @kindex V C (Summary)
8892 @findex gnus-score-customize
8893 Customize a score file in a visually pleasing manner
8894 (@code{gnus-score-customize}). 
8895
8896 @item I C-i
8897 @kindex I C-i (Summary)
8898 @findex gnus-summary-raise-score
8899 Increase the score of the current article
8900 (@code{gnus-summary-raise-score}).
8901
8902 @item L C-l
8903 @kindex L C-l (Summary)
8904 @findex gnus-summary-lower-score
8905 Lower the score of the current article
8906 (@code{gnus-summary-lower-score}). 
8907 @end table
8908
8909 The rest of these commands modify the local score file.
8910
8911 @table @kbd
8912
8913 @item V m
8914 @kindex V m (Summary)
8915 @findex gnus-score-set-mark-below
8916 Prompt for a score, and mark all articles with a score below this as
8917 read (@code{gnus-score-set-mark-below}).
8918
8919 @item V E
8920 @kindex V E (Summary)
8921 @findex gnus-score-set-expunge-below
8922 Expunge all articles with a score below the default score (or the
8923 numeric prefix) (@code{gnus-score-set-expunge-below}).
8924 @end table
8925
8926 The keystrokes for actually making score entries follow a very regular
8927 pattern, so there's no need to list all the commands.  (Hundreds of
8928 them.)  
8929
8930 @enumerate
8931 @item
8932 The first key is either @kbd{I} (upper case i) for increasing the score
8933 or @kbd{L} for lowering the score. 
8934 @item
8935 The second key says what header you want to score on.  The following
8936 keys are available:
8937 @table @kbd
8938
8939 @item a
8940 Score on the author name.
8941
8942 @item s
8943 Score on the subject line.
8944
8945 @item x
8946 Score on the Xref line---i.e., the cross-posting line.
8947
8948 @item t
8949 Score on thread---the References line.
8950
8951 @item d
8952 Score on the date.
8953
8954 @item l
8955 Score on the number of lines.
8956
8957 @item i
8958 Score on the Message-ID.
8959
8960 @item f
8961 Score on followups.
8962
8963 @item b
8964 Score on the body.
8965
8966 @item h
8967 Score on the head.
8968 @end table
8969
8970 @item
8971 The third key is the match type.  Which match types are legal depends on
8972 what headers you are scoring on.
8973
8974 @table @code
8975
8976 @item strings 
8977
8978 @table @kbd
8979
8980 @item e
8981 Exact matching.
8982
8983 @item s
8984 Substring matching.
8985
8986 @item f
8987 Fuzzy matching.
8988
8989 @item r
8990 Regexp matching
8991 @end table
8992
8993 @item date
8994 @table @kbd
8995
8996 @item b
8997 Before date.
8998
8999 @item a
9000 At date.
9001
9002 @item n
9003 This date.
9004 @end table
9005
9006 @item number
9007 @table @kbd
9008
9009 @item <
9010 Less than number.
9011
9012 @item =
9013 Equal to number.
9014
9015 @item >
9016 Greater than number.
9017 @end table
9018 @end table
9019
9020 @item 
9021 The fourth and final key says whether this is a temporary (i.e., expiring)
9022 score entry, or a permanent (i.e., non-expiring) score entry, or whether
9023 it is to be done immediately, without adding to the score file.
9024 @table @kbd
9025
9026 @item t
9027 Temporary score entry.
9028
9029 @item p
9030 Permanent score entry.
9031
9032 @item i
9033 Immediately scoring.
9034 @end table
9035
9036 @end enumerate
9037
9038 So, let's say you want to increase the score on the current author with
9039 exact matching permanently: @kbd{I a e p}.  If you want to lower the
9040 score based on the subject line, using substring matching, and make a
9041 temporary score entry: @kbd{L s s t}.  Pretty easy.
9042
9043 To make things a bit more complicated, there are shortcuts.  If you use
9044 a capital letter on either the second or third keys, Gnus will use
9045 defaults for the remaining one or two keystrokes.  The defaults are
9046 "substring" and "temporary".  So @kbd{I A} is the same as @kbd{I a s t},
9047 and @kbd{I a R} is the same as @kbd{I a r t}.
9048
9049 @vindex gnus-score-mimic-keymap
9050 The @code{gnus-score-mimic-keymap} says whether these commands will
9051 pretend they are keymaps or not.
9052
9053
9054 @node Group Score Commands
9055 @section Group Score Commands
9056 @cindex group score commands
9057
9058 There aren't many of these as yet, I'm afraid.
9059
9060 @table @kbd
9061
9062 @item W f
9063 @kindex W f (Group)
9064 @findex gnus-score-flush-cache
9065 Gnus maintains a cache of score alists to avoid having to reload them
9066 all the time.  This command will flush the cache
9067 (@code{gnus-score-flush-cache}). 
9068
9069 @end table
9070
9071
9072 @node Score Variables
9073 @section Score Variables
9074 @cindex score variables
9075
9076 @table @code
9077
9078 @item gnus-use-scoring
9079 @vindex gnus-use-scoring
9080 If @code{nil}, Gnus will not check for score files, and will not, in
9081 general, do any score-related work.  This is @code{t} by default.
9082
9083 @item gnus-kill-killed
9084 @vindex gnus-kill-killed
9085 If this variable is @code{nil}, Gnus will never apply score files to
9086 articles that have already been through the kill process.  While this
9087 may save you lots of time, it also means that if you apply a kill file
9088 to a group, and then change the kill file and want to run it over you
9089 group again to kill more articles, it won't work.  You have to set this
9090 variable to @code{t} to do that.  (It is @code{t} by default.)
9091
9092 @item gnus-kill-files-directory
9093 @vindex gnus-kill-files-directory
9094 All kill and score files will be stored in this directory, which is
9095 initialized from the @samp{SAVEDIR} environment variable by default.
9096 This is @file{~/News/} by default.
9097
9098 @item gnus-score-file-suffix
9099 @vindex gnus-score-file-suffix
9100 Suffix to add to the group name to arrive at the score file name
9101 (@samp{SCORE} by default.)
9102
9103 @item gnus-score-uncacheable-files
9104 @vindex gnus-score-uncacheable-files
9105 @cindex score cache
9106 All score files are normally cached to avoid excessive re-loading of
9107 score files.  However, if this might make you Emacs grow big and
9108 bloated, so this regexp can be used to weed out score files that are
9109 unlikely to be needed again.  It would be a bad idea to deny caching of
9110 @file{all.SCORE}, while it might be a good idea to not cache
9111 @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
9112 variable is @samp{"ADAPT$"} by default, so no adaptive score files will
9113 be cached.
9114
9115 @item gnus-save-score
9116 @vindex gnus-save-score
9117 If you have really complicated score files, and do lots of batch
9118 scoring, then you might set this variable to @code{t}.  This will make
9119 Gnus save the scores into the @file{.newsrc.eld} file.
9120
9121 @item gnus-save-score
9122 @vindex gnus-save-score
9123 If you have really complicated score files, and do lots of batch
9124 scoring, then you might set this variable to @code{t}.  This will make
9125 Gnus save the scores into the @file{.newsrc.eld} file.
9126
9127 @item gnus-score-interactive-default-score
9128 @vindex gnus-score-interactive-default-score
9129 Score used by all the interactive raise/lower commands to raise/lower
9130 score with.  Default is 1000, which may seem excessive, but this is to
9131 ensure that the adaptive scoring scheme gets enough room to play with.
9132 We don't want the small changes from the adaptive scoring to overwrite
9133 manually entered data.
9134
9135 @item gnus-summary-default-score
9136 @vindex gnus-summary-default-score
9137 Default score of an article, which is 0 by default.
9138
9139 @item gnus-score-over-mark
9140 @vindex gnus-score-over-mark
9141 Mark (in the third column) used for articles with a score over the
9142 default.  Default is @samp{+}.
9143
9144 @item gnus-score-below-mark
9145 @vindex gnus-score-below-mark
9146 Mark (in the third column) used for articles with a score below the
9147 default.  Default is @samp{-}.
9148
9149 @item gnus-score-find-score-files-function
9150 @vindex gnus-score-find-score-files-function
9151 Function used to find score files for the current group.  This function
9152 is called with the name of the group as the argument. 
9153
9154 Predefined functions available are:
9155 @table @code
9156
9157 @item gnus-score-find-single
9158 @findex gnus-score-find-single
9159 Only apply the group's own score file.
9160
9161 @item gnus-score-find-bnews
9162 @findex gnus-score-find-bnews
9163 Apply all score files that match, using bnews syntax.  This is the
9164 default.  For instance, if the current group is @samp{gnu.emacs.gnus},
9165 @samp{all.emacs.all.SCORE}, @samp{not.alt.all.SCORE} and
9166 @samp{gnu.all.SCORE} would all apply.  In short, the instances of
9167 @samp{all} in the score file names are translated into @samp{.*}, and
9168 then a regexp match is done.
9169
9170 This means that if you have some score entries that you want to apply to
9171 all groups, then you put those entries in the @file{all.SCORE} file. 
9172
9173 If @code{gnus-use-long-file-name} is non-@code{nil}, this won't work
9174 very will.  It will find stuff like @file{gnu/all/SCORE}, but will not
9175 find files like @file{not/gnu/all/SCORE}. 
9176
9177 @item gnus-score-find-hierarchical
9178 @findex gnus-score-find-hierarchical
9179 Apply all score files from all the parent groups.  This means that you
9180 can't have score files like @file{all.SCORE} or @file{all.emacs.SCORE},
9181 but you can have @file{SCORE},  @file{comp.SCORE} and
9182 @file{comp.emacs.SCORE}. 
9183
9184 @end table
9185 This variable can also be a list of functions.  In that case, all these
9186 functions will be called, and all the returned lists of score files will
9187 be applied.  These functions can also return lists of score alists
9188 directly.  In that case, the functions that return these non-file score
9189 alists should probably be placed before the "real" score file functions,
9190 to ensure that the last score file returned is the local score file.
9191 Phu. 
9192
9193 @item gnus-score-expiry-days
9194 @vindex gnus-score-expiry-days
9195 This variable says how many days should pass before an unused score file
9196 entry is expired.  If this variable is @code{nil}, no score file entries
9197 are expired.  It's 7 by default.
9198
9199 @item gnus-update-score-entry-dates
9200 @vindex gnus-update-score-entry-dates
9201 If this variable is non-@code{nil}, matching score entries will have
9202 their dates updated.  (This is how Gnus controls expiry---all
9203 non-matching entries will become too old while matching entries will
9204 stay fresh and young.)  However, if you set this variable to @code{nil},
9205 even matching entries will grow old and will have to face that oh-so
9206 grim reaper.  
9207
9208 @end table
9209
9210
9211 @node Score File Format
9212 @section Score File Format
9213 @cindex score file format
9214
9215 A score file is an @code{emacs-lisp} file that normally contains just a
9216 single form.  Casual users are not expected to edit these files;
9217 everything can be changed from the summary buffer.
9218
9219 Anyway, if you'd like to dig into it yourself, here's an example:
9220
9221 @lisp
9222 (("from"
9223   ("Lars Ingebrigtsen" -10000)
9224   ("Per Abrahamsen")
9225   ("larsi\\|lmi" -50000 nil R))
9226  ("subject"
9227   ("Ding is Badd" nil 728373))
9228  ("xref"
9229   ("alt.politics" -1000 728372 s))
9230  ("lines"
9231   (2 -100 nil <))
9232  (mark 0)
9233  (expunge -1000)
9234  (mark-and-expunge -10)
9235  (read-only nil)
9236  (orphan -10)
9237  (adapt t)
9238  (files "/hom/larsi/News/gnu.SCORE")
9239  (exclude-files "all.SCORE")
9240  (local (gnus-newsgroup-auto-expire t)
9241         (gnus-summary-make-false-root 'empty))
9242  (eval (ding)))
9243 @end lisp
9244
9245 This example demonstrates absolutely everything about a score file. 
9246
9247 Even though this looks much like lisp code, nothing here is actually
9248 @code{eval}ed.  The lisp reader is used to read this form, though, so it
9249 has to be legal syntactically, if not semantically.
9250
9251 Six keys are supported by this alist:
9252
9253 @table @code
9254
9255 @item STRING
9256 If the key is a string, it is the name of the header to perform the
9257 match on.  Scoring can only be performed on these eight headers:
9258 @samp{From}, @samp{Subject}, @samp{References}, @samp{Message-ID},
9259 @samp{Xref}, @samp{Lines}, @samp{Chars} and @samp{Date}.  In addition to
9260 these headers, there are three strings to tell Gnus to fetch the entire
9261 article and do the match on larger parts of the article: @samp{Body}
9262 will perform the match on the body of the article, @samp{Head} will
9263 perform the match on the head of the article, and @samp{All} will
9264 perform the match on the entire article.  Note that using any of these
9265 last three keys will slow down group entry @emph{considerably}.  The
9266 final "header" you can score on is @samp{Followup}.  These score entries
9267 will result in new score entries being added for all follow-ups to
9268 articles that matches these score entries.
9269
9270 Following this key is a random number of score entries, where each score
9271 entry has one to four elements.
9272 @enumerate
9273
9274 @item 
9275 The first element is the @dfn{match element}.  On most headers this will
9276 be a string, but on the Lines and Chars headers, this must be an
9277 integer. 
9278
9279 @item 
9280 If the second element is present, it should be a number---the @dfn{score
9281 element}.  This number should be an integer in the neginf to posinf
9282 interval.  This number is added to the score of the article if the match
9283 is successful.  If this element is not present, the
9284 @code{gnus-score-interactive-default-score} number will be used
9285 instead.  This is 1000 by default.
9286
9287 @item 
9288 If the third element is present, it should be a number---the @dfn{date
9289 element}.  This date says when the last time this score entry matched,
9290 which provides a mechanism for expiring the score entries.  It this
9291 element is not present, the score entry is permanent.  The date is
9292 represented by the number of days since December 31, 1 ce.
9293
9294 @item 
9295 If the fourth element is present, it should be a symbol---the @dfn{type
9296 element}.  This element specifies what function should be used to see
9297 whether this score entry matches the article.  What match types that can
9298 be used depends on what header you wish to perform the match on.
9299 @table @dfn
9300
9301 @item From, Subject, References, Xref, Message-ID
9302 For most header types, there are the @code{r} and @code{R} (regexp) as
9303 well as @code{s} and @code{S} (substring) types and @code{e} and
9304 @code{E} (exact match) types.  If this element is not present, Gnus will
9305 assume that substring matching should be used.  @code{R} and @code{S}
9306 differ from the other two in that the matches will be done in a
9307 case-sensitive manner.  All these one-letter types are really just
9308 abbreviations for the @code{regexp}, @code{string} and @code{exact}
9309 types, which you can use instead, if you feel like.
9310
9311 @item Lines, Chars
9312 These two headers use different match types: @code{<}, @code{>},
9313 @code{=}, @code{>=} and @code{<=}.
9314
9315 @item Date
9316 For the Date header we have three match types: @code{before}, @code{at}
9317 and @code{after}.  I can't really imagine this ever being useful, but,
9318 like, it would feel kinda silly not to provide this function.  Just in
9319 case.  You never know.  Better safe than sorry.  Once burnt, twice shy.
9320 Don't judge a book by its cover.  Never not have sex on a first date.
9321
9322 @item Head, Body, All
9323 These three match keys use the same match types as the @code{From} (etc)
9324 header uses.
9325
9326 @item Followup
9327 This match key will add a score entry on all articles that followup to
9328 some author.  Uses the same match types as the @code{From} header uses.
9329
9330 @item Thread
9331 This match key will add a ascore entry on all articles that are part of
9332 a thread.  Uses the same match types as the @code{References} header
9333 uses.
9334 @end table
9335 @end enumerate
9336
9337 @item mark
9338 The value of this entry should be a number.  Any articles with a score
9339 lower than this number will be marked as read.
9340
9341 @item expunge
9342 The value of this entry should be a number.  Any articles with a score
9343 lower than this number will be removed from the summary buffer.
9344
9345 @item mark-and-expunge
9346 The value of this entry should be a number.  Any articles with a score
9347 lower than this number will be marked as read and removed from the
9348 summary buffer.
9349
9350 @item thread-mark-and-expunge
9351 The value of this entry should be a number.  All articles that belong to
9352 a thread that has a total score below this number will be marked as read
9353 and removed from the summary buffer.  @code{gnus-thread-score-function}
9354 says how to compute the total score for a thread.
9355
9356 @item files
9357 The value of this entry should be any number of file names.  These files
9358 are assumed to be score files as well, and will be loaded the same way
9359 this one was.
9360
9361 @item exclude-files
9362 The clue of this entry should be any number of files.  This files will
9363 not be loaded, even though they would normally be so, for some reason or
9364 other. 
9365
9366 @item eval
9367 The value of this entry will be @code{eval}el.  This element will be
9368 ignored when handling global score files. 
9369
9370 @item read-only
9371 Read-only score files will not be updated or saved.  Global score files
9372 should feature this atom (@pxref{Global Score Files}).
9373
9374 @item orphan
9375 The value of this entry should be a number.  Articles that do not have
9376 parents will get this number added to their scores.
9377
9378 @item adapt
9379 This entry controls the adaptive scoring.  If it is @code{t}, the
9380 default adaptive scoring rules will be used.  If it is @code{ignore}, no
9381 adaptive scoring will be performed on this group.  If it is a list, this
9382 list will be used as the adaptive scoring rules.  If it isn't present,
9383 or is something other than @code{t} or @code{ignore}, the default
9384 adaptive scoring rules will be used.  If you want to use adaptive
9385 scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
9386 @code{t}, and insert an @code{(adapt ignore)} in the groups where you do
9387 not want adaptive scoring.  If you only want adaptive scoring in a few
9388 groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
9389 insert @code{(adapt t)} in the score files of the groups where you want
9390 it. 
9391
9392 @item adapt-file
9393 All adaptive score entries will go to the file named by this entry.  It
9394 will also be applied when entering the group.  This atom might be handy
9395 if you want to adapt on several groups at once, using the same adaptive
9396 file for a number of groups.
9397
9398 @item local
9399 @cindex local variables
9400 The value of this entry should be a list of @code{(VAR VALUE)} pairs.
9401 Each @var{var} will be made buffer-local to the current summary buffer,
9402 and set to the value specified.  This is a convenient, if somewhat
9403 strange, way of setting variables in some groups if you don't like hooks
9404 much.
9405 @end table
9406
9407 @node Score File Editing
9408 @section Score File Editing
9409
9410 You normally enter all scoring commands from the summary buffer, but you
9411 might feel the urge to edit them by hand as well, so we've supplied you
9412 with a mode for that.  
9413
9414 It's simply a slightly customized @code{emacs-lisp} mode, with these
9415 additional commands:
9416
9417 @table @kbd
9418
9419 @item C-c C-c
9420 @kindex C-c C-c (Score)
9421 @findex gnus-score-edit-done
9422 Save the changes you have made and return to the summary buffer
9423 (@code{gnus-score-edit-done}). 
9424
9425 @item C-c C-d
9426 @kindex C-c C-d (Score)
9427 @findex gnus-score-edit-insert-date
9428 Insert the current date in numerical format
9429 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
9430 you were wondering.
9431 @end table
9432
9433 @node Adaptive Scoring
9434 @section Adaptive Scoring
9435 @cindex adaptive scoring
9436
9437 If all this scoring is getting you down, Gnus has a way of making it all
9438 happen automatically---as if by magic.  Or rather, as if by artificial
9439 stupidity, to be precise.
9440
9441 @vindex gnus-use-adaptive-scoring
9442 When you read an article, or mark an article as read, or kill an
9443 article, you leave marks behind.  On exit from the group, Gnus can sniff
9444 these marks and add score elements depending on what marks it finds.
9445 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
9446 @code{t}. 
9447
9448 @vindex gnus-default-adaptive-score-alist
9449 To give you complete control over the scoring process, you can customize
9450 the @code{gnus-default-adaptive-score-alist} variable.  By default, it
9451 looks something like this:
9452
9453 @lisp
9454 (defvar gnus-default-adaptive-score-alist
9455   '((gnus-unread-mark)
9456     (gnus-ticked-mark (from 4))
9457     (gnus-dormant-mark (from 5))
9458     (gnus-del-mark (from -4) (subject -1))
9459     (gnus-read-mark (from 4) (subject 2))
9460     (gnus-expirable-mark (from -1) (subject -1))
9461     (gnus-killed-mark (from -1) (subject -3))
9462     (gnus-kill-file-mark)
9463     (gnus-catchup-mark (from -1) (subject -1))))
9464 @end lisp
9465
9466 As you see, each element in this alist has a mark as a key (either a
9467 variable name or a "real" mark---a character).  Following this key is a
9468 random number of header/score pairs.  
9469
9470 To take @code{gnus-del-mark} as an example---this alist says that all
9471 articles that have that mark (i.e., are marked with @samp{D}) will have a
9472 score entry added to lower based on the @code{From} header by -4, and
9473 lowered by @code{Subject} by -1.  Change this to fit your prejudices. 
9474
9475 The headers you can score on are @code{from}, @code{subject},
9476 @code{message-id}, @code{references}, @code{xref}, @code{lines},
9477 @code{chars} and @code{date}.  In addition, you can score on
9478 @code{followup}, which will create an adaptive score entry that matches
9479 on the @code{References} header using the @code{Message-ID} of the
9480 current article, thereby matching the following thread.  
9481
9482 You can also score on @code{thread}, which will try to score all
9483 articles that appear in a thread.  @code{thread} matches uses a
9484 @code{Message-ID} to match on the @code{References} header of the
9485 article.  If the match is made, the @code{Message-ID} of the article is
9486 added to the @code{thread} rule.  (Think about it.  I'd recommend two
9487 aspirins afterwards.)
9488
9489 If you use this scheme, you should set @code{mark-below} to something
9490 small---like -300, perhaps, to avoid having small random changes result
9491 in articles getting marked as read.
9492
9493 After using adaptive scoring for a week or so, Gnus should start to
9494 become properly trained and enhance the authors you like best, and kill
9495 the authors you like least, without you having to say so explicitly. 
9496
9497 You can control what groups the adaptive scoring is to be performed on
9498 by using the score files (@pxref{Score File Format}).  This will also
9499 let you use different rules in different groups.
9500
9501 @vindex gnus-adaptive-file-suffix
9502 The adaptive score entries will be put into a file where the name is the
9503 group name with @code{gnus-adaptive-file-suffix} appended.  The default
9504 is @samp{ADAPT}.
9505
9506 @vindex gnus-score-exact-adapt-limit
9507 When doing adaptive scoring, substring or fuzzy matching would probably
9508 give you the best results in most cases.  However, if the header one
9509 matches is short, the possibility for false positives is great, so if
9510 the length of the match is less than
9511 @code{gnus-score-exact-adapt-limit}, exact matching will be used.  If
9512 this variable is @code{nil}, exact matching will always be used to avoid
9513 this problem.
9514
9515
9516 @node Followups To Yourself
9517 @section Followups To Yourself
9518
9519 Gnus offers two commands for picking out the @code{Message-ID} header in
9520 the current buffer.  Gnus will then add a score rule that scores using
9521 this @code{Message-ID} on the @code{References} header of other
9522 articles.  This will, in effect, increase the score of all articles that
9523 respond to the article in the current buffer.  Quite useful if you want
9524 to easily note when people answer what you've said.
9525
9526 @table @code
9527
9528 @item gnus-score-followup-article
9529 @findex gnus-score-followup-article
9530 This will add a score to articles that directly follow up your own
9531 article. 
9532
9533 @item gnus-score-followup-thread
9534 @findex gnus-score-followup-thread
9535 This will add a score to all articles that appear in a thread "below"
9536 your own article.
9537 @end table
9538
9539 @vindex gnus-inews-article-hook
9540 These two functions are both primarily meant to be used in hooks like
9541 @code{gnus-inews-article-hook}.  
9542
9543
9544 @node Scoring Tips
9545 @section Scoring Tips
9546 @cindex scoring tips
9547
9548 @table @dfn
9549
9550 @item Crossposts
9551 If you want to lower the score of crossposts, the line to match on is
9552 the @code{Xref} header.
9553 @lisp
9554 ("xref" (" talk.politics.misc:" -1000))
9555 @end lisp
9556
9557 @item Multiple crossposts
9558 If you want to lower the score of articles that have been crossposted to
9559 more than, say, 3 groups:
9560 @lisp
9561 ("xref" ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+" -1000 nil r))
9562 @end lisp
9563
9564 @item Matching on the body
9565 This is generally not a very good idea---it takes a very long time.
9566 Gnus actually has to fetch each individual article from the server.  But
9567 you might want to anyway, I guess.  Even though there are three match
9568 keys (@code{Head}, @code{Body} and @code{All}), you should choose one
9569 and stick with it in each score file.  If you use any two, each article
9570 will be fetched @emph{twice}.  If you want to match a bit on the
9571 @code{Head} and a bit on the @code{Body}, just use @code{All} for all
9572 the matches.  
9573
9574 @item Marking as read
9575 You will probably want to mark articles that has a score below a certain
9576 number as read.  This is most easily achieved by putting the following
9577 in your @file{all.SCORE} file:
9578 @lisp
9579 ((mark -100))
9580 @end lisp
9581 You may also consider doing something similar with @code{expunge}.  
9582
9583 @item Negated charater classes
9584 If you say stuff like @code{[^abcd]*}, you may get unexpected results.
9585 That will match newlines, which might lead to, well, The Unknown.  Say
9586 @code{[^abcd\n]*} instead.
9587 @end table
9588
9589 @node Reverse Scoring
9590 @section Reverse Scoring
9591 @cindex reverse scoring
9592
9593 If you want to keep just articles that have @samp{Sex with Emacs} in the
9594 subject header, and expunge all other articles, you could put something
9595 like this in your score file:
9596
9597 @lisp
9598 (("subject"
9599   ("Sex with Emacs" 2))
9600  (mark 1)
9601  (expunge 1))
9602 @end lisp
9603
9604 So, you raise all articles that match @samp{Sex with Emacs} and mark the
9605 rest as read, and expunge them to boot.
9606
9607 @node Global Score Files
9608 @section Global Score Files
9609 @cindex global score files
9610
9611 Sure, other newsreaders have "global kill files".  These are usually
9612 nothing more than a single kill file that applies to all groups, stored
9613 in the user's home directory.  Bah!  Puny, weak newsreaders!
9614
9615 What I'm talking about here are Global Score Files.  Score files from
9616 all over the world, from users everywhere, uniting all nations in one
9617 big, happy score file union!  Ange-score!  New and untested!
9618
9619 @vindex gnus-global-score-files
9620 All you have to do to use other people's score files is to set the
9621 @code{gnus-global-score-files} variable.  One entry for each score file,
9622 or each score file directory.  Gnus will decide by itself what score
9623 files are applicable to which group.
9624
9625 Say you want to use all score files in the
9626 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
9627 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
9628
9629 @lisp
9630 (setq gnus-global-score-files
9631       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
9632         "/ftp@@ftp.some-where:/pub/score/"))
9633 @end lisp
9634
9635 @findex gnus-score-search-global-directories
9636 Simple, eh?  Directory names must end with a @samp{/}.  These
9637 directories are typically scanned only once during each Gnus session.
9638 If you feel the need to manually re-scan the remote directories, you can
9639 use the @code{gnus-score-search-global-directories} command.
9640
9641 Note that, at present, using this option will slow down group entry
9642 somewhat.  (That is---a lot.)
9643
9644 If you want to start maintaining score files for other people to use,
9645 just put your score file up for anonymous ftp and announce it to the
9646 world.  Become a retro-moderator!  Participate in the retro-moderator
9647 wars sure to ensue, where retro-moderators battle it out for the
9648 sympathy of the people, luring them to use their score files on false
9649 premises!  Yay!  The net is saved!
9650
9651 Here are some tips for the would-be retro-moderator, off the top of my
9652 head: 
9653
9654 @itemize @bullet
9655
9656 @item 
9657 Articles that are heavily crossposted are probably junk. 
9658 @item
9659 To lower a single inappropriate article, lower by @code{Message-ID}.
9660 @item
9661 Particularly brilliant authors can be raised on a permanent basis. 
9662 @item
9663 Authors that repeatedly post off-charter for the group can safely be
9664 lowered out of existence.
9665 @item
9666 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
9667 articles completely.
9668
9669 @item 
9670 Use expiring score entries to keep the size of the file down.  You
9671 should probably have a long expiry period, though, as some sites keep
9672 old articles for a long time.
9673 @end itemize
9674
9675 ... I wonder whether other newsreaders will support global score files
9676 in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
9677 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
9678 holding our breath yet?
9679
9680
9681 @node Kill Files
9682 @section Kill Files
9683 @cindex kill files
9684
9685 Gnus still supports those pesky old kill files.  In fact, the kill file
9686 entries can now be expiring, which is something I wrote before Daniel
9687 Quinlan thought of doing score files, so I've left the code in there.
9688
9689 In short, kill processing is a lot slower (and I do mean @emph{a lot})
9690 than score processing, so it might be a good idea to rewrite your kill
9691 files into score files.
9692
9693 Anyway, a kill file is a normal @code{emacs-lisp} file.  You can put any
9694 forms into this file, which means that you can use kill files as some
9695 sort of primitive hook function to be run on group entry, even though
9696 that isn't a very good idea.
9697
9698 XCNormal kill files look like this:
9699
9700 @lisp
9701 (gnus-kill "From" "Lars Ingebrigtsen")
9702 (gnus-kill "Subject" "ding")
9703 (gnus-expunge "X")
9704 @end lisp
9705
9706 This will mark every article written by me as read, and remove them from
9707 the summary buffer.  Very useful, you'll agree.
9708
9709 Other programs use a totally different kill file syntax.  If Gnus
9710 encounters what looks like a @code{rn} kill file, it will take a stab at
9711 interpreting it. 
9712
9713 Two functions for editing a GNUS kill file:
9714
9715 @table @kbd
9716
9717 @item M-k
9718 @kindex M-k (Summary)
9719 @findex gnus-summary-edit-local-kill
9720 Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
9721
9722 @item M-K
9723 @kindex M-K (Summary)
9724 @findex gnus-summary-edit-global-kill
9725 Edit the general kill file (@code{gnus-summary-edit-global-kill}).
9726 @end table
9727
9728 @vindex gnus-kill-file-name
9729 A kill file for the group @samp{soc.motss} is normally called
9730 @file{soc.motss.KILL}.  The suffix appended to the group name to get
9731 this file name is detailed by the @code{gnus-kill-file-name} variable.
9732 The "global" kill file (not in the score file sense of "global", of
9733 course) is called just @file{KILL}.
9734
9735 @vindex gnus-kill-save-kill-file
9736 If @code{gnus-kill-save-kill-file} is non-@code{nil}, Gnus will save the
9737 kill file after processing, which is necessary if you use expiring
9738 kills. 
9739
9740
9741
9742
9743 @node Various
9744 @chapter Various
9745
9746 @menu
9747 * Interactive::                Making Gnus ask you many questions.
9748 * Formatting Variables::       How to control the look of the buffers.
9749 * Windows Configuration::      Configuring the Gnus buffer windows.
9750 * Buttons::                    Get tendonitis in ten easy steps!
9751 * Compilation & Init File::    How to speed Gnus up.
9752 * Daemons::                    Gnus can do things behind your back.
9753 * NoCeM::                      How to avoid spam and other fatty foods.
9754 * Various Various::            Things that are really various.
9755 @end menu
9756
9757 @node Interactive
9758 @section Interactive
9759 @cindex interaction
9760
9761 @table @code
9762
9763 @item gnus-novice-user
9764 @vindex gnus-novice-user
9765 If this variable is non-@code{nil}, you are either a newcomer to the
9766 World of Usenet, or you are very cautious, which is a nice thing to be,
9767 really.  You will be given questions of the type "Are you sure you want
9768 to do this?" before doing anything dangerous.  This is @code{t} by
9769 default. 
9770
9771 @item gnus-expert-user
9772 @vindex gnus-expert-user
9773 If this variable is non-@code{nil}, you will never ever be asked any
9774 questions by Gnus.  It will simply assume you know what you're doing, no
9775 matter how strange.
9776
9777 @item gnus-interactive-catchup
9778 @vindex gnus-interactive-catchup
9779 Require confirmation before catching up a group if non-@code{nil}.  It
9780 is @code{t} by default.
9781
9782 @item gnus-interactive-post
9783 @vindex gnus-interactive-post
9784 If non-@code{nil}, the user will be prompted for a group name when
9785 posting an article.  It is @code{t} by default.
9786
9787 @item gnus-interactive-exit
9788 @vindex gnus-interactive-exit
9789 Require confirmation before exiting Gnus.  This variable is @code{t} by
9790 default. 
9791 @end table
9792
9793
9794 @node Formatting Variables
9795 @section Formatting Variables
9796 @cindex formatting variables
9797
9798 Throughout this manual you've probably noticed lots of variables that
9799 are called things like @code{gnus-group-line-format} and
9800 @code{gnus-summary-mode-line-format}.  These control how Gnus is to
9801 output lines in the various buffers.  There's quite a lot of them.
9802 Fortunately, they all use the same syntax, so there's not that much to
9803 be annoyed by.
9804
9805 Here's an example format spec (from the group buffer): @samp{"%M%S%5y:
9806 %(%g%)\n"}.  We see that it is indeed extremely ugly, and that there are
9807 lots of percentages everywhere.  
9808
9809 Each @samp{%} element will be replaced by some string or other when the
9810 buffer in question is generated.  @samp{%5y} means "insert the @samp{y}
9811 spec, and pad with spaces to get a 5-character field".  Just like a
9812 normal format spec, almost.
9813
9814 You can also say @samp{%6,4y}, which means that the field will never be
9815 more than 6 characters wide and never less than 4 characters wide.
9816
9817 There are also specs for highlighting, and these are shared by all the
9818 format variables.  Text inside the @samp{%(} and @samp{%)} specifiers
9819 will get the special @code{mouse-face} property set, which means that it
9820 will be highlighted (with @code{gnus-mouse-face}) when you put the mouse
9821 pointer over it.
9822
9823 Text inside the @samp{%@{} and @samp{%@}} specifiers will have their
9824 normal faces set using @code{gnus-face-0}, which is @code{bold} by
9825 default.  If you say @samp{%1@{} instead, you'll get @code{gnus-face-1}
9826 instead, and so on.  Create as many faces as you wish.  The same goes
9827 for the @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
9828 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
9829
9830 Here's an alternative recipe for the group buffer:
9831
9832 @lisp
9833 ;; Create three face types.
9834 (setq gnus-face-1 'bold)
9835 (setq gnus-face-3 'italic)
9836
9837 ;; We want the article count to be in 
9838 ;; a bold and green face.  So we create 
9839 ;; a new face called `my-green-bold'.
9840 (copy-face 'bold 'my-green-bold)
9841 ;; Set the color.
9842 (set-face-foreground 'my-green-bold "ForestGreen")
9843 (setq gnus-face-2 'my-green-bold)
9844
9845 ;; Set the new & fancy format.
9846 (setq gnus-group-line-format 
9847       "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
9848 @end lisp
9849
9850 I'm sure you'll be able to use this scheme to create totally unreadable
9851 and extremely vulgar displays.  Have fun!
9852
9853 Currently Gnus uses the following formatting variables:
9854 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
9855 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
9856 @code{gnus-group-mode-line-format},
9857 @code{gnus-summary-mode-line-format},
9858 @code{gnus-article-mode-line-format},
9859 @code{gnus-server-mode-line-format}. 
9860
9861 Note that the @samp{%(} specs (and friends) do not make any sense on the
9862 mode-line variables.
9863
9864 All these format variables can also be random elisp forms.  In that
9865 case, they will be @code{eval}ed to insert the required lines.
9866
9867 @kindex M-x gnus-update-format
9868 @findex gnus-update-format
9869 Gnus includes a command to help you while creating your own format
9870 specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
9871 update the spec in question and pop you to a buffer where you can
9872 examine the resulting lisp code to be run to generate the line.  
9873
9874
9875 @node Windows Configuration
9876 @section Windows Configuration
9877 @cindex windows configuration
9878
9879 No, there's nothing here about X, so be quiet.
9880
9881 @vindex gnus-use-full-window
9882 If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
9883 other windows and occupy the entire Emacs screen by itself.  It is
9884 @code{t} by default.
9885
9886 @code{gnus-buffer-configuration} describes how much space each Gnus
9887 buffer should be given.  Here's an excerpt of this variable:
9888
9889 @lisp
9890 ((group (vertical 1.0 (group 1.0 point)
9891                       (if gnus-carpal (group-carpal 4))))
9892  (article (vertical 1.0 (summary 0.25 point) 
9893                         (article 1.0))))
9894 @end lisp
9895
9896 This is an alist.  The @dfn{key} is a symbol that names some action or
9897 other.  For instance, when displaying the group buffer, the window
9898 configuration function will use @code{group} as the key.  A full list of
9899 possible names is listed below.
9900
9901 The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer
9902 should occupy.  To take the @code{article} split as an example -
9903
9904 @lisp
9905 (article (vertical 1.0 (summary 0.25 point)
9906                        (article 1.0)))
9907 @end lisp
9908
9909 This @dfn{split} says that the summary buffer should occupy 25% of upper
9910 half of the screen, and that it is placed over the article buffer.  As
9911 you may have noticed, 100% + 25% is actually 125% (yup, I saw y'all
9912 reaching for that calculator there).  However, the special number
9913 @code{1.0} is used to signal that this buffer should soak up all the
9914 rest of the space avaiable after the rest of the buffers have taken
9915 whatever they need.  There should be only one buffer with the @code{1.0}
9916 size spec per split.
9917
9918 Point will be put in the buffer that has the optional third element
9919 @code{point}. 
9920
9921 Here's a more complicated example:
9922
9923 @lisp
9924 (article (vertical 1.0 (group 4)
9925                        (summary 0.25 point)
9926                        (if gnus-carpal (summary-carpal 4))
9927                        (article 1.0)))
9928 @end lisp
9929
9930 If the size spec is an integer instead of a floating point number, 
9931 then that number will be used to say how many lines a buffer should
9932 occupy, not a percentage.
9933
9934 If the @dfn{split} looks like something that can be @code{eval}ed (to be
9935 precise---if the @code{car} of the split is a function or a subr), this
9936 split will be @code{eval}ed.  If the result is non-@code{nil}, it will
9937 be used as a split.  This means that there will be three buffers if
9938 @code{gnus-carpal} is @code{nil}, and four buffers if @code{gnus-carpal}
9939 is non-@code{nil}.
9940
9941 Not complicated enough for you?  Well, try this on for size:
9942
9943 @lisp
9944 (article (horizontal 1.0 
9945              (vertical 0.5
9946                  (group 1.0)
9947                  (gnus-carpal 4))
9948              (vertical 1.0
9949                  (summary 0.25 point)
9950                  (summary-carpal 4)
9951                  (article 1.0))))
9952 @end lisp
9953
9954 Whoops.  Two buffers with the mystery 100% tag.  And what's that
9955 @code{horizontal} thingie?  
9956
9957 If the first element in one of the split is @code{horizontal}, Gnus will
9958 split the window horizontally, giving you two windows side-by-side.
9959 Inside each of these strips you may carry on all you like in the normal
9960 fashion.  The number following @code{horizontal} says what percentage of
9961 the screen is to be given to this strip.
9962
9963 For each split, there @emph{must} be one element that has the 100% tag.
9964 The splitting is never accurate, and this buffer will eat any leftover
9965 lines from the splits.
9966
9967 To be slightly more formal, here's a definition of what a legal split
9968 may look like:
9969
9970 @example
9971 split       = frame | horizontal | vertical | buffer | form
9972 frame       = "(frame " size *split ")"
9973 horizontal  = "(horizontal " size *split ")"
9974 vertical    = "(vertical " size *split ")"
9975 buffer      = "(" buffer-name " " size *[ "point" ] ")"
9976 size        = number | frame-params
9977 buffer-name = group | article | summary ...
9978 @end example
9979
9980 The limitations are that the @samp{frame} split can only appear as the
9981 top-level split.  @samp{form} should be an Emacs Lisp form that should
9982 return a valid split.  We see that each split is fully recursive, and
9983 may contain any number of @samp{vertical} and @samp{horizontal} splits. 
9984
9985 @vindex gnus-window-min-width
9986 @vindex gnus-window-min-height
9987 @cindex window height
9988 @cindex window width
9989 Finding the right sizes can be a bit complicated.  No window may be less
9990 than @code{gnus-window-min-height} (default 2) characters high, and all
9991 windows must be at least @code{gnus-window-min-wide} (default 1)
9992 characters wide.  Gnus will try to enforce this before applying the
9993 splits.  If you want to use the normal Emacs window width/height limit,
9994 you can just set these two variables to @code{nil}.
9995
9996 If you're not familiar with Emacs terminology, @samp{horizontal} and
9997 @samp{vertical} splits may work the opposite way of what you'd expect.
9998 Windows inside a @samp{horizontal} split are shown side-by-side, and
9999 windows within a @samp{vertical} split are shown above each other.
10000
10001 @findex gnus-configure-frame
10002 If you want to experiment with window placement, a good tip is to call
10003 @code{gnus-configure-frame} directly with a split.  This is the function
10004 that does all the real work when splitting buffers.  Below is a pretty
10005 nonsensical configuration with 5 windows; two for the group buffer and
10006 three for the article buffer.  (I said it was nonsensical.)  If you
10007 @code{eval} the statement below, you can get an idea of how that would
10008 look straight away, without going through the normal Gnus channels.
10009 Play with it until you're satisfied, and then use
10010 @code{gnus-add-configuration} to add your new creation to the buffer
10011 configuration list. 
10012
10013 @lisp
10014 (gnus-configure-frame
10015  '(horizontal 1.0
10016     (vertical 10
10017       (group 1.0)
10018       (article 0.3 point))
10019     (vertical 1.0
10020       (article 1.0)
10021       (horizontal 4
10022         (group 1.0)
10023         (article 10)))))
10024 @end lisp
10025
10026 You might want to have several frames as well.  No prob---just use the
10027 @code{frame} split:
10028
10029 @lisp
10030 (gnus-configure-frame
10031  '(frame 1.0
10032          (vertical 1.0
10033                    (summary 0.25 point)
10034                    (article 1.0))
10035          (vertical ((height . 5) (width . 15)
10036                     (user-position . t)
10037                     (left . -1) (top . 1))
10038                    (picon 1.0))))
10039
10040 @end lisp
10041
10042 This split will result in the familiar summary/article window
10043 configuration in the first (or "main") frame, while a small additional
10044 frame will be created where picons will be shown.  As you can see,
10045 instead of the normal @samp{1.0} top-level spec, each additional split
10046 should have a frame parameter alist as the size spec.
10047 @xref{(elisp)Frame Parameters}.
10048
10049 Here's a list of all possible keys for
10050 @code{gnus-buffer-configuaration}:
10051
10052 @code{group}, @code{summary}, @code{article}, @code{server},
10053 @code{browse}, @code{group-mail}, @code{summary-mail},
10054 @code{summary-reply}, @code{info}, @code{summary-faq},
10055 @code{edit-group}, @code{edit-server}, @code{reply}, @code{reply-yank},
10056 @code{followup}, @code{followup-yank}, @code{edit-score}.  
10057
10058 @findex gnus-add-configuration
10059 Since the @code{gnus-buffer-configuration} variable is so long and
10060 complicated, there's a function you can use to ease changing the config
10061 of a single setting: @code{gnus-add-configuration}.  If, for instance,
10062 you want to change the @code{article} setting, you could say:
10063
10064 @lisp
10065 (gnus-add-configuration
10066  '(article (vertical 1.0
10067                (group 4)
10068                (summary .25 point)
10069                (article 1.0))))
10070 @end lisp
10071
10072 You'd typically stick these @code{gnus-add-configuration} calls in your
10073 @file{.gnus} file or in some startup hook -- they should be run after
10074 Gnus has been loaded.
10075
10076
10077 @node Buttons
10078 @section Buttons
10079 @cindex buttons
10080 @cindex mouse
10081 @cindex click
10082
10083 Those new-fangled @dfn{mouse} contraptions is very popular with the
10084 young, hep kids who don't want to learn the proper way to do things
10085 these days.  Why, I remember way back in the summer of '89, when I was
10086 using Emacs on a Tops 20 system.  Three hundred users on one single
10087 machine, and every user was running Simula compilers.  Bah!
10088
10089 Right.
10090
10091 @vindex gnus-carpal
10092 Well, you can make Gnus display bufferfuls of buttons you can click to
10093 do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
10094 really.  Tell the chiropractor I sent you.
10095
10096
10097 @table @code
10098
10099 @item gnus-carpal-mode-hook
10100 @vindex gnus-carpal-mode-hook
10101 Hook run in all carpal mode buffers.
10102
10103 @item gnus-carpal-button-face
10104 @vindex gnus-carpal-button-face
10105 Face used on buttons.
10106
10107 @item gnus-carpal-group-buffer-buttons
10108 @vindex gnus-carpal-group-buffer-buttons
10109 Buttons in the group buffer.
10110
10111 @item gnus-carpal-summary-buffer-buttons
10112 @vindex gnus-carpal-summary-buffer-buttons
10113 Buttons in the summary buffer.
10114
10115 @item gnus-carpal-server-buffer-buttons
10116 @vindex gnus-carpal-server-buffer-buttons
10117 Buttons in the server buffer.
10118
10119 @item gnus-carpal-browse-buffer-buttons
10120 @vindex gnus-carpal-browse-buffer-buttons
10121 Buttons in the browse buffer.
10122 @end table
10123
10124 All the @code{buttons} variables are lists.  The elements in these list
10125 is either a cons cell where the car contains a text to be displayed and
10126 the cdr contains a function symbol, or a simple string.
10127
10128
10129 @node Compilation & Init File
10130 @section Compilation & Init File
10131 @cindex compilation
10132 @cindex init file
10133 @cindex byte-compilation
10134
10135 @vindex gnus-init-file
10136 @findex gnus-compile
10137 When Gnus starts up, it will read the Gnus init file
10138 @code{gnus-init-file}, which is @file{.gnus} by default.  It is
10139 recommended that you keep any Gnus-related functions that you have
10140 written in that file.  If you want to byte-compile the file, Gnus offers
10141 the handy @kbd{M-x gnus-compile} function that will do that for you. 
10142
10143 That's not really why that function was written, though.
10144
10145 Remember all those line format specification variables?
10146 @code{gnus-summary-line-format}, @code{gnus-group-line-format}, and so
10147 on.  Now, Gnus will of course heed whatever these variables are, but,
10148 unfortunately, changing them will mean a quite significant slow-down.
10149 (The default values of these variables have byte-compiled functions
10150 associated with them, while the user-generated versions do not, of
10151 course.) 
10152
10153 To help with this, you can run @code{gnus-compile} after you've fiddled
10154 around with the variables and feel that you're (kind of) satisfied.
10155 This will result in the new specs being byte-compiled, and you'll get
10156 top speed again.
10157
10158 The result of these byte-compilations will be written to
10159 @file{.gnus.elc} by default.
10160
10161 Note that Gnus will read @file{.gnus.elc} instead of @file{.gnus} if
10162 @file{.gnus.elc} exists, so if you change @file{.gnus}, you should
10163 remove @file{.gnus.elc}.
10164
10165
10166 @node Daemons
10167 @section Daemons
10168 @cindex demons
10169 @cindex daemons
10170
10171 Gnus, being larger than any program ever written (allegedly), does lots
10172 of strange stuff that you may wish to have done while you're not
10173 present.  For instance, you may want it to check for new mail once in a
10174 while.  Or you may want it to close down all connections to all servers
10175 when you leave Emacs idle.  And stuff like that.
10176
10177 Gnus will let you do stuff like that by defining various
10178 @dfn{handlers}.  Each handler consists of three elements:  A
10179 @var{function}, a @var{time}, and an @var{idle} parameter.
10180
10181 Here's an example of a handler that closes connections when Emacs has
10182 been idle for thirty minutes:
10183
10184 @lisp
10185 (gnus-demon-close-connections nil 30)
10186 @end lisp
10187
10188 Here's a handler that scans for PGP headers every hour when Emacs is
10189 idle: 
10190
10191 @lisp
10192 (gnus-demon-scan-pgp 60 t)
10193 @end lisp
10194
10195 This @var{time} parameter and than @var{idle} parameter works together
10196 in a strange, but wonderful fashion.  Basically, if @var{idle} is
10197 @code{nil}, then the function will be called every @var{time} minutes.
10198
10199 If @var{idle} is @code{t}, then the function will be called after
10200 @var{time} minutes only if Emacs is idle.  So if Emacs is never idle,
10201 the function will never be called.  But once Emacs goes idle, the
10202 function will be called every @var{time} minutes.
10203
10204 If @var{idle} is a number and @var{time} is a number, the function will
10205 be called every @var{time} minutes only when Emacs has been idle for
10206 @var{idle} minutes.
10207
10208 If @var{idle} is a number and @var{time} is @code{nil}, the function
10209 will be called once every time Emacs has been idle for @var{idle}
10210 minutes.  
10211
10212 And if @var{time} is a string, it should look like @samp{"07:31"}, and
10213 the function will then be called once every day somewhere near that
10214 time.  Modified by the @var{idle} parameter, of course.
10215
10216 @vindex gnus-demon-timestep
10217 (When I say "minute" here, I really mean @code{gnus-demon-timestep}
10218 seconds.  This is @samp{60} by default.  If you change that variable,
10219 all the timings in the handlers will be affected.)
10220
10221 @vindex gnus-use-demon
10222 To set the whole thing in motion, though, you have to set
10223 @code{gnus-use-demon} to @code{t}.
10224
10225 @vindex gnus-use-demon
10226 To set the whole thing in motion, though, you have to set
10227 @code{gnus-use-demon} to @code{t}.
10228
10229 So, if you want to add a handler, you could put something like this in
10230 your @file{.gnus} file:
10231
10232 @findex gnus-demon-add-handler
10233 @lisp
10234 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
10235 @end lisp
10236
10237 @findex gnus-demon-add-nocem
10238 @findex gnus-demon-add-scanmail
10239 @findex gnus-demon-add-disconnection
10240 Some ready-made functions to do this has been created:
10241 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, and
10242 @code{gnus-demon-add-scanmail}.  Just put those functions in your
10243 @file{.gnus} if you want those abilities.
10244
10245 @findex gnus-demon-init
10246 @findex gnus-demon-cancel
10247 @vindex gnus-demon-handlers
10248 If you add handlers to @code{gnus-demon-handlers} directly, you should
10249 run @code{gnus-demon-init} to make the changes take hold.  To cancel all
10250 daemons, you can use the @code{gnus-demon-cancel} function.
10251
10252 Note that adding daemons can be pretty naughty if you overdo it.  Adding
10253 functions that scan all news and mail from all servers every two seconds
10254 is a sure-fire way of getting booted off any respectable system.  So
10255 behave. 
10256
10257
10258 @node NoCeM
10259 @section NoCeM
10260 @cindex nocem
10261 @cindex spam
10262
10263
10264
10265 @node Various Various
10266 @section Various Various
10267 @cindex mode lines
10268 @cindex highlights
10269
10270 @table @code
10271
10272 @item gnus-verbose
10273 @vindex gnus-verbose
10274 This variable is an integer between zero and ten.  The higher the value,
10275 the more messages will be displayed.  If this variable is zero, Gnus
10276 will never flash any messages, if it is seven (which is the default),
10277 most important messages will be shown, and if it is ten, Gnus won't ever
10278 shut up, but will flash so many messages it will make your head swim.
10279
10280 @item gnus-verbose-backends
10281 @vindex gnus-verbose-backends
10282 This variable works the same way as @code{gnus-verbose}, but it applies
10283 to the Gnus backends instead of Gnus proper.
10284
10285 @item gnus-updated-mode-lines
10286 @vindex gnus-updated-mode-lines
10287 This is a list of buffers that should keep their mode lines updated.
10288 The list may contain the symbols @code{group}, @code{article} and
10289 @code{summary}.  If the corresponding symbol is present, Gnus will keep
10290 that mode line updated with information that may be pertinent.  If this
10291 variable is @code{nil}, screen refresh may be quicker.
10292
10293 @cindex display-time
10294
10295 @item gnus-mode-non-string-length
10296 @vindex gnus-mode-non-string-length
10297 By default, Gnus displays information on the current article in the mode
10298 lines of the summary and article buffers.  The information Gnus wishes
10299 to display (eg. the subject of the article) is often longer than the
10300 mode lines, and therefore have to be cut off at some point.  This
10301 variable says how long the other elements on the line is (i.e., the
10302 non-info part).  If you put additional elements on the mode line (eg. a
10303 clock), you should modify this variable:
10304
10305 @c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
10306 @lisp
10307 (add-hook 'display-time-hook
10308           (lambda () (setq gnus-mode-non-string-length
10309                            (+ 21
10310                               (if line-number-mode 5 0)
10311                               (if column-number-mode 4 0)
10312                               (length display-time-string)))))
10313 @end lisp
10314
10315 If this variable is @code{nil} (which is the default), the mode line
10316 strings won't be chopped off, and they won't be padded either.
10317
10318 @item gnus-visual
10319 @vindex gnus-visual
10320 @cindex visual
10321 @cindex highlighting
10322 @cindex menus
10323
10324 If @code{nil}, Gnus won't attempt to create menus or use fancy colors
10325 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
10326 file.
10327
10328 This variable can also be a list of visual properties that are enabled.
10329 The following elements are legal, and are all set by default:
10330
10331 @table @code
10332
10333 @item summary-highlight
10334 Perform various highlighting in the summary buffer.
10335
10336 @item article-highlight
10337 Perform various highlighting in the article buffer.
10338
10339 @item highlight
10340 Turn on highlighting in all buffers.
10341
10342 @item group-menu
10343 Create menus in the group buffer.
10344
10345 @item summary-menu
10346 Create menus in the summary buffer.
10347
10348 @item article-menu
10349 Create menus in the article buffer.
10350
10351 @item browse-menu
10352 Create menus in the browse buffer.
10353
10354 @item server-menu
10355 Create menus in the server buffer.
10356
10357 @item menu
10358 Create menus in all buffers.
10359
10360 @end table
10361
10362 So if you only want highlighting in the article buffer and menus in all
10363 buffers, you couls say something like:
10364
10365 @lisp
10366 (setq gnus-visual '(article-highlight menu))
10367 @end lisp
10368
10369 If you want only highlighting and no menus whatsoever, you'd say:
10370
10371 @lisp
10372 (setq gnus-visual '(highlight))
10373 @end lisp
10374
10375 @item gnus-mouse-face
10376 @vindex gnus-mouse-face
10377 This is the face (i.e., font) used for mouse highlighting in Gnus.  No
10378 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
10379
10380 @item gnus-display-type
10381 @vindex gnus-display-type
10382 This variable is symbol indicating the display Emacs is running under.
10383 The symbol should be one of @code{color}, @code{grayscale} or
10384 @code{mono}.  If Gnus guesses this display attribute wrongly, either set
10385 this variable in your @file{~/.emacs} or set the resource
10386 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
10387
10388 @item gnus-background-mode 
10389 @vindex gnus-background-mode 
10390 This is a symbol indicating the Emacs background brightness.  The symbol
10391 should be one of @code{light} or @code{dark}.  If Gnus guesses this
10392 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
10393 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}. 
10394 `gnus-display-type'.
10395
10396 @item nnheader-max-head-length
10397 @vindex nnheader-max-head-length
10398 When the backends read straight heads of articles, they all try to read
10399 as little as possible.  This variable (default @code{4096}) specifies
10400 the absolute max length the backends will try to read before giving up
10401 on finding a separator line between the head and the body.  If this
10402 variable is @code{nil}, there is no upper read bound.  If it is
10403 @code{t}, the backends won't try to read the articles piece by piece,
10404 but read the entire articles.  This makes sense with some versions of
10405 @code{ange-ftp}. 
10406
10407 @item nnheader-file-name-translation-alist 
10408 @vindex nnheader-file-name-translation-alist 
10409 @cindex file names
10410 @cindex illegal characters in file names
10411 @cindex characters in file names
10412 This is an alist that says how to translate characters in file names.
10413 For instance, if @samp{:} is illegal as a file character in file names
10414 on your system (you OS/2 user you), you could say something like:
10415
10416 @lisp
10417 (setq nnheader-file-name-translation-alist 
10418       '((?: . ?_)))
10419 @end lisp
10420
10421 In fact, this is the default value for this variable on OS/2 and MS
10422 Windows (phooey) systems.
10423
10424 @end table
10425
10426 @node Customization
10427 @chapter Customization
10428 @cindex general customization
10429
10430 All variables are properly documented elsewhere in this manual.  This
10431 section is designed to give general pointers on how to customize Gnus
10432 for some quite common situations.
10433
10434 @menu
10435 * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
10436 * Slow Terminal Connection::  You run a remote Emacs.
10437 * Little Disk Space::         You feel that having large setup files is icky.
10438 * Slow Machine::              You feel like buying a faster machine.
10439 @end menu
10440
10441 @node Slow/Expensive Connection
10442 @section Slow/Expensive @sc{nntp} Connection
10443
10444 If you run Emacs on a machine locally, and get your news from a machine
10445 over some very thin strings, you want to cut down on the amount of data
10446 Gnus has to get from the @sc{nntp} server.
10447
10448 @table @code
10449
10450 @item gnus-read-active-file
10451 Set this to @code{nil}, which will inhibit Gnus from requesting the
10452 entire active file from the server.  This file is often v.  large.  You
10453 also have to set @code{gnus-check-new-news} and
10454 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
10455 doesn't suddenly decide to fetch the active file anyway.
10456
10457 @item gnus-nov-is-evil
10458 This one has to be @code{nil}.  If not, grabbing article headers from
10459 the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers
10460 support @sc{xover}; Gnus will detect this by itself.
10461 @end table
10462
10463 @node Slow Terminal Connection
10464 @section Slow Terminal Connection
10465
10466 Let's say you use your home computer for dialing up the system that
10467 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
10468 amount of data that is sent over the wires as much as possible.
10469
10470 @table @code
10471
10472 @item gnus-auto-center-summary
10473 Set this to @code{nil} to inhibit Gnus from recentering the summary
10474 buffer all the time.  
10475
10476 @item gnus-visible-headers
10477 Cut down on the headers that are included in the articles to the
10478 minimum.  You can, in fact, make do without them altogether---most of the
10479 useful data is in the summary buffer, anyway.  Set this variable to
10480 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
10481
10482 @item gnus-article-display-hook
10483 Set this hook to all the available hiding commands:
10484 @lisp
10485 (setq gnus-article-display-hook 
10486       '(gnus-article-hide-headers gnus-article-hide-signature
10487         gnus-article-hide-citation))
10488 @end lisp
10489
10490 @item gnus-use-full-window
10491 By setting this to @code{nil}, you can make all the windows smaller.
10492 While this doesn't really cut down much generally, it means that you
10493 have to see smaller portions of articles before deciding that you didn't
10494 want to read them anyway.
10495
10496 @item gnus-thread-hide-subtree
10497 If this is non-@code{nil}, all threads in the summary buffer will be
10498 hidden initially.
10499
10500 @item gnus-updated-mode-lines
10501 If this is @code{nil}, Gnus will not put information in the buffer mode
10502 lines, which might save some time.
10503 @end table
10504
10505 @node Little Disk Space
10506 @section Little Disk Space
10507
10508 The startup files can get rather large, so you may want to cut their
10509 sizes a bit if you are running out of space.
10510
10511 @table @code
10512
10513 @item gnus-save-newsrc-file
10514 If this is @code{nil}, Gnus will never save @file{.newsrc}---it will
10515 only save @file{.newsrc.eld}.  This means that you will not be able to
10516 use any other newsreaders than Gnus.  This variable is @code{t} by
10517 default. 
10518
10519 @item gnus-save-killed-list
10520 If this is @code{nil}, Gnus will not save the list of dead groups.  You
10521 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
10522 and @code{gnus-check-bogus-newsgroups} to @code{nil} if you set this
10523 variable to @code{nil}.  This variable is @code{t} by default.
10524
10525 @end table
10526
10527
10528 @node Slow Machine
10529 @section Slow Machine
10530
10531 If you have a slow machine, or are just really impatient, there are a
10532 few things you can do to make Gnus run faster.
10533
10534 Set@code{gnus-check-new-newsgroups} and
10535 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
10536
10537 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
10538 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
10539 summary buffer faster.
10540
10541 Set @code{gnus-article-display-hook} to @code{nil} to make article
10542 processing a bit faster.
10543
10544
10545 @node Troubleshooting
10546 @chapter Troubleshooting
10547 @cindex troubleshooting
10548
10549 Gnus works @emph{so} well straight out of the box---I can't imagine any
10550 problems, really.
10551
10552 Ahem.
10553
10554 @enumerate
10555
10556 @item
10557 Make sure your computer is switched on.
10558
10559 @item
10560 Make sure that you really load the current Gnus version.  If you have
10561 been running @sc{gnus}, you need to exit Emacs and start it up again before
10562 Gnus will work.
10563
10564 @item
10565 Try doing an @kbd{M-x gnus-version}.  If you get something that looks
10566 like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,
10567 on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp
10568 flee}, you have some old @file{.el} files lying around.  Delete these.
10569
10570 @item
10571 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
10572 how-to. 
10573 @end enumerate
10574
10575 If all else fails, report the problem as a bug.
10576
10577 @cindex bugs
10578 @cindex reporting bugs
10579
10580 @kindex M-x gnus-bug
10581 @findex gnus-bug
10582 If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
10583 command. @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
10584 me the backtrace.  I will fix bugs, but I can only fix them if you send
10585 me a precise description as to how to reproduce the bug.
10586
10587 You really can never be too detailed in a bug report.  Always use the
10588 @kbd{M-x gnus-bug} command when you make bug reports, even if it creates
10589 a 10Kb mail each time you use it, and even if you have sent me your
10590 environment 500 times before.  I don't care.  I want the full info each
10591 time.  
10592
10593 It is also important to remember that I have no memory whatsoever.  If
10594 you send a bug report, and I send you a reply, and then you send back
10595 just "No, it's not! Moron!", I will have no idea what you are insulting
10596 me about.  Always overexplain everything.  It's much easier for all of
10597 us---if I don't have all the information I need, I will just mail you
10598 and ask for more info, and everything takes more time.
10599
10600 If you just need help, you are better off asking on
10601 @samp{gnu.emacs.gnus}.  I'm not very helpful.
10602
10603 @cindex gnu.emacs.gnus
10604 @cindex ding mailing list
10605 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
10606 Write to @samp{ding-request@@ifi.uio.no} to subscribe.
10607
10608
10609 @node The End
10610 @chapter The End
10611
10612 Well, that's the manual---you can get on with your life now.  Keep in
10613 touch.  Say hello to your cats from me.  
10614
10615 My @strong{ghod}---I just can't stand goodbyes.  Sniffle.
10616
10617 Ol' Chuck Reznikoff said it pretty well, so I leave the floor to him:
10618
10619 @quotation
10620 @strong{Te Deum}
10621 @sp 1
10622 Not because of victories @*
10623 I sing,@*
10624 having none,@*
10625 but for the common sunshine,@*
10626 the breeze,@*
10627 the largess of the spring.
10628 @sp 1
10629 Not for victory@*
10630 but for the day's work done@*
10631 as well as I was able;@*
10632 not for a seat upon the dais@*
10633 but at the common table.@*
10634 @end quotation
10635
10636 @node Appendices
10637 @chapter Appendices
10638
10639 @menu
10640 * A Programmer@'s Guide to Gnus::   Rilly, rilly technical stuff.
10641 * Emacs for Heathens::             A short intruduction to Emacsian terms.
10642 * Frequently Asked Questions::     A question-and-answer session.
10643 @end menu
10644
10645
10646 @node A Programmer@'s Guide to Gnus
10647 @section A Programmer's Guide to Gnus
10648
10649 It is my hope that other people will figure out smart stuff that Gnus
10650 can do, and that other people will write those smart things as well.  To
10651 facilitate that I thought it would be a good idea to describe the inner
10652 workings of Gnus.  And some of the not-so-inner workings, while I'm at
10653 it.
10654
10655 You can never expect the internals of a program not to change, but I
10656 will be defining (in some details) the interface between Gnus and its
10657 backends (this is written in stone), the format of the score files
10658 (ditto), data structures (some are less likely to change than others)
10659 and general method of operations.
10660
10661 @menu 
10662 * Backend Interface::        How Gnus communicates with the servers.
10663 * Score File Syntax::        A BNF definition of the score file standard.
10664 * Headers::                  How Gnus stores headers internally.
10665 * Ranges::                   A handy format for storing mucho numbers.
10666 * Group Info::               The group info format.
10667 * Various File Formats::     Formats of files that Gnus use.
10668 @end menu
10669
10670
10671 @node Backend Interface
10672 @subsection Backend Interface
10673
10674 Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
10675 groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
10676 server is a @dfn{backend} and some @dfn{backend variables}.  As examples
10677 of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
10678 examples of the latter we have @code{nntp-port-number} and
10679 @code{nnmbox-directory}.
10680
10681 When Gnus asks for information from a backend---say @code{nntp}---on
10682 something, it will normally include a virtual server name in the
10683 function parameters.  (If not, the backend should use the "current"
10684 virtual server.)  For instance, @code{nntp-request-list} takes a virtual
10685 server as its only (optional) parameter.  If this virtual server hasn't
10686 been opened, the function should fail.
10687
10688 Note that a virtual server name has no relation to some physical server
10689 name.  Take this example:
10690
10691 @lisp
10692 (nntp "odd-one" 
10693       (nntp-address "ifi.uio.no") 
10694       (nntp-port-number 4324))
10695 @end lisp
10696
10697 Here the virtual server name is @samp{"odd-one"} while the name of
10698 the physical server is @samp{"ifi.uio.no"}. 
10699
10700 The backends should be able to switch between several virtual servers.
10701 The standard backends implement this by keeping an alist of virtual
10702 server environments that it pulls down/pushes up when needed.  
10703
10704 There are two groups of interface functions: @dfn{required functions},
10705 which must be present, and @dfn{optional functions}, which Gnus will
10706 always check whether are present before attempting to call.
10707
10708 All these functions are expected to return data in the buffer
10709 @code{nntp-server-buffer} (@samp{" *nntpd*"}), which is somewhat
10710 unfortunately named, but we'll have to live with it.  When I talk about
10711 "resulting data", I always refer to the data in that buffer.  When I
10712 talk about "return value", I talk about the function value returned by
10713 the function call.
10714
10715 Some backends could be said to be @dfn{server-forming} backends, and
10716 some might be said to not be.  The latter are backends that generally
10717 only operate on one group at a time, and have no concept of "server" --
10718 they have a group, and they deliver info on that group and nothing more.
10719
10720 In the examples and definitions I will refer to the imaginary backend
10721 @code{nnchoke}. 
10722
10723 @cindex @code{nnchoke}
10724
10725 @menu
10726 * Required Backend Functions::        Functions that must be implemented.
10727 * Optional Backend Functions::        Functions that need not be implemented.
10728 @end menu
10729
10730
10731 @node Required Backend Functions
10732 @subsubsection Required Backend Functions
10733
10734 @table @code
10735
10736 @item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
10737
10738 @var{articles} is either a range of article numbers or a list of
10739 @code{Message-ID}s.  Current backends do not fully support either---only
10740 sequences (lists) of article numbers, and most backends do not support
10741 retrieval of @code{Message-ID}s.  But they should try for both. 
10742
10743 The result data should either be HEADs or NOV lines, and the result
10744 value should either be @code{headers} or @code{nov} to reflect this.
10745 This might later be expanded to @code{various}, which will be a mixture
10746 of HEADs and NOV lines, but this is currently not supported by Gnus.  
10747
10748 If @var{fetch-old} is non-@code{nil} it says to try to fetch "extra
10749 headers, in some meaning of the word.  This is generally done by
10750 fetching (at most) @var{fetch-old} extra headers less than the smallest
10751 article number in @code{articles}, and fill in the gaps as well.  The
10752 presence of this parameter can be ignored if the backend finds it
10753 cumbersome to follow the request.  If this is non-@code{nil} and not a
10754 number, do maximum fetches.
10755
10756 Here's an example HEAD:
10757
10758 @example
10759 221 1056 Article retrieved.
10760 Path: ifi.uio.no!sturles
10761 From: sturles@@ifi.uio.no (Sturle Sunde)
10762 Newsgroups: ifi.discussion
10763 Subject: Re: Something very droll
10764 Date: 27 Oct 1994 14:02:57 +0100
10765 Organization: Dept. of Informatics, University of Oslo, Norway
10766 Lines: 26
10767 Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
10768 References: <38jdmq$4qu@@visbur.ifi.uio.no>
10769 NNTP-Posting-Host: holmenkollen.ifi.uio.no
10770 .
10771 @end example
10772
10773 So a @code{headers} return value would imply that there's a number of
10774 these in the data buffer.
10775
10776 Here's a BNF definition of such a buffer:
10777
10778 @example
10779 headers        = *head
10780 head           = error / valid-head
10781 error-message  = [ "4" / "5" ] 2number " " <error message> eol
10782 valid-head     = valid-message *header "." eol
10783 valid-message  = "221 " <number> " Article retrieved." eol
10784 header         = <text> eol
10785 @end example
10786
10787 If the return value is @code{nov}, the data buffer should contain
10788 @dfn{network overview database} lines.  These are basically fields
10789 separated by tabs. 
10790
10791 @example
10792 nov-buffer = *nov-line
10793 nov-line   = 8*9 [ field <TAB> ] eol
10794 field      = <text except TAB>
10795 @end example
10796
10797 For a closer explanation what should be in those fields,
10798 @xref{Headers}. 
10799
10800
10801 @item (nnchoke-open-server SERVER &optional DEFINITIONS)
10802
10803 @var{server} is here the virtual server name.  @var{definitions} is a
10804 list of @code{(VARIABLE VALUE)} pairs that defines this virtual server. 
10805
10806 If the server can't be opened, no error should be signaled.  The backend
10807 may then choose to refuse further attempts at connecting to this
10808 server.  In fact, it should do so. 
10809
10810 If the server is opened already, this function should return a
10811 non-@code{nil} value.  There should be no data returned.
10812
10813
10814 @item (nnchoke-close-server &optional SERVER)
10815
10816 Close connection to @var{server} and free all resources connected
10817 to it. 
10818
10819 There should be no data returned.
10820
10821
10822 @item (nnchoke-request-close)
10823
10824 Close connection to all servers and free all resources that the backend
10825 have reserved.  All buffers that have been created by that backend
10826 should be killed.  (Not the @code{nntp-server-buffer}, though.)
10827
10828 There should be no data returned. 
10829
10830
10831 @item (nnchoke-server-opened &optional SERVER)
10832
10833 This function should return whether @var{server} is opened, and that the
10834 connection to it is still alive.  This function should under no
10835 circumstances attempt to reconnect to a server that is has lost
10836 connection to. 
10837
10838 There should be no data returned.
10839
10840
10841 @item (nnchoke-status-message &optional SERVER)
10842
10843 This function should return the last error message from @var{server}. 
10844
10845 There should be no data returned.
10846
10847
10848 @item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
10849
10850 The result data from this function should be the article specified by
10851 @var{article}.  This might either be a @code{Message-ID} or a number.
10852 It is optional whether to implement retrieval by @code{Message-ID}, but
10853 it would be nice if that were possible.
10854
10855 If @var{to-buffer} is non-@code{nil}, the result data should be returned
10856 in this buffer instead of the normal data buffer.  This is to make it
10857 possible to avoid copying large amounts of data from one buffer to
10858 another, and Gnus mainly request articles to be inserted directly into
10859 its article buffer.
10860
10861
10862 @item (nnchoke-open-group GROUP &optional SERVER)
10863
10864 Make @var{group} the current group.  
10865
10866 There should be no data returned by this function.
10867
10868
10869 @item (nnchoke-request-group GROUP &optional SERVER)
10870
10871 Get data on @var{group}.  This function also has the side effect of
10872 making @var{group} the current group. 
10873
10874 Here's an example of some result data and a definition of the same:
10875
10876 @example
10877 211 56 1000 1059 ifi.discussion
10878 @end example
10879
10880 The first number is the status, which should be @samp{211}.  Next is the
10881 total number of articles in the group, the lowest article number, the
10882 highest article number, and finally the group name.  Note that the total
10883 number of articles may be less than one might think while just
10884 considering the highest and lowest article numbers, but some articles
10885 may have been cancelled.  Gnus just discards the total-number, so
10886 whether one should take the bother to generate it properly (if that is a
10887 problem) is left as an excercise to the reader.
10888
10889 @example
10890 group-status = [ error / info ] eol
10891 error        = [ "4" / "5" ] 2<number> " " <Error message>
10892 info         = "211 " 3* [ <number> " " ] <string>
10893 @end example
10894
10895
10896 @item (nnchoke-close-group GROUP &optional SERVER)
10897
10898 Close @var{group} and free any resources connected to it.  This will be
10899 a no-op on most backends. 
10900
10901 There should be no data returned.
10902
10903
10904 @item (nnchoke-request-list &optional SERVER)
10905
10906 Return a list of all groups available on @var{server}.  And that means
10907 @emph{all}. 
10908
10909 Here's an example from a server that only carries two groups:
10910
10911 @example
10912 ifi.test 0000002200 0000002000 y
10913 ifi.discussion 3324 3300 n
10914 @end example
10915
10916 On each line we have a group name, then the highest article number in
10917 that group, the lowest article number, and finally a flag.
10918
10919 @example
10920 active-file = *active-line
10921 active-line = name " " <number> " " <number> " " flags eol
10922 name        = <string>
10923 flags       = "n" / "y" / "m" / "x" / "j" / "=" name
10924 @end example
10925
10926 The flag says whether the group is read-only (@samp{n}), is moderated
10927 (@samp{m}), is dead (@samp{x}), is aliased to some other group
10928 (@samp{=other-group} or none of the above (@samp{y}). 
10929
10930
10931 @item (nnchoke-request-post &optional SERVER)
10932
10933 This function should post the current buffer.  It might return whether
10934 the posting was successful or not, but that's not required.  If, for
10935 instance, the posting is done asynchronously, it has generally not been
10936 completed by the time this function concludes.  In that case, this
10937 function should set up some kind of sentinel to beep the user loud and
10938 clear if the posting could not be completed.
10939
10940 There should be no result data from this function. 
10941
10942
10943 @item (nnchoke-request-post-buffer POST GROUP SUBJECT HEADER ARTICLE-BUFFER INFO FOLLOW-TO RESPECT-POSTER)
10944
10945 This function should return a buffer suitable for composing an article
10946 to be posted by @code{nnchoke-request-post}.  If @var{post} is
10947 non-@code{nil}, this is not a followup, but a totally new article.
10948 @var{group} is the name of the group to be posted to.  @var{subject} is
10949 the subject of the message.  @var{article-buffer} is the buffer being
10950 followed up, if that is the case.  @var{info} is the group info.
10951 @var{follow-to} is the group that one is supposed to re-direct the
10952 article ot.  If @var{respect-poster} is non-@code{nil}, the special
10953 @samp{"poster"} value of a @code{Followup-To} header is to be respected.
10954
10955 There should be no result data returned.
10956
10957 @end table
10958
10959 @node Optional Backend Functions
10960 @subsubsection Optional Backend Functions
10961
10962 @table @code
10963
10964 @item (nnchoke-retrieve-groups GROUPS &optional SERVER)
10965
10966 @var{groups} is a list of groups, and this function should request data
10967 on all those groups.  How it does it is of no concern to Gnus, but it
10968 should attempt to do this in a speedy fashion.
10969
10970 The return value of this function can be either @code{active} or
10971 @code{group}, which says what the format of the result data is.  The
10972 former is in the same format as the data from
10973 @code{nnchoke-request-list}, while the latter is a buffer full of lines
10974 in the same format as @code{nnchoke-request-group} gives.
10975
10976 @example
10977 group-buffer = *active-line / *group-status
10978 @end example
10979
10980
10981 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
10982
10983 A Gnus group info (@pxref{Group Info}) is handed to the backend for
10984 alterations.  This comes in handy if the backend really carries all the
10985 information (as is the case with virtual an imap groups).  This function
10986 may alter the info in any manner it sees fit, and should return the
10987 (altered) group info.  This function may alter the group info
10988 destructively, so no copying is needed before boogeying. 
10989
10990 There should be no result data from this function.
10991
10992
10993 @item (nnchoke-request-type GROUP &optional ARTICLE)
10994
10995 When the user issues commands for "sending news" (@kbd{F} in the summary
10996 buffer, for instance), Gnus has to know whether the article the user is
10997 following up is news or mail.  This function should return @code{news}
10998 if @var{article} in @var{group} is news, @code{mail} if it is mail and
10999 @code{unknown} if the type can't be decided.  (The @var{article}
11000 parameter is necessary in @code{nnvirtual} groups which might very well
11001 combine mail groups and news groups.)
11002
11003 There should be no result data from this function.
11004
11005
11006 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
11007
11008 If the user tries to set a mark that the backend doesn't like, this
11009 function may change the mark.  Gnus will use whatever this function
11010 returns as the mark for @var{article} instead of the original
11011 @var{mark}.  If the backend doesn't care, it must return the original
11012 @var{mark}, and not @code{nil} or any other type of garbage.  
11013
11014 The only use for this that I can see is what @code{nnvirtual} does with
11015 it---if a component group is auto-expirable, marking an article as read
11016 in the virtual group should result in the article being marked as
11017 expirable. 
11018
11019 There should be no result data from this function.
11020
11021
11022 @item (nnchoke-request-scan &optional GROUP SERVER)
11023
11024 This function may be called at any time (by Gnus or anything else) to
11025 request that the backend check for incoming articles, in one way or
11026 another.  A mail backend will typically read the spool file or query the
11027 POP server when this function is invoked.  The @var{group} doesn't have
11028 to be heeded---if the backend decides that it is too much work just
11029 scanning for a single group, it may do a total scan of all groups.  It
11030 would be nice, however, to keep things local if that's practical.
11031
11032 There should be no result data from this function.
11033
11034
11035 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
11036
11037 This is a request to fetch articles asynchronously later.
11038 @var{articles} is an alist of @var{(article-number line-number)}.  One
11039 would generally expect that if one later fetches article number 4, for
11040 instance, some sort of asynchronous fetching of the articles after 4
11041 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
11042 alist) would be fetched asynchronouly, but that is left up to the
11043 backend.  Gnus doesn't care.
11044
11045 There should be no result data from this function.
11046  
11047
11048 @item (nnchoke-request-group-description GROUP &optional SERVER)
11049
11050 The result data from this function should be a description of
11051 @var{group}. 
11052
11053 @example
11054 description-line = name <TAB> description eol
11055 name             = <string>
11056 description      = <text>
11057 @end example
11058
11059 @item (nnchoke-request-list-newsgroups &optional SERVER)
11060
11061 The result data from this function should be the description of all
11062 groups available on the server.
11063
11064 @example
11065 description-buffer = *description-line
11066 @end example
11067
11068
11069 @item (nnchoke-request-newgroups DATE &optional SERVER)
11070
11071 The result data from this function should be all groups that were
11072 created after @samp{date}, which is in normal human-readable date
11073 format.  The data should be in the active buffer format.
11074
11075
11076 @item (nnchoke-request-create-groups GROUP &optional SERVER)
11077
11078 This function should create an empty group with name @var{group}.  
11079
11080 There should be no return data.
11081
11082
11083 @item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
11084
11085 This function should run the expiry process on all articles in the
11086 @var{articles} range (which is currently a simple list of article
11087 numbers.)  It is left up to the backend to decide how old articles
11088 should be before they are removed by this function.  If @var{force} is
11089 non-@code{nil}, all @var{articles} should be deleted, no matter how new
11090 they are. 
11091
11092 This function should return a list of articles that it did not/was not
11093 able to delete.
11094
11095 There should be no result data returned.
11096
11097
11098 @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
11099 &optional LAST)
11100
11101 This function should move @var{article} (which is a number) from
11102 @var{group} by calling @var{accept-form}.  
11103
11104 This function should ready the article in question for moving by
11105 removing any header lines it has added to the article, and generally
11106 should "tidy up" the article.  Then it should @code{eval}
11107 @var{accept-form} in the buffer where the "tidy" article is.  This will
11108 do the actual copying.  If this @code{eval} returns a non-@code{nil}
11109 value, the article should be removed.
11110
11111 If @var{last} is @code{nil}, that means that there is a high likelihood
11112 that there will be more requests issued shortly, so that allows some
11113 optimizations. 
11114
11115 There should be no data returned. 
11116
11117
11118 @item (nnchoke-request-accept-article GROUP &optional LAST)
11119
11120 This function takes the current buffer and inserts it into @var{group}.
11121 If @var{last} in @code{nil}, that means that there will be more calls to
11122 this function in short order.
11123
11124 There should be no data returned.
11125
11126
11127 @item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
11128
11129 This function should remove @var{article} (which is a number) from
11130 @var{group} and insert @var{buffer} there instead.
11131
11132 There should be no data returned.
11133
11134
11135 @item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
11136
11137 This function should delete @var{group}.  If @var{force}, it should
11138 really delete all the articles in the group, and then delete the group
11139 itself.  (If there is such a thing as "the group itself".)
11140
11141 There should be no data returned.
11142
11143
11144 @item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
11145
11146 This function should rename @var{group} into @var{new-name}.  All
11147 articles that are in @var{group} should move to @var{new-name}.
11148
11149 There should be no data returned.
11150
11151
11152 @end table
11153
11154
11155 @node Score File Syntax
11156 @subsection Score File Syntax
11157
11158 Score files are meant to be easily parsable, but yet extremely
11159 mallable.   It was decided that something that had the same read syntax
11160 as an Emacs Lisp list would fit that spec.
11161
11162 Here's a typical score file:
11163
11164 @lisp
11165 (("summary"
11166   ("win95" -10000 nil s)
11167   ("Gnus"))
11168  ("from"
11169   ("Lars" -1000))
11170  (mark -100))
11171 @end lisp
11172
11173 BNF definition of a score file:
11174
11175 @example
11176 score-file       = "" / "(" *element ")"
11177 element          = rule / atom
11178 rule             = string-rule / number-rule / date-rule
11179 string-rule      = "(" quote string-header quote space *string-match ")"
11180 number-rule      = "(" quote number-header quote space *number-match ")"
11181 date-rule        = "(" quote date-header quote space *date-match ")"
11182 quote            = <ascii 34>
11183 string-header    = "subject" / "from" / "references" / "message-id" / 
11184                    "xref" / "body" / "head" / "all" / "followup"
11185 number-header    = "lines" / "chars"
11186 date-header      = "date"
11187 string-match     = "(" quote <string> quote [ "" / [ space score [ "" / 
11188                    space date [ "" / [ space string-match-t ] ] ] ] ] ")"
11189 score            = "nil" / <integer>
11190 date             = "nil" / <natural number>
11191 string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" / 
11192                    "r" / "regex" / "R" / "Regex" /
11193                    "e" / "exact" / "E" / "Exact" /
11194                    "f" / "fuzzy" / "F" / "Fuzzy"
11195 number-match     = "(" <integer> [ "" / [ space score [ "" / 
11196                    space date [ "" / [ space number-match-t ] ] ] ] ] ")"
11197 number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
11198 date-match       = "(" quote <string> quote [ "" / [ space score [ "" / 
11199                    space date [ "" / [ space date-match-t ] ] ] ] ")"
11200 date-match-t     = "nil" / "at" / "before" / "after"
11201 atom             = "(" [ required-atom / optional-atom ] ")"
11202 required-atom    = mark / expunge / mark-and-expunge / files /
11203                    exclude-files / read-only / touched
11204 optional-atom    = adapt / local / eval 
11205 mark             = "mark" space nil-or-number
11206 nil-or-number    = "nil" / <integer>
11207 expunge          = "expunge" space nil-or-number
11208 mark-and-expunge = "mark-and-expunge" space nil-or-number
11209 files            = "files" *[ space <string> ]
11210 exclude-files    = "exclude-files" *[ space <string> ]
11211 read-only        = "read-only" [ space "nil" / space "t" ]
11212 adapt            = "adapt" [ space "nil" / space "t" / space adapt-rule ]
11213 adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
11214 local            = "local" *[ space "(" <string> space <form> ")" ]
11215 eval             = "eval" space <form>
11216 space            = *[ " " / <TAB> / <NEWLINE> ]
11217 @end example
11218
11219 Any unrecognized elements in a score file should be ignored, but not
11220 discarded.  
11221
11222 As you can see, white space is needed, but the type and amount of white
11223 space is irrelevant.  This means that formatting of the score file is
11224 left up to the programmer---if it's simpler to just spew it all out on
11225 one looong line, then that's ok.
11226
11227 The meaning of the various atoms are explained elsewhere in this
11228 manual. 
11229
11230
11231 @node Headers
11232 @subsection Headers
11233
11234 Gnus uses internally a format for storing article headers that
11235 corresponds to the @sc{nov} format in a mysterious fashion.  One could
11236 almost suspect that the author looked at the @sc{nov} specification and
11237 just shamelessly @emph{stole} the entire thing, and one would be right.
11238
11239 @dfn{Header} is a severly overloaded term.  "Header" is used in RFC1036
11240 to talk about lines in the head of an article (eg., @code{From}).  It is
11241 used by many people as a synonym for "head"---"the header and the
11242 body".  (That should be avoided, in my opinion.)  And Gnus uses a format
11243 interanally that it calls "header", which is what I'm talking about
11244 here.  This is a 9-element vector, basically, with each header (ouch)
11245 having one slot. 
11246
11247 These slots are, in order: @code{number}, @code{subject}, @code{from},
11248 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
11249 @code{xref}.  There are macros for accessing and setting these slots --
11250 they all have predicatable names beginning with @code{mail-header-} and
11251 @code{mail-header-set-}, respectively.  
11252
11253 The @code{xref} slot is really a @code{misc} slot.  Any extra info will
11254 be put in there.
11255
11256
11257 @node Ranges
11258 @subsection Ranges
11259
11260 @sc{gnus} introduced a concept that I found so useful that I've started
11261 using it a lot and have elaborated on it greatly. 
11262
11263 The question is simple: If you have a large amount of objects that are
11264 identified by numbers (say, articles, to take a @emph{wild} example)
11265 that you want to callify as being "included", a normal sequence isn't
11266 very useful.  (A 200,000 length sequence is a bit long-winded.)
11267
11268 The solution is as simple as the question: You just collapse the
11269 sequence. 
11270
11271 @example
11272 (1 2 3 4 5 6 10 11 12)
11273 @end example
11274
11275 is transformed into
11276
11277 @example
11278 ((1 . 6) (10 . 12))
11279 @end example
11280
11281 To avoid having those nasty @samp{(13 . 13)} elements to denote a
11282 lonesome object, a @samp{13} is a valid element:
11283
11284 @example
11285 ((1 . 6) 7 (10 . 12))
11286 @end example
11287
11288 This means that comparing two ranges to find out whether they are equal
11289 is slightly tricky:
11290
11291 @example
11292 ((1 . 5) 7 8 (10 . 12))
11293 @end example
11294
11295 and
11296
11297 @example
11298 ((1 . 5) (7 . 8) (10 . 12))
11299 @end example
11300
11301 are equal.  In fact, any non-descending list is a range:
11302
11303 @example
11304 (1 2 3 4 5)
11305 @end example
11306
11307 is a perfectly valid range, although a pretty longwinded one.  This is
11308 also legal:
11309
11310 @example
11311 (1 . 5)
11312 @end example
11313
11314 and is equal to the previous range.
11315
11316 Here's a BNF definition of ranges.  Of course, one must remember the
11317 semantic requirement that the numbers are non-descending.  (Any number
11318 of repetition of the same number is allowed, but apt to disappear in
11319 range handling.)
11320
11321 @example
11322 range           = simple-range / normal-range
11323 simple-range    = "(" number " . " number ")"
11324 normal-range    = "(" start-contents ")"
11325 contents        = "" / simple-range *[ " " contents ] / 
11326                   number *[ " " contents ]
11327 @end example
11328
11329 Gnus currently uses ranges to keep track of read articles and article
11330 marks.  I plan on implementing a number of range operators in C if The
11331 Powers That Be are willing to let me.  (I haven't asked yet, because I
11332 need to do some more thinking on what operators I need to make life
11333 totally range-based without ever having to convert back to normal
11334 sequences.) 
11335
11336
11337 @node Group Info
11338 @subsection Group Info
11339
11340 Gnus stores all permanent info on groups in a @dfn{group info} list.
11341 This list is from three to six elements (or more) long and exhaustively
11342 describes the group.
11343
11344 Here are two example group infos; one is a very simple group while the
11345 second is a more complex one:
11346
11347 @example
11348 ("no.group" 5 (1 . 54324))
11349
11350 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
11351                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
11352                 (nnml "")
11353                 (auto-expire (to-address "ding@@ifi.uio.no")))
11354 @end example
11355
11356 The first element is the group name as Gnus knows the group; the second
11357 is the group level; the third is the read articles in range format; the
11358 fourth is a list of article marks lists; the fifth is the select method;
11359 and the sixth contains the group parameters.
11360
11361 Here's a BNF definition of the group info format:
11362
11363 @example
11364 info          = "(" group space level space read 
11365                 [ "" / [ space marks-list [ "" / [ space method [ "" /
11366                 space parameters ] ] ] ] ] ")" 
11367 group         = quote <string> quote
11368 level         = <integer in the range of 1 to inf>
11369 read          = range
11370 marks-lists   = nil / "(" *marks ")"
11371 marks         = "(" <string> range ")"
11372 method        = "(" <string> *elisp-forms ")"
11373 parameters    = "(" *elisp-forms ")"
11374 @end example
11375
11376 Actually that @samp{marks} rule is a fib.  A @samp{marks} is a
11377 @samp{<string>} consed on to a @samp{range}, but that's a bitch to say
11378 in pseudo-BNF.
11379
11380
11381 @node Various File Formats
11382 @subsection Various File Formats
11383
11384 @menu
11385 * Active File Format::      Information on articles and groups available.
11386 * Newsgroups File Format::  Group descriptions.
11387 @end menu
11388
11389
11390 @node Active File Format
11391 @subsubsection Active File Format
11392
11393 The active file lists all groups that are available on the server in
11394 question.  It also lists the highest and lowest current article numbers
11395 in each group.  
11396
11397 Here's an exceprt from a typical active file:
11398
11399 @example
11400 soc.motss 296030 293865 y
11401 alt.binaries.pictures.fractals 3922 3913 n
11402 comp.sources.unix 1605 1593 m
11403 comp.binaries.ibm.pc 5097 5089 y
11404 no.general 1000 900 y
11405 @end example
11406
11407 Here's a pseudo-BNF definition of this file:
11408
11409 @example
11410 active      = *group-line
11411 group-line  = group space high-number space low-number space flag <NEWLINE>
11412 group       = <non-white-space string>
11413 space       = " "
11414 high-number = <non-negative integer>
11415 low-number  = <positive integer>
11416 flag        = "y" / "n" / "m" / "j" / "x" / "=" group
11417 @end example
11418
11419
11420 @node Newsgroups File Format
11421 @subsubsection Newsgroups File Format
11422
11423 The newsgroups file lists groups along with their descriptions.  Not all
11424 groups on the server have to be listed,  and not all groups in the file
11425 have to exist on the server.  The file is meant purely as information to
11426 the user.
11427
11428 The format is quite simple; a group name, a tab, and the description.
11429 Here's the definition:
11430
11431 @example
11432 newsgroups    = *line
11433 line          = group tab description <NEWLINE>
11434 group         = <non-white-space string>
11435 tab           = <TAB>
11436 description   = <string>
11437 @end example
11438
11439
11440 @node Emacs for Heathens
11441 @section Emacs for Heathens
11442
11443 Believe it or not, but some people who use Gnus haven't really used
11444 Emacs much before they embarked on their journey on the Gnus Love Boat.
11445 If you are one of those unfortunates whom "@kbd{M-C-a}", "kill the
11446 region", and "set @code{gnus-flargblossen} to an alist where the key is
11447 a regexp that is used for matching on the group name" are magical
11448 phrases with little or no meaning, then this appendix is for you.  If
11449 you are already familiar with Emacs, just ignore this and go fondle your
11450 cat instead.
11451
11452 @menu
11453 * Keystrokes::      Entering text and executing commands.
11454 * Emacs Lisp::      The built-in Emacs programming language.
11455 @end menu
11456
11457
11458 @node Keystrokes
11459 @subsection Keystrokes
11460
11461 @itemize @bullet
11462 @item
11463 Q: What is an experienced Emacs user?
11464
11465 @item 
11466 A: A person who wishes that the terminal had pedals.
11467 @end itemize
11468
11469 Yes, when you use Emacs, you are apt to use the control key, the shift
11470 key and the meta key a lot.  This is very annoying to some people
11471 (notably @code{vi}le users), and the rest of us just love the hell out
11472 of it.  Just give up and submit.  Emacs really does stand for
11473 "Escape-Meta-Alt-Control-Shift", and not "Editin Macros", as you may
11474 have heard from other disreputable sources (like the Emacs author).
11475
11476 The shift key is normally located near your pinky fingers, and are
11477 normally used to get capital letters and stuff.  You probably use it all
11478 the time.  The control key is normally marked "CTRL" or something like
11479 that.  The meta key is, funnily enough, never marked as such on any
11480 keyboards.  The one I'm curretly at has a key that's marked "Alt", which
11481 is the meta key on this keyboard.  It's usually located somewhere to the
11482 left hand side of the keyboard, usually on the bottom row.
11483
11484 Now, us Emacs people doesn't say "press the meta-control-m key", because
11485 that's just too inconvenient.  We say "press the @kbd{M-C-m} key".
11486 @kbd{M-} is the prefix that means "meta" and "C-" is the prefix that
11487 means "control".  So "press @kbd{C-k}" means "press down the control
11488 key, and hold it down while you press @kbd{k}".  "Press @kbd{M-C-k}"
11489 means "press down and hold down the meta key and the control key and
11490 then press @kbd{k}".  Simple, ay?
11491
11492 This is somewhat complicated by the fact that not all keyboards have a
11493 meta key.  In that case you can use the "escape" key.  Then @kbd{M-k}
11494 means "press escape, release escape, press @kbd{k}".  That's much more
11495 work than if you have a meta key, so if that's the case, I respectfully
11496 suggest you get a real keyboard with a meta key.  You can't live without
11497 it.
11498
11499
11500
11501 @node Emacs Lisp
11502 @subsection Emacs Lisp
11503
11504 Emacs is the King of Editors because it's really a Lisp interpreter.
11505 Each and every key you tap runs some Emacs Lisp code snippet, and since
11506 Emacs Lisp is an interpreted language, that means that you can configure
11507 any key to run any random code.  You just, like, do it.  
11508
11509 Gnus is written in Emacs Lisp, and is run as a bunch of interpreted
11510 functions.  (These are byte-compiled for speed, but it's still
11511 interpreted.)  If you decide that you don't like the way Gnus does
11512 certain things, it's trivial to have it do something a different way.
11513 (Well, at least if you know how to write Lisp code.)  However, that's
11514 beyond the scope of this manual, so we are simply going to talk about
11515 some common constructs that you normally use in your @file{.emacs} file
11516 to customize Gnus.
11517
11518 If you want to set the variable @code{gnus-florgbnize} to four (4), you
11519 write the following:
11520
11521 @lisp
11522 (setq gnus-florgbnize 4)
11523 @end lisp
11524
11525 This function (really "special form") @code{setq} is the one that can
11526 set a variable to some value.  This is really all you need to know.  Now
11527 you can go and fill your @code{.emacs} file with lots of these to change
11528 how Gnus works.
11529
11530 If you have put that thing in your @code{.emacs} file, it will be read
11531 and @code{eval}ed (which is lispese for "run") the next time you start
11532 Emacs.  If you want to change the variable right away, simply say
11533 @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
11534 previous "form", which here is a simple @code{setq} statement.
11535
11536 Go ahead---just try it, if you're located at your Emacs.  After you
11537 @kbd{C-x C-e}, you will see @samp{4} appear in the echo area, which
11538 is the return value of the form you @code{eval}ed.
11539
11540 Some pitfalls:
11541
11542 If the manual says "set @code{gnus-read-active-file} to @code{some}",
11543 that means:
11544
11545 @lisp
11546 (setq gnus-read-active-file 'some)
11547 @end lisp
11548
11549 On the other hand, if the manual says "set @code{gnus-nntp-server} to
11550 @samp{"nntp.ifi.uio.no"}", that means:
11551
11552 @lisp
11553 (setq gnus-nntp-server "nntp.ifi.uio.no")
11554 @end lisp
11555
11556 So be careful not to mix up strings (the latter) with symbols (the
11557 former).  The manual is unambiguous, but it can be confusing.
11558
11559
11560 @include gnus-faq.texi
11561
11562 @node Index
11563 @chapter Index
11564 @printindex cp
11565
11566 @node Key Index
11567 @chapter Key Index
11568 @printindex ky
11569
11570 @summarycontents
11571 @contents
11572 @bye
11573
11574 \f
11575 @c Local Variables:
11576 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
11577 @c End:
11578
11579 \1f