Initial revision
[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 1.0 Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @iftex
9 @finalout
10 @end iftex
11 @setchapternewpage odd
12 @c      @smallbook
13 @comment %**end of header (This is for running Texinfo on a region.)
14 @tex
15 \overfullrule=0pt
16 %\global\baselineskip 30pt      % For printing in double spaces
17 @end tex
18
19 @ifinfo
20
21 This file documents GNUS, the GNU Emacs newsreader.
22
23 Copyright (C) 1989, 1990, 1993 Free Software Foundation, Inc.
24
25 Permission is granted to make and distribute verbatim copies of
26 this manual provided the copyright notice and this permission notice
27 are preserved on all copies.
28
29 @ignore
30 Permission is granted to process this file through Tex and print the
31 results, provided the printed document carries copying permission
32 notice identical to this one except for the removal of this paragraph
33 (this paragraph not being relevant to the printed manual).
34
35 @end ignore
36 Permission is granted to copy and distribute modified versions of this
37 manual under the conditions for verbatim copying, provided also that the
38 entire resulting derived work is distributed under the terms of a
39 permission notice identical to this one.
40
41 Permission is granted to copy and distribute translations of this manual
42 into another language, under the above conditions for modified versions.
43 @end ifinfo
44
45 @titlepage
46 @title Gnus Manual
47
48 @author by Lars 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 News Reader
71
72 You can read news (and mail) from within Emacs by using (ding) Gnus.  The
73 news can be gotten by any nefarious means you can think of - NNTP, local
74 spool, mail spool.  All at the same time, if you want to push your luck.
75
76 @menu
77 * History::                 How Gnus got where it is today.
78 * Starting Up::             Finding news can be a pain.
79 * The Newsgroup Buffer::    Treating newsgroups.
80 * The Summary Buffer::      Reading articles.
81 * The Article Buffer::      Doing stuff to articles.
82 * Various::                 General options.
83 * Customization::           Tailoring Gnus to your needs.
84 * Troubleshooting::         What you might try if things do not work.
85 * Reporting Bugs::          Bugs? What bugs?!
86 * Index::                   Index.
87 * Key Index::               Key Index.
88 @end menu
89
90 @node History
91 @chapter History
92
93 GNUS was written by Masanobu UMEDA.  When autumn crept up in '94, Lars
94 Ingebrigtsen grew bored and decided to write (ding) Gnus.
95
96 (ding) Gnus is based on GNUS 4.1 and includes bits and pieces by Felix
97 Lee and jwz.
98
99 The recommended pronounciation of the name this program is "ding
100 guh-noose", with "ding" being half-sung in a loud, high-pitched voice,
101 and "guh-noose" being grumbled and a disaffected fashion.  Any irritation
102 and/or damage this name may cause you is not the responsibility of the
103 author, even though you might like to strangle him for the stupid idea.
104
105 "(ding)", is, of course, short for "Ding Is Not Gnus", which is a total
106 and utter lie, but who cares? (Besides, the "Gnus" in this abbreviation
107 should probably be pronounced "news" as UMEDA intended, which makes it a
108 more appropriate name, don't you think?)
109
110 @menu
111 * Compatibility::          Just how compatible is (ding) Gnus with GNUS?
112 * New Features::           A short description of all the new stuff in Gnus.
113 @end menu
114
115 @node Compatibility
116 @section Compatibility
117
118 (ding) Gnus was designed to be fully compatible with GNUS.  Almost all
119 key binding have been kept.  More key binding have been added, of course,
120 but only in one or two obscure cases have key bindings been changed.
121
122 All commands have kept their names.  Some internal functions have changed
123 their names.
124
125 Even though old methods of doing things are still supported, only the
126 new methods are documented in this manual.  If you detect a new method of
127 doing something while reading this manual, that does not mean you have
128 to stop doing it the old way.
129
130 (ding) Gnus understands all GNUS startup files.
131
132 @kindex M-x gnus-bug
133 Overall, a casual user who hasn't written much code that depends on GNUS
134 internals should suffer no problems.  If problems occur, please let me
135 know (@kbd{M-x gnus-bug}).
136
137 However, code that depends on the buffers looking a particular way will
138 almost invaribaly fail.  For instance, the Summary buffer does not
139 display article numbers by default.
140
141 @node New Features
142 @section New Features
143
144 The look of all buffers can be changed by setting format-like variables.
145  
146 Local spool and several NNTP servers can be used at once.  Virtual
147 newsgroups and private mail newsgroups are featured.
148
149 Killing can be done on arbitrary headers.
150
151 Gnus can generate dummy roots for threads that have lost their roots
152 (thereby gathering loose sub-threads in one thread) or it can go back
153 and retrieve enough headers to build a complete thread.
154
155 Killed groups can be displayed in the Newsgroup buffer, and you can read
156 them as well.
157
158 Gnus can do partial updates of new articles - you do not have to
159 retrieve the entire active file just to check for new articles in a few
160 groups.
161
162 Gnus implements a sliding scale of subscribedness to newsgroups.
163
164 Gnus can sort the displayed headers of articles.
165
166 @node Starting Up
167 @chapter Starting Gnus
168
169 @kindex M-x gnus
170 If your systems administrator has set thing up properly, starting Gnus
171 and reading news is extremely easy - you just type @kbd{M-x gnus}.
172
173 If things do not go smoothly at startup, you have to twiddle some
174 variables. 
175
176 @menu
177 * Finding the News::    Choosing a method for getting news.
178 * First Time::          What does Gnus do the first time you start it?
179 * New Newsgroups::      What is Gnus supposed to do with new newsgroups?
180 * Startup Files::       Those pesky startup files - @file{.newsrc}.
181 * Auto Save::           Recovering from a crash.
182 * The Active File::     Reading the active file over a slow line Takes Time.
183 * Startup Variables::   Other variables you might change.
184 @end menu
185
186 @node Finding the News
187 @section Finding the News
188
189 @vindex gnus-default-select-method
190 The @code{gnus-default-select-method} variable controls how Gnus finds
191 news.  This variable should be a list where the first element says "how"
192 and the second element says "where".
193
194 For instance, if you want to get your daily dosage of news from the NNTP
195 server "news.friendly.server", you'd say:
196
197 @example
198 (setq gnus-default-select-method '(nntp "news.friendly.server"))
199 @end example
200
201 If you want to use a local spool, say:
202
203 @example
204 (setq gnus-default-select-method '(nnspool ""))
205 @end example
206
207 If this variable is not set, Gnus will take a look at the
208 @code{NNTPSERVER} environment variable.  If that isn't set either, it
209 will try to use the machine that is running Emacs as an NNTP server.
210
211 @vindex gnus-secondary-servers
212 You can also make Gnus prompt you interactively for the name of an NNTP
213 server.  If you give a non-numerical prefix to `gnus' (ie. `C-u M-x
214 gnus'), Gnus will let you choose between the servers in the
215 @code{gnus-secondary-servers} variable (if any).  You can also just type
216 in the name of any server you feel like visiting.
217
218 However, if you use one NNTP server regularly, and is just interested in
219 a couple of newsgroups from a different server, you would be better
220 served by using the @code{gnus-group-browse-foreign-server} command from
221 the Newsgroup buffer.  It will let you have a look at what groups are
222 available, and you can subscribe to any of the groups you want to.  This
223 also makes @file{.newsrc} maintenance much tidier.
224
225 @node First Time
226 @section The First Time
227
228 One time has to be the first, but it doesn't have to be painful.
229
230 If no startup files exist, Gnus will try to determine what newsgroups
231 should be subscribed by default.
232
233 @vindex gnus-default-subscribed-newsgroups
234 If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
235 will subscribe you to just those newsgroups in that list, leaving the
236 rest killed.  Your systems administrator should have set this variable to
237 something useful.
238
239 Since he hasn't, Gnus will ask the NNTP server (if you use one) if it
240 has any idea. 
241
242 If that fails as well, Gnus will just subscribe you to a few randomly
243 picked newsgroups (ie. @samp{*.newusers}).
244
245 If @code{gnus-default-subscribed-newsgroups} is t, Gnus will just use
246 the normal functions for treating new newsgroups, and not do anything
247 special.
248
249 @node New Newsgroups
250 @section New Newsgroups
251
252 @vindex gnus-subscribe-newsgroup-method
253 What Gnus does when it encounters a new newsgroup is determined by the
254 @code{gnus-subscribe-newsgroup-method} variable.
255
256 This variable should contain a function.  Some handy ready-made values
257 are:
258
259 @table @code
260 @item gnus-subscribe-randomly
261 @vindex gnus-subscribe-randomly
262 Subscribe all new newsgroups randomly.
263
264 @item gnus-subscribe-alphabetically
265 @vindex gnus-subscribe-alphabetically
266 Subscribe all new newsgroups alphabetically.
267
268 @item gnus-subscribe-hierarchically
269 @vindex gnus-subscribe-hierarchically
270 Subscribe all new newsgroups hierarchially.
271
272 @item gnus-subscribe-interactively
273 @vindex gnus-subscribe-interactively
274 Subscribe new newsgroups interactively.  This means that Gnus will ask
275 you about *all* new newsgroups.
276
277 @item gnus-subscribe-zombies
278 @vindex gnus-subscribe-zombies
279 Make all new newsgroups zombies.  You can browse the zombies later and
280 either kill them off properly or subscribe to them.  This is the
281 default. 
282
283 @end table
284
285 @vindex gnus-subscribe-hierarchical-interactive
286 A closely related variable is
287 @code{gnus-subscribe-hierarchical-interactive}.  If this variable is
288 non-nil, Gnus will ask you in a hierarchial fashion whether to subscribe
289 to new newsgroups or not.  Gnus will ask you for each sub-hierarchy
290 whether you want to descend the hierarchy or not. 
291
292 @vindex gnus-check-new-newsgroups
293 If you are satisfied that you never really want to see any new
294 newsgroups, you could set @code{gnus-check-new-newsgroups} to
295 nil.  This will also save you some time at startup.  Even if this
296 variable is nil, you can always subscribe to the new newsgroups
297 by just pressing @kbd{U} in the @dfn{Newsgroup buffer}.
298
299 @node Startup Files
300 @section Startup Files
301
302 Now, you all know about the @file{.newsrc} files.  All information about
303 what newsgroups you read is traditionally stored in this file, which has
304 a rather rigid structure.
305
306 Things got a bit more complicated with GNUS.  In addition to keeping the
307 @file{.newsrc} file updated, it also used a file called @file{.newsrc.el} for
308 storing all the information that didn't fit into the @file{.newsrc}
309 file.  (Actually, it duplicated everything in the @file{.newsrc} file.)
310 GNUS would read whichever one of these files that were the most recently
311 saved, which enabled people to swap between GNUS and other newsreaders.
312
313 That was kinda silly, so (ding) Gnus went one better: In addition to the
314 @file{.newsrc} and @file{.newsrc.el} files, (ding) Gnus also has a file
315 called @file{.newsrc.eld}.  It will read whichever of these files that
316 are most recent, but it will never write a @file{.newsrc.el} file. 
317
318 @vindex gnus-save-newsrc-file
319 You can also turn off writing @file{.newsrc} by setting
320 @code{gnus-save-newsrc-file} to nil, which means you can delete
321 the file and save some space, as well as some time when quitting
322 Gnus.  However, that will make it impossible to use other newsreaders
323 than (ding) Gnus.  But hey, who would want to, right? 
324
325 @vindex gnus-save-killed-list
326 If @code{gnus-save-killed-list} is nil, Gnus will not save the list of
327 killed groups to the startup file.  This will save both time (when
328 starting and quitting) and space (on disk).  It will also means that Gnus
329 has no record of what newsgroups are new or old, so the automatic new
330 newsgroups subscription methods become meaningless.  You should always
331 set `gnus-check-new-newsgroups' to nil if you set this variable to
332 nil.
333
334 @vindex gnus-startup-file
335 The @code{gnus-startup-file} variable says where the startup files
336 are.  The default value is @file{"~/.newsrc"}, with the Gnus (El Dingo)
337 startup file being whatever that one is with a @samp{".eld"} appended.
338
339 @vindex gnus-save-newsrc-hook
340 @code{gnus-save-newsrc-hook} is called before saving the @file{.newsrc}
341 file. 
342
343 @node Auto Save
344 @section Auto Save
345
346 Whenever you do something that changes the Gnus data (reading articles,
347 cathing up, killing/subscribing to newsgroups,) the change is added to a
348 special @dfn{dribble} buffer.  This buffer is auto-saved the normal Emacs
349 way.
350
351 If Gnus detects this file at startup, it will ask the user whether to
352 read it.
353
354 The auto save file is deleted whenever the real startup file is saved. 
355
356 @node The Active File
357 @section The Active File
358
359 When Gnus starts, or indeed whenever it tries to determine if new
360 articles has arrived, it reads the active file.  This is a file stored on
361 the NNTP server or in the local spool. 
362
363 @vindex gnus-ignored-newsgroups
364 Before examining the active file to see what newsgroups are available,
365 Gnus deletes all lines in this file that match
366 @code{gnus-ignored-newsgroups}.  You may even use this variable to make
367 Gnus ignore hierarchies you aren't interested in.
368
369 @vindex gnus-read-active-file
370 The active file can be rather Huge, so if you have a slow network, you
371 can set @code{gnus-read-active-file} to nil to prevent Gnus from reading
372 the entire active file.
373
374 Gnus will try to make do by just getting information on the newsgroups
375 that you actually subscribe to.
376
377 Note that if you subscribe to lots and lots of newsgroups, setting this
378 variable to nil will probabaly make Gnus slower, not faster.
379
380
381
382 @node Startup Variables
383 @section Startup Variables
384
385 @table @code
386 @item gnus-check-bogus-newsgroups
387 @vindex gnus-check-bogus-newsgroups
388 If non-nil, Gnus will check for and delete all bogus newsgroups at
389 startup.  A @dfn{bogus newsgroup} is a newsgroup that you have in you
390 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
391 bogus newsgroups isn't very quick, so to save time and resources, it's
392 best to leave this option off, and instead do the checking for bogus
393 newsgroups once in a while from the Newsgroup buffer.
394 @item gnus-inhibit-startup-message
395 @vindex gnus-inhibit-startup-message
396 If non-nil, the startup message won't be displayed.  That way, nobody will
397 notice thay you are reading news instead of doing your job.
398 @end table
399
400 @node The Newsgroup Buffer
401 @chapter The Newsgroup Buffer
402
403 The @dfn{Newsgroup buffer} lists all (or parts) of the available
404 newsgroups and displays various information regarding these groups. 
405 It is the first buffer displayed when Gnus starts.
406
407 @menu
408 * Newsgroup Buffer Format::  Information listed and how you can change it.
409 * Newsgroup Manouvering::    Commands for moving in the newsgroup buffer.
410 * Selecting a Newsgroup::    Actually reading news.
411 * Newsgroup Subscribing::    Unsubscribing, killing, subscribing.
412 * Newsgroup Levels::         Levels? What are those, then?
413 * Foreign Newsgroups::       How to create foreign newsgroups.
414 * Listing Groups::           Gnus can list various portions of the groups.
415 * Newsgroup Maintenance::    Maintaining a tidy @file{.newsrc} file.
416 * Browse Foreign Server::    You can browse a server.  See what if has to offer.
417 * Exiting Gnus::             Stop reading news and get some work done.
418 * Misc Newsgroup Stuff::     Other stuff that you can to do.
419 @end menu
420
421 @node Newsgroup Buffer Format
422 @section Newsgroup Buffer Format
423
424 The default format of the Newsgroup buffer is nice and dull, but you can
425 make it as exciting and ugly as you feel like.
426
427 Here's a couple of example newsgroup lines:
428
429 @example
430      25: news.announce.newusers
431  *    3: alt.fan.andrea-dworkin
432 @end example
433
434 Quite simple, huh?
435
436 Those lines mean that there are 25 unread articles in
437 @samp{news.announce.newusers} and 3 marked articles in
438 @samp{alt.fan.andrea-dworkin} and no unread artcles (see that little
439 asterisk at the beginning of the line?)
440
441 @vindex gnus-group-line-format
442 You can fuck that up to your hearts delight by fiddling with the
443 @code{gnus-group-line-format} variable.  This variable works along the
444 lines of a @code{format} specification, which is pretty much the same as
445 a @code{printf} specifications, for those of you who use (feh!) C.
446
447 One extension is that specifications like @samp{%7,12s} is allowed,
448 which means that the field will be at least 7 characters long, and no
449 more that 12 characters long.
450
451 The default value that produced those lines above is 
452 @samp{"%M%S%5N: %G\n"}.
453
454 There should always be a colon on the line; the cursor is always moved
455 to the colon.  Nothing else is required - not even the newsgroup name. 
456
457 Here's a list of all available format characters:
458
459 @table @samp
460 @item M    
461 Only marked articles
462 @item S
463 Whether the group is subscribed 
464 @item L    
465 Level of subscribedness 
466 @item N
467 Number of unread articles
468 @item G
469 Group name 
470 @item m
471 Number of marked articles 
472 @item T
473 Total number of articles; both read and unread 
474 @item D
475 Newsgroup description
476 @item s
477 Select method 
478 @item n
479 Select from where
480 @item z
481 A string that look like @samp{<%s:%n>} if a foreign select method is
482 used. 
483 @end table
484
485 @vindex gnus-group-mode-line-format
486 The mode line can also be changed by using the
487 @code{gnus-group-mode-line-format} variable.  It does not understand that
488 many format specifiers:
489
490 @table @samp
491 @item S
492 Default news server
493 @item M
494 Default select method
495 @end table
496
497 @node Newsgroup Manouvering
498 @section Newsgroup Manouvering
499
500 All movement commands understand the numeric prefix and will behave as
501 expected, hopefully. 
502
503 @table @kbd
504 @item n
505 @kindex n (Group)
506 @findex gnus-group-next-unread-group
507 Go to the next group with unread articles
508 (@code{gnus-group-next-unread-group}). 
509 @item p, DEL
510 @kindex DEL (Group)
511 @kindex p (Group)
512 @findex gnus-group-prev-unread-group
513 Go to the previous group group with unread articles
514 (@code{gnus-group-prev-unread-group}). 
515 @item N, C-n
516 @kindex N (Group)
517 @kindex C-n (Group)
518 @findex gnus-group-next-group
519 Go to the next group (@code{gnus-group-next-group}).
520 @item P, C-p
521 @kindex P (Group)
522 @kindex C-p (Group)
523 @findex gnus-group-prev-group
524 Go to the previous group (@code{gnus-group-prev-group}).
525 @item M-p
526 @kindex M-p (Group)
527 @findex gnus-group-next-unread-group-same-level
528 Go to the next unread group on the same level (or lower)
529 (@code{gnus-group-next-unread-group-same-level}). 
530 @item M-n
531 @kindex M-n (Group)
532 @findex gnus-group-prev-unread-group-same-level
533 Go to the previous unread group on the same level (or lower)
534 (@code{gnus-group-prev-unread-group-same-level}). 
535 @item j
536 @kindex j (Group)
537 @findex gnus-group-jump-to-group
538 Jump to a group (and make it visible if it isn't already)
539 (@code{gnus-group-jump-to-group}). 
540 @end table
541
542 @node Selecting a Newsgroup
543 @section Selecting a Newsgroup
544
545 @table @kbd
546 @item SPACE
547 @kindex SPACE (Group)
548 @findex gnus-group-read-group
549 Select the current newsgroup, switch to the Summary buffer and display
550 the first unread article in the newsgroup
551 (@code{gnus-group-read-group}).  If there are no unread articles in the
552 newsgroup, or if you give a prefix to this command, Gnus will offer to
553 fetch all the old articles in this newsgroup from the server.
554 server. 
555 @item =
556 @kindex = (Group)
557 @findex gnus-group-select-group
558 Select the current newsgroup and switch to the Summary buffer
559 (@code{gnus-group-select-group}). 
560 @item c
561 @kindex c (Group)
562 @findex gnus-group-catchup-current
563 Mark all unticked articles in this newsgroup as read
564 (@code{gnus-group-catchup-current}). 
565 @item C
566 @kindex C (Group)
567 @findex gnus-group-catchup-current-all
568 Mark all articles in this newsgroup, even the ticked ones, as read
569 (@code{gnus-group-catchup-current-all}). 
570 @end table
571
572 @vindex gnus-large-newsgroup
573 The @code{gnus-large-newsgroup} variable says what Gnus considers to be
574 a "big" newsgroup.  If the newsgroup is big, Gnus will query the user
575 before entering the newsgroup.  The user can then specify how many
576 articles should be fetched from the server.  If the user specifies a
577 negative number (@samp{-n}), the @samp{n} articles that have arrived
578 most recently will be fetched.  If it is positive, the @samp{n} oldest
579 articles will be fetched.
580
581 @vindex gnus-auto-select-newsgroup
582 If @code{gnus-auto-select-newsgroup} is non-nil, the first unread
583 article in the newsgroup will be displayed when you enter the
584 newsgroup.  If you want to prevent automatic selection in some newsgroup
585 (say, in a binary newsgroup with Huge articles) you can set til variable
586 to nil in `gnus-select-group-hook', which is called when a newsgroup is
587 selected.  This hook is also popularly used for sorting headers before
588 generating the Summary buffer.
589
590 @node Newsgroup Subscribing
591 @section Newsgroup Subscribing
592
593 @table @kbd
594 @item u
595 @kindex u (Group)
596 @findex gnus-group-unsubscribe-current-group
597 Unsubscribe the current newsgroup, or, if it was unsubscribed already,
598 subscribe it (@code{gnus-group-unsubscribe-current-group}). 
599 @item U
600 @kindex U (Group)
601 @findex gnus-group-unsubscribe-group
602 Ask the user for a newsgroup to unsubscribe, and then unsubscribe it.  If
603 it was unsubscribed already, subscribe it instead
604 (@code{gnus-group-unsubscribe-group}). 
605 @item k
606 @kindex k (Group)
607 @findex gnus-group-kill-group
608 Kill the current newsgroup (@code{gnus-group-kill-group}).
609 @item y
610 @kindex y (Group)
611 @findex gnus-group-yank-group
612 Yank the last killed newsgroup (@code{gnus-group-yank-group}).
613 @item C-w
614 @kindex C-w (Group)
615 @findex gnus-group-kill-region
616 Kill all newsgroups in the region (@code{gnus-group-kill-region}). 
617 @item M-z
618 @kindex M-z (Group)
619 @findex gnus-group-kill-all-zombies
620 Kill all zombie newsgroups (@code{gnus-group-kill-all-zombies}).
621 @end table
622
623 @node Newsgroup Levels
624 @section Newsgroup Levels
625
626 All newsgroups have a level of "subscribedness".  For instance, if a
627 newsgroup is on level 2, it is "more" subscribed than a newsgroup on
628 level 5.  You can ask Gnus to just list newsgroups on a given level and
629 lower, or to just check new articles in newsgroups on a given level and
630 lower, etc. 
631
632 @table @kbd
633 @item s
634 @kindex s (Group)
635 @findex gnus-group-set-current-level
636 Set the level of the current newsgroup depending on the numeric
637 prefix.  For instance, @kbd{3 s} will set the level of the current
638 newsgroup to three (@code{gnus-group-set-current-level}).
639 @end table
640
641 Gnus considers groups on levels 1-5 to be subscribed, 6-7 to be
642 unsubscribed, 8 to be zombies (walking dead) and 9 to be killed,
643 completely dead.  Gnus treats subscribed and unsubscribed groups exactly
644 the same, but zombie and killed groups have no information on what
645 articles you have read, etc, stored.
646
647 @vindex gnus-keep-same-level
648 If @code{gnus-keep-same-level} is non-nil, some movement commands will
649 only move to groups that are of the same level (or lower).  In
650 particular, going from the last article in one newsgroup to the next
651 newsgroup will go to the next newsgroup of the same level (or
652 lower).  This might be handy if you want to read the most important
653 newsgroups before you read the rest.
654
655 @node Foreign Newsgroups
656 @section Foreign Newsgroups
657
658 A @dfn{foreign newsgroup} is a newsgroup that is not read by the usual
659 (or default) means.  It could be, for instance, a newsgroup from a
660 different NNTP server, it could be a virtual newsgroup or it could be a
661 "newsgroup" of your own personal mail.
662
663 @table @kbd
664 @item M-a
665 @kindex M-a (Group)
666 @findex gnus-group-add-newsgroup
667 Add a new newsgroup.  Gnus will prompt you for a name, a method and an
668 "address" (@code{gnus-group-add-newsgroup}).
669 @item M-e
670 @kindex M-e (Group)
671 @findex gnus-group-edit-newsgroup
672 Edit a newsgroup entry.  Gnus will pop up a new buffer where you can edit
673 the entry (@code{gnus-group-edit-newsgroup}). 
674 @end table
675
676 The different methods all have their peculiarities, of course.
677
678 @menu
679 * nntp::           Reading news from a different NNTP server
680 * nnspool::        Reading news from the local spool
681 * nnvirtual::      Combining articles from many newsgroups
682 * Mail::           Reading your personal mail with Gnus
683 @end menu
684
685 @vindex gnus-activate-foreign-newsgroups
686 If the @code{gnus-activate-foreign-newsgroups} is t, Gnus will
687 check all foreign newsgroup at startup.  This might take quite a while,
688 especially if you subscribe to lots of groups from different NNTP
689 servers.  It is @code{nil} by default, which means that you won't be told
690 whether there are new articles in these groups.  How many unread articles
691 there are will be determined when, or if, you decide to enter them.
692
693 @node nntp
694 @subsection nntp
695
696 Subscribing to a foreign group from an NNTP server is rather easy.  You
697 just specify @code{nntp} as method and the address of the NNTP server as
698 the, uhm, address. 
699
700 The name of the foreign newsgroup can be the same as a native
701 newsgroup.  However, two foreign newsgroup can not have the same names. 
702
703 @node nnspool
704 @subsection nnspool
705
706 Subscribing to a foreign group from the local spool is extremely easy,
707 even though I don't see quite why you'd want to.  If you have a local
708 spool, why don't you use that as the default method?
709
710 Anyways, you just specify @code{nnspool} as the method and @samp{""} as
711 the address.
712
713 @node nnvirtual
714 @subsection nnvirtual
715
716 A @dfn{virtual newsgroup} is really nothing more than a collection of
717 other newsgroups. 
718
719 You specify @code{nnvirtual} as the method and a regular expression that
720 says which newsgroups that you wish to have in this one as the address. 
721
722 For instance, if you are tired of reading many small newsgroup, you can
723 put them all in one big newsgroup, and then grow tired of reading one
724 big, unwieldy newsgroup.  The joys of computing!
725
726 @example
727 "^alt\\.fan\\.andrea-dworkin$\\|rec\\.dworkin.*"
728 @end example
729
730 These newsgroups can be native or foreign; everything should work
731 smoothly, but if your computer should explode, it was probably my
732 fault.  (Including other virtual newsgroups in this one will probably
733 confuse Gnus, so don't do that.)
734
735 One limitation, however - all newsgroups that are included in 
736 a virtual newsgroup has to be alive (ie. subscribed or unsubscribed).  In
737 fact, if you include a newsgroup in a virtual newsgroup, and it was
738 killed, it will be subscribed automagically.
739
740 @node Mail
741 @subsection Mail
742
743 Reading mail with a newsreader - isn't that just plain WeIrD? But of
744 course.
745
746 @menu
747 * Creating Mail Newsgroups::     How to create mail newsgroups (duh).
748 * Expiring Old Mail Articles::   Yes.
749 @end menu
750
751 Gnus will read the mail spool when you activate the newsgroup.  The mail
752 file is first copied to your home directory.  What happens after that
753 depends on what format you want to store you mail in.
754
755 @menu
756 * nnmail::    Using the quite standard Un*x mbox.
757 * nnrmail::   Many Emacs programs use the rmail babyl format.
758 * nnml::      Store your mail in a private spool?
759 @end menu
760
761 @vindex nnmail-read-incoming-hook
762 The mail backends all call @code{nnmail-read-incoming-hook} after
763 reading new mail.  You can use this hook to notify any mail watch
764 programs, if you want to.
765
766 Gnus gives you all the opportunity you want for shooting yourself in
767 your foot.  Let's say you create a newsgroup that will contain all the
768 mail you get from your boss.  And then you accidentally unsubscribe from
769 the newsgroup.  Gnus will still put all the mail from your boss in the
770 unsubscribed newsgroup, and so, when your boss mails you "Have that
771 report ready by Monday or you're fired!", you'll never see it and, come
772 Tuesday, you'll still beleive that you're gainfully unemplyed while you
773 really should be out collecting empty bottles to save up for next
774 month's rent money.
775
776 @node Creating Mail Newsgroups
777 @subsubsection Creating Mail Newsgroups
778
779 There are two ways of making Gnus read your personal, private, secret
780 mail.  One is pretty easy, and the other requires minor tinkering.
781
782 @kindex M-x gnus-group-make-mail-groups (Summary)
783 First the easy way: Type @kbd{M-x gnus-group-make-mail-groups}.  That
784 will create a newsgroup called @samp{mail.misc} that will contain all
785 your mail.
786
787 Then the hard(er) way.
788
789 @vindex nnmail-split-methods
790 Set the variable @code{nnmail-split-methods} to specify how the incoming
791 mail is to be split into newsgroups.
792
793 @example
794 (setq nnmail-split-methods
795   '(("mail.junk" "^From:.*Lars Ingebrigtsen")
796     ("mail.crazzy" "^Subject:.*die\\|^Organization:.*flabby")
797     ("mail.other" "")))
798 @end example
799
800 This variable is a list of lists, where the first element of each of
801 these lists contain the name of the mail newsgroup (they do not have to
802 be called something beginning with @samp{"mail"}, by the way), and the
803 second element is a regular expression used on the header of each mail
804 to determine if it belongs in this mail newsgroup.
805
806 The last of these newsgroups should always be a general one, and the
807 regular expression should *always* be @samp{""} so that it matches all
808 mails.
809
810 You should always do a @kbd{M-x gnus-group-make-mail-groups} after
811 changing this variable to create all the newsgroups you have specified. 
812
813 @node Expiring Old Mail Articles
814 @subsubsection Expiring Old Mail Articles
815
816 Traditional mail readers have a tendency to remove mail articles when
817 you mark them as read, in some way.  Gnus takes a fundamentally different
818 approach to mail reading.
819
820 Gnus basically considers mail just to be news that has been received in
821 a rather peculiar manner.  It does not think that it has the power to
822 actually change the mail, or delete any mail messages.  If you enter a
823 mail newsgroup, and mark articles as "read", or kill them in some other
824 fashion, the mail articles will still exist on the system.  I repeat:
825 Gnus will not delete your old, read mail.  Unless you ask it to, of
826 course. 
827
828 To make Gnus get rid of your unwanted mail, you have to mark the
829 articles as @dfn{expirable}.  This does not mean that the articles will
830 disappear right away, however.  In general, a mail article will be
831 deleted from your system if, 1) it is marked as expirable, AND 2) it is
832 more than one week old.  If you do not mark an article as expirable, it
833 will remain on your system until hell freezes over.
834
835 @vindex gnus-auto-expirable-newsgroups
836 You do not have to mark articles as expirable by
837 hand.  Newsgroups that match the regular expression
838 @code{gnus-auto-expirable-newsgroups} will have all articles that you
839 read marked as expirable automatically.  All articles that are marked as
840 expirable have an "X" in the third column in the Summary buffer.
841
842 Let's say you subscribe to a couple of mailing lists, and you want the
843 articles you have read to disappear after a while:
844
845 @example
846 (setq gnus-auto-expirable-newsgroups 
847       "^mail.nonsense-list\\|^mail.nice-list")
848 @end example
849
850 @vindex nnmail-expiry-wait
851 The @code{nnmail-expiry-wait} variable supplies the default time an
852 expirable article has to live.  The default is 7 - seven days. 
853
854 Gnus also supplies a function that lets you fine-tune how long articles
855 are to live, based on what newsgroup they are in.  Let's say you want to
856 have one month expiry period in the @samp{mail.private} newsgroup, a
857 one day expiry period in the @samp{mail.junk} newsgroup, and a six day
858 expiry period everywhere else:
859
860 @example
861 (setq nnmail-expiry-wait-function
862       '(lambda (group)
863         (cond ((string= group "mail.private")
864                 31)
865               ((string= group "mail.junk")
866                 1)
867               (t
868                 6))))
869 @end example
870
871 @node nnmail
872 @subsubsection nnmail
873
874 @vindex nnmail-active-file
875 @vindex nnmail-mbox-file
876 The @dfn{nnmail} backend will use the standard Un*x mbox file to store
877 mail.  The path of the mbox file is given by the @code{nnmail-mbox-file}
878 variable.  In addition, Gnus needs to store information about active
879 articles.  The file specified by @code{nnmail-active-file} will be used
880 for that.
881
882 @node nnrmail
883 @subsubsection nnrmail
884
885 @vindex nnrmail-active-file
886 @vindex nnrmail-mbox-file
887 The @dfn{nnrmail} backend will use a babyl mail box to store mail.  The
888 path of the rmail mail box file is given by the @code{nnrmail-mbox-file}
889 variable.  In addition, Gnus needs to store information about active
890 articles.  The file specified by @code{nnrmail-active-file} will be used
891 for that.
892
893 @node nnml
894 @subsubsection nnml
895
896 The spool mail format (@code{nnml}) isn't compatible with any other
897 known format.  It should be used with some caution.
898
899 @vindex nnml-directory
900 If you use this backend, Gnus will split all incoming mail into files;
901 one file for each mail and put the articles into the correct directories
902 under the directory specified by the @code{nnml-directory} variable.  The
903 default value is @samp{"~/Mail/"}.
904
905 You do not have to create any directories beforehand; Gnus will take
906 care of all that.
907
908 If you have a strict limit as to how many files you are allowed to store
909 in your account, you should not use this backend.  As each mail gets its
910 own file, you might very well occupy thousands of inodes within a few
911 weeks.  If this is no problem for you, and it isn't a problem for you
912 having your friendly systems administrator walking around, madly,
913 shouting "Who is eating all my inodes?! Who? Who!?!", then you should
914 know that this is probably the fastest format to use.  You do not have to
915 trudge through a big mbox file just to read your new mail.
916
917 @node Listing Groups
918 @section Listing Groups
919
920 @table @kbd
921 @item l
922 @kindex l (Group)
923 @findex gnus-group-list-groups
924 List all subscribed groups that have unread articles
925 (@code{gnus-group-list-groups}). 
926 If the numeric prefix is used, this command will list only newsgroups of
927 level ARG and lower.  By default, it only lists newsgroups of level five
928 or lower (ie. just subscribed groups).
929 @item L
930 @kindex L (Group)
931 @findex gnus-group-list-all-groups
932 List all subscribed and unsubscribed newsgroups, whether they have
933 unread articles or not (@code{gnus-group-list-all-groups}).
934 If the numeric prefix is used, this command will list only newsgroups of
935 level ARG and lower.  By default, it lists newsgroups of level seven or
936 lower (ie. just subscribed and unsubscribed groups). 
937 @item C-c C-k
938 @kindex C-c C-k (Group)
939 @findex gnus-group-list-killed
940 List all killed newsgroups (@code{gnus-group-list-killed}).
941 @item C-c C-z
942 @kindex C-c C-z (Group)
943 @findex gnus-group-list-zombies
944 List all zombie newsgroups (@code{gnus-group-list-zombies}).
945 @end table
946
947 @node Newsgroup Maintenance
948 @section Newsgroup Maintenance
949
950 @table @kbd
951 @item b
952 @kindex b (Group)
953 @findex gnus-group-check-bogus-groups
954 Check bogus groups and delete them
955 (@code{gnus-group-check-bogus-groups}). 
956 @item F
957 @kindex F (Group)
958 @findex gnus-find-new-newsgroups
959 Find new newsgroups (@code{gnus-find-new-newsgroups}). 
960 @item C-c C-x
961 @kindex C-c C-x (Group)
962 @findex gnus-group-expire-articles
963 Run all expirable articles in the current newsgroup through the expiry
964 process (if any) (@code{gnus-group-expire-articles}).
965 @item C-c M-C-x
966 @kindex C-c M-C-x (Group)
967 @findex gnus-group-expire-all-groups
968 Run all articles in all newsgroups through the expiry process
969 (@code{gnus-group-expire-all-groups}). 
970 @end table
971
972 @node Browse Foreign Server
973 @section Browse Foreign Server
974
975 @table @kbd
976 @item B
977 @kindex B (Group)
978 @findex gnus-group-browse-foreign-server
979 You will be queried for a select method and a server name.  Gnus will
980 then attempt to contact this server and let you browse the newsgroups
981 there (@code{gnus-group-browse-foreign-server}).
982 @end table
983
984 A new buffer with a list of available newsgroups will appear.  This
985 buffer will be in the @code{gnus-browse-server-mode}.  This buffer looks
986 a bit (well, a lot) like a normal Newsgroup buffer, but with one major
987 difference - you can't enter any of the newsgroups.  If you want to read
988 any of the news available on that server, you have to subscribe to the
989 newsgroups you think may be interesting, and then you have to exit this
990 buffer.  The new groups will be added to the Newsgroup buffer, and then
991 you can read them as you would any other newsgroup.
992
993 Here's a list of keystrokes available in the browse mode:
994
995 @table @kbd
996 @item C-n, n
997 @kindex C-n (Browse)
998 @kindex n (Browse)
999 @findex gnus-group-next-group
1000 Go to the next group (@code{gnus-group-next-group}).
1001 @item C-p, p
1002 @kindex C-p (Browse)
1003 @kindex p (Browse)
1004 @findex gnus-group-prev-group
1005 Go to the previous group (@code{gnus-group-prev-group}).
1006 @item u
1007 @kindex u (Browse)
1008 @findex gnus-browse-unsubscribe-current-group
1009 Unsubscribe to the current group, or, as will be the case here,
1010 subscribe to it (@code{gnus-browse-unsubscribe-current-group}). 
1011 @item q
1012 @kindex q (Browse)
1013 @findex gnus-browse-exit
1014 Exit browse mode (@code{gnus-browse-exit}).
1015 @item ?
1016 @kindex ? (Browse)
1017 @findex gnus-browse-describe-briefly
1018 Describe browse mode briefly (well, there's not much to describe, is
1019 there) (@code{gnus-browse-describe-briefly}).
1020 @end table
1021
1022 @node Exiting Gnus
1023 @section Exiting Gnus
1024
1025 Yes, Gnus is exiting.
1026
1027 @table @kbd
1028 @item z
1029 @kindex z (Group)
1030 @findex gnus-group-suspend
1031 Suspend Gnus (@code{gnus-group-suspend}).
1032 @item q
1033 @kindex q (Group)
1034 @findex gnus-group-exit
1035 Quit Gnus (@code{gnus-group-exit}).
1036 @item Q
1037 @kindex Q (Group)
1038 @findex gnus-group-quit
1039 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
1040 @end table
1041
1042 @vindex gnus-exit-gnus-hook
1043 @vindex gnus-suspend-gnus-hook
1044 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
1045 @code{gnus-exit-gnus-hook} is called when you quit Gnus.
1046
1047 @node Misc Newsgroup Stuff
1048 @section Misc Newsgroup Stuff
1049
1050 @table @kbd
1051 @item g
1052 @kindex g (Group)
1053 @findex gnus-group-get-new-news
1054 Check server for new articles. 
1055 If the numeric prefix is used, this command will check only newsgroups of
1056 level ARG and lower (@code{gnus-group-get-new-news}).
1057 @item R
1058 @kindex R (Group)
1059 @findex gnus-group-restart
1060 Restart Gnus (@code{gnus-group-restart}).
1061 @item D
1062 @kindex D (Group)
1063 @findex gnus-group-describe-group
1064 Give a description of the current newsgroup
1065 (@code{gnus-group-describe-group}). 
1066 @item a
1067 @kindex a (Group)
1068 @findex gnus-group-post-news
1069 Post an article to a newsgroup (@code{gnus-group-post-news}).
1070 @item m
1071 @kindex m (Group)
1072 @findex gnus-group-mail
1073 Mail a message somewhere (@code{gnus-group-mail}).
1074 @item C-x C-t
1075 @kindex C-x C-t (Group)
1076 @findex gnus-group-transpose-groups
1077 Transpose two newsgroups (@code{gnus-group-transpose-groups}).
1078 @item V
1079 @kindex V (Group)
1080 @findex gnus-version
1081 Display current Gnus version numbers (@code{gnus-version}).
1082 @item ?
1083 @kindex ? (Group)
1084 @findex gnus-group-describe-briefly
1085 Give a very short help message (@code{gnus-group-describe-briefly}).
1086 @item C-c C-i
1087 @kindex C-c C-i (Group)
1088 @findex gnus-info-find-node
1089 Go to the Gnus info node (@code{gnus-info-find-node}).
1090 @end table
1091
1092 @vindex gnus-group-prepare-hook
1093 @code{gnus-group-prepare-hook} is called after the newsgroup list is
1094 created in the Newsgroup buffer.  It may be used to modify the newsgroup
1095 buffer in some strange, unnatural way.
1096
1097 @node The Summary Buffer
1098 @chapter The Summary Buffer
1099
1100 A line for each article is displayed in the Summay buffer.  You can move
1101 around, read articles, post articles and reply to them.
1102
1103 @menu
1104 * Summary Buffer Format::       Deciding how the summar buffer is to look
1105 * Summary Manouvering::         Moving around the Summary buffer
1106 * Choosing Articles::           Reading articles
1107 * Paging the Article::          Scrolling the current article
1108 * Reply Followup and Post::     Posting articles
1109 * Cancelling and Superceding::  "Whoops, I shouldn't have called him that"
1110 * Ticking and Marking::         Marking articles as read, expirable, etc.
1111 * Threading::                   How threads are made
1112 * Exiting the Summary Buffer::  Returning to the Newsgroup buffer
1113 * Saving Articles::             Ways of customizing article saving
1114 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
1115 * Various Article Stuff::       Various stuff dealing with articles
1116 * Summary Sorting::             You can sort the summary buffer four ways
1117 * Finding the Parent::          No child support? Get the parent
1118 * Kill Files::                  Maintaining a kill file
1119 * Various Summary Stuff::       What didn't fit anywhere else
1120 @end menu
1121
1122 @node Summary Buffer Format
1123 @section Summary Buffer Format
1124
1125 @vindex gnus-summary-line-format
1126 You can change the format of the lines in the summary buffer by changing
1127 the @code{gnus-summary-line-format} variable.  It works along the same
1128 lines a a normal @code{format} string, with some extensions.
1129
1130 The default string is @samp{"%U%R%X %I[%3L: %-20,20n]%T %S\n"}.
1131
1132 The following format specification characters are understood:
1133
1134 @table @samp
1135 @item N 
1136 Article number
1137 @item S
1138 Subject
1139 @item F
1140 From
1141 @item n
1142 The name (from the @code{From} header field)
1143 @item A
1144 The address (from the @code{From} header field)
1145 @item L
1146 Number of lines in the article
1147 @item I
1148 Indentation based on thread level
1149 @item T
1150 Nothing if the article is a root and lots of spaces if it isn't (it
1151 pushes everything after it off the screen)
1152 @item C
1153 Current article
1154 @item U
1155 Unread
1156 @item X
1157 Expirable
1158 @item R
1159 Replied
1160 @item x
1161 Xref
1162 @item D
1163 Date
1164 @item M
1165 Message-ID
1166 @item r
1167 References
1168 @end table
1169
1170 No elements are required, except the @samp{%U}, @samp{%R} and @samp{%X}
1171 fields which have to be at the beginning of the line for reasons of
1172 efficiency.  If you try to remove those, or change them, you'll probably
1173 end up with a mess.
1174
1175 @vindex gnus-summary-mode-line-format
1176 You can also change the format of the Summary mode bar.  Set
1177 @code{gnus-summary-mode-line-format} to whatever you like.  Here's what
1178 elements you have to play with:
1179
1180 @table @samp
1181 @item G
1182 Group name
1183 @item A
1184 Current article number
1185 @item V
1186 Gnus version
1187 @item U
1188 Number of unread articles in this group
1189 @item u
1190 Number of unselected articles in this group
1191 @item Z
1192 A string with the number of unread and unselected articles represented
1193 either as @samp{<%U(+%u) more>} if there are both unselected articles,
1194 and just as @samp{<%U more>} if there are just unread articles and no
1195 unselected ones.
1196 @end table
1197
1198 @node Summary Manouvering
1199 @section Summary Manouvering
1200
1201 All the straight movement commands understand the numeric prefix and
1202 behave pretty much as you'd expect. 
1203
1204 None of these commands select articles.
1205
1206 @table @kbd
1207 @item C-n, down
1208 @kindex C-n (Summary)
1209 @kindex down (Summary)
1210 @findex gnus-summary-next-subject
1211 Go to the next subject line (@code{gnus-summary-next-subject}).
1212 @item C-p, up
1213 @kindex C-p (Summary)
1214 @kindex up (Summary)
1215 @findex gnus-summary-prev-subject
1216 Go to the previous subject line (@code{gnus-summary-prev-subject}).
1217 @item M-n
1218 @kindex M-n (Summary)
1219 @findex gnus-summary-next-unread-subject
1220 Go to the next summary line of an unread article
1221 (@code{gnus-summary-next-unread-subject}). 
1222 @item M-p
1223 @kindex M-p (Summary)
1224 @findex gnus-summary-prev-unread-subject
1225 Go to the previous summary line of an unread article
1226 (@code{gnus-summary-prev-unread-subject}). 
1227 @item j
1228 @kindex j (Summary)
1229 @findex gnus-summary-goto-subject
1230 Ask for an article number and then go to this summary line
1231 (@code{gnus-summary-goto-subject}). 
1232 @item l
1233 @kindex l (Summary)
1234 @findex gnus-summary-goto-last-article
1235 Go to the summary line of the previous article
1236 (@code{gnus-summary-goto-last-article}).
1237 @end table
1238
1239 @vindex gnus-auto-select-next
1240 If you are at the end of the newsgroup and issue one of the movement
1241 commands, Gnus will offer to go to the next newsgroup.  If
1242 @code{gnus-auto-select-next} is t and the next newsgroup is empty, Gnus
1243 will exit Summary mode and return to the Newsgroup buffer.  If this
1244 variable is neither t nor nil, Gnus will select the next newsgroup, no
1245 matter if it has any unread articles or not.  As a special case, if this
1246 variable equals @code{quietly}, Gnus will select the next newsgroup
1247 without asking for confirmation.  Also see @code{gnus-keep-same-level}. 
1248
1249 @vindex gnus-auto-center-summary
1250 If @code{gnus-auto-center-summary} is non-nil, Gnus will keep the point
1251 in the Summary buffer centered at all times.  This makes things quite
1252 tidy, but if you have a slow network connection, or do simply not like
1253 this un-Emacsism, you can set this variable to nil to get the normal
1254 Emacs scrolling action.
1255
1256 @node Choosing Articles
1257 @section Choosing Articles
1258
1259 All the movement commands understand the numeric prefix.
1260
1261 All the following commands select an article.
1262
1263 @table @kbd
1264 @item SPACE
1265 @kindex SPACE (Summary)
1266 @findex gnus-summary-next-page
1267 Select the current article, of, if that one's read already, the next
1268 unread article (@code{gnus-summary-next-page}).
1269 @item n
1270 @kindex n (Summary)
1271 @findex gnus-summary-next-unread-article
1272 Go to next unread article (@code{gnus-summary-next-unread-article}).
1273 @item p
1274 @kindex p (Summary)
1275 @findex gnus-summary-prev-unread-article
1276 Go to previous unread article (@code{gnus-summary-prev-unread-article}).
1277 @item N
1278 @kindex N (Summary)
1279 @findex gnus-summary-next-article
1280 Go to the next article (@code{gnus-summary-next-article}).
1281 @item P
1282 @kindex P (Summary)
1283 @findex gnus-summary-prev-article
1284 Go to the previous article (@code{gnus-summary-prev-article}).
1285 @item M-C-n
1286 @kindex M-C-n (Summary)
1287 @findex gnus-summary-next-same-subject
1288 Go to the next article with the same subject
1289 (@code{gnus-summary-next-same-subject}). 
1290 @item M-C-p
1291 @kindex M-C-p (Summary)
1292 @findex gnus-summary-prev-same-subject
1293 Go to the previous article with the same subject
1294 (@code{gnus-summary-prev-same-subject}). 
1295 @item .
1296 @kindex . (Summary)
1297 @findex gnus-summary-first-unread-article
1298 Go to the first unread article (@code{gnus-summary-first-unread-article}).
1299 @end table
1300
1301 @vindex gnus-auto-extend-newsgroup
1302 All the movement commands will try to go to the previous (or next)
1303 article, even if that article isn't displayed in the Summary buffer if
1304 @code{gnus-auto-extend-newsgroup} is non-nil.  Gnus will fetch the
1305 article from the server and present it in the Article buffer.
1306
1307 @vindex gnus-select-article-hook
1308 @code{gnus-select-article-hook} is called whenever an article is
1309 selected.  By default it makes any threads hidden under the current
1310 article visible.
1311
1312 @vindex gnus-mark-article-hook
1313 @code{gnus-mark-article-hook} is called when an article is selected for
1314 the first time.  It is intended to be used for marking articles as read
1315 automatically when articles are selected.
1316
1317 @node Paging the Article
1318 @section Scrolling the Article
1319
1320 @table @kbd
1321 @item SPACE
1322 @kindex SPACE (Summary)
1323 @findex gnus-summary-next-page
1324 Pressing @kbd{SPACE} will scroll the current article forward one page,
1325 or, if you have come to the end of the current article, will choose the
1326 next article (@code{gnus-summary-next-page}).
1327 @item DEL
1328 @kindex DEL (Summary)
1329 @findex gnus-summary-prev-page
1330 Scoll the current article back one page (@code{gnus-summary-prev-page}). 
1331 @item RETURN
1332 @kindex RETURN (Summary)
1333 @findex gnus-summary-scroll-up
1334 Scroll the current article one line forward
1335 (@code{gnus-summary-scroll-up}).
1336 @item <
1337 @kindex < (Summary)
1338 @findex gnus-summary-beginning-of-article
1339 Scroll to the beginning of the article
1340 (@code{gnus-summary-beginning-of-article}).
1341 @item >
1342 @kindex > (Summary)
1343 @findex gnus-summary-end-of-article
1344 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
1345 @end table
1346
1347 @node Reply Followup and Post
1348 @section Reply Followup and Post
1349
1350 @kindex C-c C-c (Post)
1351 All the commands for posting and mailing will put you in a post or mail
1352 buffer where you can edit the article all you like, before you send the
1353 article by pressing @kbd{C-c C-c}.
1354
1355 @table @kbd
1356 @item a
1357 @kindex a (Summary)
1358 @findex gnus-summary-post-news
1359 Post an article to the current newsgroup
1360 (@code{gnus-summary-post-news}).
1361 @item f
1362 @kindex f (Summary)
1363 @findex gnus-summary-followup
1364 Post a followup to the current article (@code{gnus-summary-followup}).
1365 @item F
1366 @kindex F (Summary)
1367 @findex gnus-summary-followup-with-original
1368 Post a followup to the current article and include the original message
1369 (@code{gnus-summary-followup-with-original}). 
1370 @item r
1371 @kindex r (Summary)
1372 @findex gnus-summary-reply
1373 Mail a reply to the author of the current article
1374 (@code{gnus-summary-reply}). 
1375 @item R
1376 @kindex R (Summary)
1377 @findex gnus-summary-reply-with-original
1378 Mail a reply to the author of the current article and include the
1379 original message (@code{gnus-summary-reply-with-original}).
1380 @item C-c C-f
1381 @kindex C-c C-f (Summary)
1382 @findex gnus-summary-mail-forward
1383 Forward the current article to some other person
1384 (@code{gnus-summary-mail-forward}). 
1385 @item m
1386 @kindex m (Summary)
1387 @findex gnus-summary-mail-other-window
1388 Send a mail to some other person
1389 (@code{gnus-summary-mail-other-window}). 
1390 @end table
1391
1392 @vindex gnus-required-headers
1393 Gnus determines which headers it should generate in outgoing posts by
1394 consulting the @code{gnus-required-headers} variable.  This is a list of
1395 headers that Gnus makes sure is present in all outgoing posts before it
1396 tries to post them.
1397
1398 @vindex gnus-followup-to-function
1399 @vindex gnus-reply-to-function
1400 Gnus uses the normal methods to determine where replys and follow-ups
1401 are to go, but you can change the behaviour to suit your need by
1402 fiddling with the @code{gnus-reply-to-function} and
1403 @code{gnus-followup-to-function} variables.
1404
1405 To take "reply" as an example: If you want the replies to go to the
1406 "sender" instead of the "from" in the newsgroup "mail.stupid-list", you
1407 could do something like this:
1408
1409 @example
1410 (setq gnus-reply-to-function
1411       '(lambda (group)
1412         (cond ((string= group "mail.stupid-list")
1413                 (mail-fetch-field "sender"))
1414               (t
1415                nil))))
1416 @end example
1417
1418 These functions will be called with point in the buffer of the article
1419 that is being replied to (or followed up).
1420
1421 @vindex mail-signature
1422 @vindex gnus-signature-file
1423 If @code{gnus-signature-file} is non-nil, it should be the name of a
1424 file containing a signature (@samp{~/.signature} by default).  This
1425 signature will be appended to all outgoing post.  Most people find it
1426 more convenient to use @code{mail-signature}, which does the same, but
1427 inserts the signature into the buffer before you start editing the post
1428 (or mail).  So - if you have both of these variables set, you will get
1429 two signatures.
1430
1431 @vindex gnus-post-prepare-function
1432 In any case, @code{gnus-post-prepare-function} is called with the name
1433 of the current newsgroup after the post buffer has been initialized, and
1434 can be used for inserting a signature.  Nice if you use different
1435 signatures in different newsgroups.
1436
1437 @vindex gnus-auto-mail-to-author
1438 If @code{gnus-auto-mail-to-author} is non-nil, Gnus will send a mail
1439 with a copy of all follow-ups to the authors of the articles you follow
1440 up.  It's nice in one way - you make sure that the person you are
1441 responding to gets your response.  Other people loathe this method and
1442 will hate you dearly for it, because it means that they will first get a
1443 mail, and then have to read the same article later when they read the
1444 news.  It is nil by default.
1445
1446 @vindex gnus-mail-send-method
1447 @code{gnus-mail-send-method} says how a mail should be mailed.  It uses
1448 the function in the @code{send-mail-function} as the default.
1449
1450 @vindex gnus-prepare-article-hook
1451 @code{gnus-prepare-article-hook} is called before the header fields have
1452 been prepared.  By default it inserts the signature specified by
1453 @code{gnus-signature-file}. 
1454
1455 @vindex gnus-inews-article-hook
1456 @code{gnus-inews-article-hook} is called right before the article is
1457 posted.  By default it handles FCC processing (ie. saving the article to
1458 a file.)
1459
1460 @node Cancelling and Superceding
1461 @section Cancelling Articles
1462
1463 Have you ever written something, and then decided that you really,
1464 really, really hadn't posted that? 
1465
1466 Well, you can't cancel mail, but you can cancel posts.
1467
1468 @findex gnus-summary-cancel-article
1469 @kindex C (Summary)
1470 Find the article you wish to cancel (you can only cancel your own
1471 articles, so don't try any funny stuff).  Then press @kbd{C}
1472 (@code{gnus-summary-cancel-article}).  Your article will be cancelled.
1473
1474 Be aware, however, that not all sites honor cancels, so your article may
1475 live on in some parts of the world, while most sites will delete the
1476 cancelled article.
1477
1478 If you discover that you have made some mistakes and want to do some
1479 corrections, you can post a @dfn{superceding} article that will replace
1480 your original article.
1481
1482 @findex gnus-summary-supersede-article
1483 @kindex S (Summary)
1484 Go to the original article and press @kbd{S}
1485 (@code{gnus-summary-supersede-article}).  You will be put in a buffer
1486 where you can edit the article all you want before sending it off the
1487 usual way.  
1488
1489 The same goes for superceding as for cancelling, only more so: Some
1490 sites do not honor superceding.  On those sites, it will appear that you
1491 have posted almost the same article twice.
1492
1493 If you have just posted the article, and changed your mind right away,
1494 there is a trick yuo can use to cancel/supersede the article without
1495 waiting for the article to appear on your site first.  You simply return
1496 to the post buffer (which is called @code{*post-buf*}).  There you will
1497 find the article you just posted, with all the headers intact.  Change
1498 the @samp{Message-ID} header to a @samp{Cancel} or @samp{Supersedes}
1499 header by substituting one of those words for @samp{Message-ID}.  Then
1500 just press @kbd{C-c C-c} to send the article as you would do
1501 normally.  The previous article will be cancelled/superseded.
1502
1503 @node Ticking and Marking
1504 @section Ticking and Marking
1505
1506 There are four kinds of @dfn{marks}: Tick marks, process marks, read
1507 marks and expiry marks.  
1508
1509 @dfn{Ticked articles} are articles that will remain visible always.  If
1510 you see an article that you find interesting, or you want to put off
1511 reading it, or replying to it, until sometime later, you'd typically
1512 tick it.  However, articles can be expired, so if you want to keep an
1513 article forever, you'll have to save it.  Ticked articles have a @samp{-}
1514 in the first column.
1515
1516 Articles that are marked as read - are just that.  They have a @samp{D}
1517 in the first column.  Unread articles have a space in the first column.
1518
1519 You can also mark articles as @dfn{expirable} (or have them marked as
1520 such automatically).  That doesn't make much sense in normal newsgroups,
1521 because a user does not control the expiring of news articles, but in
1522 mail newsgroups, for instance, articles that are marked as
1523 @dfn{expirable} can be deleted by Gnus at any time.  Expirable articles
1524 have a @samp{X} in the third column.
1525
1526 Finally we have the @dfn{process mark}.  A variety of commands react to
1527 the presence of the process mark.  For instance, @kbd{C-c C-v M-C-v}
1528 (@code{gnus-uu-decode-and-view-marked-articles}) will uudecode and view
1529 all artciles that have been marked with the process mark.  Articles
1530 marked with the process mark have a @samp{#} in the third column.
1531
1532 All the marking commands understand the numeric prefix.
1533
1534 @table @kbd
1535 @item '
1536 @kindex ' (Summary)
1537 @findex gnus-summary-mark-as-unread-forward
1538 Tick the current article (@code{gnus-summary-mark-as-unread-forward}).
1539 @item d
1540 @kindex d (Summary)
1541 @findex gnus-summary-mark-as-read-forward
1542 Mark the current article as read
1543 (@code{gnus-summary-mark-as-read-forward}).
1544 @item k
1545 @kindex k (Summary)
1546 @findex gnus-summary-kill-same-subject-and-select
1547 Mark all articles that have the same subject as the current one as read,
1548 and then select the next unread article
1549 (@code{gnus-summary-kill-same-subject-and-select}).
1550 @item C-k
1551 @kindex C-k (Summary)
1552 @findex gnus-summary-kill-same-subject
1553 Mark all articles that have the same subject as the current one as read
1554 (@code{gnus-summary-kill-same-subject}).  
1555 @item M-u
1556 @kindex M-u (Summary)
1557 @findex gnus-summary-clear-mark-forward
1558 Clear tick and read marks from the current article
1559 (@code{gnus-summary-clear-mark-forward}).
1560 @item x
1561 @kindex x (Summary)
1562 @findex gnus-summary-mark-as-expirable
1563 Mark the current article as expirable
1564 (@code{gnus-summary-mark-as-expirable}).
1565 @item X
1566 @kindex X (Summary)
1567 @findex gnus-summary-unmark-as-expirable
1568 Remove the expiry mark from the current article
1569 (@code{gnus-summary-unmark-as-expirable}). 
1570 @item M-d
1571 @kindex M-d (Summary)
1572 @findex gnus-summary-delete-marked-as-read
1573 Remove all deleted articles from the Summary buffer
1574 (@code{gnus-summary-delete-marked-as-read}). 
1575 @item M-C-d
1576 @kindex M-C-d (Summary)
1577 @findex gnus-summary-delete-marked-with
1578 Ask for a mark and then remove all articles that have been marked with
1579 that mark (@code{gnus-summary-delete-marked-with}).
1580 @end table
1581
1582 There are a few functions for setting the process mark:
1583
1584 @table @kbd
1585 @item #
1586 @kindex # (Summary)
1587 @findex gnus-summary-mark-article-as-processable
1588 Mark the current article with the process mark
1589 (@code{gnus-summary-mark-article-as-processable}). 
1590 @findex gnus-summary-unmark-article-as-processable
1591 @item M-#
1592 @kindex M-# (Summary)
1593 Remove the process mark from the current article
1594 (@code{gnus-summary-unmark-article-as-processable}). 
1595 @item C-c M-#
1596 @kindex C-c M-# (Summary)
1597 @findex gnus-summary-unmark-all-articles-as-processable
1598 Remove the process mark from all articles
1599 (@code{gnus-summary-unmark-all-articles-as-processable}). 
1600 @item C-c C-v C-r 
1601 @kindex C-c C-v C-r  (Summary)
1602 @findex gnus-uu-mark-by-regexp
1603 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
1604 @item C-c C-v r
1605 @kindex C-c C-v r (Summary)
1606 @findex gnus-uu-mark-region
1607 Mark articles in the region (@code{gnus-uu-mark-region}).
1608 @item C-c C-v t
1609 @kindex C-c C-v t (Summary)
1610 @findex gnus-uu-mark-thread
1611 Mark all articles in the current (sub)thread
1612 (@code{gnus-uu-mark-thread}).
1613 @end table
1614
1615 @findex gnus-uu-marked-universal-argument
1616 @kindex C-c C-v C-u (Summary)
1617 Finally, we have @kbd{C-c C-v C-u}
1618 (@code{gnus-uu-marked-universal-argument}) that will perform any
1619 operation on all articles that have been marked with the process mark. 
1620
1621 @node Threading
1622 @section Threading
1623
1624 Gnus @dfn{threads} articles by default.  @dfn{Threading} is to put
1625 replies to articles directly after the articles they reply to - in a
1626 hierarchial fashion.
1627
1628 @menu
1629 * Customizing Threading::     Variables you can change to affect the threading
1630 * Threading Commands::        Thread based commands in the Summary Buffer
1631 @end menu
1632
1633 @node Customizing Threading
1634 @subsection Customizing Threading
1635
1636 @table @code
1637 @item gnus-show-threads
1638 @vindex gnus-show-threads
1639 If this variable is nil, no threading will be done, and all of the rest
1640 of the variables here will have no effect.  Turning threading off will
1641 speed newsgroup selection up a bit, but it is sure to make reading
1642 slower and more awkward.
1643 @item gnus-gather-loose-threads
1644 @vindex gnus-gather-loose-threads
1645 If non-nil, Gnus will gather all loose subtrees into one big tree and
1646 create a dummy root at the top.  (Wait a minute.  Root at the top? Yup.)
1647 Loose subtrees occur when the real root has expired, or you've read it
1648 in a previous session.
1649 @item gnus-summary-print-dummy-lines
1650 @vindex gnus-summary-print-dummy-lines
1651 If non-nil, Gnus will print those dummy roots described above.  It it is
1652 nil, the dummy roots won't be printed, but the gathering will still take
1653 place (if @code{gnus-gather-loose-threads} is non-nil, that is.) 
1654 @item gnus-thread-hide-subtree
1655 @vindex gnus-thread-hide-subtree
1656 If non-nil, all subtrees will be hidden when the Summary buffer is
1657 generated. 
1658 @item gnus-thread-hide-killed
1659 @vindex gnus-thread-hide-killed
1660 if you kill a thread and this variable is non-nil, the subtree will be
1661 hidden. 
1662 @item gnus-thread-ignore-subject
1663 @vindex gnus-thread-ignore-subject
1664 Sometimes somebody changes the subject in the middle of a thread.  If
1665 this variable is non-nil, the change in subject is ignored.  If it is
1666 nil, which is the default, a change in the subject will result in a new
1667 thread. 
1668 @item gnus-thread-indent-level
1669 @vindex gnus-thread-indent-level
1670 This is a number which says how many spaces to indent a thread.  The
1671 default is @samp{4}.
1672 @end table
1673
1674 @node Threading Commands
1675 @subsection Threading Commands
1676
1677 @table @kbd
1678 @item M-C-k
1679 @kindex M-C-k (Summary)
1680 @findex gnus-summary-kill-thread
1681 Mark all articles under the current one as read
1682 (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
1683 remove all marks.  If the prefix argument is negative, tick articles.
1684 @item M-C-t
1685 @kindex M-C-t (Summary)
1686 @findex gnus-summary-toggle-threads
1687 Toggle showing threads (@code{gnus-summary-toggle-threads}).
1688 @item M-C-s
1689 @kindex M-C-s (Summary)
1690 @findex gnus-summary-show-thread
1691 Show the thread hidden under the current article, if any
1692 (@code{gnus-summary-show-thread}). 
1693 @item M-C-h
1694 @kindex M-C-h (Summary)
1695 @findex gnus-summary-hide-thread
1696 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
1697 @end table
1698
1699 The following commands are all thread movement commands.  They all
1700 understand the numeric prefix.
1701
1702 @table @kbd
1703 @item M-C-f
1704 @kindex M-C-f (Summary)
1705 @findex gnus-summary-next-thread
1706 Go to the next thread (@code{gnus-summary-next-thread}).
1707 @item M-C-b
1708 @kindex M-C-b (Summary)
1709 @findex gnus-summary-prev-thread
1710 Go to the previous thread (@code{gnus-summary-prev-thread}).
1711 @item M-C-d
1712 @kindex M-C-d (Summary)
1713 @findex gnus-summary-down-thread
1714 Descend the thread (@code{gnus-summary-down-thread}).
1715 @item M-C-u
1716 @kindex M-C-u (Summary)
1717 @findex gnus-summary-up-thread
1718 Ascend the thread (@code{gnus-summary-up-thread}).
1719 @end table
1720
1721 @node Exiting the Summary Buffer
1722 @section Exiting the Summary Buffer
1723
1724 @table @kbd
1725 @item q
1726 @kindex q (Summary)
1727 @findex gnus-summary-exit
1728 Exit the current newsgroup and update all the information
1729 (@code{gnus-summary-exit}). 
1730 @item Q
1731 @kindex Q (Summary)
1732 @findex gnus-summary-quit
1733 Exit the current newsgroup without updating any information
1734 (@code{gnus-summary-quit}). 
1735 @item c
1736 @kindex c (Summary)
1737 @findex gnus-summary-catchup-and-exit
1738 Mark all articles in the newsgroup as read and exit
1739 (@code{gnus-summary-catchup-and-exit}). 
1740 @end table
1741
1742 @vindex gnus-exit-group-hook
1743 @code{gnus-exit-group-hook} is called when you exit the current
1744 newsgroup.  
1745
1746 @vindex gnus-use-cross-reference
1747 When you exit the Summary buffer, the data on the current newsgroup will
1748 be updated (which articles you have read, which articles you have
1749 replied to, etc.) If the @code{gnus-use-cross-reference} variable is
1750 non-nil, articles that are cross-referenced to this newsgroup, and are
1751 marked as read, will also be marked as read in the other newsgroups they
1752 were cross-posted to.  This ensures that you'll never have to read the
1753 same article more than once.
1754
1755 Unless, of course, somebody has posted it to several newsgroups
1756 separately. 
1757
1758 One other thing that may cause Gnus to not do the cross-posting thing
1759 correctly is if you use an NNTP server that supports xover (which is
1760 very nice, because it speeds things up considerably) which does not
1761 include the Xref header in its NOV lines.  This is Evil, but it's
1762 common.  Gnus tries to Do The Right Thing even with xover by registering
1763 the Xref lines of all articles you actually read, but if you kill the
1764 articles, or just mark them as read without reading them, Gnus will not
1765 get a chance to snoop the Xref lines out of these articles, and will be
1766 unable to use the cross reference mechanism. 
1767
1768 @vindex nntp-xover-is-evil
1769 If you want Gnus to get the Xrefs right all the time, you have to set
1770 @code{nntp-xover-is-evil} to t, which slows things down considerably. 
1771
1772 C'est la vie.
1773
1774 @node Saving Articles
1775 @section Saving Articles
1776
1777 Gnus can save articles in a number of ways.  Below is the documentation
1778 for saving articles in a fairly straight-forward fashion (ie. little
1779 processing of the article is done before it is saved).  For a different
1780 approach (uudecoding, unsharing, digesting) see gnus-uu.
1781
1782 @vindex gnus-save-all-headers
1783 If @code{gnus-save-all-headers} is non-nil, Gnus will not delete
1784 unwanted headers before saving the article.
1785
1786 @table @kbd
1787 @item o
1788 @kindex o (Summary)
1789 @findex gnus-summary-save-article
1790 Save the current article (@code{gnus-summary-save-article}).
1791 @item C-o
1792 @kindex C-o (Summary)
1793 @findex gnus-summary-save-in-mail
1794 Save the current article in mail format
1795 (@code{gnus-summary-save-in-mail}). 
1796 @end table
1797
1798 @vindex gnus-default-article-saver
1799 You can customize the @code{gnus-default-article-saver} variable to make
1800 Gnus what you want it to.  You can use any of the four ready-made
1801 functions below, or you can create your own. 
1802
1803 @table @code
1804 @item gnus-summary-save-in-rmail
1805 @vindex gnus-summary-save-in-rmail
1806 This is the format Gnus uses by default, @dfn{babyl}.
1807 Uses the function in the @code{gnus-rmail-save-name} variable to get a
1808 file name to save the article in.  The default is
1809 @code{gnus-plain-save-name}. 
1810 @item gnus-summary-save-in-mail
1811 @vindex gnus-summary-save-in-mail
1812 Save in a Unix mail (mbox) file.
1813 Uses the function in the @code{gnus-mail-save-name} variable to get a
1814 file name to save the article in.  The default is
1815 @code{gnus-plain-save-name}. 
1816 @item gnus-summary-save-in-file
1817 @vindex gnus-summary-save-in-file
1818 Append the article straight to an ordinary file.
1819 Uses the function in the @code{gnus-file-save-name} variable to get a
1820 file name to save the article in.  The default is
1821 @code{gnus-numeric-save-name}. 
1822 @item gnus-summary-save-in-folder
1823 @vindex gnus-summary-save-in-folder
1824 Save the article to an MH folder using @code{rcvstore} from the MH
1825 library.
1826 @end table
1827
1828 All of these functions, except for the last one, will save the article
1829 in the @code{gnus-article-save-directory}, which is initialized from the
1830 @samp{SAVEDIR} environment variable.
1831
1832 As you can see above, the functions use different functions to find a
1833 suitable name of a file to save the article in.  Below is a list of
1834 available functions that generates names:
1835
1836 @table @code
1837 @item gnus-Numeric-save-name
1838 @findex gnus-Numeric-save-name
1839 Generates file names that look like @samp{~/News/Alt.andrea-dworkin/45}.
1840 @item gnus-numeric-save-name
1841 @findex gnus-numeric-save-name
1842 Generates file names that look like @samp{~/News/alt.andrea-dworkin/45}.
1843 @item gnus-Plain-save-name
1844 @findex gnus-Plain-save-name
1845 Generates file names that look like @samp{~/News/Alt.andrea-dworkin}.
1846 @item gnus-plain-save-name
1847 @findex gnus-plain-save-name
1848 Generates file names that look like @samp{~/News/alt.andrea-dworkin}.
1849 @end table
1850
1851 @vindex gnus-use-long-file-name
1852 Finally, you have the @code{gnus-use-long-file-name} variable.  If it is
1853 nil, all the preceding functions will replace all periods (@samp{.}) in
1854 the newsgroup names with slashes (@samp{/}) - which means that the
1855 functions will generate hierarchies of directories instead of having all
1856 the files in the toplevel directory (@samp{~/News/alt/andrea-dworkin}
1857 instead of @samp{~/News/alt.andrea-dworkin}.)
1858
1859 @node Decoding Articles
1860 @section Decoding Articles
1861
1862 Gnus has a plethora of functions for handling series of (uu)encoded
1863 articles.  Gnus can find out by itself what articles belong to one
1864 series, decode all the articles and unpack/view/save the resulting
1865 file(s).  All these functions belong to the `gnus-uu' package and are
1866 reached from the Summary buffer as three-key keystrokes: @key{C-c C-v
1867 KEY}.  That last key varies, of course, but all these functions use the
1868 @key{C-c C-v} prefix keystroke.
1869
1870 Gnus guesses what articles are in the series according to the following
1871 simplish rule: The subjects must be (nearly) identical, except for the
1872 last two numbers of the line.  (Spaces are largely ignored, however.)
1873
1874 For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
1875 will find all the articles that match the regexp @samp{^cat.gif
1876 ([0-9]+/[0-9]+).*$}.  
1877
1878 Subjects that are nonstandard, like @samp{cat.gif (2/3) Part 6 of a
1879 series}, will not be properly recognized by any of the automatic viewing
1880 commands, and you have to mark the articles manually with @key{#}.
1881
1882 @menu
1883 * Decoding Commands::           Decoding in various ways.
1884 * Setting the Process Mark::    You can mark which articles to work on.
1885 * Other Related Commands::      Other related commands.
1886 * Viewing Files::               You can view the resulting decoded files.
1887 * Decoding Variables::          No, you do not have to decode any variables.
1888 @end menu
1889
1890 @node Decoding Commands
1891 @subsection Decoding Commands
1892
1893 All the keystrokes for decoding follow a strict pattern. 
1894
1895 @table @key
1896 @item C-c C-v C-KEY
1897 This is a function for decoding and viewing.
1898 @item C-c C-v KEY
1899 This is a function for decoding and saving.
1900 @item C-c C-v M-C-KEY
1901 This is a function for decoding and viewing marked articles.
1902 @item C-c C-v M-KEY
1903 This is a function for decoding and saving marked articles.
1904 @end table
1905  
1906 @menu
1907 * Decoding With uudecode::         The most common encoding on the net.
1908 * Decoding With unshar::           This is used some in source groups.
1909 * Decoding With Other Decoders::   Binhex and plain save.
1910 @end menu
1911
1912 @node Decoding With uudecode
1913 @subsubsection Decoding With uudecode
1914
1915 @table @key
1916 @item C-c C-v C-v
1917 @kindex C-c C-v C-v (Summary)
1918 @findex gnus-uu-decode-and-view
1919 Decode and view the series of articles that the current article is a
1920 part of (@code{gnus-uu-decode-and-view}). 
1921 @item C-c C-v v
1922 @kindex C-c C-v v (Summary)
1923 @findex gnus-uu-decode-and-save
1924 Decode and save the series of articles that the current article is a
1925 part of (@code{gnus-uu-decode-and-save}). 
1926 @item C-c C-v M-C-v
1927 @kindex C-c C-v M-C-v (Summary)
1928 @findex gnus-uu-marked-decode-and-view
1929 Decode and view the marked articles
1930 (@code{gnus-uu-marked-decode-and-view}). 
1931 @item C-c C-v M-v
1932 @kindex C-c C-v M-v (Summary)
1933 @findex gnus-uu-marked-decode-and-view
1934 Decode and save the marked articles
1935 (@code{gnus-uu-marked-decode-and-view}). 
1936 @item C-c C-v C-w
1937 @kindex C-c C-v C-w (Summary)
1938 @findex gnus-uu-decode-and-view-all-articles
1939 Decode and view all articles in the newsgroup
1940 (@code{gnus-uu-decode-and-view-all-articles}).  
1941 @item C-c C-v w
1942 @kindex C-c C-v w (Summary)
1943 @findex gnus-uu-decode-and-save-all-articles
1944 Decode and save all articles in the newsgroup
1945 (@code{gnus-uu-decode-and-save-all-articles}).  
1946 @item C-c C-v M-C-w
1947 @kindex C-c C-v M-C-w (Summary)
1948 @findex gnus-uu-decode-and-view-all-marked-files
1949 Decode and view all series of articles that are marked
1950 (@code{gnus-uu-decode-and-view-all-marked-files}).  
1951 @item C-c C-v M-w
1952 @kindex C-c C-v M-w (Summary)
1953 @findex gnus-uu-decode-and-save-all-marked-files
1954 Decode and save all series of articles that are marked
1955 (@code{gnus-uu-decode-and-save-all-marked-files}).  
1956 @item C-c C-v C-a
1957 @kindex C-c C-v C-a (Summary)
1958 @findex gnus-uu-decode-and-view-all-articles
1959 Decode and view all unread articles in the newsgroup
1960 (@code{gnus-uu-decode-and-view-all-articles}).  
1961 @item C-c C-v a
1962 @kindex C-c C-v a (Summary)
1963 @findex gnus-uu-decode-and-save-all-articles
1964 Decode and save all unread articles in the newsgroup
1965 (@code{gnus-uu-decode-and-save-all-articles}).  
1966 @item C-c C-v C-b
1967 @kindex C-c C-v C-b (Summary)
1968 @findex gnus-uu-decode-and-show-in-buffer
1969 Decode the current article and show the result in the article
1970 buffer.  This might be useful if somebody has encoded (parts of) an
1971 article, for some strange reason
1972 (@code{gnus-uu-decode-and-show-in-buffer}). 
1973 @end table
1974
1975 The @code{gnus-uu-decode-and-save-all-marked-files} need some
1976 explanation.  It allows you to mark all articles that are part of series
1977 of articles you are interested in in a newsgroup.  You only have to mark
1978 one article for each series of articles you want, and then you call this
1979 function, which will find all articles that are part of the series you
1980 want.  Is that clear? And they say it's a stupid idea getting drunk
1981 before writing documentation! Bah! 
1982
1983 @node Decoding With unshar
1984 @subsubsection Decoding With unshar
1985
1986 Using @code{unshar} introduces rather large security holes - it actually
1987 runs the code it finds in the articles.  So you should, at least, peek
1988 through the articles you want to unshar before using these functions.
1989
1990 @table @kbd
1991 @item C-c C-v C-s
1992 @kindex C-c C-v C-s (Summary)
1993 @findex gnus-uu-shar-and-view
1994 @kindex C-c C-v C-s (Summary)
1995 @findex gnus-uu-shar-and-view
1996 Unshar and view the series of articles that the current article is a
1997 part of (@code{gnus-uu-shar-and-view}). 
1998 @item C-c C-v s
1999 @kindex C-c C-v s (Summary)
2000 @findex gnus-uu-shar-and-save
2001 @kindex C-c C-v s (Summary)
2002 @findex gnus-uu-shar-and-save
2003 Unshar and save the series of articles that the current article is a
2004 part of (@code{gnus-uu-shar-and-save}). 
2005 @item C-c C-v M-C-s
2006 @kindex C-c C-v M-C-s (Summary)
2007 @findex gnus-uu-marked-shar-and-view
2008 @kindex C-c C-v M-C-s (Summary)
2009 @findex gnus-uu-marked-shar-and-view
2010 Unshar and view the marked articles
2011 (@code{gnus-uu-marked-shar-and-view}). 
2012 @item C-c C-v M-s
2013 @kindex C-c C-v M-s (Summary)
2014 @findex gnus-uu-marked-shar-and-view
2015 @kindex C-c C-v M-s (Summary)
2016 @findex gnus-uu-marked-shar-and-view
2017 Unshar and save the marked articles
2018 (@code{gnus-uu-marked-shar-and-view}). 
2019 @end table
2020
2021 @node Decoding With Other Decoders
2022 @subsubsection Decoding With Other Decoders
2023
2024 These commands are entry points to all the decoding methods Gnus knows -
2025 uudecode, unshar, unbinhex and save.  You will be prompted for what
2026 method you want to employ.
2027
2028 @table @kbd
2029 @item C-c C-v C-m
2030 @kindex C-c C-v C-m (Summary)
2031 @findex gnus-uu-multi-decode-and-view
2032 Decode (by some method) and view the series of articles that the current
2033 article is a part of (@code{gnus-uu-multi-decode-and-view}).
2034 @item C-c C-v m
2035 @kindex C-c C-v m (Summary)
2036 @findex gnus-uu-multi-decode-and-save
2037 Decode (by some method) and save the series of articles that the current
2038 article is a part of (@code{gnus-uu-multi-decode-and-save}).
2039 @item C-c C-v M-C-m
2040 @kindex C-c C-v M-C-m (Summary)
2041 @findex gnus-uu-marked-multi-decode-and-view
2042 Decode (by some method) and view the marked articles
2043 (@code{gnus-uu-marked-multi-decode-and-view}). 
2044 @item C-c C-v M-m
2045 @kindex C-c C-v M-m (Summary)
2046 @findex gnus-uu-marked-multi-decode-and-view
2047 Decode (by some method) and save the marked articles
2048 (@code{gnus-uu-marked-multi-decode-and-view}). 
2049 @item C-c C-v C-j
2050 @kindex C-c C-v C-j (Summary)
2051 @findex gnus-uu-threaded-multi-decode-and-view
2052 Decode (by some method) and view all articles in the current thread
2053 (@code{gnus-uu-threaded-multi-decode-and-view}). 
2054 @item C-c C-v C-j
2055 @kindex C-c C-v C-j (Summary)
2056 @findex gnus-uu-threaded-multi-decode-and-view
2057 Decode (by some method) and save all articles in the current thread
2058 (@code{gnus-uu-threaded-multi-decode-and-view}). 
2059 @end table
2060
2061 @node Setting the Process Mark
2062 @subsection Setting the Process Mark
2063
2064 The process mark is used by other parts of Gnus, not just the `gnus-uu'
2065 package.  However, this is where it is most useful, so it adds some
2066 further methods for setting the mark.
2067
2068 @table @kbd
2069 @item C-c C-v C-r
2070 @kindex C-c C-v C-r (Summary)
2071 @findex gnus-uu-mark-by-regexp
2072 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 
2073 @item C-c C-v r
2074 @kindex C-c C-v r (Summary)
2075 @findex gnus-uu-mark-region
2076 Mark all articles between point and mark (@code{gnus-uu-mark-region}). 
2077 @item C-c C-v t
2078 @kindex C-c C-v t (Summary)
2079 @findex gnus-uu-mark-thread
2080 Mark all articles downward in the current thread
2081 (@code{gnus-uu-mark-thread}). 
2082 @end table
2083
2084 @node Other Related Commands
2085 @subsection Other Related Commands
2086
2087 @table @key
2088 @item C-c C-v f
2089 @kindex C-c C-v f (Summary)
2090 @findex gnus-uu-digest-and-forward
2091 Digest and forward all articles that are part of a series
2092 (@code{gnus-uu-digest-and-forward}). 
2093 @item C-c C-v M-f
2094 @kindex C-c C-v M-f (Summary)
2095 @findex gnus-uu-marked-digest-and-forward
2096 Digest and forward all marked articles
2097 (@code{gnus-uu-marked-digest-and-forward}).
2098 @item C-c C-v C-i
2099 @kindex C-c C-v C-i (Summary)
2100 @findex gnus-uu-toggle-interactive-view
2101 Instead of having windows popping up automatically, it can be handy to
2102 view files interactivly, especially when viewing archives
2103 (@code{gnus-uu-toggle-interactive-view}).
2104 @item C-c C-v C-t
2105 @kindex C-c C-v C-t (Summary)
2106 @findex gnus-uu
2107 Toggle any of the most important @code{gnus-uu} variables
2108 (@code{gnus-uu-toggle-any-variable}).
2109 @item C-c C-v C-l
2110 @kindex C-c C-v C-l (Summary)
2111 @findex gnus-uu-edit-begin-line
2112 Edit the @samp{begin} line of an uuencoded article, if any
2113 (@code{gnus-uu-edit-begin-line}).  
2114 @item C-c C-v p
2115 @kindex C-c C-v p (Summary)
2116 @findex gnus-uu-post-news
2117 Uuencode and post an file.  If the file is large, it will be split into a
2118 series of articles that will be posted (@code{gnus-uu-post-news}).
2119 @end table
2120
2121 @node Viewing Files
2122 @subsection Viewing Files
2123
2124 When using the view commands, @code{gnus-uu-decode-and-view} for
2125 instance, Gnus will (normally, see below) try to view the file according
2126 to the rules given in @code{gnus-uu-default-view-rules} and
2127 @code{gnus-uu-user-view-rules}.  If it recognizes the file, it will
2128 display it immediately.  If the file is some sort of archive, Gnus will
2129 attempt to unpack the archive and see if any of the files in the archive
2130 can be viewed.  For instance, if you have a gzipped tar file
2131 @file{pics.tar.gz} containing the files @file{pic1.jpg} and
2132 @file{pic2.gif}, Gnus will uncompress and detar the main file, and then
2133 view the two pictures.  This unpacking process is recursive, so if the
2134 archive contains archives of archives, it'll all be unpacked.
2135
2136 If the view command doesn't recognise the file type, or can't view it
2137 because you don't have the viewer, or can't view *any* of the files in
2138 the archive, the user will be asked if she wishes to have the file saved
2139 somewhere.  Note that if the decoded file is an archive, and Gnus
2140 manages to view some of the files in the archive, it won't tell the user
2141 that there were some files that were unviewable.  Try interactive view
2142 for a different approach.
2143
2144 @node Decoding Variables
2145 @subsection Decoding Variables
2146
2147 @menu 
2148 * Rule Variables::          Variables that say how a file is to be viewed.
2149 * Other Decode Variables::  Other decode variables.
2150 @end menu
2151
2152 @node Rule Variables
2153 @subsubsection Rule Variables
2154
2155 Gnus uses @dfn{rule} variables to decide how to view a file.  All these
2156 variables are on the form
2157   
2158 @example
2159       (list '(regexp1 command2)
2160             '(regexp2 command2)
2161             ...)
2162 @end example
2163
2164 @table @code
2165 @item gnus-uu-user-view-rules
2166 @vindex gnus-uu-user-view-rules
2167 This variable is consulted first when viewing files.  If you wish to use,
2168 for instance, @code{sox} to convert an @samp{.au} sound file, you could
2169 say something like:
2170 @example
2171        (setq gnus-uu-user-view-rules
2172          (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
2173 @end example
2174 @item gnus-uu-user-view-rules-end
2175 @vindex gnus-uu-user-view-rules-end
2176 This variable is consulted if Gnus couldn't make any matches from the
2177 user and default view rules.
2178 @item gnus-uu-user-interactive-view-rules
2179 @vindex gnus-uu-user-interactive-view-rules
2180 This is the variable used instead of @code{gnus-uu-user-view-rules}
2181 when in interactive mode.
2182 @item gnus-uu-user-interactive-view-rules-end
2183 @vindex gnus-uu-user-interactive-view-rules-end
2184 This variable is used instead of @code{gnus-uu-user-view-rules-end} when
2185 in interactive mode.
2186 @item gnus-uu-user-archive-rules
2187 @vindex gnus-uu-user-archive-rules
2188 This variable can be used to say what comamnds should be used to unpack
2189 archives.
2190 @end table
2191
2192 @node Other Decode Variables
2193 @subsubsection Other Decode Variables
2194
2195 @table @code
2196 @item gnus-uu-ignore-files-by-name
2197 @vindex gnus-uu-ignore-files-by-name
2198 Files with name matching this regular expression won't be viewed.
2199
2200 @item gnus-uu-ignore-files-by-type
2201 @vindex gnus-uu-ignore-files-by-type
2202 Files with a MIME type matching this variable won't be viewed.  Note
2203 that Gnus tries to guess what type the file is based on the
2204 name.  gnus-uu is not a MIME package, so this is slightly kludgy.
2205
2206 @item gnus-uu-tmp-dir
2207 @vindex gnus-uu-tmp-dir
2208 Where gnus-uu does its work.
2209
2210 @item gnus-uu-do-not-unpack-archives
2211 @vindex gnus-uu-do-not-unpack-archives
2212 Non-nil means that gnus-uu won't peek inside archives looking for files
2213 to dispay.
2214
2215 @item gnus-uu-view-and-save
2216 @vindex gnus-uu-view-and-save
2217 Non-nil means that the user will always be asked to save a file after
2218 viewing it.
2219
2220 @item gnus-uu-asynchronous
2221 @vindex gnus-uu-asynchronous
2222 Non-nil means that files will be viewed asynchronously.  This can be
2223 useful if you're viewing long @file{.mod} files, for instance, which
2224 often takes several minutes.  Note, however, that since gnus-uu doesn't
2225 ask, and if you are viewing an archive with lots of viewable files,
2226 you'll get them all up more or less at once, which can be confusing, to
2227 say the least.  To get gnus-uu to ask you before viewing a file, set the
2228 @code{gnus-uu-ask-before-view} variable.
2229
2230 @item gnus-uu-ask-before-view
2231 @vindex gnus-uu-ask-before-view
2232 Non-nil means that gnus-uu will ask you before viewing each file.
2233
2234 @item gnus-uu-ignore-default-view-rules
2235 @vindex gnus-uu-ignore-default-view-rules
2236 Non-nil means that gnus-uu will ignore the default viewing rules.
2237
2238 @item gnus-uu-ignore-default-archive-rules
2239 @vindex gnus-uu-ignore-default-archive-rules
2240 Non-nil means that gnus-uu will ignore the default archive unpacking
2241 commands.
2242
2243 @item gnus-uu-kill-carriage-return
2244 @vindex gnus-uu-kill-carriage-return
2245 Non-nil means that gnus-uu will strip all carriage returns from
2246 articles.
2247
2248 @item gnus-uu-unmark-articles-not-decoded
2249 @vindex gnus-uu-unmark-articles-not-decoded
2250 Non-nil means that gnus-uu will mark articles that were unsuccessfully
2251 decoded as unread.
2252
2253 @item gnus-uu-output-window-height
2254 @vindex gnus-uu-output-window-height
2255 This variable says how tall the output buffer window is to be when using
2256 interactive view mode.
2257
2258 @item gnus-uu-correct-stripped-uucode
2259 @vindex gnus-uu-correct-stripped-uucode
2260 Non-nil means that gnus-uu will *try* to fix uuencoded files that have
2261 had traling spaces deleted.
2262
2263 @item gnus-uu-use-interactive-view
2264 @vindex gnus-uu-use-interactive-view
2265 Non-nil means that gnus-uu will use interactive viewing mode.
2266
2267 @item gnus-uu-view-with-metamail
2268 @vindex gnus-uu-view-with-metamail
2269 Non-nil means that gnus-uu will ignore the viewing commands defined by
2270 the rule variables and just fudge a MIME content type based on the file
2271 name.  The result will be fed to metamail for viewing.
2272
2273 @item gnus-uu-save-in-digest
2274 @vindex gnus-uu-save-in-digest
2275 Non-nil means that gnus-uu, when asked to save without decoding, will
2276 save in digests.  If this variable is nil, gnus-uu will just save
2277 everything in a file without any embellishments.  The digesting almost
2278 conforms to RFC1153 - no easy way to specify any meaningful volume and
2279 issue numbers were found, so I simply dropped them.
2280
2281 @item gnus-uu-post-include-before-composing
2282 @vindex gnus-uu-post-include-before-composing
2283 Non-nil means that gnus-uu will ask for a file to encode before you
2284 compose the article.  If this variable is t, you can either include an
2285 encoded file with @key{C-c C-i} or have one included for you when you
2286 post the article.
2287
2288 @item gnus-uu-post-length
2289 @vindex gnus-uu-post-length
2290 Maximum length of an article.  The encoded file will be split into how
2291 many articles it takes to post the entire file.
2292
2293 @item gnus-uu-post-threaded
2294 @vindex gnus-uu-post-threaded
2295 Non-nil means that gnus-uu will post the encoded file in a thread.  This
2296 may not be smart, as no other decoder I have seen are able to follow
2297 threads when collecting uuencoded articles.  (Well, I have seen one
2298 package that does that - gnus-uu, but somehow, I don't think that
2299 counts...) Default is nil.
2300
2301 @item gnus-uu-post-separate-description
2302 @vindex gnus-uu-post-separate-description
2303 Non-nil means that the description will be posted in a separate article.
2304 The first article will typically be numbered (0/x).  If this variable is
2305 nil, the description the user enters will be included at the beginning
2306 of the first article, which will be numbered (1/x).  Default is t.
2307
2308 @end table
2309
2310 @node Various Article Stuff 
2311 @section Various Article Stuff 
2312
2313 @table @kbd
2314 @item w
2315 @kindex w (Summary)
2316 @findex gnus-summary-stop-page-breaking
2317 Remove page breaking from the current article
2318 (@code{gnus-summary-stop-page-breaking}). 
2319 @item C-c C-r
2320 @kindex C-c C-r (Summary)
2321 @findex gnus-summary-caesar-message
2322 Do a Caesar rotate (rot13) on the article buffer
2323 (@code{gnus-summary-caesar-message}). 
2324 @item g
2325 @kindex g (Summary)
2326 @findex gnus-summary-show-article
2327 Select the current article (@code{gnus-summary-show-article}).
2328 @item t
2329 @kindex t (Summary)
2330 @findex gnus-summary-toggle-header
2331 Toggle whether to display all headers in the article buffer
2332 (@code{gnus-summary-toggle-header}). 
2333 @item M-t
2334 @kindex M-t (Summary)
2335 @findex gnus-summary-toggle-mime
2336 Toggle whether to run the article through MIME before displaying
2337 (@code{gnus-summary-toggle-mime}). 
2338 @item |
2339 @kindex | (Summary)
2340 @findex gnus-summary-pipe-output
2341 Pipe the current article through a filter
2342 (@code{gnus-summary-pipe-output}). 
2343 @end table
2344
2345 @node Summary Sorting
2346 @section Summary Sorting
2347
2348 You can have the Summary buffer sorted in various ways, even though I
2349 can't really se why you'd want that.
2350
2351 @table @kbd
2352 @item C-c C-s C-n
2353 @kindex C-c C-s C-n (Summary)
2354 @findex gnus-summary-sort-by-number
2355 Sort by article number (@code{gnus-summary-sort-by-number}).
2356 @item C-c C-s C-a
2357 @kindex C-c C-s C-a (Summary)
2358 @findex gnus-summary-sort-by-author
2359 Sort by author (@code{gnus-summary-sort-by-author}).
2360 @item C-c C-s C-s
2361 @kindex C-c C-s C-s (Summary)
2362 @findex gnus-summary-sort-by-subject
2363 Sort by subject (@code{gnus-summary-sort-by-subject}).
2364 @item C-c C-s C-d
2365 @kindex C-c C-s C-d (Summary)
2366 @findex gnus-summary-sort-by-date
2367 Sort by date (@code{gnus-summary-sort-by-date}).
2368 @end table
2369
2370 @node Finding the Parent
2371 @section Finding the Parent
2372
2373 @findex gnus-summary-refer-parent-article
2374 @kindex ^ (Summary)
2375 If you'd like to read the parent of the current article, and it is not
2376 displayed in the article buffer, you might still be able to.  That is, if
2377 the current group is fetched by NNTP, the parent hasn't expired and the
2378 References in the current article are not mangled, you can just press
2379 @kbd{^} (@code{gnus-summary-refer-parent-article}).  If everything goes
2380 well, you'll get the parent.
2381
2382 @findex gnus-summary-refer-article
2383 @kindex M-^ (Summary)
2384 You can also ask the NNTP server for an arbitrary article, no matter
2385 what newsgroup it belongs to.  @kbd{M-^}
2386 (@code{gnus-summary-refer-article}) will ask you for a message-id, which
2387 is one of those long thingies that look something like
2388 @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.  You have to get it all exactly
2389 right. 
2390
2391 @node Kill Files
2392 @section Kill Files
2393
2394 If a @dfn{kill file} for the current newsgroup exists, Gnus will read it
2395 just after having gotten the article headers from the server.
2396
2397 The kill files are files that may contain, in general, any elisp
2398 functions.  However, it is most common just to put functions that either
2399 delete or undelete articles based on their headers in those files -
2400 in short, killing articles.  Hence the name. 
2401
2402 There are several commands reachable from the Summary buffer that
2403 inserts commands for killing articles based on the current article.  You
2404 can, for instance, ask Gnus to kill all articles with a certain subject.
2405
2406 If you get really irrirated with some annoying twit, you can kill the
2407 author.  Note that the author won't literally be killed, unless, of
2408 course, he has an SCSI Gun Extension fitted to his machine.
2409
2410 @menu 
2411 * Summary Kill Commands::   Adding simple kill commands to the kill file.
2412 * Kill Mode::               A mode for editing the kill file.
2413 * Kill Variables::          Customize your killing.  (My, what terminology).
2414 @end menu
2415
2416 One note: I have seen a few people confused about what killing an
2417 articles really does.  Killing an article does not remove it from the
2418 news server.  It does not inhibit other people from reading the
2419 article.  It only means that you won't ever see that article, nothing
2420 more.  To really remove an article from the news server, you have to send
2421 a cancel message, which you can't do if you haven't written the
2422 article.  (Well, you can, but that's Not Nice.)
2423
2424 @node Summary Kill Commands
2425 @subsection Summary Kill Commands
2426
2427 @table @kbd
2428 @item C-c C-k C-s
2429 @kindex C-c C-k C-s (Summary)
2430 @findex gnus-kill-file-kill-by-subject
2431 Kill all articles with the current subject
2432 (@code{gnus-kill-file-kill-by-subject}). 
2433 @item C-c C-k C-a
2434 @kindex C-c C-k C-a (Summary)
2435 @findex gnus-kill-file-kill-by-author
2436 Kill all articles from the current author
2437 (@code{gnus-kill-file-kill-by-author}). 
2438 @item C-c C-k C-t
2439 @kindex C-c C-k C-t (Summary)
2440 @findex gnus-kill-file-kill-by-thread
2441 Kill all articles in the current subthread
2442 (@code{gnus-kill-file-kill-by-thread}). 
2443 @item C-c C-k C-o
2444 @kindex C-c C-k C-o (Summary)
2445 @findex gnus-kill-file-kill-by-organization
2446 Kill all articles from the current organization
2447 (@code{gnus-kill-file-kill-by-organization}). 
2448 @item C-c C-k C-x
2449 @kindex C-c C-k C-x (Summary)
2450 @findex gnus-kill-file-kill-by-xref
2451 Kill all articles that have similar Xrefs to the current article
2452 (@code{gnus-kill-file-kill-by-xref}).  This is one way to get rid of
2453 cross-posts. 
2454 @end table
2455
2456 @node Kill Mode
2457 @subsection Kill Mode
2458
2459 To enter either the global or local kill file, you can use the following
2460 keystrokes in the Summary buffer:
2461
2462 @table @kbd
2463 @item M-k
2464 @kindex M-k (Summary)
2465 @findex gnus-summary-edit-local-kill
2466 Edit the kill file for the current newsgroup
2467 (@code{gnus-summary-edit-local-kill}). 
2468 @item M-K
2469 @kindex M-K (Summary)
2470 @findex gnus-summary-edit-global-kill
2471 Edit the global kill file (@code{gnus-summary-edit-global-kill}). 
2472 @end table
2473
2474 @node Kill Variables
2475 @subsection Kill Variables
2476
2477 @table @code
2478 @item gnus-kill-killed
2479 @vindex gnus-kill-killed
2480 If this variable is nil, Gnus will never apply kill files to articles
2481 that have already been through the kill process.  While may save you lots
2482 of time, it also means that if you apply a kill file to a newsgroup, and
2483 then change the kill file and want to run it over you newsgroup again to
2484 kill more articles, it won't work.  You have to set this variable to t to
2485 do that.
2486 @item gnus-apply-kill-hook
2487 @vindex gnus-apply-kill-hook
2488 This hook is called to do the actual article killing.  This hook may do
2489 anything, of course, but it should call the @code{gnus-apply-kill-file}
2490 function, or some equivalent function, to do the killing.
2491 @item gnus-kill-files-directory
2492 @vindex gnus-kill-files-directory
2493 All kill files will be stored in this directory, which is initialized
2494 from the @samp{SAVEDIR} environment variable by default.
2495 @item gnus-kill-file-name
2496 @vindex gnus-kill-file-name
2497 This variable is a string that will be appended to newsgroup names to
2498 make a kill file name.  The default is @samp{KILL}.
2499 @end table
2500
2501 @node Various Summary Stuff
2502 @section Various Summary Stuff
2503
2504 @table @kbd
2505 @item &
2506 @kindex & (Summary)
2507 @findex gnus-summary-expand-window
2508 This command will prompt you for a header field, a regular expression to
2509 be matched this field, and a command to be executed if the match is
2510 made. 
2511 @item =
2512 @kindex = (Summary)
2513 @findex gnus-summary-expand-window
2514 Delete all other windows (@code{gnus-summary-expand-window}).
2515 @item C-x C-s
2516 @kindex C-x C-s (Summary)
2517 @findex gnus-summary-reselect-current-group
2518 Exit this group, and then enter it again
2519 (@code{gnus-summary-reselect-current-group}).
2520 @item V
2521 @kindex V (Summary)
2522 @findex gnus-version
2523 Display the Gnus version numbers (@code{gnus-version}).
2524 @item ?
2525 @kindex ? (Summary)
2526 @findex gnus-summary-describe-briefly
2527 Give a very brief description of the most important Summary keystrokes
2528 (@code{gnus-summary-describe-briefly}). 
2529 @item C-c C-i
2530 @kindex C-c C-i (Summary)
2531 @findex gnus-info-find-node
2532 Go to the Gnus info node (@code{gnus-info-find-node}).
2533 @end table
2534
2535 @vindex gnus-summary-prepare-hook
2536 @code{gnus-summary-prepare-hook} is called after the Summary buffer has
2537 been generated.  You might use it to, for instance, hilight lines, modify
2538 the look, or anything else you feel like.  I don't care.
2539
2540 @node The Article Buffer
2541 @chapter The Article Buffer
2542
2543 The articles are displayed in the Article buffer, of which there is only
2544 one.  All the Summary buffer share the same Article buffer.
2545
2546 @menu
2547 * Hiding Headers::        Deciding what headers should be displayed.
2548 * Using Mime::            Pushing articles through MIME before reading them.
2549 * Customizing Articles::  Tailoring the look of the articles.
2550 * Article Keymap::        Keystrokes available in the Article buffer
2551 * Misc Article::          Other stuff
2552 @end menu
2553
2554 @node Hiding Headers
2555 @section Hiding Headers
2556
2557 The top section of each article is the @dfn{header}.  (The rest is the
2558 @dfn{body}, but you may have guessed that already.) 
2559
2560 @vindex gnus-show-all-headers
2561 There is a lot of information in the header - the name of the person who
2562 wrote the article, the date and the subject of the article.  That might
2563 be very useful, buf there's also lots of information most people do not
2564 want to see - what systems the article has passed through before
2565 reaching you, the message id, the references, etc. ad nauseum - and
2566 you'll probably want to get rid of some of those lines.  If you want to
2567 keep all those lines in the Article buffer, you can set
2568 @code{gnus-show-all-headers} to t.
2569
2570 Gnus provides you with two variables for sifting header lines:
2571
2572 @table @code
2573 @item gnus-visible-headers
2574 @vindex gnus-visible-headers
2575 If this variable is non-nil, it should be a regular expression that says
2576 what header lines you wish to keep in the Article buffer.  All header
2577 lines that does not match this variable will be hidden.
2578
2579 For instance, if you only want to see the name of the person who wrote
2580 the article and the subject, you'd say:
2581
2582 @example
2583 (setq gnus-visible-headers "^From:\\^Subject:")
2584 @end example
2585
2586 @item gnus-ignored-headers
2587 @vindex gnus-ignored-headers
2588 This variable is the reverse of @code{gnus-visible-headers}.  If this
2589 variable is set (and @code{gnus-visible-headers} is nil), it should be a
2590 regular expression that matches all lines that you want to hide.  All
2591 lines that does not match this variable will remain visible.
2592
2593 For instance, if you just want to get rid of the references line and the
2594 xref line, you might say:
2595
2596 @example
2597 (setq gnus-ignored-headers "^References:\\^Xref:")
2598 @end example
2599
2600 Note that if @code{gnus-visible-headers} is non-nil, this variable will
2601 have no effect.
2602 @end table
2603
2604 @vindex gnus-sorted-header-list
2605 Gnus can also sort the headers for you.  (It does this by default.) You
2606 can control the sorting by setting the @code{gnus-sorted-header-list}
2607 variable.  It is a list of regular expressions that says in what order
2608 the header lines are to be displayed.
2609
2610 For instance, if you want the name of the author of the article first,
2611 and then the subject, you might say something like:
2612
2613 @example
2614 (setq gnus-sorted-header-list '("^From:" "^Subject:"))
2615 @end example
2616
2617 Any headers that are to remain visible, but are not listed in this
2618 variable, will be displayed after all the headers that are listed in
2619 this variable.
2620
2621 @node Using Mime
2622 @section Using Mime
2623
2624 Mime is a standard for waving your hands through the air, aimlessly,
2625 while people stand around yawning.
2626
2627 MIME, however, is a standard for encoding your articles, aimlessly,
2628 while all newsreaders die of fear.
2629
2630 MIME may specify what character set the article uses, the encoding of
2631 the characters, and it also makes it possible to embed pictures and
2632 other naughty stuff in innocent-looking articles.
2633
2634 @vindex gnus-show-mime
2635 @vindex gnus-show-mime-method
2636 Gnus handles MIME by shoving the articles through
2637 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
2638 default.  Set @code{gnus-show-mime} to t if you want to use MIME all the
2639 time; it might be best just use the toggling functions from the summary
2640 buffer to avoid getting nasty surprises (for instance, you enter the
2641 newsgroup @samp{alt.sing-a-long} and, before you know it, MIME has
2642 decoded the sounds file in the article and some horrible sing-a-long
2643 song comes streaming out out your speakers, and you can't find the
2644 volume button, because there isn't one, and people are starting to look
2645 at you, and you try to stop the program, but you can't, and you can't
2646 find the program to control the volume, and everybody else in the room
2647 suddenly decides to look at you disdainfully, and you'll feel rather
2648 stupid.
2649
2650 Any similarity between real events and this info page is purely
2651 coincidental.  Ahem.
2652
2653 @node Customizing Articles
2654 @section Customizing Articles
2655
2656 @vindex gnus-article-display-hook
2657 The @code{gnus-article-display-hook} is called after the article has
2658 been inserted into the Article buffer.  It is meant to handle all
2659 treatment of the article before it is displayed.  By default it contains
2660 @code{gnus-article-hide-headers}, which hides unwanted headers.
2661
2662 @findex gnus-article-subcite
2663 @findex gnus-article-hide-signature
2664 @findex gnus-article-hide-citation
2665 Other useful functions you might add to this hook is
2666 @code{gnus-article-hide-citation} (which hides all cited text),
2667 @code{gnus-article-hide-signature} (which, umn, hides the signature) and
2668 @code{gnus-article-subcite} (which tries to clean up the mess supercite
2669 makes in The Hands Of The Mad.
2670
2671 You can, of course, write your own functions.  The functions are called
2672 in the Article buffer, and you can do anything you like, pretty
2673 much.  There is no information that you have to keep in the buffer - you
2674 can change everything.
2675
2676 @node Article Keymap
2677 @section Article Keymap
2678
2679 Not many keystrokes are available in the Article buffer.  You would,
2680 during normal reading, seldom put the point in that buffer.  All the
2681 really useful functions are more readily available from the Summary
2682 buffer. 
2683
2684 @table @kbd
2685 @item SPACE
2686 @kindex SPACE (Article)
2687 @findex gnus-article-next-page
2688 Scroll forwards one page (@code{gnus-article-next-page}).
2689 @item DEL
2690 @kindex DEL (Article)
2691 @findex gnus-article-prev-page
2692 Scroll backwards one page (@code{gnus-article-prev-page}).
2693 @item r
2694 @kindex r (Article)
2695 @findex gnus-article-refer-article
2696 If point is in the neighborhood of a message-id and you press @kbd{r},
2697 Gnus will try to get that article from the server.  (Only available with
2698 nntp).  (@code{gnus-article-refer-article}).
2699 @item m
2700 @kindex m (Article)
2701 @findex gnus-article-mail
2702 Send a reply to the address near point (@code{gnus-article-mail}). 
2703 @item M
2704 @kindex M (Article)
2705 @findex gnus-article-mail-with-original
2706 Send a reply to the address near point and include the original article
2707 (@code{gnus-article-mail-with-original}). 
2708 @item s
2709 @kindex s (Article)
2710 @findex gnus-article-show-summary
2711 Reconfigure the buffers so that the Summary buffer becomes visible
2712 (@code{gnus-article-show-summary}).
2713 @item ?
2714 @kindex ? (Article)
2715 @findex gnus-article-describe-briefly
2716 Give a very brief description of the available keystrokes
2717 (@code{gnus-article-describe-briefly}). 
2718 @end table
2719
2720 That's all, folks!
2721
2722 @node Misc Article
2723 @section Misc Article
2724
2725 @vindex gnus-article-display-hook
2726 @vindex gnus-article-prepare-hook
2727 The @code{gnus-article-prepare-hook} is called right after the article
2728 has been inserted into the Article buffer.  It is mainly intended for
2729 functions that do something depending on the contents; it should
2730 probably not be used for changing the contents of the Article
2731 buffer.  Use the @code{gnus-article-display-hook} for that, which is
2732 called after this hook is called.
2733
2734 @vindex gnus-article-mode-line-format
2735 @code{gnus-article-mode-line-format} is a format string along the same
2736 lines as @code{gnus-summary-mode-line-format}.  It accepts exactly the
2737 same format specifications as that variable.
2738
2739 @vindex gnus-break-pages
2740 The @code{gnus-break-pages} variable controls whether @dfn{page
2741 breaking} is to take place.  If this variable is non-nil, the articles
2742 will be divided into pages whenever a @code{gnus-page-delimiter} appears
2743 in the article.  If this variable is nil, paging will not be done.
2744
2745 @vindex gnus-page-delimiter
2746 @code{gnus-page-delimiter} is @samp{^L} (linefeed) by default.
2747
2748 @node Various
2749 @chapter Various
2750
2751 @menu
2752 * Interactive::                Making Gnus ask you many questions.
2753 * Windows Configuration::      Configuring the Gnus buffer windows.
2754 * Various Various::            Things that are really various.
2755 @end menu
2756
2757 @node Interactive
2758 @section Interactive
2759
2760 @table @code
2761 @item gnus-novice-user
2762 @vindex gnus-novice-user
2763 If this variable is non-nil, you are either a newcomer to the usenet
2764 world, or you are very cautious, which is a nice thing to be,
2765 really.  You will be given questions of the type "Are you sure you want
2766 to do this?" before doing anything dangerous.
2767 @item gnus-expert-user
2768 @vindex gnus-expert-user
2769 If this variable is non-nil, you will never ever be asked any questions
2770 by Gnus.  It will simply assume you know what your are doing, no matter
2771 how strange.
2772 @item gnus-interactive-catchup
2773 @vindex gnus-interactive-catchup
2774 Require confirmation before catching up a newsgroup if non-nil.
2775 @item gnus-interactive-post
2776 @vindex gnus-interactive-post
2777 If non-nil, the user will be prompted for a newsgroup name when posting
2778 an article.
2779 @item gnus-interactive-exit
2780 @vindex gnus-interactive-exit
2781 Require confirmation before exiting Gnus.
2782 @end table
2783
2784 @node Windows Configuration
2785 @section Windows Configuration
2786
2787 No, there's nothing here about X, so be quiet.
2788
2789 @table @code
2790 @item gnus-use-full-window
2791 @vindex gnus-use-full-window
2792 If non-nil, Gnus will delete all other windows and occupy the entire
2793 Emacs screen by itself.  It is t by default.
2794 @item gnus-window-configuration
2795 @vindex gnus-window-configuration
2796 This variable describes how much space each Gnus buffer should be given,
2797 compared to the other Gnus buffers.  Here's an example:
2798
2799 @example
2800 (setq gnus-window-configuration
2801   '((summary (0 1 0))
2802     (newsgroups (1 0 0))
2803     (article (0 3 10))))
2804 @end example
2805
2806 This variable is a list of lists, where each of these small lists is on
2807 the form @var{(action (g s a))}.  As you can see, there are three
2808 possible @var{action}s - @code{newsgroup} (which is what happens when
2809 you first start Gnus, or returns from the Summary buffer),
2810 @code{summary} (which is what happens when there are no unread articles
2811 in the newsgroup, and @code{article} (which is what happens when there
2812 is an unread article in the newsgroup). 
2813
2814 We see that in the first two actions, the respective buffers will fill
2815 the screen, and in the last, the Article buffer will take ten lines for
2816 each three the Summary buffer gets.
2817
2818 @findex gnus-window-configuration-split
2819 This variable can also have a function as its value.  In that case,
2820 whenever Gnus tries to configure the Gnus buffers, that function will be
2821 called with the @var{action} as its parameter.  There is one pre-made
2822 function supplied, @code{gnus-window-configuration-split}, which may be
2823 suitable if you have a very wide Emacs window, and wants to have the
2824 Summary buffer and the Article buffer side by side.  Here's the
2825 definition of this function, which you may use as a template for your
2826 own function(s):
2827
2828 @example
2829 (defun gnus-window-configuration-split (action)
2830   ;; The group buffer always exists, so it's nice to use 
2831   ;; it as a starting point.
2832   (switch-to-buffer gnus-group-buffer t)
2833   (delete-other-windows)
2834   (split-window-horizontally)
2835   (cond ((or (eq action 'newsgroup) (eq action 'summary))
2836          (if (and (get-buffer gnus-summary-buffer)
2837                   (buffer-name gnus-summary-buffer))
2838              (switch-to-buffer-other-window gnus-summary-buffer)))
2839         ((eq action 'article)
2840          (switch-to-buffer gnus-summary-buffer t)
2841          (other-window 1)
2842          ;; Create and initialize the Article buffer if it doesn't
2843          ;; exist.
2844          (gnus-article-setup-buffer)
2845          (switch-to-buffer gnus-article-buffer t))))
2846 @end example
2847 @end table
2848
2849 @node Various Various
2850 @section Various Various
2851
2852 @vindex gnus-updated-mode-lines
2853 The @code{gnus-updated-mode-lines} variable is a list of buffers that
2854 should keep their mode lines updated.  The list may contain the symbols
2855 `group', `article' and `summary'.  If the corresponding symbol is
2856 present, Gnus will keep that mode line updated with information that may
2857 be pertinent.  If this variable is nil, screen refresh may be quicker.
2858
2859 @node Customization
2860 @chapter Customization
2861
2862 All variables are properly documented elsewhere in this manual.  This
2863 section is designed to give general pointers on how to customize Gnus
2864 for some quite common situations.
2865
2866 @menu
2867 * Slow NNTP Connection::      You run a local Emacs and get the news elsewhere.
2868 * Slow Terminal Connection::  You run a remote Emacs.
2869 * Little Disk Space::         You feel that having large setup files is icky.
2870 * Slow Machine::              You feel like buying a faster machine.
2871 @end menu
2872
2873 @node Slow NNTP Connection
2874 @section Slow NNTP Connection
2875
2876 If you run Emacs on a machine locally, and get your news from a machine
2877 over some very thin strings, you want to cut down on the amount of data
2878 Gnus has to get from the NNTP server.
2879
2880 @table @code
2881 @item gnus-read-active-file
2882 Set this to nil, which will inhibit Gnus from requesting the entire active
2883 file from the server.  This file is often v. large.  You also have to set
2884 @code{gnus-check-new-news} and @code{gnus-check-bogus-newsgroups} to nil
2885 to make sure that Gnus doesn't suddenly decide to fetch the active file
2886 anyway.  Note that this will make it difficult for you to get hold of new
2887 newsgroups. 
2888 @item nntp-xover-is-evil
2889 This one has to be nil.  If not, grabbing article headers from the NNTP
2890 server will not be very fast.  Not all NNTP servers support XOVER; Gnus
2891 will detect this by itself.
2892 @end table
2893
2894 @node Slow Terminal Connection
2895 @section Slow Terminal Connection
2896
2897 Let's say you use your home computer for dialling up the system that
2898 runs Emacs and Gnus.  If your modem is slow, you want to reduce the
2899 amount of data that is sent over the wires as much as possible.
2900
2901 @table @code
2902 @item gnus-auto-center-summary
2903 Set this to nil to inhibit Gnus from recentering the Summary buffer all
2904 the time.
2905 @item gnus-visible-headers
2906 Cut down on the headers that are included in the articles to the
2907 minimum.  You can, in fact, make do without them altogether - most of the
2908 useful data is in the Summary buffer, anyway.  Set this variable to
2909 @samp{""} or @samp{"^Date:"}, or whatever you feel you need.
2910 @item gnus-article-display-hook
2911 Set this hook to all the available hiding commands:
2912 @example
2913 (setq gnus-article-display-hook 
2914       '(gnus-article-hide-headers gnus-article-hide-signature
2915         gnus-article-hide-citation))
2916 @end example
2917 @item gnus-use-full-window
2918 By setting this to nil, you can make all the windows smaller.  While this
2919 doesn't really cut down much generally, it means that you have to see
2920 smaller portions of articles before deciding that you didn't want to
2921 read them anyway.
2922 @item gnus-thread-hide-subtree
2923 If this is non-nil, all threads in the Summary buffer will be hidden
2924 initially. 
2925 @item gnus-updated-mode-lines
2926 If this is nil, Gnus will not put information in the buffer mode lines,
2927 which might save some time.
2928 @end table
2929
2930 @node Little Disk Space
2931 @section Little Disk Space
2932
2933 The startup files can get rather large, so you may want to keep their
2934 sizes down a bit if you are running out of space.
2935
2936 @table
2937 @item gnus-save-newsrc-file
2938 If this is nil, Gnus will never save @file{.newsrc} - it will only save
2939 @file{.newsrc.eld}.  This means that you will not be able to use any
2940 other newsreaders than Gnus. 
2941 @item gnus-save-killed-list
2942 If this is nil, Gnus will not save the list of dead newsgroups.  That
2943 means that Gnus will not know whether newsgroups are new or old, which
2944 makes automatic handling of new newsgroups impossible.  You should also
2945 set @code{gnus-check-new-newsgroups} and
2946 @code{gnus-check-bogus-newsgroups} to nil if you set this variable to
2947 nil. 
2948 @end table
2949
2950 @node Slow Machine
2951 @section Slow Machine
2952
2953 If you have a slow machine, or are just really impatient, there are a
2954 few things you can do to make Gnus run faster.
2955
2956 Set @code{gnus-read-active-file}, @code{gnus-check-new-newsgroups},
2957 @code{gnus-check-bogus-newsgroups} to nil to make startup faster. 
2958
2959 Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
2960 @code{nntp-xover-is-evil} to nil to make entering and exiting the
2961 Summary buffer faster.
2962
2963 Set @code{gnus-article-display-hook} to nil to make article processing a
2964 bit faster.
2965
2966 @node Troubleshooting
2967 @chapter Troubleshooting
2968
2969 @node Reporting Bugs
2970 @chapter Reporting Bugs
2971
2972
2973
2974 @node Index
2975 @chapter Index
2976 @printindex cp
2977
2978 @node Key Index
2979 @chapter Key Index
2980 @printindex ky
2981
2982 @summarycontents
2983 @contents
2984 @bye
2985
2986 \f
2987 @c Local Variables:
2988 @c outline-regexp: "@chap\\|@\\(sub\\)*section\\|@appendix \\|@appendix\\(sub\\)*sec\\|\^L"
2989 @c End: