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