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