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