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