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