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