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