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