*** 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.1 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 (ding) Gnus, the GNU Emacs newsreader.
22
23 Copyright (C) 1989, 1990, 1993, 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{} 1989, 1990, 1993 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 (ding) Gnus.
73 The news can be gotten by any nefarious means you can think of - NNTP,
74 local spool or your mbox file.  All at the same time, if you want to
75 push your 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 * Various::                 General purpose settings.
85 * Customization::           Tailoring Gnus to your needs.
86 * Troubleshooting::         What you might try if things do not work.
87 * Reporting Bugs::          Bugs? What bugs?!
88 * Index::                   Variable, function and concept index.
89 * Key Index::               Key Index.
90 @end menu
91
92 Note: This is a work of fiction.  Any similarity between this manual and
93 real programs is purely coincidental.
94
95 @node History
96 @chapter History
97
98 @cindex history
99 @sc{GNUS} was written by Masanobu UMEDA.  When autumn crept up in '94,
100 Lars Magne Ingebrigtsen grew bored and decided to write (ding) Gnus.
101
102 (ding) Gnus is based on @sc{GNUS 4.1} and includes excellent functions
103 from Per Abrahamsen, lots of fixes by Sudish Joseph, as well as bits and
104 pieces from the XGnus distribution by Felix Lee and JWZ.
105
106 The recommended pronounciation of the name this program is "ding
107 guh-noose", with "ding" being half-sung in a loud, high-pitched voice,
108 and "guh-noose" being grumbled and a disaffected fashion.  Any
109 irritation and/or damage this name may cause you is not the
110 responsibility of the author, even though you might like to strangle him
111 for the stupid idea.
112
113 If you want to take a look at the person responsible for this outrage,
114 you can point your (feh!) web browser to
115 @file{http://www.ifi.uio.no/~larsi/}.  This is also the primary
116 distribution point for the new and spiffy versions of Gnus, also know as
117 The Site That Destroys Newsrcs And Drives People Mad.
118
119 @dfn{(ding)}, is, of course, short for @dfn{ding is not Gnus}, which is
120 a total and utter lie, but who cares? (Besides, the "Gnus" in this
121 abbreviation should probably be pronounced "news" as UMEDA intended,
122 which makes it a more appropriate name, don't you think?)
123
124 @menu
125 * Compatibility::          Just how compatible is (ding) Gnus with @sc{GNUS}?
126 * New Features::           A short description of all the new stuff in Gnus.
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 binding have been kept.  More key binding have been added, of
135 course, but only in one or two obscure cases have key bindings been
136 changed.
137
138 Our motto is:
139 @quotation
140 @cartouche
141 In a cloud bones of steel.
142 @end cartouche
143 @end quotation
144
145 All commands have kept their names.  Some internal functions have changed
146 their names.
147
148 The @code{gnus-uu} package has changed drastically. @xref{Decoding
149 Articles}. 
150
151 One major compatability question if the presence of several summary
152 buffers.  The 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 might lead to incorrect values being used if one is not careful.
157
158 All code that relies on knowledge of @sc{GNUS} internals will probably
159 fail.  To take two examples: Sorting @code{gnus-newsrc-assoc} (or
160 changing it in any way, as a matter of fact) is strictly verboten.  Gnus
161 maintains a hash table that points to the entries in this assoc (which
162 speeds up many functions), and changing the assoc directly will lead to
163 peculiar results.
164
165 @cindex hilit19
166 @cindex highlighting
167 Old hilit19 code does not work at all.  In fact, you should probably
168 remove all hihit code from all the 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 which are both faster and more accurated. 
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 do 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 @node New Features
193 @section New Features
194 @cindex new features
195
196 The look of all buffers can be changed by setting format-like variables.
197  
198 Local spool and several NNTP servers can be used at once.  Virtual
199 groups and private mail groups are featured.
200
201 Gnus can use various strategies for gathering threads that have lost
202 their roots (thereby gathering loose sub-threads in one thread) or it
203 can go back and retrieve enough headers to build a complete thread.
204
205 Killed groups can be displayed in the group buffer, and you can read
206 them as well.
207
208 Gnus can do partial group updates - you do not have to retrieve the
209 entire active file just to check for new articles in a few groups.
210
211 Gnus implements a sliding scale of subscribedness to groups.
212
213 The approach to killing has been changed.  Instead of simply killing or
214 not, you can score articles for easier reading.
215
216 @node Terminology
217 @chapter Terminology
218
219 @cindex terminology
220 @table @samp
221 @item news
222 This is what you are supposed to use this thing for - reading news.
223 News is generally fetched from a nearby NNTP server, and is generally
224 publicly available to everybody.  If you post news, the entire world is
225 likely to read just what you have written, and they'll all snigger
226 mischievously.  Behind your back.
227 @item mail
228 Everything that's delivered to you personally is mail.  Some news/mail
229 readers (like Gnus) blur the distinction between mail and news, but
230 there is a difference.  Mail is private.  News is public.  Mailing is
231 not posting, and replying is not following up.
232 @item reply
233 Send a mail to the person who has written what you are reading.
234 @item follow up
235 Post an article to the current newsgroup responding to the article you
236 are reading.
237 @item backend
238 Gnus gets fed articles from a number of backends, both news and mail
239 backends.  Gnus does not handle the underlying media, so to speak - this
240 is all done by the backends.
241 @item native
242 Gnus will always use one method (and backend) as the @dfn{native}, or
243 default, way of getting news.
244 @item foreign
245 You can also have any number of foreign groups at the same time.  These
246 are groups that use different backends for getting news.
247 @item header
248 A line from the head of an article. 
249 @item headers
250 A collection of such lines, or a collection of heads.  Or even a
251 collection of NOV lines.
252 @item NOV
253 When Gnus enters a group, it asks the backend for the headers for all
254 the unread articles in the group.  Most servers support the News OverView
255 format, which is much smaller and much faster to read than the normal
256 HEAD format. 
257 @end table
258
259 @node Starting Up
260 @chapter Starting Gnus
261 @cindex starting up
262
263 @kindex M-x gnus
264 If your system administrator has set thing up properly, starting Gnus
265 and reading news is extremely easy - you just type @kbd{M-x gnus}.
266
267 If things do not go smoothly at startup, you have to twiddle some
268 variables. 
269
270 @menu
271 * Finding the News::    Choosing a method for getting news.
272 * The First Time::      What does Gnus do the first time you start it?
273 * The Server is Down::  How can I read my mail then?
274 * New Groups::          What is Gnus supposed to do with new groups?
275 * Startup Files::       Those pesky startup files - @file{.newsrc}.
276 * Auto Save::           Recovering from a crash.
277 * The Active File::     Reading the active file over a slow line Takes Time.
278 * Startup Variables::   Other variables you might change.
279 @end menu
280
281 @node Finding the News
282 @section Finding the News
283
284 @vindex gnus-select-method
285 The @code{gnus-select-method} variable controls how Gnus finds news.
286 This variable should be a list where the first element says "how" and
287 the second element says "where".  This method is is your native method.
288 All groups that are not fetched with this method are foreign groups.
289
290 For instance, if you want to get your daily dosage of news from the NNTP
291 server "news.friendly.server", you'd say:
292
293 @lisp
294 (setq gnus-select-method '(nntp "news.friendly.server"))
295 @end lisp
296
297 If you want to use a local spool, say:
298
299 @lisp
300 (setq gnus-select-method '(nnspool ""))
301 @end lisp
302
303 If you can use the local spool, you probably should, as it will almost
304 certainly be much faster.
305
306 If this variable is not set, Gnus will take a look at the
307 @code{NNTPSERVER} environment variable.  If that isn't set either, it
308 will try to use the machine that is running Emacs as an NNTP server.
309
310 @vindex gnus-nntp-server
311 If @code{gnus-nntp-server} is set, this variable will override
312 @code{gnus-select-method}.  You should therefore set
313 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
314
315 @vindex gnus-secondary-servers
316 You can also make Gnus prompt you interactively for the name of an NNTP
317 server.  If you give a non-numerical prefix to @code{gnus} (ie. @kbd{C-u
318 M-x gnus}), Gnus will let you choose between the servers in the
319 @code{gnus-secondary-servers} list (if any).  You can also just type in
320 the name of any server you feel like visiting.
321
322 However, if you use one NNTP server regularly, and is just interested in
323 a couple of groups from a different server, you would be better served
324 by using the @code{gnus-group-browse-foreign-server} command from the
325 group buffer.  It will let you have a look at what groups are available,
326 and you can subscribe to any of the groups you want to.  This also makes
327 @file{.newsrc} maintenance much tidier.  @xref{Foreign Groups}.
328
329 @vindex gnus-secondary-select-methods
330 A slightly different approach to foreign groups is to set the
331 @code{gnus-secondary-select-methods} variable.  The select methods
332 listed in this variable are in many ways just as native as the
333 @code{gnus-select-method} server.  They will also be asked for active
334 files during startup (if that's required), and new newsgroups that
335 appear on these servers will be subscribed (or not) just as native
336 groups are.
337
338 For instance, if you use the @code{nnmbox} backend to read you mail, you
339 would typically set this variable to
340
341 @lisp
342 (setq gnus-secondary-select-methods 
343   '((nnmbox "")))
344 @end lisp
345
346 @node The First Time
347 @section The First Time
348 @cindex first time usage
349
350 If no startup files exist, Gnus will try to determine what groups should
351 be subscribed by default.
352
353 @vindex gnus-default-subscribed-newsgroups
354 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
355 will subscribe you to just those groups in that list, leaving the rest
356 killed.  Your system administrator should have set this variable to
357 something useful.
358
359 Since she hasn't, Gnus will just subscribe you to a few randomly picked
360 groups (ie. @samp{*.newusers}).  (@dfn{Random} is here defined as
361 "whatever Lars thinks you should read".)
362
363 You'll also be subscribed to the Gnus documentation group, which should
364 help you with most common problems.  
365
366 If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just use
367 the normal functions for handling new groups, and not do anything
368 special.
369
370 @node The Server is Down
371 @section The Server is Down
372 @cindex server errors
373
374 If the default server is down, Gnus will understandably have some
375 problems starting.  However, if you have some mail groups in addition to
376 the news groups, you may want to start Gnus anyway.
377
378 @findex gnus-no-server
379 You can do that by @kbd{M-x gnus-no-server}.  This will start Gnus
380 without attempting to contact the default server.  Gnus will be started
381 on level two, so you shouldn't have any groups from the native server on
382 level one or two, but only have mail groups and other foreign groups on
383 these two levels.
384
385 @node New Groups
386 @section New Groups
387 @cindex new groups
388
389 @vindex gnus-subscribe-newsgroup-method
390 What Gnus does when it encounters a new group is determined by the
391 @code{gnus-subscribe-newsgroup-method} variable.
392
393 This variable should contain a function.  Some handy pre-fab values
394 are:
395
396 @table @code
397 @item gnus-subscribe-randomly
398 @vindex gnus-subscribe-randomly
399 Subscribe all new groups randomly.
400 @item gnus-subscribe-alphabetically
401 @vindex gnus-subscribe-alphabetically
402 Subscribe all new groups alphabetically.
403 @item gnus-subscribe-hierarchically
404 @vindex gnus-subscribe-hierarchically
405 Subscribe all new groups hierarchially.
406 @item gnus-subscribe-interactively
407 @vindex gnus-subscribe-interactively
408 Subscribe new groups interactively.  This means that Gnus will ask
409 you about @strong{all} new groups.
410 @item gnus-subscribe-zombies
411 @vindex gnus-subscribe-zombies
412 Make all new groups zombies.  You can browse the zombies later and
413 either kill them all off properly, or subscribe to them.  This is the
414 default.
415 @end table
416
417 @vindex gnus-subscribe-hierarchical-interactive
418 A closely related variable is
419 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
420 mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
421 hierarchial fashion whether to subscribe to new groups or not.  Gnus
422 will ask you for each sub-hierarchy whether you want to descend the
423 hierarchy or not.
424
425 One common way to control which new newsgroups should be subscribed or
426 ignored is to put an @dfn{options} line at the start of the
427 @file{.newsrc} file.  Here's an example:
428
429 @example
430 options -n !alt.all !rec.all sci.all
431 @end example
432
433 @vindex gnus-subscribe-options-newsgroup-method
434 This line obviously belongs to a serious-minded intellectual scientific
435 person (or she may just be plain old boring), because it says that all
436 groups that have names beginning with @samp{alt} and @samp{rec} should
437 be ignored, and all groups with names beginning with @samp{sci} should
438 be subscribed.  Gnus will not use the normal subscription method for
439 subscribing these groups.
440 @code{gnus-subscribe-options-newsgroup-method} is used instead.  This
441 variable defaults to @code{gnus-subscribe-alphabetically}.
442
443 @vindex gnus-options-not-subscribe
444 @vindex gnus-options-subscribe
445 If you don't want to mess with your @file{.newsrc} file, you can just
446 set the two variables @code{gnus-options-subscribe} and
447 @code{gnus-options-not-subscribe}.  These two variables do exactly the
448 same as the @file{.newsrc} options -n trick.  Both are regexps, and if
449 the the new group matches the first, it will be unconditionally
450 subscribed, and if it matches the latter, it will be ignored.
451
452 @vindex gnus-check-new-newsgroups
453 If you are satisfied that you really never want to see any new groups,
454 you could set @code{gnus-check-new-newsgroups} to @code{nil}.  This will
455 also save you some time at startup.  Even if this variable is
456 @code{nil}, you can always subscribe to the new groups just by pressing
457 @kbd{U} in the group buffer (@pxref{Group Maintenance}).
458
459 Gnus normally determine whether a group is new or not by comparing the
460 list of groups from the active file(s) with the lists of subscribed and
461 dead groups.  This isn't a particularly fast method.  If
462 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
463 server for new groups since the last time.  This is both faster &
464 cheaper.  This also means that you can get rid of the list of killed
465 groups altogether, so you may set @code{gnus-save-killed-list} to
466 @code{nil}, which will save time both at startup, at exit, and all over.
467 Saves disk space, too.  Why isn't this the default, then?
468 Unfortunately, not all servers support this function.
469
470 This variable can also be a list of select methods.  If so, Gnus will
471 issue an @code{ask-server} command to each of the select methods, and
472 subscribe them (or not) using the normal methods.  This might be handy
473 if you are monitoring a few servers for new groups.  A side effect is
474 that startup will take much longer, so you can meditate while waiting.
475 Use the mantra "dingnusdingnusdingnus" to achieve permanent happiness.
476
477 @node Startup Files
478 @section Startup Files
479 @cindex startup files
480 @cindex .newsrc
481
482 Now, you all know about the @file{.newsrc} files.  All information about
483 what groups you read is traditionally stored in this file, which has a
484 rather rigid structure.
485
486 Things got a bit more complicated with @sc{GNUS}.  In addition to
487 keeping the @file{.newsrc} file updated, it also used a file called
488 @file{.newsrc.el} for storing all the information that didn't fit into
489 the @file{.newsrc} file.  (Actually, it duplicated everything in the
490 @file{.newsrc} file.)  @sc{GNUS} would read whichever one of these files
491 that were the most recently saved, which enabled people to swap between
492 @sc{GNUS} and other newsreaders.
493
494 That was kinda silly, so (ding) Gnus went one better: In addition to the
495 @file{.newsrc} and @file{.newsrc.el} files, (ding) Gnus also has a file
496 called @file{.newsrc.eld}.  It will read whichever of these files that
497 are most recent, but it will never write a @file{.newsrc.el} file.
498
499 @vindex gnus-save-newsrc-file
500 You can also turn off writing @file{.newsrc} by setting
501 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
502 the file and save some space, as well as some time when quitting Gnus.
503 However, that will make it impossible to use other newsreaders than
504 (ding) Gnus.  But hey, who would want to, right?
505
506 @vindex gnus-save-killed-list
507 If @code{gnus-save-killed-list} is @code{nil}, Gnus will not save the
508 list of killed groups to the startup file.  This will save both time
509 (when starting and quitting) and space (on disk).  It will also means
510 that Gnus has no record of what groups are new or old, so the automatic
511 new groups subscription methods become meaningless.  You should always
512 set @code{gnus-check-new-newsgroups} to @code{nil} if you set this
513 variable to @code{nil}.
514
515 @vindex gnus-startup-file
516 The @code{gnus-startup-file} variable says where the startup files are.
517 The default value is @file{"~/.newsrc"}, with the Gnus (El Dingo)
518 startup file being whatever that one is with a @samp{".eld"} appended.
519
520 @vindex gnus-save-newsrc-hook
521 @code{gnus-save-newsrc-hook} is called before saving the @file{.newsrc}
522 file.
523
524 @node Auto Save
525 @section Auto Save
526 @cindex dribble file
527 @cindex auto-save
528
529 Whenever you do something that changes the Gnus data (reading articles,
530 cathing up, killing/subscribing to groups,) the change is added to a
531 special @dfn{dribble} buffer.  This buffer is auto-saved the normal
532 Emacs way.  If your Emacs should crash before you have saved the
533 @file{.newsrc} files, all changes you have made can be recovered from
534 this file. 
535
536 If Gnus detects this file at startup, it will ask the user whether to
537 read it.
538
539 The auto save file is deleted whenever the real startup file is saved. 
540
541 @vindex gnus-use-dribble-file
542 If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
543 maintain a dribble buffer.
544
545 @node The Active File
546 @section The Active File
547 @cindex active file
548 @cindex ignored groups
549
550 When Gnus starts, or indeed whenever it tries to determine whether new
551 articles have arrived, it reads the active file.  This is a large file
552 that the NNTP server maintains to keep track of what groups it carries.
553
554 @vindex gnus-ignored-newsgroups
555 Before examining the active file to see what groups are available, Gnus
556 deletes all lines in this file that match the regexp
557 @code{gnus-ignored-newsgroups}.  This is done primarily to reject any
558 groups with bogus names (eg. groups containing characters like
559 @samp{'[]"} and so on), but you can use this variable to make Gnus
560 ignore hierarchies you aren't ever interested in.
561
562 @vindex gnus-read-active-file
563 The active file can be rather Huge, so if you have a slow network, you
564 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
565 reading the active file.
566
567 Gnus will try to make do by just getting information on the groups
568 that you actually subscribe to.
569
570 Note that if you subscribe to lots and lots of groups, setting this
571 variable to @code{nil} will probabaly make Gnus slower, not faster.  At
572 present, having this variable @code{nil} will slow Gnus down
573 considerably, unless you read news over a 2400 baud modem.  Gnus does
574 the group info fetching in total lock-step, so if you have this variable
575 @code{nil}, you should kill all groups that you aren't interested in to
576 speed things up.
577
578 There are plans for doing lots of Gnus stuff asynchronously, which
579 should make this option more useful, but that's probably some ways off
580 in the future.
581
582 @node Startup Variables
583 @section Startup Variables
584
585 @table @code
586 @item gnus-check-bogus-newsgroups
587 @vindex gnus-check-bogus-newsgroups
588 If non-@code{nil}, Gnus will check for and delete all bogus groups at
589 startup.  A @dfn{bogus group} is a group that you have in your
590 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
591 bogus groups isn't very quick, so to save time and resources, it's best
592 to leave this option off, and instead do the checking for bogus groups
593 once in a while from the group buffer (@pxref{Group Maintenance}).
594 @item gnus-inhibit-startup-message
595 @vindex gnus-inhibit-startup-message
596 If non-@code{nil}, the startup message won't be displayed.  That way,
597 your boss might not notice thay you are reading news instead of doing
598 your job.
599 @end table
600
601 @node The Group Buffer
602 @chapter The Group Buffer
603 @cindex group buffer
604
605 The @dfn{group buffer} lists all (or parts) of the available groups.  It
606 is the first buffer shown when Gnus starts, and will never be killed as
607 long as Gnus is active.
608
609 @menu
610 * Group Buffer Format::    Information listed and how you can change it.
611 * Group Manouvering::      Commands for moving in the group buffer.
612 * Selecting a Group::      Actually reading news.
613 * Group Subscribing::      Unsubscribing, killing, subscribing.
614 * Group Levels::           Levels? What are those, then?
615 * Foreign Groups::         How to create foreign groups.
616 * Listing Groups::         Gnus can list various subsets of the groups.
617 * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.
618 * Browse Foreign Server::  You can browse a server.  See what if has to offer.
619 * Exiting Gnus::           Stop reading news and get some work done.
620 * Misc Group Stuff::       Other stuff that you can to do.
621 @end menu
622
623 @node Group Buffer Format
624 @section Group Buffer Format
625 @cindex group buffer format
626
627 The default format of the group buffer is nice and dull, but you can
628 make it as exciting and ugly as you feel like.
629
630 Here's a couple of example group lines:
631
632 @example
633      25: news.announce.newusers
634  *    0: alt.fan.andrea-dworkin
635 @end example
636
637 Quite simple, huh?
638
639 Those lines mean that there are 25 unread articles in
640 @samp{news.announce.newusers} and no unread articles, but some ticked
641 articles in @samp{alt.fan.andrea-dworkin} (see that little asterisk at
642 the beginning of the line?)
643
644 @vindex gnus-group-line-format
645 You can fuck that up to your heart's delight by fiddling with the
646 @code{gnus-group-line-format} variable.  This variable works along the
647 lines of a @code{format} specification, which is pretty much the same as
648 a @code{printf} specifications, for those of you who use (feh!) C.
649
650 In addition to the normal "padding" specs that @code{format} supports
651 (eg. @samp{%7d}), specifications like @samp{%7,12s} are allowed.  A spec
652 of this type means that the field will be at least 7 characters long,
653 and never more that 12 characters long.
654
655 The default value that produced those lines above is 
656 @samp{"%M%S%5y: %(%g%)\n"}.
657
658 There should always be a colon on the line; the cursor always move to
659 the colon after performing an operation.  Nothing else is required - not
660 even the group name.  All displayed text is just window dressing, and is
661 never examined by Gnus.  Gnus stores all real information it needs using
662 text properties.
663
664 (Note that if you make a really strange, wonderful, spreadsheat-like
665 layout, everybody will believe you are hard at work with the accounting
666 instead of wasting time reading news.)
667
668 Here's a list of all available format characters:
669
670 @table @samp
671 @item M    
672 Only marked articles
673 @item S
674 Whether the group is subscribed 
675 @item L    
676 Level of subscribedness 
677 @item N
678 Number of unread articles
679 @item I
680 Number of dormant articles
681 @item T
682 Number of ticked articles
683 @item R
684 Number of read articles
685 @item t
686 Total number of articles
687 @item y
688 Number of unread, unticked, non-dormant articles
689 @item i
690 Number of ticked and dormant articles
691 @item g
692 Full group name
693 @item G
694 Group name 
695 @item D
696 Newsgroup description
697 @item o
698 Moderated
699 @item O
700 Moderated
701 @item s
702 Select method 
703 @item n
704 Select from where
705 @item z
706 A string that look like @samp{<%s:%n>} if a foreign select method is
707 used. 
708 @item u
709 User defined specifier.  The next character in the format string should
710 be a letter.  @sc{GNUS} will call the function gnus-user-format-function-X,
711 where X is the letter following %u.  The function will be passed the
712 current headers as argument.  The function should return a string, which
713 will be inserted into the buffer just like information from any other
714 specifier.
715 @end table
716
717 @vindex gnus-group-mode-line-format
718 The mode line can be changed by setting
719 (@code{gnus-group-mode-line-format}).  It doesn't understand that many
720 format specifiers:
721
722 @table @samp
723 @item S
724 Default news server
725 @item M
726 Default select method
727 @end table
728
729 @node Group Manouvering
730 @section Group Manouvering
731 @cindex group movement
732
733 All movement commands understand the numeric prefix and will behave as
734 expected, hopefully. 
735
736 @table @kbd
737 @item n
738 @kindex n (Group)
739 @findex gnus-group-next-unread-group
740 Go to the next group with unread articles
741 (@code{gnus-group-next-unread-group}). 
742 @item p
743 @item DEL
744 @kindex DEL (Group)
745 @kindex p (Group)
746 @findex gnus-group-prev-unread-group
747 Go to the previous group group with unread articles
748 (@code{gnus-group-prev-unread-group}). 
749 @item N
750 @kindex N (Group)
751 @findex gnus-group-next-group
752 Go to the next group (@code{gnus-group-next-group}).
753 @item P
754 @kindex P (Group)
755 @findex gnus-group-prev-group
756 Go to the previous group (@code{gnus-group-prev-group}).
757 @item M-p
758 @kindex M-p (Group)
759 @findex gnus-group-next-unread-group-same-level
760 Go to the next unread group on the same level (or lower)
761 (@code{gnus-group-next-unread-group-same-level}). 
762 @item M-n
763 @kindex M-n (Group)
764 @findex gnus-group-prev-unread-group-same-level
765 Go to the previous unread group on the same level (or lower)
766 (@code{gnus-group-prev-unread-group-same-level}). 
767 @end table
768
769 Two commands for jumping to groups:
770
771 @table @kbd
772 @item j
773 @kindex j (Group)
774 @findex gnus-group-jump-to-group
775 Jump to a group (and make it visible if it isn't already)
776 (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
777 like living groups.
778 @item ,
779 @kindex , (Group)
780 @findex gnus-group-best-unread-group
781 Jump to the unread group with the lowest level
782 (@code{gnus-group-best-unread-group}). 
783 @end table
784
785 @node Selecting a Group
786 @section Selecting a Group
787 @cindex group selection
788
789 @table @kbd
790 @item SPACE
791 @kindex SPACE (Group)
792 @findex gnus-group-read-group
793 Select the current group, switch to the summary buffer and display
794 the first unread article in the group
795 (@code{gnus-group-read-group}).  If there are no unread articles in the
796 group, or if you give a prefix to this command, Gnus will offer to
797 fetch all the old articles in this group from the server.
798 server. 
799 @item RET
800 @kindex RET (Group)
801 @findex gnus-group-select-group
802 Select the current group and switch to the summary buffer
803 (@code{gnus-group-select-group}).  If you give a prefix to this command,
804 Gnus will fetch all available articles in this group.
805 @item c
806 @kindex c (Group)
807 @findex gnus-group-catchup-current
808 Mark all unticked articles in this group as read
809 (@code{gnus-group-catchup-current}). 
810 @item C
811 @kindex C (Group)
812 @findex gnus-group-catchup-current-all
813 Mark all articles in this group, even the ticked ones, as read
814 (@code{gnus-group-catchup-current-all}). 
815 @end table
816
817 @vindex gnus-large-newsgroup
818 The @code{gnus-large-newsgroup} variable says what Gnus should consider
819 to be a big group.  If the group has more unread articles than this
820 variable, Gnus will query the user before entering the group.  The user
821 can then specify how many articles should be fetched from the server.
822 If the user specifies a negative number (@samp{-n}), the @samp{n} oldest
823 articles will be fetched.  If it is positive, the @samp{n} articles that
824 have arrived most recently will be fetched.
825
826 @vindex gnus-select-group-hook
827 @vindex gnus-auto-select-newsgroup
828 If @code{gnus-auto-select-newsgroup} is non-@code{nil}, the first unread
829 article in the group will be displayed when you enter the group.  If you
830 want to prevent automatic selection in some group (say, in a binary
831 group with Huge articles) you can set this variable to @code{nil} in
832 @code{gnus-select-group-hook}, which is called when a group is selected.
833
834 @findex gnus-thread-sort-by-total-score
835 @findex gnus-thread-sort-by-date
836 @findex gnus-thread-sort-by-score
837 @findex gnus-thread-sort-by-subject
838 @findex gnus-thread-sort-by-author
839 @findex gnus-thread-sort-by-number
840 @vindex gnus-thread-sort-functions
841 If you are using threaded summary display, you can sort the threads by
842 setting @code{gnus-thread-sort-functions}, which is a list of functions.
843 By default, sorting is done on article numbers.  Ready-made sorting
844 functions include @code{gnus-thread-sort-by-number},
845 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
846 @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
847 @code{gnus-thread-sort-by-total-score}. 
848
849 Each function takes two threads and return non-@code{nil} if the first
850 thread should be sorted before the other.  If you use more than one
851 function, the primary sort key should be the last function in the list.
852
853 If you would like to sort by score, then by subject, and finally by
854 date, you could do something like:
855
856 @lisp
857 (setq gnus-thread-sort-functions 
858       '(gnus-thread-sort-by-date
859         gnus-thread-sort-by-subject
860         gnus-thread-sort-by-score))
861 @end lisp
862
863 @vindex gnus-thread-score-function
864 The function in the @code{gnus-thread-score-function} variable (default
865 @code{+}) is used for calculating the total score of a thread.  Useful
866 functions might be @code{max}, @code{min}, or squared means, or whatever
867 tickles you fancy.
868
869 @node Group Subscribing
870 @section Group Subscribing
871 @cindex subscribing
872
873 @table @kbd
874 @item u
875 @kindex u (Group)
876 @findex gnus-group-unsubscribe-current-group
877 Unsubscribe the current group, or, if it was unsubscribed already,
878 subscribe it (@code{gnus-group-unsubscribe-current-group}). 
879 @item U
880 @kindex U (Group)
881 @findex gnus-group-unsubscribe-group
882 Ask the user for a group to unsubscribe, and then unsubscribe it.  If
883 it was unsubscribed already, subscribe it instead
884 (@code{gnus-group-unsubscribe-group}). 
885 @item C-k
886 @kindex C-k (Group)
887 @findex gnus-group-kill-group
888 Kill the current group (@code{gnus-group-kill-group}).
889 @item C-y
890 @kindex C-y (Group)
891 @findex gnus-group-yank-group
892 Yank the last killed group (@code{gnus-group-yank-group}).
893 @item C-w
894 @kindex C-w (Group)
895 @findex gnus-group-kill-region
896 Kill all groups in the region (@code{gnus-group-kill-region}). 
897 @item M-z
898 @kindex M-z (Group)
899 @findex gnus-group-kill-all-zombies
900 Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
901 @end table
902
903 @node Group Levels
904 @section Group Levels
905 @cindex group level
906
907 All groups have a level of @dfn{subscribedness}.  For instance, if a
908 group is on level 2, it is more subscribed than a group on level 5.  You
909 can ask Gnus to just list groups on a given level and lower
910 (@pxref{Listing Groups}), or to just check for new articles in groups on
911 a given level and lower (@pxref{Misc Group Stuff}).
912
913 @table @kbd
914 @item S
915 @kindex S (Group)
916 @findex gnus-group-set-current-level
917 Set the level of the current group depending on the numeric
918 prefix.  For instance, @kbd{3 s} will set the level of the current
919 group to three (@code{gnus-group-set-current-level}).  If no numeric
920 prefix is given, this command will prompt the user for a level.
921 @end table
922
923 Gnus considers groups on levels 1-5 to be subscribed, 6-7 to be
924 unsubscribed, 8 to be zombies (walking dead) and 9 to be killed,
925 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
926 the same, but zombie and killed groups have no information on what
927 articles you have read, etc, stored.  This distinction between dead and
928 living groups isn't done because it is nice or clever, it is done purely
929 for reasons of efficiency. 
930
931 It is recommended that you keep all regular groups on level 3 or higher,
932 and keep your mail groups (if any) on level 1 or 2.
933
934 @vindex gnus-keep-same-level
935 If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
936 will only move to groups that are of the same level (or lower).  In
937 particular, going from the last article in one group to the next group
938 will go to the next group of the same level (or lower).  This might be
939 handy if you want to read the most important groups before you read the
940 rest.
941
942 @node Foreign Groups
943 @section Foreign Groups
944 @cindex foreign groups
945
946 A @dfn{foreign group} is a group that is not read by the usual (or
947 default) means.  It could be, for instance, a group from a different
948 NNTP server, it could be a virtual group, or it could be your own
949 personal mail group.
950
951 A foreign group (or any group, really) is specified by a @dfn{name} and
952 a @dfn{select method}.  To take the latter first, a select method is a
953 list where the first element says what backend to use (eg. nntp,
954 nnspool, nnml) and the second element is the "address", in some meaning of
955 the word.  There may be additional elements in the select method, where
956 the value may have special meaning for the backends.
957
958 The @dfn{name} of the group is the name the backend will recognize the
959 group as.
960
961 For instance, the group @samp{soc.motss} on the NNTP server
962 @samp{some.where.edu} will have the name @samp{soc.motss} and select
963 method @samp{(nntp "some.where.edu")}.  Gnus will call this group, in
964 all circumstances @samp{nntp+some.where.edu:soc.motss}, even though the
965 nntp backend just knows this group as @samp{soc.motss}.
966
967 Here are some commands for making and editing general foreign groups,
968 and some commands to ease the creation of some special-purpose groups:
969
970 @table @kbd
971 @item M m
972 @kindex M m (Group)
973 @findex gnus-group-make-group
974 Make a new group.  Gnus will prompt you for a name, a method and an
975 "address" (@code{gnus-group-make-group}).
976 @item M e
977 @kindex M e (Group)
978 @findex gnus-group-edit-group
979 Edit a group entry.  Gnus will pop up a new buffer where you can edit
980 the entry (@code{gnus-group-edit-group}).
981 @item M d
982 @kindex M d (Group)
983 @findex gnus-group-make-directory-group
984 Make a directory group.  You will be prompted for a directory name
985 (@code{gnus-group-make-directory-group}).  
986 @item M h 
987 @kindex M h (Group)
988 @findex gnus-group-make-help-group
989 Make the (ding) Gnus help group (@code{gnus-group-make-help-group}).
990 @item M k
991 @kindex M k (Group)
992 @findex gnus-group-make-kiboze-group
993 Make a kiboze group.  You will be prompted for a name, for a regexp to
994 match groups to be "included" in the kiboze group, and a series of
995 strings to match on headers (@code{gnus-group-make-kiboze-group}).
996 @end table
997
998 The different methods all have their peculiarities, of course.
999
1000 @menu
1001 * nntp::           Reading news from a different NNTP server.
1002 * nnspool::        Reading news from the local spool.
1003 * nnvirtual::      Combining articles from many groups.
1004 * nnkiboze::       Looking through parts of the newsfeed for articles.
1005 * nndir::          You can read a directory as if it was a newsgroup.
1006 * nndoc::          Single files can be the basis of a group.
1007 * nndigest::       Digests can be undigested and treated as a group.
1008 * Mail::           Reading your personal mail with Gnus.
1009 @end menu
1010
1011 @vindex gnus-activate-foreign-newsgroups
1012 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1013 Gnus will check all foreign groups with this level or lower at startup.
1014 This might take quite a while, especially if you subscribe to lots of
1015 groups from different NNTP servers.  It is @code{nil} by default, which
1016 means that you won't be told whether there are new articles in these
1017 groups.  How many unread articles there are will be determined when, or
1018 if, you decide to enter them.  You can also activate any group with
1019 @kbd{M-g} to see how many unread articles there are.
1020
1021 @cindex to-address
1022 If the select method contains an element that looks like
1023 @samp{(to-address .  "some@@where.com")}, that address will be used by
1024 the backend when doing followups and posts.  This is primarily useful in
1025 mail groups that represent mailing lists.  You'd then just set this
1026 address to whatever the list address is.
1027
1028 This trick will actually work whether the group is foreign or not.
1029 Let's say there's a group on the server that is called @samp{fa.4ad-l}.
1030 This is a real group, but the server has gotten the articles from a
1031 mail-to-news gateway.  Posting directly to this group is therefore
1032 impossible - you have to send mail to the mailing list address instead. 
1033
1034 To achieve this, go to the group in question in the group buffer and
1035 type @kbd{M e} to edit the group entry.  You'll then be put in a buffer
1036 where you can edit the group entry.
1037
1038 @lisp
1039 (gnus-group-set-info
1040  '("ifi.fritt-forum" 3
1041    ((1 . 3321)
1042     (3325 . 3325))
1043    ((score
1044      (3322 . 1000)
1045      (3324 . 1000)))))
1046 @end lisp
1047
1048 A fifth entry has to be added. (In case there isn't a fourth one, you
1049 have to add a fourth one yourself - @code{nil}.)  The fifth entry should
1050 look like this:
1051
1052 @lisp
1053 (nntp "your.host" (to-address . "4ad-l@@jhuvm.hcf.jhu.edu"))
1054 @end lisp
1055
1056 The two first entries in this method should, of course, be the same as
1057 @code{gnus-select-method}. 
1058
1059 Quite simple, eh? <duck> *Ouch*.
1060
1061 Let's take time out for a poem by Reznikoff:
1062
1063 @quotation
1064 Te Deum
1065 @sp 2
1066 Not because of victories @*
1067 I sing,@*
1068 having none,@*
1069 but for the common sunshine,@*
1070 the breeze,@*
1071 the largess of the spring.
1072 @sp 2
1073 Not for victory@*
1074 but for the day's work done@*
1075 as well as I was able;@*
1076 not for a seat upon the dais@*
1077 but at the common table.@*
1078 @end quotation
1079
1080 @node nntp
1081 @subsection nntp
1082 @cindex nntp
1083
1084 Subscribing to a foreign group from an NNTP server is rather easy.  You
1085 just specify @code{nntp} as method and the address of the NNTP server as
1086 the, uhm, address.
1087
1088 If the NNTP server is located at a non-standard port number, setting the
1089 third element of the select method to this port number should allow you
1090 to connect to the right port.  You'll have to edit the group info for
1091 that (@pxref{Foreign Groups}).
1092
1093 The name of the foreign group can be the same as a native group.  In
1094 fact, you can subscribe to the same group from as many different servers
1095 you feel like.  There will be no name collisions.
1096
1097 @vindex nntp-server-opened-hook
1098 @code{nntp-server-opened-hook} is run after a connection has been made.
1099 It can be used to send initial commands to the NNTP server, like
1100 @samp{(nntp-send-command "MODE" "READER")} (which is what this hook does
1101 by default) or to send the @code{AUTHINFO} command, if the server
1102 requires that.
1103
1104 @vindex nntp-maximum-request
1105 If the NNTP server doesn't support NOV headers, this backend will
1106 collect headers by sending a series of @code{HEAD} commands.  To speed
1107 things up, the backend sends lots of these commands, without waiting for
1108 reply, and then reads all the replies.  This is controlled by the
1109 @code{nntp-maximum-request} variable, and is 400 by default.  If your
1110 network is buggy, you should set this to 1.
1111
1112 @vindex nntp-connection-timeout
1113 If you have lots of foreign nntp groups that you connect to regularly,
1114 you're sure to have problems with nntp servers not responding properly,
1115 or being too loaded to reply within reasonable time.  This is can lead
1116 to awkward problems, which can be helped somewhat by setting
1117 @code{nntp-connection-timeout}.  This is an integer that says how many
1118 seconds the nntp backend should wait for a connection before giving up.
1119 If it is @code{nil}, which is the default, no timeouts are done.
1120
1121 @node nnspool
1122 @subsection nnspool
1123 @cindex nnspool
1124 @cindex news spool
1125
1126 Subscribing to a foreign group from the local spool is extremely easy,
1127 and might be useful, for instance, to speed up reading groups like
1128 @samp{alt.binaries.pictures.furniture}.
1129
1130 Anyways, you just specify @code{nnspool} as the method and @samp{""} (or
1131 anything else) as the address.
1132
1133 If you have access to a local spool, you should probably use that as the
1134 native select method (@pxref{Finding the News}).
1135
1136 @table @code
1137 @item nnspool-inews-program
1138 Program used to post an article.
1139 @item nnspool-spool-directory
1140 Where nnspool looks for the articles.  This is normally
1141 @file{/usr/spool/news/}.
1142 @item nnspool-nov-directory 
1143 Where nnspool will look for NOV files.  This is normally 
1144 @file{/usr/spool/news/over.view/}.
1145 @item nnspool-lib-dir
1146 Where the news lib dir is (@file{/usr/lib/news/} by default).
1147 @end table
1148
1149 @node nnvirtual
1150 @subsection nnvirtual
1151 @cindex nnvirtual
1152 @cindex virtual groups
1153
1154 A @dfn{virtual group} is really nothing more than a collection of
1155 other groups. 
1156
1157 You specify @code{nnvirtual} as the method and a regular expression that
1158 says which groups that you wish to have in this one as the address. 
1159
1160 For instance, if you are tired of reading many small group, you can
1161 put them all in one big group, and then grow tired of reading one
1162 big, unwieldy group.  The joys of computing!
1163
1164 All marks, read status, etc., in the nnvirtual group will stick to the
1165 articles in the component groups.  So if you tick an article in an
1166 nnvirtual group, the article will also be ticked in the component group
1167 from whence it it.  (And vice versa - marks from the component groups
1168 will also be shown in the nnvirtual group.)
1169
1170 @example
1171 "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*"
1172 @end example
1173
1174 These groups can be native or foreign; everything should work smoothly,
1175 but if your computer explodes, it was probably my fault.  
1176
1177 Collecting the same group from several servers might actually be a good
1178 idea if users have set the Distribution headers to limit distribution. 
1179 If you would like to read @samp{soc.motss} both from a server in Japan
1180 and a server in Norway, you could use the following as the group regexp:
1181
1182 @example
1183 "^nntp+some.server.jp:soc.motss\\|^nntp+some.server.no:soc.motss"
1184 @end example
1185
1186 This should work kinda smoothly - all articles from both groups should
1187 end up in this one, and there should be no duplicates.  Threading (and
1188 the rest) will still work as usual, but there might be problems with the
1189 sequence of articles.  Sorting on date might be an option here.
1190
1191 One limitation, however - all groups that are included in a virtual
1192 group has to be alive (ie. subscribed or unsubscribed).  Killed or
1193 zombie groups can't be component groups for nnvirtual groups.
1194
1195 @node nnkiboze
1196 @subsection nnkiboze
1197 @cindex nnkiboze
1198 @cindex kibozing
1199
1200 @dfn{kibozing} is defined by OED as "grepping through (parts of) the
1201 news feed".  nnkiboze is a backend that will do this for you.  Oh joy!
1202 Now you can grind any NNTP server down to a halt with useless requests!
1203 Oh happiness!
1204
1205 The address field of the nnkiboze method is, as with nnvirtual, a regexp
1206 to match groups to be "included" in the nnkiboze group.  There most
1207 similarities between nnkiboze and nnvirtual ends.
1208
1209 In addition to this regexp detailing component groups, an nnkiboze group
1210 must have a score file to say what articles that are to be included in
1211 the group.
1212
1213 @kindex M-x nnkiboze-generate-groups
1214 @findex nnkiboze-generate-groups
1215 After creating the nnkiboze groups you feel like having, you must run
1216 @kbd{M-x nnkiboze-generate-groups}.  (This can also be reached from one
1217 of the menus.) This will take time.  Lots of time.  Oodles ond oodles of
1218 time.  Gnus has to fetch the headers from all the articles on all the
1219 components groups and run them through the scoring process to determine
1220 if there are any articles in the groups that are to be part of the
1221 nnkiboze groups.
1222
1223 Please limit the number of component groups by using restrictive
1224 regexps.  Or your sysadm may become annoyed with you, and the NNTP site
1225 may throw you off and never let you back in again.  Stranger things have
1226 happened.
1227
1228 nnkiboze component groups do not have to be alive - they can be dead,
1229 and they can be foreign.  No restrictions.
1230
1231 @vindex nnkiboze-directory
1232 The generation of an nnkiboze group means writing two files in
1233 @code{nnkiboze-directory}, which is @file{~/News/} by default.  One
1234 contains the NOV header lines for all the articles in the group, and the
1235 other is an additional @file{.newsrc} to store information on what
1236 groups that have been searched through to find component articles.
1237
1238 Articles that are marked as read in the nnkiboze group will have their
1239 NOV lines removed from the NOV file.
1240
1241 @node nndir
1242 @subsection nndir
1243 @cindex nndir
1244 @cindex directory groups
1245
1246 If you have a directory that has lots of articles in separate files in
1247 it, you might treat it as a newsgroup.  The files have to have numerical
1248 names, of course.
1249
1250 This might be an opportune moment to mention ange-ftp, that most
1251 wonderful of all wonderful Emacs packages.  When I wrote nndir, I didn't
1252 think much about it - a backend to read directories.  Big deal.
1253
1254 ange-ftp changes that picture dramatically.  For instance, if you enter
1255 @file{/ftp/amanda} as the the directory name, ange-ftp will actually
1256 allow you to read this directory over at amanda as a newsgroup.
1257 Distributed news ahoy!
1258
1259 nndir supports, and will use, NOV files if they are present.
1260
1261 @node nndoc
1262 @subsection nndoc
1263 @cindex nndoc
1264 @cindex documentation group
1265 @cindex help group
1266
1267 nndoc is a cute little thing that will let you read a single file as a
1268 newsgroup.  The file has to be divided into articles by the use of Unix
1269 mbox "From " lines.  nndoc will not try to change the file or insert any
1270 extra headers into it - it will simply, like, let you use the file as
1271 the basis for a group.  And that's it.
1272
1273 @node nndigest
1274 @subsection nndigest
1275 @cindex nndigest
1276 @cindex digest groups
1277
1278 nndigest is a bit odd.  It will use a buffer containing a valid digest
1279 as the basis of the group.
1280
1281 These nndigest groups are rather ephemeral.  They will never store
1282 information on what articles you have read, and you can't really use
1283 them as foreign groups at all.  The only way to reach an nndigest group
1284 is to type @kbd{V D} on a digest in the summary buffer.
1285
1286 When you have finished reading the digest and press @kbd{q}, you will be
1287 returned to the group from whence you came instead of going to the group
1288 buffer.
1289
1290 Odd all over, as you can see, but somewhat useful.
1291
1292 @node Mail
1293 @subsection Mail
1294 @cindex reading mail
1295 @cindex mail
1296
1297 Reading mail with a newsreader - isn't that just plain WeIrD? But of
1298 course.
1299
1300 @menu
1301 * Creating Mail Groups::         How to create mail groups.
1302 * Mail & Procmail::              Reading mail groups that procmail create.
1303 * Expiring Old Mail Articles::   Getting rid of unwanted mail.
1304 @end menu
1305
1306 Gnus will read the mail spool when you activate a mail group.  The mail
1307 file is first copied to your home directory.  What happens after that
1308 depends on what format you want to store your mail in.
1309
1310 @menu
1311 * nnmbox::    Using the (quite) standard Un*x mbox.
1312 * nnbabyl::   Many Emacs programs use the rmail babyl format.
1313 * nnml::      Store your mail in a private spool?
1314 * nnmh::      An mhspool-like backend useful for procmail people.
1315 * nnfolder::  Having one file for each group.
1316 @end menu
1317
1318 @vindex nnmail-read-incoming-hook
1319 The mail backends all call @code{nnmail-read-incoming-hook} after
1320 reading new mail.  You can use this hook to notify any mail watch
1321 programs, if you want to.
1322
1323 @vindex nnmail-spool-file
1324 @code{nnmail-spool-file} says where to look for new mail.  If this
1325 variable is @code{nil}, the mail backends will never attempt to fetch
1326 mail by themselves.
1327
1328 Gnus gives you all the opportunity you want for shooting yourself in
1329 your foot.  Let's say you create a group that will contain all the mail
1330 you get from your boss.  And then you accidentally unsubscribe from the
1331 group.  Gnus will still put all the mail from your boss in the
1332 unsubscribed group, and so, when your boss mails you "Have that report
1333 ready by Monday or you're fired!", you'll never see it and, come
1334 Tuesday, you'll still believe that you're gainfully unemplyed while you
1335 really should be out collecting empty bottles to save up for next
1336 month's rent money.
1337
1338 @node Creating Mail Groups
1339 @subsubsection Creating Mail Groups
1340 @cindex creating mail groups
1341
1342 You can make Gnus read your personal, private, secret mail.
1343
1344 You should first set @code{gnus-secondary-select-methods} to, for
1345 instance, @code{((nnmbox ""))}.  When you start up Gnus, Gnus will ask
1346 this backend for what groups it carries (@samp{mail.misc} by default)
1347 and subscribe it the normal way.  (Which means you may have to look for
1348 it among the zombie groups, I guess, all depending on your
1349 @code{gnus-subscribe-newsgroup-method} variable.)
1350
1351 @vindex nnmail-split-methods
1352 The you should set the variable @code{nnmail-split-methods} to specify
1353 how the incoming mail is to be split into groups.
1354
1355 @lisp
1356 (setq nnmail-split-methods
1357   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
1358     ("mail.crazzy" "^Subject:.*die\\|^Organization:.*flabby")
1359     ("mail.other" "")))
1360 @end lisp
1361
1362 This variable is a list of lists, where the first element of each of
1363 these lists contain the name of the mail group (they do not have to be
1364 called something beginning with @samp{"mail"}, by the way), and the
1365 second element is a regular expression used on the header of each mail
1366 to determine if it belongs in this mail group.
1367
1368 The second element can also be a function.  In that case, it will be
1369 called narrowed to the headers with the first element of the rule as the
1370 argument.  It should return a non-@code{nil} value if it thinks that the
1371 mail belongs in that group.
1372
1373 The last of these groups should always be a general one, and the regular
1374 expression should *always* be @samp{""} so that it matches any mails
1375 that haven't been matched by any of the other regexps.
1376
1377 @vindex nnmail-crosspost
1378 The mail backends all support cross-posting.  If several regexps match,
1379 the mail will be "cross-posted" to all those groups.
1380 @code{nnmail-crosspost} says whether to use this mechanism or not.
1381
1382 @node Mail & Procmail
1383 @subsubsection Mail & Procmail
1384 @cindex procmail
1385
1386 Many people use @code{procmail} to split incoming mail into groups.  If
1387 you do that, you should set @code{nnmail-spool-file} to @code{nil} to
1388 make sure that the mail backends never ever try to fetch mail by
1389 themselves.
1390
1391 This also means that you probably don't want to set
1392 @code{nnmail-split-methods} either, which has some, perhaps, unexpected
1393 side effects.
1394
1395 When a mail backend is queried for what groups it carries, it replies
1396 with the contents of that variable, along with any groups it has figured
1397 out that it carries by other means.  None of the backends (except
1398 @code{nnmh}) actually go out to the disk and check what groups that
1399 actually exists.  (It's not trivial to distinguish between what the user
1400 thinks is a basis for a newsgroup and what is just a plain old file or
1401 directory.)
1402
1403 This means that you have to tell Gnus (and the backends) what groups
1404 exist by hand.
1405
1406 Let's take the @code{nnfolder} backend as an example.  (This backend
1407 features one file as the basis of each group.)  
1408
1409 The folders are located in @code{nnfolder-directory}, say,
1410 @file{~/Mail/}.  There are three folders, @file{foo}, @file{bar} and
1411 @file{mail.baz}.
1412
1413 Go to the group buffer and type @kbd{M m}.  When prompted, answer
1414 @samp{foo} for the name, @samp{nnfolder} for the method and @samp{""}
1415 for the address.  Repeat twice for the two other groups, @samp{bar} and
1416 @code{mail.baz}.  Be sure to include all your mail groups.
1417
1418 That's it.  You are now set to read your mail.
1419
1420 @node Expiring Old Mail Articles
1421 @subsubsection Expiring Old Mail Articles
1422 @cindex article expiry
1423
1424 Traditional mail readers have a tendency to remove mail articles when
1425 you mark them as read, in some way.  Gnus takes a fundamentally
1426 different approach to mail reading.
1427
1428 Gnus basically considers mail just to be news that has been received in
1429 a rather peculiar manner.  It does not think that it has the power to
1430 actually change the mail, or delete any mail messages.  If you enter a
1431 mail group, and mark articles as "read", or kill them in some other
1432 fashion, the mail articles will still exist on the system.  I repeat:
1433 Gnus will not delete your old, read mail.  Unless you ask it to, of
1434 course.
1435
1436 To make Gnus get rid of your unwanted mail, you have to mark the
1437 articles as @dfn{expirable}.  This does not mean that the articles will
1438 disappear right away, however.  In general, a mail article will be
1439 deleted from your system if, 1) it is marked as expirable, AND 2) it is
1440 more than one week old.  If you do not mark an article as expirable, it
1441 will remain on your system until hell freezes over.  This bears
1442 repeating one more time, with some spurious capitalization: IF you do
1443 NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
1444
1445 @vindex gnus-auto-expirable-newsgroups
1446 You do not have to mark articles as expirable by hand.  Groups that
1447 match the regular expression @code{gnus-auto-expirable-newsgroups} will
1448 have all articles that you read marked as expirable automatically.  All
1449 articles that are marked as expirable have an @samp{X} in the third
1450 column in the summary buffer.
1451
1452 Let's say you subscribe to a couple of mailing lists, and you want the
1453 articles you have read to disappear after a while:
1454
1455 @lisp
1456 (setq gnus-auto-expirable-newsgroups 
1457       "^mail.nonsense-list\\|^mail.nice-list")
1458 @end lisp
1459
1460 @vindex nnmail-expiry-wait
1461 The @code{nnmail-expiry-wait} variable supplies the default time an
1462 expirable article has to live.  The default is seven days.
1463
1464 Gnus also supplies a function that lets you fine-tune how long articles
1465 are to live, based on what group they are in.  Let's say you want to
1466 have one month expiry period in the @samp{mail.private} group, a one day
1467 expiry period in the @samp{mail.junk} group, and a six day expiry period
1468 everywhere else:
1469
1470 @lisp
1471 (setq nnmail-expiry-wait-function
1472       '(lambda (group)
1473         (cond ((string= group "mail.private")
1474                 31)
1475               ((string= group "mail.junk")
1476                 1)
1477               (t
1478                 6))))
1479 @end lisp
1480
1481 @vindex nnmail-keep-last-article
1482 If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
1483 expire the final article in a mail newsgroup.  This is to make life
1484 easier for procmail users.
1485
1486 @node nnmbox
1487 @subsubsection nnmbox
1488 @cindex nnmbox
1489 @cindex unix mail box
1490
1491 @vindex nnmbox-active-file
1492 @vindex nnmbox-mbox-file
1493 The @dfn{nnmbox} backend will use the standard Un*x mbox file to store
1494 mail.  The path of the mbox file is given by the @code{nnmbox-mbox-file}
1495 variable.  In addition, Gnus needs to store information about active
1496 articles.  The file specified by @code{nnmbox-active-file} will be used
1497 for that.
1498
1499 nnmbox will add extra headers to each mail article to say which
1500 group it belongs in.
1501
1502 @node nnbabyl
1503 @subsubsection nnbabyl
1504 @cindex nnbabyl
1505 @cindex rmail mbox
1506
1507 @vindex nnbabyl-active-file
1508 @vindex nnbabyl-mbox-file
1509 The @dfn{nnbabyl} backend will use a babyl mail box to store mail.  The
1510 path of the rmail mail box file is given by the @code{nnbabyl-mbox-file}
1511 variable.  In addition, Gnus needs to store information about active
1512 articles.  The file specified by @code{nnbabyl-active-file} will be used
1513 for that.
1514
1515 nnbabyl will add extra headers to each mail article to say which
1516 group it belongs in.
1517
1518 @node nnml
1519 @subsubsection nnml
1520 @cindex nnml
1521 @cindex mail nov spool
1522
1523 The spool mail format (@code{nnml}) isn't compatible with any other
1524 known format.  It should be used with some caution.
1525
1526 @vindex nnml-directory
1527 If you use this backend, Gnus will split all incoming mail into files;
1528 one file for each mail, and put the articles into the correct
1529 directories under the directory specified by the @code{nnml-directory}
1530 variable.  The default value is @samp{"~/Mail/"}.
1531
1532 You do not have to create any directories beforehand; Gnus will take
1533 care of all that.
1534
1535 If you have a strict limit as to how many files you are allowed to store
1536 in your account, you should not use this backend.  As each mail gets its
1537 own file, you might very well occupy thousands of inodes within a few
1538 weeks.  If this is no problem for you, and it isn't a problem for you
1539 having your friendly systems administrator walking around, madly,
1540 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
1541 know that this is probably the fastest format to use.  You do not have
1542 to trudge through a big mbox file just to read your new mail.
1543
1544 @code{nnml} is probably the slowest backend when it comes to article
1545 splitting.  It has to create lots of files, and it also generates NOV
1546 databases for the incoming mails.  This makes is the fastest backend
1547 when it comes to reading mail.
1548
1549 @findex nnml-generate-nov-databases
1550 If your @code{nnml} groups and nov files get totally out of whack, you
1551 can do a complete update by typing @kbd{M-x
1552 nnml-generate-nov-databases}.  This command will trawl through the
1553 entire @code{nnml} hierarchy, looking at each and every article, so it
1554 might take a while to finish.
1555
1556 @node nnmh
1557 @subsubsection nnmh
1558 @cindex nnmh
1559 @cindex mh-e mail spool
1560
1561 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
1562 NOV databases and it doesn't keep an active file.  This makes
1563 @code{nnmh} a *much* slower backend than @code{nnml}, but it also makes
1564 it easier to write procmail scripts for.
1565
1566 @node nnfolder
1567 @subsubsection nnfolder
1568 @cindex nnfolder
1569 @cindex mbox folders
1570
1571 @code{nnfolder} is a backend for storing each mail group in a separate
1572 file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
1573 will add extra headers to keep track of article numbers and arrival
1574 dates.
1575
1576 @vindex nnfolder-active-file
1577 @vindex nnfolder-directory
1578 @code{nnfolder-directory} says where to store these files, and
1579 @code{nnfolder-active-file} says where to store the @dfn{active}
1580 information.
1581
1582 @node Listing Groups
1583 @section Listing Groups
1584 @cindex group listing
1585
1586 These commands all list various slices of the groups that are available.
1587
1588 @table @kbd
1589 @item l
1590 @item G s
1591 @kindex G s (Group)
1592 @kindex l (Group)
1593 @findex gnus-group-list-groups
1594 List all subscribed groups that have unread articles
1595 (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
1596 command will list only groups of level ARG and lower.  By default, it
1597 only lists groups of level five or lower (ie. just subscribed groups).
1598 @item L
1599 @item G u
1600 @kindex G u
1601 @kindex L (Group)
1602 @findex gnus-group-list-all-groups
1603 List all subscribed and unsubscribed groups, whether they have unread
1604 articles or not (@code{gnus-group-list-all-groups}).  If the numeric
1605 prefix is used, this command will list only groups of level ARG and
1606 lower.  By default, it lists groups of level seven or lower (ie. just
1607 subscribed and unsubscribed groups).
1608 @item G k
1609 @kindex G k (Group)
1610 @findex gnus-group-list-killed
1611 List all killed groups (@code{gnus-group-list-killed}).
1612 @item G z
1613 @kindex G z (Group)
1614 @findex gnus-group-list-zombies
1615 List all zombie groups (@code{gnus-group-list-zombies}).
1616 @item G m
1617 @kindex G m (Group)
1618 @findex gnus-group-list-matching
1619 List all subscribed groups with unread articles that match a regexp
1620 (@code{gnus-group-list-matching}). 
1621 @item G M
1622 @kindex G M (Group)
1623 @findex gnus-group-list-all-matching
1624 List groups that match a regexp (@code{gnus-group-list-all-matching}).
1625 @end table
1626
1627 @node Group Maintenance
1628 @section Group Maintenance
1629 @cindex bogus groups
1630
1631 @table @kbd
1632 @item b
1633 @kindex b (Group)
1634 @findex gnus-group-check-bogus-groups
1635 Check bogus groups and delete them
1636 (@code{gnus-group-check-bogus-groups}).
1637 @item F
1638 @kindex F (Group)
1639 @findex gnus-find-new-newsgroups
1640 Find new groups (@code{gnus-find-new-newsgroups}).
1641 @item C-c C-x
1642 @kindex C-c C-x (Group)
1643 @findex gnus-group-expire-articles
1644 Run all expirable articles in the current group through the expiry
1645 process (if any) (@code{gnus-group-expire-articles}).
1646 @item C-c M-C-x
1647 @kindex C-c M-C-x (Group)
1648 @findex gnus-group-expire-all-groups
1649 Run all articles in all groups through the expiry process
1650 (@code{gnus-group-expire-all-groups}).
1651 @item C-c C-s
1652 @kindex C-c C-s (Group)
1653 @findex gnus-group-sort-groups
1654 @findex gnus-group-sort-by-level
1655 @findex gnus-group-sort-by-unread
1656 @findex gnus-group-sort-by-alphabet
1657 @vindex gnus-group-sort-function
1658 Sort the groups according to the function given by the
1659 @code{gnus-group-sort-function} variable
1660 (@code{gnus-group-sort-groups}).  Available sorting functions include
1661 @code{gnus-group-sort-by-alphabet} (the default),
1662 @code{gnus-group-sort-by-unread} and @code{gnus-group-sort-by-level}. 
1663 @end table
1664
1665 @node Browse Foreign Server
1666 @section Browse Foreign Server
1667 @cindex foreign servers
1668 @cindex browsing servers
1669
1670 @table @kbd
1671 @item B
1672 @kindex B (Group)
1673 @findex gnus-group-browse-foreign-server
1674 You will be queried for a select method and a server name.  Gnus will
1675 then attempt to contact this server and let you browse the groups there
1676 (@code{gnus-group-browse-foreign-server}).
1677 @end table
1678
1679 @findex gnus-browse-server-mode
1680 A new buffer with a list of available groups will appear.  This buffer
1681 will be use the @code{gnus-browse-server-mode}.  This buffer looks a bit
1682 (well, a lot) like a normal group buffer, but with one major difference
1683 - you can't enter any of the groups.  If you want to read any of the
1684 news available on that server, you have to subscribe to the groups you
1685 think may be interesting, and then you have to exit this buffer.  The
1686 new groups will be added to the group buffer, and then you can read them
1687 as you would any other group.
1688
1689 Future versions of Gnus may possibly permit reading groups straight from
1690 the browse buffer.
1691
1692 Here's a list of keystrokes available in the browse mode:
1693
1694 @table @kbd
1695 @item n
1696 @kindex n (Browse)
1697 @findex gnus-group-next-group
1698 Go to the next group (@code{gnus-group-next-group}).
1699 @item p
1700 @kindex p (Browse)
1701 @findex gnus-group-prev-group
1702 Go to the previous group (@code{gnus-group-prev-group}).
1703 @item u
1704 @kindex u (Browse)
1705 @findex gnus-browse-unsubscribe-current-group
1706 Unsubscribe to the current group, or, as will be the case here,
1707 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
1708 @item q
1709 @kindex q (Browse)
1710 @findex gnus-browse-exit
1711 Exit browse mode (@code{gnus-browse-exit}).
1712 @item ?
1713 @kindex ? (Browse)
1714 @findex gnus-browse-describe-briefly
1715 Describe browse mode briefly (well, there's not much to describe, is
1716 there) (@code{gnus-browse-describe-briefly}).
1717 @end table
1718
1719 @node Exiting Gnus
1720 @section Exiting Gnus
1721 @cindex exiting Gnus
1722
1723 Yes, Gnus is ex(c)iting.
1724
1725 @table @kbd
1726 @item z
1727 @kindex z (Group)
1728 @findex gnus-group-suspend
1729 Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
1730 but it kills all buffers exept the Group buffer.  I'm not sure why this
1731 is a gain, but then who am I to judge.
1732 @item q
1733 @kindex q (Group)
1734 @findex gnus-group-exit
1735 Quit Gnus (@code{gnus-group-exit}).
1736 @item Q
1737 @kindex Q (Group)
1738 @findex gnus-group-quit
1739 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
1740 @end table
1741
1742 @vindex gnus-exit-gnus-hook
1743 @vindex gnus-suspend-gnus-hook
1744 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
1745 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
1746
1747 Note:
1748
1749 @quotation
1750 Miss Lisa Cannifax, while sitting in English class, feels her feet go
1751 numbly heavy and herself fall into a hazy trance as the boy sitting
1752 behind her drew repeated lines with his pencil across the back of her
1753 plastic chair.
1754 @end quotation
1755
1756 @node Misc Group Stuff
1757 @section Misc Group Stuff
1758
1759 @table @kbd
1760 @item g
1761 @kindex g (Group)
1762 @findex gnus-group-get-new-news
1763 Check server for new articles. 
1764 If the numeric prefix is used, this command will check only groups of
1765 level ARG and lower (@code{gnus-group-get-new-news}).
1766 @item M-g
1767 @kindex M-g (Group)
1768 @findex gnus-group-get-new-news-this-group
1769 Check whether new articles have arrived in the current group
1770 (@code{gnus-group-get-new-news-this-group}).
1771 @item M-f
1772 @kindex M-f (Group)
1773 @findex gnus-group-fetch-faq
1774 Try to fetch the FAQ for the current group
1775 (@code{gnus-group-fetch-faq}).
1776 @item R
1777 @kindex R (Group)
1778 @findex gnus-group-restart
1779 Restart Gnus (@code{gnus-group-restart}).
1780 @item r
1781 @kindex r (Group)
1782 @findex gnus-group-read-init-file
1783 Read the init file (@code{gnus-init-file}, which defaults to
1784 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
1785 @item s
1786 @kindex s (Group)
1787 @findex gnus-group-save-newsrc
1788 Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
1789 (@code{gnus-group-save-newsrc}).
1790 @item Z
1791 @kindex Z (Group)
1792 @findex gnus-group-clear-dribble
1793 Clear the dribble buffer (@code{gnus-group-clear-dribble}).
1794 @item D
1795 @kindex D (Group)
1796 @findex gnus-group-describe-group
1797 Describe the current group (@code{gnus-group-describe-group}).  If given
1798 a prefix, force Gnus to re-read the description from the server.
1799 @item C-c C-a
1800 @kindex C-c C-a (Group)
1801 @findex gnus-group-apropos
1802 List all groups that have names that match a regexp
1803 (@code{gnus-group-apropos}).
1804 @item C-c M-C-a 
1805 @kindex C-c M-C-a (Group)
1806 @findex gnus-group-description-apropos
1807 List all groups that have names or descriptions that match a regexp
1808 (@code{gnus-group-description-apropos}).
1809 @item a
1810 @kindex a (Group)
1811 @findex gnus-group-post-news
1812 Post an article to a group (@code{gnus-group-post-news}).
1813 @item m
1814 @kindex m (Group)
1815 @findex gnus-group-mail
1816 Mail a message somewhere (@code{gnus-group-mail}).
1817 @item C-x C-t
1818 @kindex C-x C-t (Group)
1819 @findex gnus-group-transpose-groups
1820 Transpose two groups (@code{gnus-group-transpose-groups}).
1821 @item V
1822 @kindex V (Group)
1823 @findex gnus-version
1824 Display current Gnus version numbers (@code{gnus-version}).
1825 @item M-d
1826 @kindex M-d (Group)
1827 @findex gnus-group-describe-all-groups
1828 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
1829 prefix, force Gnus to re-read the descriptoion file from the server.
1830 @item ?
1831 @kindex ? (Group)
1832 @findex gnus-group-describe-briefly
1833 Give a very short help message (@code{gnus-group-describe-briefly}).
1834 @item C-c C-i
1835 @kindex C-c C-i (Group)
1836 @findex gnus-info-find-node
1837 Go to the Gnus info node (@code{gnus-info-find-node}).
1838 @end table
1839
1840 @vindex gnus-group-prepare-hook
1841 @code{gnus-group-prepare-hook} is called after the group list is
1842 created in the Group buffer.  It may be used to modify the group
1843 buffer in some strange, unnatural way.
1844
1845 @node The Summary Buffer
1846 @chapter The Summary Buffer
1847 @cindex summary buffer
1848
1849 A line for each article is displayed in the Summay buffer.  You can move
1850 around, read articles, post articles and reply to them.
1851
1852 @menu
1853 * Summary Buffer Format::       Deciding how the summar buffer is to look.
1854 * Summary Manouvering::         Moving around the summary buffer.
1855 * Choosing Articles::           Reading articles.
1856 * Paging the Article::          Scrolling the current article.
1857 * Reply Followup and Post::     Posting articles.
1858 * Cancelling and Superseding::  "Whoops, I shouldn't have called him that."
1859 * Ticking and Marking::         Marking articles as read, expirable, etc.
1860 * Threading::                   How threads are made.
1861 * Exiting the Summary Buffer::  Returning to the Group buffer.
1862 * Process/Prefix::              A convention used by many treatment commands.
1863 * Saving Articles::             Ways of customizing article saving.
1864 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
1865 * Various Article Stuff::       Various stuff dealing with articles.
1866 * Summary Sorting::             You can sort the summary buffer four ways.
1867 * Finding the Parent::          No child support? Get the parent.
1868 * Score Files::                 Maintaining a score file.
1869 * Mail Group Commands::         Some commands can only be used in mail groups.
1870 * Various Summary Stuff::       What didn't fit anywhere else.
1871 @end menu
1872
1873 @node Summary Buffer Format
1874 @section Summary Buffer Format
1875 @cindex summary buffer format
1876
1877 @menu
1878 * Summary Buffer Lines::     You can specify how summary lines should look.
1879 * Summary Buffer Mode Line:: You can say how the mode line should look.
1880 @end menu
1881
1882 @findex mail-extract-address-components
1883 @findex gnus-extract-address-components
1884 @vindex gnus-extract-address-components
1885 Gnus will use the value of the @code{gnus-extract-address-components}
1886 variable as a function for getting the name and address parts of a From
1887 header.  Two pre-defined function exist:
1888 @code{gnus-extract-address-components}, which is the default, quite fast, and
1889 too simplistic solution, and @code{mail-extract-address-components}, which
1890 works very nicely, but is slower.
1891
1892 @vindex gnus-summary-same-subject
1893 @code{gnus-summary-same-subject} is a string indicating that the current
1894 article has the same subject as the previous.  This string will be used
1895 with those specs that require it.
1896
1897 @node Summary Buffer Lines
1898 @subsection Summary Buffer Lines
1899
1900 @vindex gnus-summary-line-format
1901 You can change the format of the lines in the summary buffer by changing
1902 the @code{gnus-summary-line-format} variable.  It works along the same
1903 lines a a normal @code{format} string, with some extensions.
1904
1905 The default string is @samp{"%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n"}.
1906
1907 The following format specification characters are understood:
1908
1909 @table @samp
1910 @item N 
1911 Article number
1912 @item S
1913 Subject string
1914 @item s
1915 Subject if the article is the root, @code{gnus-summary-same-subject}
1916 otherwise. 
1917 @item F
1918 Full From line
1919 @item n
1920 The name (from the @code{From} header field)
1921 @item A
1922 The address (from the @code{From} header field)
1923 @item L
1924 Number of lines in the article
1925 @item c
1926 Number of characters in the article
1927 @item I
1928 Indentation based on thread level
1929 @item T
1930 Nothing if the article is a root and lots of spaces if it isn't (it
1931 pushes everything after it off the screen)
1932 @item \[
1933 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
1934 for adopted articles.
1935 @item \]
1936 Closing bracked, which is normally @samp{\]}, but can also be @samp{<}
1937 for adopted articles.
1938 @item <
1939 One space for each thread level.
1940 @item >
1941 Twenty minus thread level spaces.
1942 @item U
1943 Unread
1944 @item X
1945 Expirable
1946 @item R
1947 Replied
1948 @item i
1949 Score
1950 @item z
1951 Zcore
1952 @item x
1953 Xref
1954 @item D
1955 Date
1956 @item M
1957 Message-ID
1958 @item r
1959 References
1960 @item x
1961 Xref
1962 @item u
1963 User defined specifier.  The next character in the format string should
1964 be a letter.  @sc{GNUS} will call the function gnus-user-format-function-X,
1965 where X is the letter following %u.  The function will be passed the
1966 current header as argument.  The function should return a string, which
1967 will be inserted into the summary just like information from any other
1968 summary specifier.
1969 @end table
1970
1971 Text between %( and %) will be highlighted with `gnus-mouse-face'
1972 when the mouse point is placed inside the area.  There can only be one
1973 such area.
1974
1975 The %U (status), %R (replied) and %z (zcore) specs have to be handled
1976 with care.  For reasons of efficiency, Gnus will compute what column
1977 these characters will end up in, and "hard-code" that.  This means that
1978 it is illegal to have these specs after a variable-length spec.  Well,
1979 you might not be arrested, but your summary buffer will look strange,
1980 which is bad enough.
1981
1982 The smart choice is to have these specs as far to the left as possible.
1983 (Isn't that the case with everything, though?  But I digress.)
1984
1985 This restriction may disappear in later versions of Gnus.
1986
1987 @node Summary Buffer Mode Line
1988 @subsection Summary Buffer Mode Line
1989
1990 @vindex gnus-summary-mode-line-format
1991 You can also change the format of the summary mode bar.  Set
1992 @code{gnus-summary-mode-line-format} to whatever you like.  Here's what
1993 elements you have to play with:
1994
1995 @table @samp
1996 @item G
1997 Group name
1998 @item A
1999 Current article number
2000 @item V
2001 Gnus version
2002 @item U
2003 Number of unread articles in this group
2004 @item u
2005 Number of unselected articles in this group
2006 @item Z
2007 A string with the number of unread and unselected articles represented
2008 either as @samp{<%U(+%u) more>} if there are both unselected articles,
2009 and just as @samp{<%U more>} if there are just unread articles and no
2010 unselected ones.
2011 @end table
2012
2013
2014 @node Summary Manouvering
2015 @section Summary Manouvering
2016 @cindex summary movement
2017
2018 All the straight movement commands understand the numeric prefix and
2019 behave pretty much as you'd expect. 
2020
2021 None of these commands select articles.
2022
2023 @table @kbd
2024 @item G M-n
2025 @item M-n
2026 @kindex M-n (Summary)
2027 @kindex G M-n (Summary)
2028 @findex gnus-summary-next-unread-subject
2029 Go to the next summary line of an unread article
2030 (@code{gnus-summary-next-unread-subject}). 
2031 @item G M-p
2032 @item M-p
2033 @kindex M-p (Summary)
2034 @kindex G M-p (Summary)
2035 @findex gnus-summary-prev-unread-subject
2036 Go to the previous summary line of an unread article
2037 (@code{gnus-summary-prev-unread-subject}). 
2038 @item G g
2039 @item j
2040 @kindex j (Summary)
2041 @kindex G g (Summary)
2042 @findex gnus-summary-goto-subject
2043 Ask for an article number and then go to this summary line
2044 (@code{gnus-summary-goto-subject}). 
2045 @end table
2046
2047 @vindex gnus-auto-select-next
2048 If you are at the end of the group and issue one of the movement
2049 commands, Gnus will offer to go to the next group.  If
2050 @code{gnus-auto-select-next} is @code{t} and the next group is empty,
2051 Gnus will exit summary mode and return to the group buffer.  If this
2052 variable is neither @code{t} nor @code{nil}, Gnus will select the next
2053 group, no matter if it has any unread articles or not.  As a special
2054 case, if this variable equals @code{quietly}, Gnus will select the next
2055 group without asking for confirmation.  Also see
2056 @code{gnus-keep-same-level}.
2057
2058 If Gnus asks you to press a key to confirm going to the next group, you
2059 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
2060 buffer, searching for the next group to read without actually returning
2061 to the group buffer.
2062
2063 @vindex gnus-auto-center-summary
2064 If @code{gnus-auto-center-summary} is non-@code{nil}, Gnus will keep the
2065 point in the summary buffer centered at all times.  This makes things
2066 quite tidy, but if you have a slow network connection, or do simply not
2067 like this un-Emacsism, you can set this variable to @code{nil} to get
2068 the normal Emacs scrolling action.
2069
2070 @node Choosing Articles
2071 @section Choosing Articles
2072 @cindex selecting articles
2073
2074 None of the following movement commands understand the numeric prefix,
2075 and they all select and display an article.
2076
2077 @table @kbd
2078 @item SPACE
2079 @kindex SPACE (Summary)
2080 @findex gnus-summary-next-page
2081 Select the current article, or, if that one's read already, the next
2082 unread article (@code{gnus-summary-next-page}).
2083 @item G n
2084 @item n
2085 @kindex n (Summary)
2086 @kindex G n (Summary)
2087 @findex gnus-summary-next-unread-article
2088 Go to next unread article (@code{gnus-summary-next-unread-article}).
2089 @item G p
2090 @item p
2091 @kindex p (Summary)
2092 @findex gnus-summary-prev-unread-article
2093 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
2094 @item G N
2095 @item N
2096 @kindex N (Summary)
2097 @kindex G N (Summary)
2098 @findex gnus-summary-next-article
2099 Go to the next article (@code{gnus-summary-next-article}).
2100 @item G P
2101 @item P
2102 @kindex P (Summary)
2103 @kindex G P (Summary)
2104 @findex gnus-summary-prev-article
2105 Go to the previous article (@code{gnus-summary-prev-article}).
2106 @item G C-n
2107 @kindex G C-n (Summary)
2108 @findex gnus-summary-next-same-subject
2109 Go to the next article with the same subject
2110 (@code{gnus-summary-next-same-subject}). 
2111 @item G C-p
2112 @kindex G C-p (Summary)
2113 @findex gnus-summary-prev-same-subject
2114 Go to the previous article with the same subject
2115 (@code{gnus-summary-prev-same-subject}). 
2116 @item G f
2117 @item .
2118 @kindex G f  (Summary)
2119 @kindex .  (Summary)
2120 @findex gnus-summary-first-unread-article
2121 Go to the first unread article
2122 (@code{gnus-summary-first-unread-article}).
2123 @item G b
2124 @item ,
2125 @kindex G b (Summary)
2126 @kindex , (Summary)
2127 Go to the article with the highest score
2128 (@code{gnus-summary-best-unread-article}). 
2129 @item G l
2130 @item l
2131 @kindex l (Summary)
2132 @kindex G l (Summary)
2133 @findex gnus-summary-goto-last-article
2134 Go to the summary line of the previous article
2135 (@code{gnus-summary-goto-last-article}).
2136 @item G p
2137 @kindex G p
2138 @findex gnus-summary-pop-article
2139 Pop an article off the summary history and go to the previous article
2140 (@code{gnus-summary-pop-article}).  This command differs from the
2141 command above in that you can pop as many previous articles off the
2142 history as you like.
2143 @end table
2144
2145 Some variables that are relevant for moving and selecting articles:
2146
2147 @table @code
2148 @item gnus-auto-extend-newsgroup
2149 @vindex gnus-auto-extend-newsgroup
2150 All the movement commands will try to go to the previous (or next)
2151 article, even if that article isn't displayed in the Summary buffer if
2152 this variable is non-@code{nil}.  Gnus will then fetch the article from
2153 the server and display it in the article buffer.
2154 @item gnus-select-article-hook
2155 @vindex gnus-select-article-hook
2156 This hook is called whenever an article is selected.  By default it
2157 exposes any threads hidden under the selected article.
2158 @item gnus-mark-article-hook
2159 @vindex gnus-mark-article-hook
2160 This hook is called when an article is selected for the first time.  It
2161 is intended to be used for marking articles as read automatically when
2162 articles are selected.
2163 @item gnus-visual-mark-article-hook
2164 @vindex gnus-visual-mark-article-hook
2165 This hook is run after selecting an article.  It is meant to be used for
2166 highlighting the article in some way.  It is not run if
2167 @code{gnus-visual} is @code{nil}.
2168 @item gnus-visual-summary-update-hook
2169 @vindex gnus-visual-summary-update-hook
2170 This hook is called when a summary line is changed.  It is not run if
2171 @code{gnus-visual} is @code{nil}.
2172 @end table
2173
2174 @node Paging the Article
2175 @section Scrolling the Article
2176 @cindex article scrolling
2177
2178 @table @kbd
2179 @item SPACE
2180 @kindex SPACE (Summary)
2181 @findex gnus-summary-next-page
2182 Pressing @kbd{SPACE} will scroll the current article forward one page,
2183 or, if you have come to the end of the current article, will choose the
2184 next article (@code{gnus-summary-next-page}).
2185 @item DEL
2186 @kindex DEL (Summary)
2187 @findex gnus-summary-prev-page
2188 Scoll the current article back one page (@code{gnus-summary-prev-page}). 
2189 @item RET
2190 @kindex RET (Summary)
2191 @findex gnus-summary-scroll-up
2192 Scroll the current article one line forward
2193 (@code{gnus-summary-scroll-up}).
2194 @item <
2195 @item A <
2196 @kindex < (Summary)
2197 @kindex A < (Summary)
2198 @findex gnus-summary-beginning-of-article
2199 Scroll to the beginning of the article
2200 (@code{gnus-summary-beginning-of-article}).
2201 @item >
2202 @item A >
2203 @kindex > (Summary)
2204 @kindex A > (Summary)
2205 @findex gnus-summary-end-of-article
2206 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
2207 @end table
2208
2209 @node Reply Followup and Post
2210 @section Reply Followup and Post
2211 @cindex reply
2212 @cindex followup
2213 @cindex post
2214
2215 @kindex C-c C-c (Post)
2216 All the commands for posting and mailing will put you in a post or mail
2217 buffer where you can edit the article all you like, before you send the
2218 article by pressing @kbd{C-c C-c}.  If you are in a foreign news group,
2219 and you wish to post the article using the foreign server, you can give
2220 a prefix to @kbd{C-c C-c} to make Gnus try to post using the foreign
2221 server. 
2222
2223 @table @kbd
2224 @item a
2225 @kindex a (Summary)
2226 @findex gnus-summary-post-news
2227 Post an article to the current group
2228 (@code{gnus-summary-post-news}).
2229 @item f
2230 @kindex f (Summary)
2231 @findex gnus-summary-followup
2232 Post a followup to the current article (@code{gnus-summary-followup}).
2233 @item F
2234 @kindex F (Summary)
2235 @findex gnus-summary-followup-with-original
2236 Post a followup to the current article and include the original message
2237 (@code{gnus-summary-followup-with-original}). 
2238 @item r
2239 @kindex r (Summary)
2240 @findex gnus-summary-reply
2241 Mail a reply to the author of the current article
2242 (@code{gnus-summary-reply}). 
2243 @item R
2244 @kindex R (Summary)
2245 @findex gnus-summary-reply-with-original
2246 Mail a reply to the author of the current article and include the
2247 original message (@code{gnus-summary-reply-with-original}).
2248 @item b
2249 @kindex b (Summary)
2250 @findex gnus-summary-followup-and-reply
2251 Post a followup and send a reply to the current article
2252 (@code{gnus-summary-followup-and-reply}).
2253 @item B
2254 @kindex N (Summary)
2255 @findex gnus-summary-followup-and-reply-with-original
2256 Post a followup and send a reply to the current article and include the
2257 original message (@code{gnus-summary-followup-and-reply-with-original}).
2258 @item C-c C-f
2259 @kindex C-c C-f (Summary)
2260 @findex gnus-summary-mail-forward
2261 Forward the current article to some other person
2262 (@code{gnus-summary-mail-forward}). 
2263 @item m
2264 @kindex m (Summary)
2265 @findex gnus-summary-mail-other-window
2266 Send a mail to some other person
2267 (@code{gnus-summary-mail-other-window}). 
2268 @item S M-f
2269 @kindex S M-f (Summary)
2270 @findex gnus-uu-digest-and-forward
2271 Digest the current series and forward the result using mail
2272 (@code{gnus-uu-digest-and-forward}). 
2273 @item S u
2274 @kindex S u (Summary)
2275 @findex gnus-uu-post-news
2276 Uuencode a file, split it up into parts, and post it as a series
2277 (@code{gnus-uu-post-news}). 
2278 @end table
2279
2280 @table @code
2281 @item gnus-required-headers
2282 @vindex gnus-required-headers
2283 Gnus determines which headers it should generate in outgoing posts by
2284 consulting the this variable.  All headers mentioned in this list will
2285 either be generated automatically or prompted for before an article is
2286 posted. 
2287 @item gnus-post-method
2288 @vindex gnus-post-method
2289 If non-@code{nil}, Gnus will use this method instead of the default
2290 select method when posting.
2291 @item gnus-use-followup-to
2292 @vindex gnus-use-followup-to
2293 If @code{nil}, always ignore the Followup-To header.  If it is @code{t},
2294 use its value, but ignore the special value @samp{poster}, which will
2295 send the followup as a reply mail to the person you are responding to.
2296 If it is neither @code{nil} nor @code{t}, always use the Followup-To
2297 value.
2298 @item gnus-followup-to-function
2299 @item gnus-reply-to-function
2300 @vindex gnus-reply-to-function
2301 @vindex gnus-followup-to-function
2302 Gnus uses the normal methods to determine where replys and follow-ups
2303 are to go, but you can change the behaviour to suit your need by
2304 fiddling with the @code{gnus-reply-to-function} and
2305 @code{gnus-followup-to-function} variables.
2306
2307 To take "reply" as an example: If you want the replies to go to the
2308 "sender" instead of the "from" in the group "mail.stupid-list", you
2309 could do something like this:
2310
2311 @lisp
2312 (setq gnus-reply-to-function
2313       '(lambda (group)
2314         (cond ((string= group "mail.stupid-list")
2315                 (mail-fetch-field "sender"))
2316               (t
2317                nil))))
2318 @end lisp
2319
2320 These functions will be called with point in the buffer of the article
2321 that is being replied to (or followed up).
2322 @item gnus-signature-function
2323 @vindex gnus-signature-function
2324 If non-@code{nil}, this variable should be a function that returns a
2325 signature file name.  The function will be called with the name of the
2326 group being posted to.  If the function returns a string that doesn't
2327 correspond to a file, the string itself is inserted.  If the function
2328 returns @code{nil}, the @code{gnus-signature-file} variable will be used
2329 instead.
2330 @item gnus-signature-file
2331 @item mail-signature
2332 @vindex mail-signature
2333 @vindex gnus-signature-file
2334 If non-@code{nil}, this variable should be the name of a file containing
2335 a signature (@samp{~/.signature} by default).  This signature will be
2336 appended to all outgoing post.  Most people find it more convenient to
2337 use @code{mail-signature}, which does the same, but inserts the
2338 signature into the buffer before you start editing the post (or mail).
2339 So - if you have both of these variables set, you will get two
2340 signatures.
2341
2342 Note that RFC1036 says that a signature should be preceded by the three
2343 characters @samp{-- } on a line by themselves.  This is to make it
2344 easier for the recipient to automatically filter the signature away.  So
2345 don't remove those characters, even though you might feel that they ruin
2346 you beautiful design, like, totally.
2347
2348 Also note that no signature should be more than four lines long.
2349 Including ASCII graphics is an efficient way to get everybody to believe
2350 that you are silly and have nothing important to say.
2351 @item gnus-post-prepare-function
2352 @vindex gnus-post-prepare-function
2353 This function is called with the name of the current group after the
2354 post buffer has been initialized, and can be used for inserting a
2355 signature.  Nice if you use different signatures in different groups.
2356 @item gnus-auto-mail-to-author
2357 @vindex gnus-auto-mail-to-author
2358 If non-@code{nil}, Gnus will send a mail with a copy of all follow-ups
2359 to the authors of the articles you follow up.  It's nice in one way -
2360 you make sure that the person you are responding to gets your response.
2361 Other people loathe this method and will hate you dearly for it, because
2362 it means that they will first get a mail, and then have to read the same
2363 article later when they read the news.  It is @code{nil} by default.
2364 @item gnus-mail-send-method
2365 @vindex gnus-mail-send-method
2366 This variable says how a mail should be mailed.  It uses the function in
2367 the @code{send-mail-function} variable as the default.
2368 @item gnus-prepare-article-hook
2369 @vindex gnus-prepare-article-hook
2370 This hook is called before the headers have been prepared.  By default
2371 it inserts the signature specified by @code{gnus-signature-file}.
2372 @item gnus-inews-article-hook
2373 @vindex gnus-inews-article-hook
2374 This hook is called right before the article is posted.  By default it
2375 handles FCC processing (ie. saving the article to a file.)
2376 @item gnus-inews-article-header-hook
2377 @vindex gnus-inews-article-header-hook
2378 This hook is called after inserting the required headers in an article
2379 to be posted.  The hook is called from the @code{*post-news*} buffer,
2380 narrowed to the headers, and is intended for people who would like to
2381 insert additional headers, or just change headers in some way.
2382 @end table
2383
2384 @node Cancelling and Superseding
2385 @section Cancelling Articles
2386 @cindex cancelling articles
2387 @cindex superseding articles
2388
2389 Have you ever written something, and then decided that you really,
2390 really, really hadn't posted that? 
2391
2392 Well, you can't cancel mail, but you can cancel posts.
2393
2394 @findex gnus-summary-cancel-article
2395 @kindex C (Summary)
2396 Find the article you wish to cancel (you can only cancel your own
2397 articles, so don't try any funny stuff).  Then press @kbd{C}
2398 (@code{gnus-summary-cancel-article}).  Your article will be cancelled.
2399
2400 Be aware, however, that not all sites honor cancels, so your article may
2401 live on in some parts of the world, while most sites will delete the
2402 cancelled article.
2403
2404 If you discover that you have made some mistakes and want to do some
2405 corrections, you can post a @dfn{superseding} article that will replace
2406 your original article.
2407
2408 @findex gnus-summary-supersede-article
2409 @kindex S (Summary)
2410 Go to the original article and press @kbd{S}
2411 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
2412 where you can edit the article all you want before sending it off the
2413 usual way.
2414
2415 The same goes for superseding as for cancelling, only more so: Some
2416 sites do not honor superseding.  On those sites, it will appear that you
2417 have posted almost the same article twice.
2418
2419 If you have just posted the article, and change your mind right away,
2420 there is a trick you can use to cancel/supersede the article without
2421 waiting for the article to appear on your site first.  You simply return
2422 to the post buffer (which is called @code{*post-buf*}).  There you will
2423 find the article you just posted, with all the headers intact.  Change
2424 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
2425 header by substituting one of those words for @samp{Message-ID}.  Then
2426 just press @kbd{C-c C-c} to send the article as you would do normally.
2427 The previous article will be cancelled/superseded.
2428
2429 Just remember, kids: There is no 'c' in 'supersede'.
2430
2431 @node Ticking and Marking
2432 @section Ticking and Marking
2433 @cindex article marking
2434 @cindex article ticking
2435
2436 There are several marks you can set on an article. 
2437
2438 You have marks that decide the "readed-ness" (whoo, neato-keano
2439 neologism ohoy!) of the article.  Alphabetic marks generally mean
2440 @dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
2441
2442 In addition, you also have marks that do not affect readedness.
2443
2444 @menu
2445 * Unread Articles::      Marks for unread articles.
2446 * Read Articles::        Marks for read articles.
2447 * Other Marks::          Marks that do not affect readedness.
2448 @end menu
2449
2450 There's a plethora of commands for manipulating these marks:
2451
2452 @menu
2453 * Setting Marks::           How to set and remove marks.
2454 * Setting Process Marks::   How to mark articles for later processing.
2455 @end menu
2456
2457 @node Unread Articles
2458 @subsection Unread Articles
2459
2460 The following marks mark articles as unread, in one form or other.
2461
2462 @vindex gnus-dormant-mark
2463 @vindex gnus-ticked-mark
2464 @table @samp
2465 @item !
2466 @dfn{Ticked articles} are articles that will remain visible always.  If
2467 you see an article that you find interesting, or you want to put off
2468 reading it, or replying to it, until sometime later, you'd typically
2469 tick it.  However, articles can be expired, so if you want to keep an
2470 article forever, you'll have to save it.  Ticked articles have a
2471 @samp{!} (@code{gnus-ticked-mark}) in the first column.
2472 @item ?
2473 A @dfn{dormant} article is marked with a @samp{?}
2474 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
2475 if there are followups to it.
2476 @item SPC
2477 An @dfn{unread} article is marked with a @samp{SPC}
2478 (@code{gnus-unread-mark}).  These are articles that haven't been read at
2479 all yet.
2480 @end table
2481
2482 @node Read Articles
2483 @subsection Read Articles
2484 @cindex expirable mark
2485
2486 All the following marks mark articles as read.
2487
2488 @table @samp
2489 @item D
2490 Articles that are marked as read.  They have a @samp{D}
2491 (@code{gnus-dread-mark}) in the first column.  These are articles that the
2492 user has marked as read more or less manually.
2493 @item d
2494 Articles that are actually read are marked with @samp{d}
2495 (@code{gnus-read-mark}). 
2496 @item A
2497 Articles that were marked as read in previous sessions are now
2498 @dfn{ancient} and marked with @samp{A} (@code{gnus-ancient-mark}). 
2499 @item K
2500 Marked as killed ((@code{gnus-killed-mark})).
2501 @item X
2502 Marked as killed by kill files (@code{gnus-kill-file-mark}).
2503 @item Y
2504 Marked as read by having a too low score (@code{gnus-low-score-mark}).
2505 @item C
2506 Marked as read by a catch-up (@code{gnus-catchup-mark}).
2507 @item G
2508 Cancelled article (@code{gnus-cancelled-mark})
2509 @end table
2510
2511 All these mark just mean that the article is marked as read,
2512 really.  They are interpreted differently by the adaptive scoring scheme,
2513 however. 
2514
2515 One more special mark, though:
2516
2517 @table @samp
2518 @item E
2519 You can also mark articles as @dfn{expirable} (or have them marked as
2520 such automatically).  That doesn't make much sense in normal groups,
2521 because a user does not control the expiring of news articles, but in
2522 mail groups, for instance, articles that are marked as @dfn{expirable}
2523 can be deleted by Gnus at any time.  Expirable articles are marked with
2524 @samp{E} (@code{gnus-expirable-mark}).
2525 @end table
2526
2527 @node Other Marks
2528 @subsection Other Marks
2529 @cindex process mark
2530 @cindex bookmarks
2531
2532 There are some marks that have nothing to do with whether the article is
2533 read or not.
2534
2535 You can set a bookmark in the current article.  Say you are reading a
2536 long thesis on cat's urinary tracts, and have to go home for dinner
2537 before you've finished reading the thesis.  You can then set a bookmark
2538 in the article, and Gnus will jump to this bookmark the next time it
2539 encounters the article.
2540
2541 Finally we have the @dfn{process mark}.  A variety of commands react to
2542 the presence of the process mark.  For instance, @kbd{X u}
2543 (@code{gnus-uu-decode-uu}) will uudecode and view all articles that have
2544 been marked with the process mark.  Articles marked with the process
2545 mark have a @samp{#} in the second column.
2546
2547 @node Setting Marks
2548 @subsection Setting Marks
2549 @cindex setting marks
2550
2551 All the marking commands understand the numeric prefix.
2552
2553 @table @kbd
2554 @item M t
2555 @item !
2556 @kindex ! (Summary)
2557 @kindex M t (Summary)
2558 @findex gnus-summary-tick-article-forward
2559 Tick the current article (@code{gnus-summary-tick-article-forward}).
2560 @item M ?
2561 @item ?
2562 @kindex ? (Summary)
2563 @kindex M ? (Summary)
2564 @findex gnus-summary-mark-as-dormant
2565 Mark the current article as dormant
2566 (@code{gnus-summary-mark-as-dormant}).
2567 @item M d
2568 @item d
2569 @kindex M d (Summary)
2570 @kindex d (Summary)
2571 @findex gnus-summary-mark-as-read-forward
2572 Mark the current article as read
2573 (@code{gnus-summary-mark-as-read-forward}).
2574 @item k
2575 @kindex k (Summary)
2576 @findex gnus-summary-kill-same-subject-and-select
2577 Mark all articles that have the same subject as the current one as read,
2578 and then select the next unread article
2579 (@code{gnus-summary-kill-same-subject-and-select}).
2580 @item C-k
2581 @kindex C-k (Summary)
2582 @findex gnus-summary-kill-same-subject
2583 Mark all articles that have the same subject as the current one as read
2584 (@code{gnus-summary-kill-same-subject}).  
2585 @item M C
2586 @kindex M C (Summary)
2587 @findex gnus-summary-catchup
2588 Catchup the current group (@code{gnus-summary-catchup}).
2589 @item M C-c
2590 @kindex M C-c (Summary)
2591 @findex gnus-summary-catchup-all
2592 Catchup all articles in the current group (@code{gnus-summary-catchup-all}).
2593 @item M H
2594 @kindex M H (Summary)
2595 @findex gnus-summary-catchup-to-here
2596 Catchup the current group to point (@code{gnus-summary-catchup-to-here}).
2597 @item M c
2598 @item M-u
2599 @kindex M c (Summary)
2600 @kindex M-u (Summary)
2601 @findex gnus-summary-clear-mark-forward
2602 Clear tick and read marks from the current article
2603 (@code{gnus-summary-clear-mark-forward}).
2604 @item M e
2605 @item E
2606 @kindex M e (Summary)
2607 @kindex E (Summary)
2608 @findex gnus-summary-mark-as-expirable
2609 Mark the current article as expirable
2610 (@code{gnus-summary-mark-as-expirable}).
2611 @item M b
2612 @kindex M b (Summary)
2613 @findex gnus-summary-set-bookmark
2614 Set a bookmark in the current article
2615 (@code{gnus-summary-set-bookmark}).
2616 @item M B
2617 @kindex M B (Summary)
2618 @findex gnus-summary-remove-bookmark
2619 Remove the bookmark from the current article
2620 (@code{gnus-summary-remove-bookmark}).
2621 @item M M-r
2622 @item M-d
2623 @kindex M M-r (Summary)
2624 @kindex M-d (Summary)
2625 @findex gnus-summary-remove-lines-marked-as-read
2626 Expunge all deleted articles from the summary buffer
2627 (@code{gnus-summary-remove-lines-marked-as-read}). 
2628 @item M M-C-r
2629 @item M-C-d
2630 @kindex M M-C-r (Summary)
2631 @kindex M-C-d (Summary)
2632 @findex gnus-summary-remove-lines-marked-with
2633 Ask for a mark and then expunge all articles that have been marked with
2634 that mark (@code{gnus-summary-remove-lines-marked-with}).
2635 @item M S
2636 @kindex M S (Summary)
2637 @findex gnus-summary-show-all-expunged
2638 Display all expunged articles (@code{gnus-summary-show-all-expunged}).
2639 @item M D
2640 @kindex M D (Summary)
2641 @findex gnus-summary-show-all-dormant
2642 Display all dormant articles (@code{gnus-summary-show-all-dormant}).
2643 @item M M-D
2644 @kindex M M-D (Summary)
2645 @findex gnus-summary-hide-all-dormant
2646 Hide all dormant articles (@code{gnus-summary-hide-all-dormant}).
2647 @item M s k
2648 @kindex M s k (Summary)
2649 @findex gnus-summary-kill-below
2650 Kill all articles with scores below the default score (or below the
2651 numeric prefix) (@code{gnus-summary-kill-below}).
2652 @item M s c
2653 @kindex M s c (Summary)
2654 @findex gnus-summary-clear-above
2655 Clear all marks from articles with scores over the default score (or
2656 over the numeric prefix) (@code{gnus-summary-clear-above}).
2657 @item M s u
2658 @kindex M s u (Summary)
2659 @findex gnus-summary-tick-above
2660 Tick all articles with scores over the default score (or over the
2661 numeric prefix) (@code{gnus-summary-clear-above}).
2662 @item M s m
2663 @kindex M s m (Summary)
2664 @findex gnus-summary-mark-above
2665 Prompt for a mark, and mark all articles with scores over the default
2666 score (or over the numeric prefix) with this mark
2667 (@code{gnus-summary-clear-above}).
2668 @end table
2669
2670 The @code{gnus-summary-goto-unread} variable controls what action should
2671 be taken after setting a mark.  If non-@code{nil}, point will move to
2672 the next/previous unread article.  If @code{nil}, point will just move
2673 one line up or down.
2674
2675 @node Setting Process Marks
2676 @subsection Setting Process Marks
2677 @cindex setting process marks
2678
2679 @table @kbd
2680 @item #
2681 @item M p
2682 @kindex # (Summary)
2683 @kindex M p p (Summary)
2684 @findex gnus-summary-mark-as-processable
2685 Mark the current article with the process mark
2686 (@code{gnus-summary-mark-as-processable}). 
2687 @findex gnus-summary-unmark-as-processable
2688 @item M-#
2689 @item M p u 
2690 @kindex M-# (Summary)
2691 @kindex M p u (Summary)
2692 Remove the process mark from the current article
2693 (@code{gnus-summary-unmark-as-processable}). 
2694 @item C-c M-#
2695 @item M p U
2696 @kindex C-c M-# (Summary)
2697 @kindex M p U (Summary)
2698 @findex gnus-summary-unmark-all-processable
2699 Remove the process mark from all articles
2700 (@code{gnus-summary-unmark-all-processable}). 
2701 @item M p R
2702 @kindex M p R (Summary)
2703 @findex gnus-uu-mark-by-regexp
2704 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
2705 @item M p r
2706 @kindex M p r (Summary)
2707 @findex gnus-uu-mark-region
2708 Mark articles in region (@code{gnus-uu-mark-region}).
2709 @item M p t
2710 @kindex M p t (Summary)
2711 @findex gnus-uu-mark-thread
2712 Mark all articles in the current (sub)thread
2713 (@code{gnus-uu-mark-thread}).
2714 @item M p s
2715 @kindex M p s (Summary)
2716 @findex gnus-uu-mark-series
2717 Mark all articles in the current series (@code{gnus-uu-mark-series}).
2718 @item M p S
2719 @kindex M p S (Summary)
2720 @findex gnus-uu-mark-sparse
2721 Mark all series that have already had some articles marked
2722 (@code{gnus-uu-mark-sparse}).
2723 @item M p a
2724 @kindex M p a (Summary)
2725 @findex gnus-uu-mark-all
2726 Mark all articles in series order (@code{gnus-uu-mark-series}).
2727 @end table
2728
2729 @findex gnus-summary-universal-argument
2730 @kindex V u (Summary)
2731 Finally, we have @kbd{V u} (@code{gnus-summary-universal-argument}) that
2732 will perform any operation on all articles that have been marked with
2733 the process mark.
2734
2735 @node Threading
2736 @section Threading
2737 @cindex threading
2738 @cindex article threading
2739
2740 Gnus threads articles by default.  @dfn{To thread} is to put replies to
2741 articles directly after the articles they reply to - in a hierarchical
2742 fashion.
2743
2744 @menu
2745 * Customizing Threading::     Variables you can change to affect the threading.
2746 * Thread Commands::           Thread based commands in the summary buffer.
2747 @end menu
2748
2749 @node Customizing Threading
2750 @subsection Customizing Threading
2751 @cindex customizing threading
2752
2753 @table @code
2754 @item gnus-show-threads
2755 @vindex gnus-show-threads
2756 If this variable is @code{nil}, no threading will be done, and all of
2757 the rest of the variables here will have no effect.  Turning threading
2758 off will speed group selection up a bit, but it is sure to make reading
2759 slower and more awkward.
2760 @item gnus-fetch-old-headers
2761 @vindex gnus-fetch-old-headers
2762 If non-@code{nil}, Gnus will attempt to build old threads by fetching
2763 more old headers - headers to articles that are marked as read.  If it
2764 has the value `some', only enough headers to connect otherwise loose
2765 threads will be displayed.  Fetching old headers only works if the
2766 select method you are using supports XOVER.  Also remember that if the
2767 root of the thread has been expired by the server, there's not much Gnus
2768 can do about that.
2769 @item gnus-gather-loose-threads
2770 @vindex gnus-gather-loose-threads
2771 If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
2772 and create a dummy root at the top.  (Wait a minute.  Root at the top?
2773 Yup.)  Loose subtrees occur when the real root has expired, or you've
2774 read it or marked it as read in a previous session.
2775 @item gnus-summary-gather-subject-limit
2776 If this variable is @code{nil}, the entire subject line will be used to
2777 gather loose threads.  If you would limit this to the 20 first
2778 characters of the subjects, set this variable to 20.
2779 @item gnus-summary-make-false-root
2780 @vindex gnus-summary-make-false-root
2781 When there is no real root of a thread, Gnus will have to fudge
2782 something.  This variable says what method Gnus should use while
2783 fudging.  There are four possible value:
2784
2785 @table @code
2786 @item adopt
2787 Gnus will make the first of the orphaned articles the parent.  This
2788 parent will adopt all the other articles.  The adopted articles will be
2789 marked as such by pointy brackeds instead of square brackets.  This is
2790 the default value.
2791 @item dummy
2792 Gnus will create a dummy that will stand in as the parent.  This dummy
2793 will be displayed on a line of its own, but it does not correspond to
2794 any real article.
2795 @item empty
2796 Gnus won't actually make any article the parent, but simply leave the
2797 subject field of all orphans except the first empty.  (It will use
2798 @code{gnus-summary-same-subject} as the subject.)
2799 @item nil
2800 Don't make any article parent at all.  Just gather the threads and
2801 display them after one another.
2802 @end table
2803
2804 @item gnus-thread-hide-subtree
2805 @vindex gnus-thread-hide-subtree
2806 If non-@code{nil}, all subtrees will be hidden when the summary buffer
2807 is generated.
2808 @item gnus-thread-hide-killed
2809 @vindex gnus-thread-hide-killed
2810 if you kill a thread and this variable is non-@code{nil}, the subtree
2811 will be hidden.
2812 @item gnus-thread-ignore-subject
2813 @vindex gnus-thread-ignore-subject
2814 Sometimes somebody changes the subject in the middle of a thread.  If
2815 this variable is non-@code{nil}, the change in subject is ignored.  If
2816 it is @code{nil}, which is the default, a change in the subject will
2817 result in a new thread.
2818 @item gnus-thread-indent-level
2819 @vindex gnus-thread-indent-level
2820 This is a number that how much each subthread should be indented.  The
2821 default is @samp{4}.
2822 @end table
2823
2824 @node Thread Commands
2825 @subsection Thread Commands
2826 @cindex thread commands
2827
2828 @table @kbd
2829 @item T k
2830 @item M-C-k
2831 @kindex T k (Summary)
2832 @kindex M-C-k (Summary)
2833 @findex gnus-summary-kill-thread
2834 Mark all articles under the current one as read
2835 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
2836 remove all marks.  If the prefix argument is negative, tick articles.
2837 @item T l
2838 @item M-C-l
2839 @kindex T l (Summary)
2840 @kindex M-C-l (Summary)
2841 @findex gnus-summary-lower-thread
2842 Lower the score of the current thread
2843 (@code{gnus-summary-lower-thread}). 
2844 @item T i
2845 @kindex T i (Summary)
2846 @findex gnus-summary-raise-thread
2847 Increase the score of the current thread
2848 (@code{gnus-summary-raise-thread}).
2849 @item T #
2850 @kindex T # (Summary)
2851 @findex gnus-uu-mark-thread
2852 Mark the current thread with the process mark
2853 (@code{gnus-uu-mark-thread}).
2854 @item T T
2855 @kindex T T (Summary)
2856 @findex gnus-summary-toggle-threads
2857 Toggle showing threads (@code{gnus-summary-toggle-threads}).
2858 @item T s
2859 @kindex T s (Summary)
2860 @findex gnus-summary-show-thread
2861 Show the thread hidden under the current article, if any
2862 (@code{gnus-summary-show-thread}). 
2863 @item T h
2864 @kindex T h (Summary)
2865 @findex gnus-summary-hide-thread
2866 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
2867 @item T S
2868 @kindex T S (Summary)
2869 @findex gnus-summary-show-all-threads
2870 Show all hidden threads (@code{gnus-summary-show-all-threads}).
2871 @item T H
2872 @kindex T H (Summary)
2873 @findex gnus-summary-hide-all-threads
2874 Hide all threads (@code{gnus-summary-hide-all-threads}).
2875 @end table
2876
2877 The following commands are all thread movement commands.  They all
2878 understand the numeric prefix.
2879
2880 @table @kbd
2881 @item T n
2882 @kindex T n (Summary)
2883 @findex gnus-summary-next-thread
2884 Go to the next thread (@code{gnus-summary-next-thread}).
2885 @item T p
2886 @kindex T p (Summary)
2887 @findex gnus-summary-prev-thread
2888 Go to the previous thread (@code{gnus-summary-prev-thread}).
2889 @item T d
2890 @kindex T d (Summary)
2891 @findex gnus-summary-down-thread
2892 Descend the thread (@code{gnus-summary-down-thread}).
2893 @item T u
2894 @kindex T u (Summary)
2895 @findex gnus-summary-up-thread
2896 Ascend the thread (@code{gnus-summary-up-thread}).
2897 @end table
2898
2899 @node Exiting the Summary Buffer
2900 @section Exiting the Summary Buffer
2901 @cindex summary exit
2902
2903 Exiting from the summary buffer will normally update all info on the
2904 group and return you to the group buffer. 
2905
2906 @table @kbd
2907 @item q
2908 @kindex q (Summary)
2909 @findex gnus-summary-exit
2910 Exit the current group and update all the information
2911 (@code{gnus-summary-exit}). 
2912 @item Q
2913 @kindex Q (Summary)
2914 @findex gnus-summary-quit
2915 Exit the current group without updating any information
2916 (@code{gnus-summary-quit}). 
2917 @item c
2918 @kindex c (Summary)
2919 @findex gnus-summary-catchup-and-exit
2920 Mark all articles in the group as read and exit
2921 (@code{gnus-summary-catchup-and-exit}). 
2922 @end table
2923
2924 @vindex gnus-exit-group-hook
2925 @code{gnus-exit-group-hook} is called when you exit the current
2926 group.  
2927
2928 @vindex gnus-use-cross-reference
2929 When you exit the summary buffer, the data on the current group will be
2930 updated (which articles you have read, which articles you have replied
2931 to, etc.) If the @code{gnus-use-cross-reference} variable is @code{t}, articles
2932 that are cross-referenced to this group, and are marked as read, will
2933 also be marked as read in the other subscribed groups they were
2934 cross-posted to.   If this variable is neither @code{nil} nor @code{t}, the
2935 article will be marked as read in both subscribed and unsubscribed
2936 groups. 
2937
2938 Marking cross-posted articles as read ensures that you'll never have to
2939 read the same article more than once.  Unless, of course, somebody has
2940 posted it to several groups separately.  Posting the same article to
2941 several groups (not cross-posting) is called @dfn{spamming}, and you are
2942 by law required to send nasty-grams to anyone who perpetrates such a
2943 heinous crime.
2944
2945 Remember: Cross-posting is kinda ok, but posting the same article
2946 separately to several groups is not.
2947
2948 One thing that may cause Gnus to not do the cross-posting thing
2949 correctly is if you use an NNTP server that supports xover (which is
2950 very nice, because it speeds things up considerably) which does not
2951 include the Xref header in its NOV lines.  This is Evil, but it's
2952 common.  Gnus tries to Do The Right Thing even with xover by registering
2953 the Xref lines of all articles you actually read, but if you kill the
2954 articles, or just mark them as read without reading them, Gnus will not
2955 get a chance to snoop the Xref lines out of these articles, and will be
2956 unable to use the cross reference mechanism.
2957
2958 @vindex gnus-nov-is-evil
2959 If you want Gnus to get the Xrefs right all the time, you have to set
2960 @code{gnus-nov-is-evil} to @code{t}, which slows things down considerably. 
2961
2962 C'est la vie.
2963
2964 @node Process/Prefix
2965 @section Process/Prefix
2966 @cindex process/prefix convention
2967
2968 Many functions, among them functions for moving articles, decoding
2969 articles and saving articles use what is known as the
2970 @dfn{Process/Prefix convention}.
2971
2972 This is a method for figuring out what articles that the user wants the
2973 command to be performed on.
2974
2975 It goes like this:
2976
2977 If the numeric prefix is N, perform the operation on the next N
2978 articles, starting with the current one.  If the numeric prefix is
2979 negative, perform the operation on the previous N articles, starting
2980 with the current one.
2981
2982 If there is no numeric prefix, but some articles are marked with the
2983 process mark, perform the operation on the articles that are marked with
2984 the process mark.
2985
2986 If there is neither a numeric prefix nor any articles marked with the
2987 process mark, just perform the operation on the current article.
2988
2989 Quite simple, really, but it needs to be made clear so that surprises
2990 are avoided.
2991
2992 @node Saving Articles
2993 @section Saving Articles
2994 @cindex saving articles
2995
2996 Gnus can save articles in a number of ways.  Below is the documentation
2997 for saving articles in a fairly straight-forward fashion (ie. little
2998 processing of the article is done before it is saved).  For a different
2999 approach (uudecoding, unsharing) see gnus-uu.  @xref{Decoding Articles}.
3000
3001 @vindex gnus-save-all-headers
3002 If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
3003 unwanted headers before saving the article.
3004
3005 @table @kbd
3006 @item o
3007 @kindex o (Summary)
3008 @findex gnus-summary-save-article
3009 Save the current article (@code{gnus-summary-save-article}).
3010 @item C-o
3011 @kindex C-o (Summary)
3012 @findex gnus-summary-save-article-mail
3013 Save the current article in mail format
3014 (@code{gnus-summary-save-article-mail}). 
3015 @end table
3016
3017 Both these command use the process/prefix convention
3018 (@pxref{Process/Prefix}). 
3019
3020 @vindex gnus-default-article-saver
3021 You can customize the @code{gnus-default-article-saver} variable to make
3022 Gnus what you want it to.  You can use any of the four ready-made
3023 functions below, or you can create your own. 
3024
3025 @table @code
3026 @item gnus-summary-save-in-rmail
3027 @vindex gnus-summary-save-in-rmail
3028 This is the default format, @dfn{babyl}.  Uses the function in the
3029 @code{gnus-rmail-save-name} variable to get a file name to save the
3030 article in.  The default is @code{gnus-plain-save-name}.
3031 @item gnus-summary-save-in-mail
3032 @vindex gnus-summary-save-in-mail
3033 Save in a Unix mail (mbox) file.  Uses the function in the
3034 @code{gnus-mail-save-name} variable to get a file name to save the
3035 article in.  The default is @code{gnus-plain-save-name}.
3036 @item gnus-summary-save-in-file
3037 @vindex gnus-summary-save-in-file
3038 Append the article straight to an ordinary file.  Uses the function in
3039 the @code{gnus-file-save-name} variable to get a file name to save the
3040 article in.  The default is @code{gnus-numeric-save-name}.
3041 @item gnus-summary-save-in-folder
3042 @vindex gnus-summary-save-in-folder
3043 Save the article to an MH folder using @code{rcvstore} from the MH
3044 library.
3045 @end table
3046
3047 All of these functions, except for the last one, will save the article
3048 in the @code{gnus-article-save-directory}, which is initialized from the
3049 @samp{SAVEDIR} environment variable.
3050
3051 As you can see above, the functions use different functions to find a
3052 suitable name of a file to save the article in.  Below is a list of
3053 available functions that generate names:
3054
3055 @table @code
3056 @item gnus-Numeric-save-name
3057 @findex gnus-Numeric-save-name
3058 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
3059 @item gnus-numeric-save-name
3060 @findex gnus-numeric-save-name
3061 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
3062 @item gnus-Plain-save-name
3063 @findex gnus-Plain-save-name
3064 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
3065 @item gnus-plain-save-name
3066 @findex gnus-plain-save-name
3067 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
3068 @end table
3069
3070 @vindex gnus-use-long-file-name
3071 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
3072 @code{nil}, all the preceding functions will replace all periods
3073 (@samp{.}) in the group names with slashes (@samp{/}) - which means that
3074 the functions will generate hierarchies of directories instead of having
3075 all the files in the toplevel directory
3076 (@samp{~/News/alt/andrea-dworkin} instead of
3077 @samp{~/News/alt.andrea-dworkin}.)
3078
3079 @node Decoding Articles
3080 @section Decoding Articles
3081 @cindex decoding articles
3082
3083 Sometime users post articles (or series of articles) that have been
3084 encoded in some way or other.  Gnus can decode them for you.
3085
3086 @menu 
3087 * Uuencoded Articles::    Uudecode articles.
3088 * Shared Articles::       Unshar articles.
3089 @end menu
3090
3091 All these functions use the process/prefix convention
3092 (@pxref{Process/Prefix}) for finding out what articles to work on, with
3093 the extension that a "single article" means "a single series".  Gnus can
3094 find out by itself what articles belong to one series, decode all the
3095 articles and unpack/view/save the resulting file(s).
3096
3097 Gnus guesses what articles are in the series according to the following
3098 simplish rule: The subjects must be (nearly) identical, except for the
3099 last two numbers of the line.  (Spaces are largely ignored, however.)
3100
3101 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
3102 will find all the articles that match the regexp @samp{^cat.gif
3103 ([0-9]+/[0-9]+).*$}.  
3104
3105 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
3106 series}, will not be properly recognized by any of the automatic viewing
3107 commands, and you have to mark the articles manually with @key{#}.
3108
3109 @menu 
3110 * Decoding Variables::     Variables for a happy decoding.
3111 * Viewing Files::          You want to look at the result of the decoding?
3112 @end menu
3113
3114 @node Uuencoded Articles
3115 @subsection Uuencoded Articles
3116 @cindex uudecode
3117 @cindex uuencoded articles
3118
3119 @table @kbd
3120 @item X u
3121 @kindex X u (Summary)
3122 @findex gnus-uu-decode-uu
3123 Uudecodes the current series (@code{gnus-uu-decode-uu}).
3124 @item X U
3125 @kindex X U (Summary)
3126 @findex gnus-uu-decode-and-save
3127 Uudecodes and saves the current series (@code{gnus-uu-decode-and-save}).
3128 @item X v u
3129 @kindex X v u (Summary)
3130 @findex gnus-uu-decode-uu-view
3131 Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
3132 @item X v U
3133 @kindex X v U (Summary)
3134 @findex gnus-uu-decode-uu-and-save-view
3135 Uudecodes, views and saves the current series
3136 (@code{gnus-uu-decode-uu-and-save-view}). 
3137 @end table
3138
3139 Remember that these all react to the presence of articles marked with
3140 the process mark.  If, for instance, you'd like to uncode and save an
3141 entire newsgroup, you'd typically do @kbd{M p a}
3142 (@code{gnus-uu-mark-all}) and then @kbd{X U} (@code{gnus-uu-decode-uu}).
3143
3144 All this is very much different from how gnus-uu worked with @sc{GNUS
3145 4.1}, where you had explicit keystrokes for everything under the sun.
3146 This version of gnus-uu generally assumes that you either mark articles
3147 in some way (@pxref{Setting Process Marks}) and then press @kbd{X u}.
3148
3149 Note: When trying to decode articles that have names matching
3150 @samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}
3151 (@code{gnus-uu-notify-files}), gnus-uu will automatically post an
3152 article on @samp{comp.unix.wizards} saying that you have just viewed the
3153 file in question.  This feature can't be turned off.
3154
3155 @node Shared Articles
3156 @subsection Shared Articles
3157 @cindex unshar
3158 @cindex shared articles
3159
3160 @table @kbd
3161 @item X s
3162 @kindex X s (Summary)
3163 @findex gnus-uu-decode-unshar
3164 Unshars the current series (@code{gnus-uu-decode-unshar}).
3165 @item X S
3166 @kindex X S (Summary)
3167 @findex gnus-uu-decode-unshar-and-save
3168 Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
3169 @item X v s
3170 @kindex X v s (Summary)
3171 @findex gnus-uu-decode-unshar-view
3172 Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
3173 @item X v S
3174 @kindex X v S (Summary)
3175 @findex gnus-uu-decode-unshar-and-save-view
3176 Unshars, views and saves the current series
3177 (@code{gnus-uu-decode-unshar-and-save-view}). 
3178 @end table
3179
3180 @node Decoding Variables
3181 @subsection Decoding Variables
3182
3183 Adjective, not verb.
3184
3185 @menu 
3186 * Rule Variables::          Variables that say how a file is to be viewed.
3187 * Other Decode Variables::  Other decode variables.
3188 @end menu
3189
3190 @node Rule Variables
3191 @subsubsection Rule Variables
3192 @cindex rule variables
3193
3194 Gnus uses @dfn{rule} variables to decide how to view a file.  All these
3195 variables are on the form
3196   
3197 @lisp
3198       (list '(regexp1 command2)
3199             '(regexp2 command2)
3200             ...)
3201 @end lisp
3202
3203 @table @code
3204 @item gnus-uu-user-view-rules
3205 @vindex gnus-uu-user-view-rules
3206 This variable is consulted first when viewing files.  If you wish to use,
3207 for instance, @code{sox} to convert an @samp{.au} sound file, you could
3208 say something like:
3209 @lisp
3210        (setq gnus-uu-user-view-rules
3211          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
3212 @end lisp
3213 @item gnus-uu-user-view-rules-end
3214 @vindex gnus-uu-user-view-rules-end
3215 This variable is consulted if Gnus couldn't make any matches from the
3216 user and default view rules.
3217 @item gnus-uu-user-archive-rules
3218 @vindex gnus-uu-user-archive-rules
3219 This variable can be used to say what comamnds should be used to unpack
3220 archives.
3221 @end table
3222
3223 @node Other Decode Variables
3224 @subsubsection Other Decode Variables
3225
3226 @table @code
3227 @item gnus-uu-ignore-files-by-name
3228 @vindex gnus-uu-ignore-files-by-name
3229 Files with name matching this regular expression won't be viewed.
3230
3231 @item gnus-uu-ignore-files-by-type
3232 @vindex gnus-uu-ignore-files-by-type
3233 Files with a MIME type matching this variable won't be viewed.  Note
3234 that Gnus tries to guess what type the file is based on the
3235 name.  gnus-uu is not a MIME package, so this is slightly kludgy.
3236
3237 @item gnus-uu-tmp-dir
3238 @vindex gnus-uu-tmp-dir
3239 Where gnus-uu does its work.
3240
3241 @item gnus-uu-do-not-unpack-archives
3242 @vindex gnus-uu-do-not-unpack-archives
3243 Non-@code{nil} means that gnus-uu won't peek inside archives looking for
3244 files to dispay.
3245
3246 @item gnus-uu-view-and-save
3247 @vindex gnus-uu-view-and-save
3248 Non-@code{nil} means that the user will always be asked to save a file
3249 after viewing it.
3250
3251 @item gnus-uu-ignore-default-view-rules
3252 @vindex gnus-uu-ignore-default-view-rules
3253 Non-@code{nil} means that gnus-uu will ignore the default viewing rules.
3254
3255 @item gnus-uu-ignore-default-archive-rules
3256 @vindex gnus-uu-ignore-default-archive-rules
3257 Non-@code{nil} means that gnus-uu will ignore the default archive
3258 unpacking commands.
3259
3260 @item gnus-uu-kill-carriage-return
3261 @vindex gnus-uu-kill-carriage-return
3262 Non-@code{nil} means that gnus-uu will strip all carriage returns from
3263 articles.
3264
3265 @item gnus-uu-unmark-articles-not-decoded
3266 @vindex gnus-uu-unmark-articles-not-decoded
3267 Non-@code{nil} means that gnus-uu will mark articles that were
3268 unsuccessfully decoded as unread.
3269
3270 @item gnus-uu-correct-stripped-uucode
3271 @vindex gnus-uu-correct-stripped-uucode
3272 Non-@code{nil} means that gnus-uu will *try* to fix uuencoded files that
3273 have had traling spaces deleted.
3274
3275 @item gnus-uu-view-with-metamail
3276 @vindex gnus-uu-view-with-metamail
3277 Non-@code{nil} means that gnus-uu will ignore the viewing commands
3278 defined by the rule variables and just fudge a MIME content type based
3279 on the file name.  The result will be fed to metamail for viewing.
3280
3281 @item gnus-uu-save-in-digest
3282 @vindex gnus-uu-save-in-digest
3283 Non-@code{nil} means that gnus-uu, when asked to save without decoding,
3284 will save in digests.  If this variable is @code{nil}, gnus-uu will just
3285 save everything in a file without any embellishments.  The digesting
3286 almost conforms to RFC1153 - no easy way to specify any meaningful
3287 volume and issue numbers were found, so I simply dropped them.
3288
3289 @item gnus-uu-post-include-before-composing
3290 @vindex gnus-uu-post-include-before-composing
3291 Non-@code{nil} means that gnus-uu will ask for a file to encode before
3292 you compose the article.  If this variable is @code{t}, you can either
3293 include an encoded file with @key{C-c C-i} or have one included for you
3294 when you post the article.
3295
3296 @item gnus-uu-post-length
3297 @vindex gnus-uu-post-length
3298 Maximum length of an article.  The encoded file will be split into how
3299 many articles it takes to post the entire file.
3300
3301 @item gnus-uu-post-threaded
3302 @vindex gnus-uu-post-threaded
3303 Non-@code{nil} means that gnus-uu will post the encoded file in a
3304 thread.  This may not be smart, as no other decoder I have seen are able
3305 to follow threads when collecting uuencoded articles.  (Well, I have
3306 seen one package that does that - gnus-uu, but somehow, I don't think
3307 that counts...) Default is @code{nil}.
3308
3309 @item gnus-uu-post-separate-description
3310 @vindex gnus-uu-post-separate-description
3311 Non-@code{nil} means that the description will be posted in a separate
3312 article.  The first article will typically be numbered (0/x).  If this
3313 variable is @code{nil}, the description the user enters will be included
3314 at the beginning of the first article, which will be numbered (1/x).
3315 Default is @code{t}.
3316
3317 @end table
3318
3319 @node Viewing Files
3320 @subsection Viewing Files
3321 @cindex vieving files
3322 @cindex pseudo-articles
3323
3324 After decoding, if the file is some sort of archive, Gnus will attempt
3325 to unpack the archive and see if any of the files in the archive can be
3326 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
3327 containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
3328 uncompress and detar the main file, and then view the two pictures.
3329 This unpacking process is recursive, so if the archive contains archives
3330 of archives, it'll all be unpacked.
3331
3332 Finally, Gnus will normally insert a @dfn{pseudo-article} for each
3333 extracted file into the summary buffer.  If you go to these "articles",
3334 the user will be prompted for a command to run (usually Gnus will make a
3335 suggestion), and then the command will be run.
3336
3337 @vindex gnus-view-pseudo-asynchronously
3338 If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
3339 until the viewing is done before proceeding.
3340
3341 @vindex gnus-view-pseudos
3342 If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
3343 the pseudo-articles into the summary buffer, but view them
3344 immediately.  If this variable is @code{not-confirm}, the user won't even
3345 be asked for a confirmation before viewing is done.
3346
3347
3348 @node Various Article Stuff 
3349 @section Various Article Stuff 
3350
3351 @table @kbd
3352 @item A w
3353 @kindex A w (Summary)
3354 @findex gnus-summary-stop-page-breaking
3355 Remove page breaking from the current article
3356 (@code{gnus-summary-stop-page-breaking}). 
3357 @item A s 
3358 @item A s (Summary)
3359 @findex gnus-summary-isearch-article
3360 Perform an isearch in the article buffer
3361 (@code{gnus-summary-isearch-article}). 
3362 @item A c
3363 @kindex A c (Summary)
3364 @findex gnus-summary-caesar-message
3365 Do a Caesar rotate (rot13) on the article buffer
3366 (@code{gnus-summary-caesar-message}). 
3367 @item A g
3368 @kindex A g (Summary)
3369 @findex gnus-summary-show-article
3370 Select the current article (@code{gnus-summary-show-article}).
3371 @item A t
3372 @kindex A t (Summary)
3373 @findex gnus-summary-toggle-header
3374 Toggle whether to display all headers in the article buffer
3375 (@code{gnus-summary-toggle-header}). 
3376 @item A m
3377 @kindex A m (Summary)
3378 @findex gnus-summary-toggle-mime
3379 Toggle whether to run the article through MIME before displaying
3380 (@code{gnus-summary-toggle-mime}). 
3381 @item V |
3382 @kindex V | (Summary)
3383 @findex gnus-summary-pipe-output
3384 Pipe the current article to a process
3385 (@code{gnus-summary-pipe-output}). 
3386 @end table
3387
3388 There's a battery of commands for washing the article buffer:
3389
3390 @table @kbd
3391 @item A h h
3392 @kindex A h h (Summary)
3393 @findex gnus-article-hide-headers
3394 Hide headers (@code{gnus-article-hide-headers}).
3395 @item A h s
3396 @kindex A h s (Summary)
3397 @findex gnus-article-hide-signature
3398 Hide signature (@code{gnus-article-hide-signature}).
3399 @item A h c
3400 @kindex A h c (Summary)
3401 @findex gnus-article-hide-citation
3402 Hide citation (@code{gnus-article-hide-citation}).
3403 @item A h o
3404 @kindex A h o (Summary)
3405 @findex gnus-article-treat-overstrike
3406 Treat overstrike (@code{gnus-article-treat-overstrike}).
3407 @item A h w
3408 @kindex A h w (Summary)
3409 @findex gnus-article-word-wrap
3410 Do word wrap (@code{gnus-article-word-wrap}).
3411 @item A h d
3412 @kindex A h d (Summary)
3413 @findex gnus-article-remove-cr
3414 Remove CR (@code{gnus-article-remove-cr}).
3415 @item A h q
3416 @kindex A h q (Summary)
3417 @findex gnus-article-de-quoted-unreadable
3418 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
3419 @end table
3420
3421
3422 @node Summary Sorting
3423 @section Summary Sorting
3424 @cindex summary sorting
3425
3426 You can have the summary buffer sorted in various ways, even though I
3427 can't really se why you'd want that.
3428
3429 @table @kbd
3430 @item V s n
3431 @kindex V s n (Summary)
3432 @findex gnus-summary-sort-by-number
3433 Sort by article number (@code{gnus-summary-sort-by-number}).
3434 @item V s a
3435 @kindex V s a (Summary)
3436 @findex gnus-summary-sort-by-author
3437 Sort by author (@code{gnus-summary-sort-by-author}).
3438 @item V s s
3439 @kindex V s s (Summary)
3440 @findex gnus-summary-sort-by-subject
3441 Sort by subject (@code{gnus-summary-sort-by-subject}).
3442 @item V s d
3443 @kindex V s d (Summary)
3444 @findex gnus-summary-sort-by-date
3445 Sort by date (@code{gnus-summary-sort-by-date}).
3446 @end table
3447
3448 @node Finding the Parent
3449 @section Finding the Parent
3450 @cindex parent articles
3451 @cindex refering articles
3452
3453 @findex gnus-summary-refer-parent-article
3454 @kindex ^ (Summary)
3455 If you'd like to read the parent of the current article, and it is not
3456 displayed in the article buffer, you might still be able to.  That is,
3457 if the current group is fetched by NNTP, the parent hasn't expired and
3458 the References in the current article are not mangled, you can just
3459 press @kbd{^} (@code{gnus-summary-refer-parent-article}).  If everything
3460 goes well, you'll get the parent.  If the parent is already displayed in
3461 the summary buffer, point will just move to this article.
3462
3463 @findex gnus-summary-refer-article
3464 @kindex M-^ (Summary)
3465 You can also ask the NNTP server for an arbitrary article, no matter
3466 what group it belongs to.  @kbd{M-^} (@code{gnus-summary-refer-article})
3467 will ask you for a message-id, which is one of those long thingies that
3468 look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to
3469 get it all exactly right.
3470
3471 @vindex gnus-refer-article-method
3472 If the group you are reading is located on a backend that does not
3473 support fetching by Message-ID very well (like @code{nnspool}), you can
3474 set @code{gnus-refer-article-method} to an NNTP method.  It would,
3475 perhaps, be best if the NNTP server you consult is the same as the one
3476 that keeps the spool you are erading from updated, but that's not really
3477 necessary. 
3478
3479 @node Score Files
3480 @section Score Files
3481 @cindex score files
3482
3483 Other people use @dfn{kill files}, but we here at (ding) Gnus Towers
3484 like scoring better than killing, so we'd rather switch than fight.  They
3485 do something completely different as well, so sit up straight and pay
3486 attention!
3487
3488 @vindex gnus-summary-mark-below
3489 All articles have a default score (@code{gnus-summary-default-score}).
3490 This score may be raised or lowered either interactively or by score
3491 files.  Articles that have a score lower than
3492 @code{gnus-summary-mark-below} are marked as read.
3493
3494 Gnus will read any @dfn{score files} that apply to the current group
3495 before generating the summary buffer.
3496
3497 There are several commands reachable from the summary buffer that
3498 inserts commands for scoring articles based on the current article.  You
3499 can, for instance, ask Gnus to lower or increase the score of all
3500 articles with a certain subject.
3501
3502 There are two sorts of scoring entries: Permanent and temporary.
3503 Temporary score entries are self-expiring entries.  Any entries that are
3504 temporary and have not been used for, say, a week, will be removed
3505 silently to help keep the sizes of the score files down.
3506
3507 @menu 
3508 * Summary Score Commands::   Adding score commands to the score file.
3509 * Score Variables::          Customize your scoring.  (My, what terminology).
3510 * Score File Format::        What a score file may contain.
3511 * Score File Editing::       You can edit score files by hand as well.
3512 * Scoring Tips::             How to score effectively.
3513 * Global Score Files::       Earth-spanning, ear-splitting score files.
3514 @end menu
3515
3516 @node Summary Score Commands
3517 @subsection Summary Score Commands
3518 @cindex score commands
3519
3520 General score commands don't actually change score files: 
3521
3522 @table @kbd
3523 @item V S s
3524 @kindex V S s (Summary)
3525 @findex gnus-summary-set-score
3526 Set the score of the current article (@code{gnus-summary-set-score}).  
3527 @item I C-i
3528 @kindex I C-i (Summary)
3529 @findex gnus-summary-raise-score
3530 Increase the score of the current article
3531 (@code{gnus-summary-raise-score}).
3532 @item L C-l
3533 @kindex L C-l (Summary)
3534 @findex gnus-summary-lower-score
3535 Lower the score of the current article
3536 (@code{gnus-summary-lower-score}). 
3537 @item V S c
3538 @kindex V S c (Summary)
3539 @findex gnus-score-change-score-file
3540 Make a different score file the current
3541 (@code{gnus-score-change-score-file}). 
3542 @item V S e
3543 @kindex V S e (Summary)
3544 @findex gnus-score-edit-file
3545 Edit the current score file (@code{gnus-score-edit-file}).  You will be
3546 popped into a @code{gnus-score-mode} buffer (@pxref{Score File
3547 Editing}). 
3548 @end table
3549
3550 The rest of these commands modify the local score file.
3551
3552 @table @kbd
3553 @item V S m
3554 @kindex V S m (Summary)
3555 @findex gnus-score-set-mark-below
3556 Prompt for a score, and mark all articles with a score below this as
3557 read (@code{gnus-score-set-mark-below}).
3558 @item V S E
3559 @kindex V S E (Summary)
3560 @findex gnus-score-set-expunge-below
3561 Expunge all articles with a score below the default score (or the
3562 numeric prefix) (@code{gnus-score-set-expunge-below}).
3563 @end table
3564
3565 Commands for increasing score:
3566
3567 @table @kbd
3568 @item I s t
3569 @kindex I s t (Summary)
3570 @findex gnus-summary-temporarily-raise-by-subject
3571 Increase the current subject temporarily
3572 (@code{gnus-summary-temporarily-raise-by-subject}).
3573 @item I s p
3574 @kindex I s p (Summary)
3575 @findex gnus-summary-raise-by-subject
3576 Increase the current subject permanently
3577 (@code{gnus-summary-raise-by-subject}).
3578 @item I a t
3579 @kindex I a t (Summary)
3580 @findex gnus-summary-temporarily-raise-by-author
3581 Increase the current author temporarily
3582 (@code{gnus-summary-temporarily-raise-by-author}).
3583 @item I a p
3584 @kindex I a p (Summary)
3585 @findex gnus-summary-raise-by-author
3586 Increase the current author permanently
3587 (@code{gnus-summary-raise-by-author}).
3588 @item I i t
3589 @kindex I i t (Summary)
3590 @findex gnus-summary-temporarily-raise-by-id
3591 Increase the current message-id temporarily
3592 (@code{gnus-summary-temporarily-raise-by-id}).
3593 @item I i p
3594 @kindex I i p (Summary)
3595 @findex gnus-summary-raise-by-id
3596 Increase the current message-id permanently
3597 (@code{gnus-summary-raise-by-id}).
3598 @item I t t
3599 @kindex I t t (Summary)
3600 @findex gnus-summary-temporarily-raise-by-thread
3601 Increase the current thread temporarily
3602 (@code{gnus-summary-temporarily-raise-by-thread}).
3603 @item I t p
3604 @kindex I t p (Summary)
3605 @findex gnus-summary-raise-by-subject
3606 Increase the current thread permanently
3607 (@code{gnus-summary-raise-by-subject}).
3608 @item I x t
3609 @kindex I x t (Summary)
3610 @findex gnus-summary-temporarily-raise-by-xref
3611 Increase the current xref temporarily
3612 (@code{gnus-summary-temporarily-raise-by-xref}).
3613 @item I x p
3614 @kindex I x p (Summary)
3615 @findex gnus-summary-raise-by-xref
3616 Increase the current xref permanently
3617 (@code{gnus-summary-raise-by-xref}).
3618 @item I f t
3619 @kindex I f t (Summary)
3620 @findex gnus-summary-temporarily-raise-followups-to-author
3621 Increase followups to the current author temporarily
3622 (@code{gnus-summary-temporarily-raise-followups-to-author}).
3623 @item I f p
3624 @kindex I f p (Summary)
3625 @findex gnus-summary-raise-followups-to-author
3626 Increase followups to the current author permanently
3627 (@code{gnus-summary-raise-followups-to-author}).
3628 @end table
3629
3630 Commands for lowering score:
3631
3632 @table @kbd
3633 @item L s t
3634 @kindex L s t (Summary)
3635 @findex gnus-summary-temporarily-lower-by-subject
3636 Lower the current subject temporarily
3637 (@code{gnus-summary-temporarily-lower-by-subject}).
3638 @item L s p
3639 @kindex L s p (Summary)
3640 @findex gnus-summary-lower-by-subject
3641 Lower the current subject permanently
3642 (@code{gnus-summary-lower-by-subject}).
3643 @item L a t
3644 @kindex L a t (Summary)
3645 @findex gnus-summary-temporarily-lower-by-author
3646 Lower the current author temporarily
3647 (@code{gnus-summary-temporarily-lower-by-author}).
3648 @item L a p
3649 @kindex L a p (Summary)
3650 @findex gnus-summary-lower-by-author
3651 Lower the current author permanently
3652 (@code{gnus-summary-lower-by-author}).
3653 @item L i t
3654 @kindex L i t (Summary)
3655 @findex gnus-summary-temporarily-lower-by-id
3656 Lower the current message-id temporarily
3657 (@code{gnus-summary-temporarily-lower-by-id}).
3658 @item L a p
3659 @kindex L a p (Summary)
3660 @findex gnus-summary-lower-by-id
3661 Lower the current message-id permanently
3662 (@code{gnus-summary-lower-by-id}).
3663 @item L t t
3664 @kindex L t t (Summary)
3665 @findex gnus-summary-temporarily-lower-by-thread
3666 Lower the current thread temporarily
3667 (@code{gnus-summary-temporarily-lower-by-thread}).
3668 @item L t p
3669 @kindex L t p (Summary)
3670 @findex gnus-summary-lower-by-subject
3671 Lower the current thread permanently
3672 (@code{gnus-summary-lower-by-subject}).
3673 @item L x t
3674 @kindex L x t (Summary)
3675 @findex gnus-summary-temporarily-lower-by-xref
3676 Lower the current xref temporarily
3677 (@code{gnus-summary-temporarily-lower-by-xref}).
3678 @item L x p
3679 @kindex L x p (Summary)
3680 @findex gnus-summary-lower-by-xref
3681 Lower the current xref permanently
3682 (@code{gnus-summary-lower-by-xref}).
3683 @item L f t
3684 @kindex L f t (Summary)
3685 @findex gnus-summary-temporarily-lower-followups-to-author
3686 Lower followups to the current author temporarily
3687 (@code{gnus-summary-temporarily-lower-followups-to-author}).
3688 @item L f p
3689 @kindex L f p (Summary)
3690 @findex gnus-summary-lower-followups-to-author
3691 Lower followups to the current author permanently
3692 (@code{gnus-summary-lower-followups-to-author}).
3693 @end table
3694
3695 @node Score Variables
3696 @subsection Score Variables
3697 @cindex score variables
3698
3699 @table @code
3700 @item gnus-kill-killed
3701 @vindex gnus-kill-killed
3702 If this variable is @code{nil}, Gnus will never apply score files to
3703 articles that have already been through the kill process.  While this
3704 may save you lots of time, it also means that if you apply a kill file
3705 to a group, and then change the kill file and want to run it over you
3706 group again to kill more articles, it won't work.  You have to set this
3707 variable to @code{t} to do that.
3708 @item gnus-kill-files-directory
3709 @vindex gnus-kill-files-directory
3710 All kill files will be stored in this directory, which is initialized
3711 from the @samp{SAVEDIR} environment variable by default.
3712 @item gnus-score-file-suffix
3713 @vindex gnus-score-file-suffix
3714 Suffix to add to the group name to arrive at the score file name
3715 (@samp{SCORE} by default.)
3716 @item gnus-score-interactive-default-score
3717 @vindex gnus-score-interactive-default-score
3718 Score used by all the interactive raise/lower commands to raise/lower
3719 score with.  Default is 1000, which may seem excessive, but this is to
3720 ensure that the adaptive scoring scheme gets enough room to play
3721 with.  We don't want the small changes that successive adaptive changes
3722 to overwrite manually entered data.
3723 @item gnus-summary-default-score
3724 @vindex gnus-summary-default-score
3725 Default score of an article, which is 0 by default.
3726 @item gnus-score-over-mark
3727 @vindex gnus-score-over-mark
3728 Mark (in the third column) used for articles with a score over the
3729 default.  Default is @samp{+}.
3730 @item gnus-score-below-mark
3731 @vindex gnus-score-below-mark
3732 Mark (in the third column) used for articles with a score below the
3733 default.  Default is @samp{-}.
3734 @item gnus-score-find-score-files-function
3735 @vindex gnus-score-find-score-files-function
3736 Function used to find score files for the current group.  This function
3737 is called with the name of the group as the argument. 
3738
3739 Predefined functions available are:
3740 @table @code
3741 @item gnus-score-find-single
3742 @findex gnus-score-find-single
3743 Only apply the group's own score file.
3744 @item gnus-score-find-bnews
3745 @findex gnus-score-find-bnews
3746 Apply all score files that match, using bnews syntax.  For instance, if
3747 the current group is @samp{gnu.emacs.gnus}, @samp{gnu.all.SCORE},
3748 @samp{all.emacs.all.SCORE} and @samp{not.alt.all.SCORE} would all
3749 apply.  In short, the instances of @samp{all} in the score file names are
3750 translated into @samp{.*}, and then a regexp match is done.
3751 @item gnus-score-find-hierarchical
3752 @findex gnus-score-find-hierarchical
3753 Apply all score files from all the parent groups.
3754 @end table
3755 @item gnus-kill-expiry-days
3756 @vindex gnus-kill-expiry-days
3757 This variable says how many days should pass before an unused score file
3758 entry should be expired.  The default is 7.
3759 @end table
3760
3761 @node Score File Format
3762 @subsection Score File Format
3763 @cindex score file format
3764
3765 A score file is an emacs-lisp file that normally contains just a single
3766 form.  Casual users are not expected to edit these files, everthing can
3767 be changed from the summary buffer.
3768
3769 Anyway, if you'd like to dig into it yourself, here's an example:
3770
3771 @lisp
3772 (("from"
3773   ("Lars Ingebrigtsen" -10000)
3774   ("Per Abrahamsen")
3775   ("larsi\\|lmi" -50000 nil r))
3776  ("subject"
3777   ("Ding is Badd" nil 728373))
3778  ("xref"
3779   ("alt.politics" -1000 728372 s))
3780  (mark 0)
3781  (expunge -1000)
3782  (mark-and-expunge -10)
3783  (read-only t)
3784  (files "/hom/larsi/News/gnu.SCORE")
3785  (eval (ding)))
3786 @end lisp
3787
3788 This example demonstrates absolutely everything about a score file. 
3789
3790 Even though this looks much like lisp code, nothing here is actually
3791 @code{eval}ed.  The lisp reader is used to read this form, though, so it
3792 has to be legal syntactically, if not semantically.
3793
3794 Six keys are supported by this alist:
3795
3796 @table @code
3797 @item STRING
3798 If the key is a string, it is a header name to perform the scoring on.
3799 Following this key is a random number of element score entries, where
3800 each score entry have one to four elements.  
3801 @enumerate
3802 @item 
3803 The first element is always a string - the @dfn{match element}.
3804 @item 
3805 If the second element is present, it should be a number - the @dfn{score
3806 element}.  This number should be an integer in the neginf to posinf
3807 interval.  If this element is not present, the
3808 @code{gnus-score-interactive-default-score} number will be used instead.
3809 @item 
3810 If the third element is present, it should be a number - the @dfn{date
3811 element}.  This date says when the last time this score entry provided a
3812 match, which provides a mechanism for expiring the score entries.  It
3813 this element is not present, the score entry is premanent.  The date is
3814 represented by the number of days since December 31, 1 CE.
3815 @item 
3816 If the fourth element is present, it should be a symbol - the @dfn{type
3817 element}.  Currently supported are the @code{r} (regexp) and @code{s}
3818 (substring) types.  If this element is not present, Gnus will assume
3819 that substring matching should be used.
3820 @end enumerate
3821
3822 @item mark
3823 The value of this entry should be a number.  Any articles with a score
3824 lower than this number will be marked as read.
3825 @item expunge
3826 The value of this entry should be a number.  Any articles with a score
3827 lower than this number will be removed from the summary buffer.
3828 @item mark-and-expunge
3829 The value of this entry should be a number.  Any articles with a score
3830 lower than this number will be marked as read and removed from the
3831 summary buffer.
3832 @item files
3833 The value of this entry should any number of file names.  These files
3834 are assumed to be score files as well, and will be loaded the same way
3835 this one was.
3836 @item eval
3837 The value of this entry will be @code{eval}el.  This element will be
3838 ignored when handling global score files. 
3839 @item read-only
3840 Read-only score files will not be updated or saved.  Global score files
3841 should feature this atom (@pxref{Global Score Files}).
3842 @end table
3843
3844 @node Score File Editing
3845 @subsection Score File Editing
3846
3847 You normally enter all scoring commands from the summary buffer, but you
3848 might feel the urge to edit them by hand as well, so we've supplied you
3849 with a mode for that.  
3850
3851 It's simply a slightly customized emacs-lisp mode, with these additional
3852 commands:
3853
3854 @table @kbd
3855 @item C-c C-c
3856 @kindex C-c C-c (Score)
3857 @findex gnus-score-edit-done
3858 Save the changes you have made and return to the summary buffer
3859 (@code{gnus-score-edit-done}). 
3860 @item C-c C-d
3861 @kindex C-c C-d (Score)
3862 @findex gnus-score-edit-insert-date
3863 Insert the current date in numerical format
3864 (@code{gnus-score-edit-insert-date}).  This is really the day number, if
3865 you were wondering.
3866 @end table
3867
3868 @node Scoring Tips
3869 @subsection Scoring Tips
3870 @cindex scoring tips
3871
3872 @table . 
3873 @item Crossposts
3874 If you want to lower the score of crossposts, the line to match on is
3875 the Xref header.  
3876 @lisp
3877 ("xref" (" talk.politics.misc:" -1000))
3878 @end lisp
3879 @item Multiple crossposts
3880 If you want to lower the score of articles that have been crossposted to
3881 more than, say, 3 groups:
3882 @lisp
3883 ("xref" (" +[^ ]+:[0-9]+ +[^ ]+:[0-9]+ +[^ ]+:[0-9]+" -1000 nil r))
3884 @end lisp
3885 @end table
3886
3887 @node Global Score Files
3888 @subsection Global Score Files
3889 @cindex global score files
3890
3891 Sure, other newsreaders have "global kill files".  These are usually
3892 nothing more than a single kill file that applies to all groups, stored
3893 under the user's home directory.  Bah!  Puny, weak newsreaders!
3894
3895 What I'm talking about here are Global Score Files.  Score files from
3896 all over the world, from users everywhere, uniting all nations in one
3897 big, happy score file union!  Ange-score!  New and untested!
3898
3899 @vindex gnus-global-score-files
3900 All you have to do to use other people's score files is to set the
3901 @code{gnus-global-score-files}.  One entry for each score file, or each
3902 score file directory.  Gnus will decide by itself what score files are
3903 applicable to which group.
3904
3905 Say you want to use the single score file
3906 @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE} and all
3907 score files in the @file{/ftp@@ftp.some-where:/pub/score} directory.  
3908
3909 @lisp
3910 (setq gnus-global-score-files
3911       '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
3912         "/ftp@@ftp.some-where:/pub/score/"))
3913 @end lisp
3914
3915 @findex gnus-score-search-global-directories
3916 Simple, eh?  Directory names must end with a @samp{/}.  These
3917 directories are typically scanned only once during each Gnus session.
3918 If you feel the need to manually re-scan the remote directories, you can
3919 use the @code{gnus-score-search-global-directories} command.
3920
3921 Note that, at present, using this option will slow down group entry
3922 somewhat.  (That is - a lot.)
3923
3924 If you want to start maintaining score files for other people to use,
3925 just put your score file up for anonymous ftp and announce it to the
3926 world.  Become a retro-moderator!  Participate in the retro-moderator
3927 wars sure to ensue, where retro-moderators battle it out for the
3928 sympathy of the people, luring them to use their score files on false
3929 premises!  Yay!  The net is saved!
3930
3931 Here are some tips for the would-be retro-moderator, off the top of my
3932 head: 
3933
3934 @itemize @bullet
3935 @item 
3936 Articles that are heavily crossposted are probably junk. 
3937 @item
3938 To lower a single inappropriate article, lower by message-id. 
3939 @item
3940 Particularly brilliant authors can be raised on a permanent basis. 
3941 @item
3942 Authors that repeatedly post off-charter for the group can safely be
3943 lowered out of existance.
3944 @item
3945 Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
3946 articles completely.
3947 @item 
3948 Use expiring score entries to keep the size of the file down.  You
3949 should probably have a long expiry period, though, as some sites keep
3950 old articles for a long time.
3951 @end itemize
3952
3953 ... I wonder whether other newsreaders will support global score files
3954 in the future.  *Snicker*.  Yup, any day now, newsreaders like Blue
3955 Wave, xrn and 1stReader are bound to implement scoring.  Should we start
3956 holding our breath yet?
3957
3958 @node Mail Group Commands
3959 @section Mail Group Commands
3960 @cindex mail group commands
3961
3962 Some commands only make sense in mail groups.  If these commands are
3963 illegal in the current group, they will raise a hell and let you know.
3964
3965 All these commands (except the expiry and edit commands) use the
3966 process/prefix convention (@pxref{Process/Prefix}).
3967
3968 @table @kbd
3969 @item V m e
3970 @kindex V m e (Summary)
3971 @findex gnus-summary-expire-articles
3972 Expire all expirable articles in the group
3973 (@code{gnus-summary-expire-articles}).
3974 @item V m DEL
3975 @kindex V m DEL (Summary)
3976 @findex gnus-summary-delete-articles
3977 Delete the mail article.  This is "delete" as in "delete it from your
3978 disk forever and ever, never to return again." Use with caution.
3979 (@code{gnus-summary-delete-article}).
3980 @item V m m
3981 @kindex V m m (Summary)
3982 @findex gnus-summary-move-article
3983 Move the article from one mail group to another
3984 (@code{gnus-summary-move-article}). 
3985 @item V m c
3986 @kindex V m c (Summary)
3987 @findex gnus-summary-copy-article
3988 Copy the article from one group (mail group or not) to a mail group
3989 (@code{gnus-summary-copy-article}).
3990 @item V m r
3991 @kindex V m r (Summary)
3992 @findex gnus-summary-respool-article
3993 Respool the mail article (@code{gnus-summary-move-article}).
3994 @item V m w
3995 @item e
3996 @kindex V m w (Summary)
3997 @kindex e (Summary)
3998 @findex gnus-summary-edit-article
3999 @kindex C-c C-c (Article)
4000 Edit the current article (@code{gnus-summary-edit-article}).  Type
4001 @kbd{C-c C-c} (@kbd{gnus-summary-edit-article-done}) to finish editing
4002 and make the changes permanent.
4003 @end table
4004
4005 @node Various Summary Stuff
4006 @section Various Summary Stuff
4007
4008 @table @kbd
4009 @item V D
4010 @kindex V D (Summary)
4011 @findex gnus-summary-enter-digest-group
4012 If the current article is a digest, you might use this command to enter
4013 you into a group based onthe current digest to ease reading
4014 (@code{gnus-summary-enter-digest-group}).  @xref{nndigest}.
4015 @item V f
4016 @kindex V f (Summary)
4017 @findex gnus-summary-fetch-faq
4018 @vindex gnus-group-faq-directory
4019 Try to fetch the FAQ (list of frequently asked questions) for the
4020 current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the
4021 FAQ from @code{gnus-group-faq-directory}, which is usually a directory
4022 on a remote machine. ange-ftp will be used for fetching the file.
4023 @item &
4024 @kindex & (Summary)
4025 @findex gnus-summary-expand-window
4026 This command will prompt you for a header field, a regular expression to
4027 be matched this field, and a command to be executed if the match is
4028 made. 
4029 @item V C-s
4030 @kindex V C-s (Summary)
4031 @findex gnus-summary-search-article-forward
4032 Search through all subsequent articles for a regexp
4033 (@code{gnus-summary-search-article-forward}). 
4034 @item V C-r
4035 @kindex V C-r (Summary)
4036 @findex gnus-summary-search-article-backward
4037 Search through all previous articles for a regexp
4038 (@code{gnus-summary-search-article-backward}). 
4039 @item V T
4040 @kindex V T (Summary)
4041 @findex gnus-summary-toggle-truncation
4042 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
4043 @item V e
4044 @kindex V e (Summary)
4045 @findex gnus-summary-expand-window
4046 Expand the summary buffer window (@code{gnus-summary-expand-window}).
4047 @item V S
4048 @kindex V S (Summary)
4049 @findex gnus-summary-reselect-current-group
4050 Exit this group, and then enter it again
4051 (@code{gnus-summary-reselect-current-group}).
4052 @item V d
4053 @kindex V d (Summary)
4054 @findex gnus-summary-describe-group
4055 Give a brief description of the current group
4056 (@code{gnus-summary-describe-group}).  If given a prefix, force reading
4057 new description from the server. 
4058 @item V g
4059 @item M-g
4060 @kindex V g (Summary)
4061 @kindex M-g (Summary)
4062 @findex gnus-summary-rescan-group
4063 Exit group, check for new articles in the group, and select the group
4064 (@code{gnus-summary-rescan-group}).
4065 @item V
4066 @kindex V (Summary)
4067 @findex gnus-version
4068 Display the Gnus version numbers (@code{gnus-version}).
4069 @item V ?
4070 @kindex V ? (Summary)
4071 @findex gnus-summary-describe-briefly
4072 Give a very brief description of the most important summary keystrokes
4073 (@code{gnus-summary-describe-briefly}). 
4074 @item V i
4075 @kindex V i (Summary)
4076 @findex gnus-info-find-node
4077 Go to the Gnus info node (@code{gnus-info-find-node}).
4078 @end table
4079
4080 @vindex gnus-summary-prepare-hook
4081 @code{gnus-summary-prepare-hook} is called after the summary buffer has
4082 been generated.  You might use it to, for instance, hilight lines, modify
4083 the look, or anything else you feel like.  I don't care.
4084
4085 @node The Article Buffer
4086 @chapter The Article Buffer
4087 @cindex article buffer
4088
4089 The articles are displayed in the article buffer, of which there is only
4090 one.  All the summary buffer share the same article buffer.
4091
4092 @menu
4093 * Hiding Headers::        Deciding what headers should be displayed.
4094 * Using Mime::            Pushing articles through MIME before reading them.
4095 * Customizing Articles::  Tailoring the look of the articles.
4096 * Article Keymap::        Keystrokes available in the article buffer
4097 * Misc Article::          Other stuff.
4098 @end menu
4099
4100 @node Hiding Headers
4101 @section Hiding Headers
4102 @cindex hiding headers
4103 @cindex deleting headers
4104
4105 The top section of each article is the @dfn{header}.  (The rest is the
4106 @dfn{body}, but you may have guessed that already.) 
4107
4108 @vindex gnus-show-all-headers
4109 There is a lot of useful information in the header: the name of the
4110 person who wrote the article, the date and the subject of the article.
4111 That well and nice, but there's also lots of information most people do
4112 not want to see - what systems the article has passed through before
4113 reaching you, the message id, the references, etc. ad nauseum - and
4114 you'll probably want to get rid of some of those lines.  If you want to
4115 keep all those lines in the article buffer, you can set
4116 @code{gnus-show-all-headers} to @code{t}.
4117
4118 Gnus provides you with two variables for sifting header lines:
4119
4120 @table @code
4121 @item gnus-visible-headers
4122 @vindex gnus-visible-headers
4123 If this variable is non-@code{nil}, it should be a regular expression
4124 that says what header lines you wish to keep in the article buffer.  All
4125 header lines that does not match this variable will be hidden.
4126
4127 For instance, if you only want to see the name of the person who wrote
4128 the article and the subject, you'd say:
4129
4130 @lisp
4131 (setq gnus-visible-headers "^From:\\|^Subject:")
4132 @end lisp
4133
4134 @item gnus-ignored-headers
4135 @vindex gnus-ignored-headers
4136 This variable is the reverse of @code{gnus-visible-headers}.  If this
4137 variable is set (and @code{gnus-visible-headers} is @code{nil}), it
4138 should be a regular expression that matches all lines that you want to
4139 hide.  All lines that does not match this variable will remain visible.
4140
4141 For instance, if you just want to get rid of the references line and the
4142 xref line, you might say:
4143
4144 @lisp
4145 (setq gnus-ignored-headers "^References:\\|^Xref:")
4146 @end lisp
4147
4148 Note that if @code{gnus-visible-headers} is non-@code{nil}, this
4149 variable will have no effect.
4150 @end table
4151
4152 @vindex gnus-sorted-header-list
4153 Gnus can also sort the headers for you.  (It does this by default.)  You
4154 can control the sorting by setting the @code{gnus-sorted-header-list}
4155 variable.  It is a list of regular expressions that says in what order
4156 the header lines are to be displayed.
4157
4158 For instance, if you want the name of the author of the article first,
4159 and then the subject, you might say something like:
4160
4161 @lisp
4162 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
4163 @end lisp
4164
4165 Any headers that are to remain visible, but are not listed in this
4166 variable, will be displayed in random order after all the headers that
4167 are listed in this variable.
4168
4169 @node Using Mime
4170 @section Using Mime
4171 @cindex MIME
4172
4173 Mime is a standard for waving your hands through the air, aimlessly,
4174 while people stand around yawning.
4175
4176 MIME, however, is a standard for encoding your articles, aimlessly,
4177 while all newsreaders die of fear.
4178
4179 MIME may specify what character set the article uses, the encoding of
4180 the characters, and it also makes it possible to embed pictures and
4181 other naughty stuff in innocent-looking articles.
4182
4183 @vindex gnus-show-mime
4184 @vindex gnus-show-mime-method
4185 Gnus handles MIME by shoving the articles through
4186 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
4187 default.  Set @code{gnus-show-mime} to @code{t} if you want to use MIME all the
4188 time; it might be best just use the toggling functions from the summary
4189 buffer to avoid getting nasty surprises (for instance, you enter the
4190 group @samp{alt.sing-a-long} and, before you know it, MIME has decoded
4191 the sounds file in the article and some horrible sing-a-long song comes
4192 streaming out out your speakers, and you can't find the volume button,
4193 because there isn't one, and people are starting to look at you, and you
4194 try to stop the program, but you can't, and you can't find the program
4195 to control the volume, and everybody else in the room suddenly decides
4196 to look at you disdainfully, and you'll feel rather stupid.)
4197
4198 Any similarity to real events and people is purely coincidental.  Ahem.
4199
4200 @node Customizing Articles
4201 @section Customizing Articles
4202 @cindex article customization
4203
4204 @vindex gnus-article-display-hook
4205 The @code{gnus-article-display-hook} is called after the article has
4206 been inserted into the article buffer.  It is meant to handle all
4207 treatment of the article before it is displayed.  By default it contains
4208 @code{gnus-article-hide-headers}, which hides unwanted headers.
4209
4210 @findex gnus-article-subcite
4211 @findex gnus-article-hide-signature
4212 @findex gnus-article-hide-citation
4213 Other useful functions you might add to this hook is
4214 @code{gnus-article-hide-citation} (which hides all cited text);
4215 @code{gnus-article-hide-signature} (which, umn, hides the signature);
4216 @code{gnus-article-subcite} (which tries to clean up the mess supercite
4217 makes in The Hands Of The Mad; @code{gnus-article-treat-overstrike}
4218 (which treats @samp{^H_} in a reasonable manner); and
4219 @code{gnus-article-remove-cr} (which removes trailing carriage returns).
4220
4221 You can, of course, write your own functions.  The functions are called
4222 in the article buffer, and you can do anything you like, pretty much.
4223 There is no information that you have to keep in the buffer - you can
4224 change everything.
4225
4226 @node Article Keymap
4227 @section Article Keymap
4228
4229 Most of the keystrokes in the summary buffer can also be used in the
4230 article buffer.  They should behave as if you typed them in the summary
4231 buffer, which means that you don't actually have to have a summary
4232 buffer displayed when you're reading.  You can do it all from the
4233 article buffer.
4234
4235 A few additional keystrokes are available:
4236
4237 @table @kbd
4238 @item SPACE
4239 @kindex SPACE (Article)
4240 @findex gnus-article-next-page
4241 Scroll forwards one page (@code{gnus-article-next-page}).
4242 @item DEL
4243 @kindex DEL (Article)
4244 @findex gnus-article-prev-page
4245 Scroll backwards one page (@code{gnus-article-prev-page}).
4246 @item C-c ^
4247 @kindex C-c ^ (Article)
4248 @findex gnus-article-refer-article
4249 If point is in the neighborhood of a message-id and you press @kbd{r},
4250 Gnus will try to get that article from the server.  (Only available with
4251 nntp).  (@code{gnus-article-refer-article}).
4252 @item C-c C-m
4253 @kindex C-c C-m (Article)
4254 @findex gnus-article-mail
4255 Send a reply to the address near point (@code{gnus-article-mail}). 
4256 @item C-c C-M
4257 @kindex C-c C-M (Article)
4258 @findex gnus-article-mail-with-original
4259 Send a reply to the address near point and include the original article
4260 (@code{gnus-article-mail-with-original}). 
4261 @item s
4262 @kindex s (Article)
4263 @findex gnus-article-show-summary
4264 Reconfigure the buffers so that the summary buffer becomes visible
4265 (@code{gnus-article-show-summary}).
4266 @item ?
4267 @kindex ? (Article)
4268 @findex gnus-article-describe-briefly
4269 Give a very brief description of the available keystrokes
4270 (@code{gnus-article-describe-briefly}). 
4271 @end table
4272
4273 @node Misc Article
4274 @section Misc Article
4275
4276 @table @code
4277 @vindex gnus-article-prepare-hook
4278 @item gnus-article-prepare-hook
4279 This hook is called right after the article has been inserted into the
4280 article buffer.  It is mainly intended for functions that do something
4281 depending on the contents; it should probably not be used for changing
4282 the contents of the article buffer.
4283 @vindex gnus-article-display-hook
4284 @item gnus-article-display-hook
4285 This hook is called as the last thing when displaying an article, and is
4286 intended for modifying the contents of the buffer, highlight, hiding
4287 headers, and the like.
4288 @vindex gnus-article-mode-line-format
4289 @item gnus-article-mode-line-format
4290 This variable is a format string along the same lines as
4291 @code{gnus-summary-mode-line-format}.  It accepts exactly the same
4292 format specifications as that variable.
4293 @vindex gnus-break-pages
4294 @item gnus-break-pages
4295 Controls whether @dfn{page breaking} is to take place.  If this variable
4296 is non-@code{nil}, the articles will be divided into pages whenever a
4297 page delimeter appears in the article.  If this variable is @code{nil},
4298 paging will not be done.
4299 @item gnus-page-delimeter
4300 @vindex gnus-page-delimiter
4301 This is the delimeter mentioned above.  By default, it is @samp{^L}
4302 (form linefeed).
4303 @end table
4304
4305 @node Various
4306 @chapter Various
4307
4308 @menu
4309 * Interactive::                Making Gnus ask you many questions.
4310 * Windows Configuration::      Configuring the Gnus buffer windows.
4311 * Various Various::            Things that are really various.
4312 @end menu
4313
4314 @node Interactive
4315 @section Interactive
4316 @cindex interaction
4317
4318 @table @code
4319 @item gnus-novice-user
4320 @vindex gnus-novice-user
4321 If this variable is non-@code{nil}, you are either a newcomer to the
4322 usenet world, or you are very cautious, which is a nice thing to be,
4323 really.  You will be given questions of the type "Are you sure you want
4324 to do this?" before doing anything dangerous.
4325 @item gnus-expert-user
4326 @vindex gnus-expert-user
4327 If this variable is non-@code{nil}, you will never ever be asked any
4328 questions by Gnus.  It will simply assume you know what your are doing,
4329 no matter how strange.
4330 @item gnus-interactive-catchup
4331 @vindex gnus-interactive-catchup
4332 Require confirmation before catching up a group if non-@code{nil}.
4333 @item gnus-interactive-post
4334 @vindex gnus-interactive-post
4335 If non-@code{nil}, the user will be prompted for a group name when
4336 posting an article.
4337 @item gnus-interactive-exit
4338 @vindex gnus-interactive-exit
4339 Require confirmation before exiting Gnus.
4340 @end table
4341
4342 @node Windows Configuration
4343 @section Windows Configuration
4344 @cindex windows configuration
4345
4346 No, there's nothing here about X, so be quiet.
4347
4348 @table @code
4349 @item gnus-use-full-window
4350 @vindex gnus-use-full-window
4351 If non-@code{nil}, Gnus will delete all other windows and occupy the
4352 entire Emacs screen by itself.  It is @code{t} by default.
4353 @item gnus-window-configuration
4354 @vindex gnus-window-configuration
4355 This variable describes how much space each Gnus buffer should be given,
4356 compared to the other Gnus buffers.  Here's an example:
4357
4358 @lisp
4359 (setq gnus-window-configuration
4360   '((summary (0 1 0))
4361     (groups (1 0 0))
4362     (article (0 3 10))))
4363 @end lisp
4364
4365 This variable is a list of lists, where each of these small lists is on
4366 the form @var{(action (g s a))}.  As you can see, there are three
4367 possible @var{action}s - @code{group} (which is what happens when
4368 you first start Gnus, or returns from the summary buffer),
4369 @code{summary} (which is what happens when there are no unread articles
4370 in the group, and @code{article} (which is what happens when there
4371 is an unread article in the group). 
4372
4373 We see that in the first two actions, the respective buffers will fill
4374 the screen, and in the last, the article buffer will take ten lines for
4375 each three the summary buffer gets.
4376
4377 @findex gnus-window-configuration-split
4378 This variable can also have a function as its value.  In that case,
4379 whenever Gnus tries to configure the Gnus buffers, that function will be
4380 called with the @var{action} as its parameter.  There is one pre-made
4381 function supplied, @code{gnus-window-configuration-split}, which may be
4382 suitable if you have a very wide Emacs window, and want to have the
4383 summary buffer and the article buffer side by side.
4384 @end table
4385
4386 @node Various Various
4387 @section Various Various
4388 @cindex mode lines
4389 @cindex highlights
4390
4391 @table @code
4392 @item gnus-updated-mode-lines
4393 @vindex gnus-updated-mode-lines
4394 This is a list of buffers that should keep their mode lines updated.
4395 The list may contain the symbols `group', `article' and `summary'.  If
4396 the corresponding symbol is present, Gnus will keep that mode line
4397 updated with information that may be pertinent.  If this variable is
4398 @code{nil}, screen refresh may be quicker.
4399
4400 @item gnus-mode-non-string-length
4401 @vindex gnus-mode-non-string-length
4402 By default, Gnus displays information of article in the mode lines of
4403 the summary and article buffers.  The information Gnus wishes to display
4404 (eg. the subject of the article) is often longer than the mode lines,
4405 and therefore have to be cut off at some point.  This variable says how
4406 long the other info on the line is (ie. the non-info part).  If you put
4407 additional elements on the mode line (eg. a clock), you should modify
4408 this variable:
4409 @c Hook written by Keinonen Kari <kk85613@cs.tut.fi>.
4410 @lisp
4411 (add-hook 'display-time-hook
4412           (lambda ()
4413             (setq gnus-mode-non-string-length
4414                   (+ 21 (length display-time-string)))))
4415 @end lisp
4416
4417 @item gnus-visual
4418 @vindex gnus-visual
4419 If @code{nil}, Gnus won't attempt to create menus or use fancy colours
4420 or fonts.  This will also inhibit loading the @file{gnus-visual.el}
4421 file.
4422 @item gnus-mouse-face
4423 @vindex gnus-mouse-face
4424 This is the face (ie. font) used for mouse highlighting in Gnus.  No
4425 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
4426 @end table
4427
4428 @node Customization
4429 @chapter Customization
4430 @cindex general customization
4431
4432 All variables are properly documented elsewhere in this manual.  This
4433 section is designed to give general pointers on how to customize Gnus
4434 for some quite common situations.
4435
4436 @menu
4437 * Slow NNTP Connection::      You run a local Emacs and get the news elsewhere.
4438 * Slow Terminal Connection::  You run a remote Emacs.
4439 * Little Disk Space::         You feel that having large setup files is icky.
4440 * Slow Machine::              You feel like buying a faster machine.
4441 @end menu
4442
4443 @node Slow NNTP Connection
4444 @section Slow NNTP Connection
4445
4446 If you run Emacs on a machine locally, and get your news from a machine
4447 over some very thin strings, you want to cut down on the amount of data
4448 Gnus has to get from the NNTP server.
4449
4450 @table @code
4451 @item gnus-read-active-file
4452 Set this to @code{nil}, which will inhibit Gnus from requesting the
4453 entire active file from the server.  This file is often v.  large.  You
4454 also have to set @code{gnus-check-new-news} and
4455 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
4456 doesn't suddenly decide to fetch the active file anyway.  Note that this
4457 will make it difficult for you to get hold of new groups.
4458 @item gnus-nov-is-evil
4459 This one has to be @code{nil}.  If not, grabbing article headers from
4460 the NNTP server will not be very fast.  Not all NNTP servers support
4461 XOVER; Gnus will detect this by itself.
4462 @end table
4463
4464 @node Slow Terminal Connection
4465 @section Slow Terminal Connection
4466
4467 Let's say you use your home computer for dialling up the system that
4468 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
4469 amount of data that is sent over the wires as much as possible.
4470
4471 @table @code
4472 @item gnus-auto-center-summary
4473 Set this to @code{nil} to inhibit Gnus from recentering the summary
4474 buffer all the time.
4475 @item gnus-visible-headers
4476 Cut down on the headers that are included in the articles to the
4477 minimum.  You can, in fact, make do without them altogether - most of the
4478 useful data is in the summary buffer, anyway.  Set this variable to
4479 @samp{"^NEVVVVER"} or @samp{"From:"}, or whatever you feel you need.
4480 @item gnus-article-display-hook
4481 Set this hook to all the available hiding commands:
4482 @lisp
4483 (setq gnus-article-display-hook 
4484       '(gnus-article-hide-headers gnus-article-hide-signature
4485         gnus-article-hide-citation))
4486 @end lisp
4487 @item gnus-use-full-window
4488 By setting this to @code{nil}, you can make all the windows smaller.
4489 While this doesn't really cut down much generally, it means that you
4490 have to see smaller portions of articles before deciding that you didn't
4491 want to read them anyway.
4492 @item gnus-thread-hide-subtree
4493 If this is non-@code{nil}, all threads in the summary buffer will be
4494 hidden initially.
4495 @item gnus-updated-mode-lines
4496 If this is @code{nil}, Gnus will not put information in the buffer mode
4497 lines, which might save some time.
4498 @end table
4499
4500 @node Little Disk Space
4501 @section Little Disk Space
4502
4503 The startup files can get rather large, so you may want to keep their
4504 sizes down a bit if you are running out of space.
4505
4506 @table @code
4507 @item gnus-save-newsrc-file
4508 If this is @code{nil}, Gnus will never save @file{.newsrc} - it will
4509 only save @file{.newsrc.eld}.  This means that you will not be able to
4510 use any other newsreaders than Gnus.
4511 @item gnus-save-killed-list
4512 If this is @code{nil}, Gnus will not save the list of dead groups.  That
4513 means that Gnus will not know whether groups are new or old, which makes
4514 automatic handling of new groups impossible.  You should also set
4515 @code{gnus-check-new-newsgroups} and @code{gnus-check-bogus-newsgroups}
4516 to @code{nil} if you set this variable to @code{nil}.
4517 @end table
4518
4519 @node Slow Machine
4520 @section Slow Machine
4521
4522 If you have a slow machine, or are just really impatient, there are a
4523 few things you can do to make Gnus run faster.
4524
4525 Set @code{gnus-read-active-file}, @code{gnus-check-new-newsgroups},
4526 @code{gnus-check-bogus-newsgroups} to @code{nil} to make startup faster.
4527
4528 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
4529 @code{nntp-xover-is-evil} to @code{nil} to make entering and exiting the
4530 summary buffer faster.
4531
4532 Set @code{gnus-article-display-hook} to @code{nil} to make article
4533 processing a bit faster.
4534
4535 @node Troubleshooting
4536 @chapter Troubleshooting
4537 @cindex troubleshooting
4538
4539 (ding) Gnus work so well straight out of the box, so I can't imagine any
4540 problems, really.  
4541
4542 Ahem.
4543
4544 Make sure your computer is switched on.
4545
4546 Make sure that you really load the current Gnus version.  If you have
4547 been running @sc{GNUS}, you need to exit Emacs and start it up again before
4548 Gnus will work.
4549
4550 Read the help group (@kbd{M h} in the group buffer) for a FAQ and a
4551 how-to. 
4552
4553 If all else fails, report the problem as a bug (@pxref{Reporting
4554 Bugs}). 
4555
4556 @node Reporting Bugs
4557 @chapter Reporting Bugs
4558 @cindex bugs
4559 @cindex reporting bugs
4560
4561 @kindex M-x gnus-bug
4562 @findex gnus-bug
4563 If you find a bug in (ding) Gnus, you can report it with the @kbd{M-x
4564 gnus-bug} command.  @code{(setq debug-on-error t)}, and send me the
4565 backtrace.  I will fix bugs, but I can only fix them if you send me a
4566 precise description as to how to reproduce the bug.
4567
4568 If you just need help, you are better off asking on
4569 @samp{gnu.emacs.gnus}.
4570
4571 @node Index
4572 @chapter Index
4573 @printindex cp
4574
4575 @node Key Index
4576 @chapter Key Index
4577 @printindex ky
4578
4579 @summarycontents
4580 @contents
4581 @bye
4582
4583 \f
4584 @c Local Variables:
4585 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
4586 @c End: