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