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