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