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