comparison man/gnus.texi @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents 8d2a9b52c682
children 0d2f883870bc
comparison
equal deleted inserted replaced
69:804d1389bcd6 70:131b0175ea99
1 \input texinfo @c -*-texinfo-*- 1 \input texinfo @c -*-texinfo-*-
2 2
3 @setfilename gnus 3 @setfilename ../info/gnus.info
4 @settitle Gnus 5.4.37 Manual 4 @settitle Gnus 5.2 Manual
5 @synindex fn cp 5 @synindex fn cp
6 @synindex vr cp 6 @synindex vr cp
7 @synindex pg cp 7 @synindex pg cp
8 @iftex 8 @iftex
9 @finalout 9 @finalout
12 12
13 @iftex 13 @iftex
14 @iflatex 14 @iflatex
15 \documentclass[twoside,a4paper,openright]{book} 15 \documentclass[twoside,a4paper,openright]{book}
16 \usepackage[latin1]{inputenc} 16 \usepackage[latin1]{inputenc}
17 % \usepackage{fontenc}
18 % \usepackage{babel}
17 \usepackage{pagestyle} 19 \usepackage{pagestyle}
18 \usepackage{epsfig} 20 \usepackage{epsfig}
21 % \usepackage{ifitricks}
19 \fontfamily{bembo}\selectfont 22 \fontfamily{bembo}\selectfont
20 23
21 \makeindex 24 \makeindex
22 \begin{document} 25 \begin{document}
23 26
52 \newcommand{\gnusampersand}{\&} 55 \newcommand{\gnusampersand}{\&}
53 \newcommand{\gnuspercent}{\%} 56 \newcommand{\gnuspercent}{\%}
54 \newcommand{\gnushash}{\#} 57 \newcommand{\gnushash}{\#}
55 \newcommand{\gnushat}{\symbol{"5E}} 58 \newcommand{\gnushat}{\symbol{"5E}}
56 \newcommand{\gnusunderline}{\symbol{"5F}} 59 \newcommand{\gnusunderline}{\symbol{"5F}}
57 \newcommand{\gnusnot}{$\neg$}
58 \newcommand{\gnustilde}{\symbol{"7E}} 60 \newcommand{\gnustilde}{\symbol{"7E}}
59 \newcommand{\gnusless}{{$<$}} 61 \newcommand{\gnusless}{{$<$}}
60 \newcommand{\gnusgreater}{{$>$}} 62 \newcommand{\gnusgreater}{{$>$}}
61 63
62 \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}} 64 \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
63 \newcommand{\gnusinteresting}{ 65 \newcommand{\gnusinteresting}{
64 \marginpar[\hspace{2.5cm}\gnushead]{\gnushead} 66 \marginpar[\hspace{2.5cm}\gnushead]{\gnushead}
65 } 67 }
66 68
67 \newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi} 69 \newcommand{\gnuschapter}[1]{
68
69 \newcommand{\gnuspagechapter}[1]{
70 {\mbox{}}
71 }
72
73 \newdimen{\gnusdimen}
74 \gnusdimen 0pt
75
76 \newcommand{\gnuschapter}[2]{
77 \gnuscleardoublepage
78 \ifdim \gnusdimen = 0pt\setcounter{page}{1}\pagestyle{gnus}\pagenumbering{arabic} \gnusdimen 1pt\fi
79 \chapter{#2}
80 \renewcommand{\gnussectionname}{} 70 \renewcommand{\gnussectionname}{}
81 \renewcommand{\gnuschaptername}{#2} 71 \chapter{#1}
72 \renewcommand{\gnuschaptername}{#1}
82 \thispagestyle{empty} 73 \thispagestyle{empty}
83 \hspace*{-2cm} 74 % \epsfig{figure=gnus-herd-\arabic{chapter}.eps,height=15cm}
84 \begin{picture}(500,500)(0,0)
85 \put(0,0){\makebox(480,350)[tr]{#1}}
86 \put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
87 \end{picture}
88 \clearpage 75 \clearpage
89 } 76 }
90 77
91 \newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1} 78 \newcommand{\gnusitemx}[1]{\vspace{-\itemsep}\item#1}
92 79
93 \newcommand{\gnussection}[1]{ 80 \newcommand{\gnussection}[1]{
94 \renewcommand{\gnussectionname}{#1} 81 \renewcommand{\gnussectionname}{#1}
95 \section{#1} 82 \section{#1}
96 } 83 }
129 \newenvironment{emphlist}% 116 \newenvironment{emphlist}%
130 {\begin{list}{}{ 117 {\begin{list}{}{
131 } 118 }
132 }{\end{list}} 119 }{\end{list}}
133 120
134 \newlength\gnusheadtextwidth 121 \newpagestyle{gnus}%
135 \setlength{\gnusheadtextwidth}{\headtextwidth}
136 \addtolength{\gnusheadtextwidth}{1cm}
137
138 \newpagestyle{gnuspreamble}%
139 { 122 {
140 { 123 {
141 \ifodd\count0 124 \ifodd\count0
142 { 125 {
143 \hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\mbox{}}\textbf{\hfill\roman{page}}} 126 \hspace*{-2ex}
127 \underline{
128 \makebox[\headtextwidth]{
129 \hspace*{-2.3ex}
130 \textbf{\arabic{chapter}.\arabic{section}}
131 \textbf{\gnussectionname\hfill\arabic{page}}
132 }}
144 } 133 }
145 \else 134 \else
146 { 135 {
147 \hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\roman{page}\hfill\mbox{}}} 136 \hspace*{-2.25cm}
148 } 137 \underline{
138 \hspace*{-2.3ex}
139 \makebox[\headtextwidth]{
140 \textbf{\arabic{page}\hfill\gnuschaptername}
141 }}
149 } 142 }
150 \fi 143 \fi
151 } 144 }
152 } 145 }
153 { 146 {
157 \else 150 \else
158 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}} 151 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
159 \hfill \mbox{} 152 \hfill \mbox{}
160 \fi 153 \fi
161 } 154 }
162 155 \pagestyle{gnus}
163 \newpagestyle{gnusindex}%
164 {
165 {
166 \ifodd\count0
167 {
168 \hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\gnuschaptername\hfill\arabic{page}}}}
169 }
170 \else
171 {
172 \hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
173 }
174 \fi
175 }
176 }
177 {
178 \ifodd\count0
179 \mbox{} \hfill
180 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
181 \else
182 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
183 \hfill \mbox{}
184 \fi
185 }
186
187 \newpagestyle{gnus}%
188 {
189 {
190 \ifodd\count0
191 {
192 \hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}
193 }
194 \else
195 {
196 \hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
197 }
198 \fi
199 }
200 }
201 {
202 \ifodd\count0
203 \mbox{} \hfill
204 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
205 \else
206 \raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
207 \hfill \mbox{}
208 \fi
209 }
210
211 \pagenumbering{roman}
212 \pagestyle{gnuspreamble}
213 156
214 @end iflatex 157 @end iflatex
215 @end iftex 158 @end iftex
216 159
217 @iftex 160 @iftex
285 @end ifinfo 228 @end ifinfo
286 229
287 @tex 230 @tex
288 231
289 @titlepage 232 @titlepage
290 @title Gnus 5.4.37 Manual 233 @title Gnus Manual
291 234
292 @author by Lars Magne Ingebrigtsen 235 @author by Lars Magne Ingebrigtsen
293 @page 236 @page
294 237
295 @vskip 0pt plus 1filll 238 @vskip 0pt plus 1filll
296 Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc. 239 Copyright @copyright{} 1995,96 Free Software Foundation, Inc.
297 240
298 Permission is granted to make and distribute verbatim copies of 241 Permission is granted to make and distribute verbatim copies of
299 this manual provided the copyright notice and this permission notice 242 this manual provided the copyright notice and this permission notice
300 are preserved on all copies. 243 are preserved on all copies.
301 244
321 You can read news (and mail) from within Emacs by using Gnus. The news 264 You can read news (and mail) from within Emacs by using Gnus. The news
322 can be gotten by any nefarious means you can think of---@sc{nntp}, local 265 can be gotten by any nefarious means you can think of---@sc{nntp}, local
323 spool or your mbox file. All at the same time, if you want to push your 266 spool or your mbox file. All at the same time, if you want to push your
324 luck. 267 luck.
325 268
326 This manual corresponds to Gnus 5.4.37.
327
328 @end ifinfo 269 @end ifinfo
329 270
330 @iftex 271 @iftex
331 272
332 @iflatex 273 @iflatex
333 \tableofcontents 274 \thispagestyle{empty}
334 \gnuscleardoublepage
335 @end iflatex 275 @end iflatex
336 276
337 Gnus is the advanced, self-documenting, customizable, extensible 277 Gnus is the advanced, self-documenting, customizable, extensible
338 unreal-time newsreader for GNU Emacs. 278 unreal-time newsreader for GNU Emacs.
339 279
368 * Appendices:: Terminology, Emacs intro, FAQ, History, Internals. 308 * Appendices:: Terminology, Emacs intro, FAQ, History, Internals.
369 * Index:: Variable, function and concept index. 309 * Index:: Variable, function and concept index.
370 * Key Index:: Key Index. 310 * Key Index:: Key Index.
371 @end menu 311 @end menu
372 312
313
373 @node Starting Up 314 @node Starting Up
374 @chapter Starting Gnus 315 @chapter Starting Gnus
375 @cindex starting up 316 @cindex starting up
376 317
377 @kindex M-x gnus 318 @kindex M-x gnus
390 331
391 @menu 332 @menu
392 * Finding the News:: Choosing a method for getting news. 333 * Finding the News:: Choosing a method for getting news.
393 * The First Time:: What does Gnus do the first time you start it? 334 * The First Time:: What does Gnus do the first time you start it?
394 * The Server is Down:: How can I read my mail then? 335 * The Server is Down:: How can I read my mail then?
395 * Slave Gnusae:: You can have more than one Gnus active at a time. 336 * Slave Gnusii:: You can have more than one Gnus active at a time.
396 * Fetching a Group:: Starting Gnus just to read a group. 337 * Fetching a Group:: Starting Gnus just to read a group.
397 * New Groups:: What is Gnus supposed to do with new groups? 338 * New Groups:: What is Gnus supposed to do with new groups?
398 * Startup Files:: Those pesky startup files---@file{.newsrc}. 339 * Startup Files:: Those pesky startup files---@file{.newsrc}.
399 * Auto Save:: Recovering from a crash. 340 * Auto Save:: Recovering from a crash.
400 * The Active File:: Reading the active file over a slow line Takes Time. 341 * The Active File:: Reading the active file over a slow line Takes Time.
401 * Changing Servers:: You may want to move from one server to another.
402 * Startup Variables:: Other variables you might change. 342 * Startup Variables:: Other variables you might change.
403 @end menu 343 @end menu
404 344
405 345
406 @node Finding the News 346 @node Finding the News
407 @section Finding the News 347 @section Finding the News
408 @cindex finding news
409 348
410 @vindex gnus-select-method 349 @vindex gnus-select-method
411 @c @head 350 @c @head
412 The @code{gnus-select-method} variable says where Gnus should look for 351 The @code{gnus-select-method} variable says where Gnus should look for
413 news. This variable should be a list where the first element says 352 news. This variable should be a list where the first element says
437 If this variable is not set, Gnus will take a look at the 376 If this variable is not set, Gnus will take a look at the
438 @code{NNTPSERVER} environment variable. If that variable isn't set, 377 @code{NNTPSERVER} environment variable. If that variable isn't set,
439 Gnus will see whether @code{gnus-nntpserver-file} 378 Gnus will see whether @code{gnus-nntpserver-file}
440 (@file{/etc/nntpserver} by default) has any opinions on the matter. If 379 (@file{/etc/nntpserver} by default) has any opinions on the matter. If
441 that fails as well, Gnus will will try to use the machine that is 380 that fails as well, Gnus will will try to use the machine that is
442 running Emacs as an @sc{nntp} server. That's a long shot, though. 381 running Emacs as an @sc{nntp} server. That's a long-shot, though.
443 382
444 @vindex gnus-nntp-server 383 @vindex gnus-nntp-server
445 If @code{gnus-nntp-server} is set, this variable will override 384 If @code{gnus-nntp-server} is set, this variable will override
446 @code{gnus-select-method}. You should therefore set 385 @code{gnus-select-method}. You should therefore set
447 @code{gnus-nntp-server} to @code{nil}, which is what it is by default. 386 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
520 for some reason or other. If you decide to continue and have no foreign 459 for some reason or other. If you decide to continue and have no foreign
521 groups, you'll find it difficult to actually do anything in the group 460 groups, you'll find it difficult to actually do anything in the group
522 buffer. But, hey, that's your problem. Blllrph! 461 buffer. But, hey, that's your problem. Blllrph!
523 462
524 @findex gnus-no-server 463 @findex gnus-no-server
525 @kindex M-x gnus-no-server
526 @c @head 464 @c @head
527 If you know that the server is definitely down, or you just want to read 465 If you know that the server is definitely down, or you just want to read
528 your mail without bothering with the server at all, you can use the 466 your mail without bothering with the server at all, you can use the
529 @code{gnus-no-server} command to start Gnus. That might come in handy 467 @code{gnus-no-server} command to start Gnus. That might come in handy
530 if you're in a hurry as well. This command will not attempt to contact 468 if you're in a hurry as well.
531 your primary server---instead, it will just activate all groups on level 469
532 1 and 2. (You should preferably keep no native groups on those two 470
533 levels.) 471 @node Slave Gnusii
534 472 @section Slave Gnusiï
535
536 @node Slave Gnusae
537 @section Slave Gnusae
538 @cindex slave 473 @cindex slave
539 474
540 You might want to run more than one Emacs with more than one Gnus at the 475 You might want to run more than one Emacs with more than one Gnus at the
541 same time. If you are using different @file{.newsrc} files (e.g., if you 476 same time. If you are using different @file{.newsrc} files (eg., if you
542 are using the two different Gnusae to read from two different servers), 477 are using the two different Gnusiï to read from two different servers),
543 that is no problem whatsoever. You just do it. 478 that is no problem whatsoever. You just do it.
544 479
545 The problem appears when you want to run two Gnusae that use the same 480 The problem appears when you want to run two Gnusiï that use the same
546 @code{.newsrc} file. 481 @code{.newsrc} file.
547 482
548 To work around that problem some, we here at the Think-Tank at the Gnus 483 To work around that problem some, we here at the Think-Tank at the Gnus
549 Towers have come up with a new concept: @dfn{Masters} and 484 Towers have come up with a new concept: @dfn{Masters} and
550 @dfn{slaves}. (We have applied for a patent on this concept, and have 485 @dfn{servants}. (We have applied for a patent on this concept, and have
551 taken out a copyright on those words. If you wish to use those words in 486 taken out a copyright on those words. If you wish to use those words in
552 conjunction with each other, you have to send $1 per usage instance to 487 conjunction with each other, you have to send $1 per usage instance to
553 me. Usage of the patent (@dfn{Master/Slave Relationships In Computer 488 me. Usage of the patent (@dfn{Master/Slave Relationships In Computer
554 Applications}) will be much more expensive, of course.) 489 Applications}) will be much more expensive, of course.)
555 490
556 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or 491 Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
557 however you do it). Each subsequent slave Gnusae should be started with 492 however you do it). Each subsequent slave Gnusiï should be started with
558 @kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc} 493 @kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc}
559 files, but instead save @dfn{slave files} that contain information only 494 files, but instead save @dfn{slave files} that contains information only
560 on what groups have been read in the slave session. When a master Gnus 495 on what groups have been read in the slave session. When a master Gnus
561 starts, it will read (and delete) these slave files, incorporating all 496 starts, it will read (and delete) these slave files, incorporating all
562 information from them. (The slave files will be read in the sequence 497 information from them. (The slave files will be read in the sequence
563 they were created, so the latest changes will have precedence.) 498 they were created, so the latest changes will have precedence.)
564 499
565 Information from the slave files has, of course, precedence over the 500 Information from the slave files has, of course, precedence over the
566 information in the normal (i.e., master) @code{.newsrc} file. 501 information in the normal (i. e., master) @code{.newsrc} file.
567 502
568 503
569 @node Fetching a Group 504 @node Fetching a Group
570 @section Fetching a Group 505 @section Fetching a Group
571 @cindex fetching a group
572 506
573 @findex gnus-fetch-group 507 @findex gnus-fetch-group
574 It it sometimes convenient to be able to just say ``I want to read this 508 It it sometime convenient to be able to just say ``I want to read this
575 group and I don't care whether Gnus has been started or not''. This is 509 group and I don't care whether Gnus has been started or not''. This is
576 perhaps more useful for people who write code than for users, but the 510 perhaps more useful for people who write code than for users, but the
577 command @code{gnus-fetch-group} provides this functionality in any case. 511 command @code{gnus-fetch-group} provides this functionality in any case.
578 It takes the group name as a parameter. 512 It takes the group name as a parameter.
579 513
580 514
581 @node New Groups 515 @node New Groups
582 @section New Groups 516 @section New Groups
583 @cindex new groups 517 @cindex new groups
584 @cindex subscription
585
586 @vindex gnus-check-new-newsgroups
587 If you are satisfied that you really never want to see any new groups,
588 you can set @code{gnus-check-new-newsgroups} to @code{nil}. This will
589 also save you some time at startup. Even if this variable is
590 @code{nil}, you can always subscribe to the new groups just by pressing
591 @kbd{U} in the group buffer (@pxref{Group Maintenance}). This variable
592 is @code{t} by default. If you set this variable to @code{always}, then
593 Gnus will query the backends for new groups even when you do the @kbd{g}
594 command (@pxref{Scanning New Messages}).
595
596 @menu
597 * Checking New Groups:: Determining what groups are new.
598 * Subscription Methods:: What Gnus should do with new groups.
599 * Filtering New Groups:: Making Gnus ignore certain new groups.
600 @end menu
601
602
603 @node Checking New Groups
604 @subsection Checking New Groups
605
606 Gnus normally determines whether a group is new or not by comparing the
607 list of groups from the active file(s) with the lists of subscribed and
608 dead groups. This isn't a particularly fast method. If
609 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
610 server for new groups since the last time. This is both faster and
611 cheaper. This also means that you can get rid of the list of killed
612 groups altogether, so you may set @code{gnus-save-killed-list} to
613 @code{nil}, which will save time both at startup, at exit, and all over.
614 Saves disk space, too. Why isn't this the default, then?
615 Unfortunately, not all servers support this command.
616
617 I bet I know what you're thinking now: How do I find out whether my
618 server supports @code{ask-server}? No? Good, because I don't have a
619 fail-safe answer. I would suggest just setting this variable to
620 @code{ask-server} and see whether any new groups appear within the next
621 few days. If any do, then it works. If none do, then it doesn't
622 work. I could write a function to make Gnus guess whether the server
623 supports @code{ask-server}, but it would just be a guess. So I won't.
624 You could @code{telnet} to the server and say @code{HELP} and see
625 whether it lists @samp{NEWGROUPS} among the commands it understands. If
626 it does, then it might work. (But there are servers that lists
627 @samp{NEWGROUPS} without supporting the function properly.)
628
629 This variable can also be a list of select methods. If so, Gnus will
630 issue an @code{ask-server} command to each of the select methods, and
631 subscribe them (or not) using the normal methods. This might be handy
632 if you are monitoring a few servers for new groups. A side effect is
633 that startup will take much longer, so you can meditate while waiting.
634 Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
635
636
637 @node Subscription Methods
638 @subsection Subscription Methods
639 518
640 @vindex gnus-subscribe-newsgroup-method 519 @vindex gnus-subscribe-newsgroup-method
641 What Gnus does when it encounters a new group is determined by the 520 What Gnus does when it encounters a new group is determined by the
642 @code{gnus-subscribe-newsgroup-method} variable. 521 @code{gnus-subscribe-newsgroup-method} variable.
643 522
646 525
647 @table @code 526 @table @code
648 527
649 @item gnus-subscribe-zombies 528 @item gnus-subscribe-zombies
650 @vindex gnus-subscribe-zombies 529 @vindex gnus-subscribe-zombies
651 Make all new groups zombies. This is the default. You can browse the 530 Make all new groups zombies. You can browse the zombies later (with
652 zombies later (with @kbd{A z}) and either kill them all off properly 531 @kbd{A z}) and either kill them all off properly, or subscribe to them.
653 (with @kbd{S z}), or subscribe to them (with @kbd{u}). 532 This is the default.
654 533
655 @item gnus-subscribe-randomly 534 @item gnus-subscribe-randomly
656 @vindex gnus-subscribe-randomly 535 @vindex gnus-subscribe-randomly
657 Subscribe all new groups randomly. 536 Subscribe all new groups randomly.
658 537
659 @item gnus-subscribe-alphabetically 538 @item gnus-subscribe-alphabetically
660 @vindex gnus-subscribe-alphabetically 539 @vindex gnus-subscribe-alphabetically
661 Subscribe all new groups alphabetically. 540 Subscribe all new groups alphabetically.
662 541
663 @item gnus-subscribe-hierarchically 542 @item gnus-subscribe-hierarchically
664 @vindex gnus-subscribe-hierarchically 543 @vindex gnus-subscribe-hierarchically
665 Subscribe all new groups hierarchically. The difference between this 544 Subscribe all new groups hierarchically. The difference between this
666 function and @code{gnus-subscribe-alphabetically} is slight. 545 function and @code{gnus-subscribe-alphabetically} is slight.
667 @code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly 546 @code{gnus-subscribe-alphabetically} will subscribe new groups in a
668 alphabetical fashion, while this function will enter groups into it's 547 strictly alphabetical fashion, while this function will enter groups
669 hierarchy. So if you want to have the @samp{rec} hierarchy before the 548 into it's hierarchy. So if you want to have the @samp{rec} hierarchy
670 @samp{comp} hierarchy, this function will not mess that configuration 549 before the @samp{comp} hierarchy, this function will not mess that
671 up. Or something like that. 550 configuration up. Or something like that.
672 551
673 @item gnus-subscribe-interactively 552 @item gnus-subscribe-interactively
674 @vindex gnus-subscribe-interactively 553 @vindex gnus-subscribe-interactively
675 Subscribe new groups interactively. This means that Gnus will ask 554 Subscribe new groups interactively. This means that Gnus will ask
676 you about @strong{all} new groups. 555 you about @strong{all} new groups.
690 hierarchy or not. 569 hierarchy or not.
691 570
692 One common mistake is to set the variable a few paragraphs above to 571 One common mistake is to set the variable a few paragraphs above to
693 @code{gnus-subscribe-hierarchical-interactive}. This is an error. This 572 @code{gnus-subscribe-hierarchical-interactive}. This is an error. This
694 will not work. This is ga-ga. So don't do it. 573 will not work. This is ga-ga. So don't do it.
695
696
697 @node Filtering New Groups
698 @subsection Filtering New Groups
699 574
700 A nice and portable way to control which new newsgroups should be 575 A nice and portable way to control which new newsgroups should be
701 subscribed (or ignored) is to put an @dfn{options} line at the start of 576 subscribed (or ignored) is to put an @dfn{options} line at the start of
702 the @file{.newsrc} file. Here's an example: 577 the @file{.newsrc} file. Here's an example:
703 578
733 more for user fiddling. By default this variable makes all new groups 608 more for user fiddling. By default this variable makes all new groups
734 that come from mail backends (@code{nnml}, @code{nnbabyl}, 609 that come from mail backends (@code{nnml}, @code{nnbabyl},
735 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed. If you 610 @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed. If you
736 don't like that, just set this variable to @code{nil}. 611 don't like that, just set this variable to @code{nil}.
737 612
738 New groups that match this regexp are subscribed using 613 @vindex gnus-check-new-newsgroups
739 @code{gnus-subscribe-options-newsgroup-method}. 614 If you are satisfied that you really never want to see any new groups,
740 615 you could set @code{gnus-check-new-newsgroups} to @code{nil}. This will
741 616 also save you some time at startup. Even if this variable is
742 @node Changing Servers 617 @code{nil}, you can always subscribe to the new groups just by pressing
743 @section Changing Servers 618 @kbd{U} in the group buffer (@pxref{Group Maintenance}). This variable
744 @cindex changing servers 619 is @code{t} by default.
745 620
746 Sometimes it is necessary to move from one @sc{nntp} server to another. 621 Gnus normally determines whether a group is new or not by comparing the
747 This happens very rarely, but perhaps you change jobs, or one server is 622 list of groups from the active file(s) with the lists of subscribed and
748 very flaky and you want to use another. 623 dead groups. This isn't a particularly fast method. If
749 624 @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
750 Changing the server is pretty easy, right? You just change 625 server for new groups since the last time. This is both faster &
751 @code{gnus-select-method} to point to the new server? 626 cheaper. This also means that you can get rid of the list of killed
752 627 groups altogether, so you may set @code{gnus-save-killed-list} to
753 @emph{Wrong!} 628 @code{nil}, which will save time both at startup, at exit, and all over.
754 629 Saves disk space, too. Why isn't this the default, then?
755 Article numbers are not (in any way) kept synchronized between different 630 Unfortunately, not all servers support this command.
756 @sc{nntp} servers, and the only way Gnus keeps track of what articles 631
757 you have read is by keeping track of article numbers. So when you 632 I bet I know what you're thinking now: How do I find out whether my
758 change @code{gnus-select-method}, your @file{.newsrc} file becomes 633 server supports @code{ask-server}? No? Good, because I don't have a
759 worthless. 634 fail-safe answer. I would suggest just setting this variable to
760 635 @code{ask-server} and see whether any new groups appear within the next
761 Gnus provides a few functions to attempt to translate a @file{.newsrc} 636 few days. If any do, then it works. If any don't, then it doesn't
762 file from one server to another. They all have one thing in 637 work. I could write a function to make Gnus guess whether the server
763 common---they take a looong time to run. You don't want to use these 638 supports @code{ask-server}, but it would just be a guess. So I won't.
764 functions more than absolutely necessary. 639 You could @code{telnet} to the server and say @code{HELP} and see
765 640 whether it lists @samp{NEWGROUPS} among the commands it understands. If
766 @kindex M-x gnus-change-server 641 it does, then it might work. (But there are servers that lists
767 @findex gnus-change-server 642 @samp{NEWGROUPS} without supporting the function properly.)
768 If you have access to both servers, Gnus can request the headers for all 643
769 the articles you have read and compare @code{Message-ID}s and map the 644 This variable can also be a list of select methods. If so, Gnus will
770 article numbers of the read articles and article marks. The @kbd{M-x 645 issue an @code{ask-server} command to each of the select methods, and
771 gnus-change-server} command will do this for all your native groups. It 646 subscribe them (or not) using the normal methods. This might be handy
772 will prompt for the method you want to move to. 647 if you are monitoring a few servers for new groups. A side effect is
773 648 that startup will take much longer, so you can meditate while waiting.
774 @kindex M-x gnus-group-move-group-to-server 649 Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
775 @findex gnus-group-move-group-to-server
776 You can also move individual groups with the @kbd{M-x
777 gnus-group-move-group-to-server} command. This is useful if you want to
778 move a (foreign) group from one server to another.
779
780 @kindex M-x gnus-group-clear-data-on-native-groups
781 @findex gnus-group-clear-data-on-native-groups
782 If you don't have access to both the old and new server, all your marks
783 and read ranges have become worthless. You can use the @kbd{M-x
784 gnus-group-clear-data-on-native-groups} command to clear out all data
785 that you have on your native groups. Use with caution.
786 650
787 651
788 @node Startup Files 652 @node Startup Files
789 @section Startup Files 653 @section Startup Files
790 @cindex startup files 654 @cindex startup files
791 @cindex .newsrc 655 @cindex .newsrc
792 @cindex .newsrc.el
793 @cindex .newsrc.eld
794 656
795 Now, you all know about the @file{.newsrc} file. All subscription 657 Now, you all know about the @file{.newsrc} file. All subscription
796 information is traditionally stored in this file. 658 information is traditionally stored in this file.
797 659
798 Things got a bit more complicated with @sc{gnus}. In addition to 660 Things got a bit more complicated with @sc{gnus}. In addition to
817 679
818 @vindex gnus-save-killed-list 680 @vindex gnus-save-killed-list
819 If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus 681 If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
820 will not save the list of killed groups to the startup file. This will 682 will not save the list of killed groups to the startup file. This will
821 save both time (when starting and quitting) and space (on disk). It 683 save both time (when starting and quitting) and space (on disk). It
822 will also mean that Gnus has no record of what groups are new or old, 684 will also means that Gnus has no record of what groups are new or old,
823 so the automatic new groups subscription methods become meaningless. 685 so the automatic new groups subscription methods become meaningless.
824 You should always set @code{gnus-check-new-newsgroups} to @code{nil} or 686 You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
825 @code{ask-server} if you set this variable to @code{nil} (@pxref{New 687 @code{ask-server} if you set this variable to @code{nil} (@pxref{New
826 Groups}). This variable can also be a regular expression. If that's 688 Groups}).
827 the case, remove all groups that do not match this regexp before
828 saving. This can be useful in certain obscure situations that involve
829 several servers where not all servers support @code{ask-server}.
830 689
831 @vindex gnus-startup-file 690 @vindex gnus-startup-file
832 The @code{gnus-startup-file} variable says where the startup files are. 691 The @code{gnus-startup-file} variable says where the startup files are.
833 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup 692 The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
834 file being whatever that one is with a @samp{.eld} appended. 693 file being whatever that one is with a @samp{.eld} appended.
839 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc 698 @code{gnus-save-newsrc-hook} is called before saving any of the newsrc
840 files, while @code{gnus-save-quick-newsrc-hook} is called just before 699 files, while @code{gnus-save-quick-newsrc-hook} is called just before
841 saving the @file{.newsrc.eld} file, and 700 saving the @file{.newsrc.eld} file, and
842 @code{gnus-save-standard-newsrc-hook} is called just before saving the 701 @code{gnus-save-standard-newsrc-hook} is called just before saving the
843 @file{.newsrc} file. The latter two are commonly used to turn version 702 @file{.newsrc} file. The latter two are commonly used to turn version
844 control on or off. Version control is on by default when saving the 703 control on or off. Version control is off by default when saving the
845 startup files. If you want to turn backup creation off, say something like: 704 startup files.
846
847 @lisp
848 (defun turn-off-backup ()
849 (set (make-local-variable 'backup-inhibited) t))
850
851 (add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
852 (add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
853 @end lisp
854 705
855 @vindex gnus-init-file 706 @vindex gnus-init-file
856 When Gnus starts, it will read the @code{gnus-site-init-file} 707 When Gnus starts, it will read the @code{gnus-init-file} file, which is
857 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file} 708 @file{~/.gnus.el} by default. This is a normal Emacs Lisp file and can
858 (@file{~/.gnus} by default) files. These are normal Emacs Lisp files 709 be used to avoid cluttering your @file{.emacs} file with Gnus stuff.
859 and can be used to avoid cluttering your @file{~/.emacs} and
860 @file{site-init} files with Gnus stuff. Gnus will also check for files
861 with the same names as these, but with @file{.elc} and @file{.el}
862 suffixes. In other words, if you have set @code{gnus-init-file} to
863 @file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
864 and finally @file{~/.gnus} (in this order).
865
866 710
867 711
868 @node Auto Save 712 @node Auto Save
869 @section Auto Save 713 @section Auto Save
870 @cindex dribble file 714 @cindex dribble file
943 @code{LIST ACTIVE group} command, this isn't very nice to the server. 787 @code{LIST ACTIVE group} command, this isn't very nice to the server.
944 788
945 In any case, if you use @code{some} or @code{nil}, you should definitely 789 In any case, if you use @code{some} or @code{nil}, you should definitely
946 kill all groups that you aren't interested in to speed things up. 790 kill all groups that you aren't interested in to speed things up.
947 791
948 Note that this variable also affects active file retrieval from
949 secondary select methods.
950
951 792
952 @node Startup Variables 793 @node Startup Variables
953 @section Startup Variables 794 @section Startup Variables
954 795
955 @table @code 796 @table @code
961 times you start Gnus. 802 times you start Gnus.
962 803
963 @item gnus-startup-hook 804 @item gnus-startup-hook
964 @vindex gnus-startup-hook 805 @vindex gnus-startup-hook
965 A hook that is run after starting up Gnus successfully. 806 A hook that is run after starting up Gnus successfully.
966
967 @item gnus-started-hook
968 @vindex gnus-started-hook
969 A hook that is run as the very last thing after starting up Gnus
970 successfully.
971 807
972 @item gnus-check-bogus-newsgroups 808 @item gnus-check-bogus-newsgroups
973 @vindex gnus-check-bogus-newsgroups 809 @vindex gnus-check-bogus-newsgroups
974 If non-@code{nil}, Gnus will check for and delete all bogus groups at 810 If non-@code{nil}, Gnus will check for and delete all bogus groups at
975 startup. A @dfn{bogus group} is a group that you have in your 811 startup. A @dfn{bogus group} is a group that you have in your
979 in a while from the group buffer instead (@pxref{Group Maintenance}). 815 in a while from the group buffer instead (@pxref{Group Maintenance}).
980 816
981 @item gnus-inhibit-startup-message 817 @item gnus-inhibit-startup-message
982 @vindex gnus-inhibit-startup-message 818 @vindex gnus-inhibit-startup-message
983 If non-@code{nil}, the startup message won't be displayed. That way, 819 If non-@code{nil}, the startup message won't be displayed. That way,
984 your boss might not notice as easily that you are reading news instead 820 your boss might not notice that you are reading news instead of doing
985 of doing your job. Note that this variable is used before 821 your job as easily.
986 @file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.
987 822
988 @item gnus-no-groups-message 823 @item gnus-no-groups-message
989 @vindex gnus-no-groups-message 824 @vindex gnus-no-groups-message
990 Message displayed by Gnus when no groups are available. 825 Message displayed by Gnus when no groups are available.
991
992 @item gnus-play-startup-jingle
993 @vindex gnus-play-startup-jingle
994 If non-@code{nil}, play the Gnus jingle at startup.
995
996 @item gnus-startup-jingle
997 @vindex gnus-startup-jingle
998 Jingle to be played if the above variable is non-@code{nil}. The
999 default is @samp{Tuxedomoon.Jingle4.au}.
1000
1001 @end table 826 @end table
1002 827
1003 828
1004 @node The Group Buffer 829 @node The Group Buffer
1005 @chapter The Group Buffer 830 @chapter The Group Buffer
1011 836
1012 @menu 837 @menu
1013 * Group Buffer Format:: Information listed and how you can change it. 838 * Group Buffer Format:: Information listed and how you can change it.
1014 * Group Maneuvering:: Commands for moving in the group buffer. 839 * Group Maneuvering:: Commands for moving in the group buffer.
1015 * Selecting a Group:: Actually reading news. 840 * Selecting a Group:: Actually reading news.
1016 * Group Data:: Changing the info for a group.
1017 * Subscription Commands:: Unsubscribing, killing, subscribing. 841 * Subscription Commands:: Unsubscribing, killing, subscribing.
1018 * Group Levels:: Levels? What are those, then? 842 * Group Levels:: Levels? What are those, then?
1019 * Group Score:: A mechanism for finding out what groups you like. 843 * Group Score:: A mechanism for finding out what groups you like.
1020 * Marking Groups:: You can mark groups for later processing. 844 * Marking Groups:: You can mark groups for later processing.
1021 * Foreign Groups:: Creating and editing groups. 845 * Foreign Groups:: Creating and editing groups.
1030 @end menu 854 @end menu
1031 855
1032 856
1033 @node Group Buffer Format 857 @node Group Buffer Format
1034 @section Group Buffer Format 858 @section Group Buffer Format
859 @cindex group buffer format
1035 860
1036 @menu 861 @menu
1037 * Group Line Specification:: Deciding how the group buffer is to look. 862 * Group Line Specification:: Deciding how the group buffer is to look.
1038 * Group Modeline Specification:: The group buffer modeline. 863 * Group Modeline Specification:: The group buffer modeline.
1039 * Group Highlighting:: Having nice colors in the group buffer. 864 * Group Highlighting:: Having nice colors in the group buffer.
1040 @end menu 865 @end menu
1041 866
1042 867
1043 @node Group Line Specification 868 @node Group Line Specification
1044 @subsection Group Line Specification 869 @subsection Group Line Specification
1045 @cindex group buffer format
1046 870
1047 The default format of the group buffer is nice and dull, but you can 871 The default format of the group buffer is nice and dull, but you can
1048 make it as exciting and ugly as you feel like. 872 make it as exciting and ugly as you feel like.
1049 873
1050 Here's a couple of example group lines: 874 Here's a couple of example group lines:
1066 @code{gnus-group-line-format} variable. This variable works along the 890 @code{gnus-group-line-format} variable. This variable works along the
1067 lines of a @code{format} specification, which is pretty much the same as 891 lines of a @code{format} specification, which is pretty much the same as
1068 a @code{printf} specifications, for those of you who use (feh!) C. 892 a @code{printf} specifications, for those of you who use (feh!) C.
1069 @xref{Formatting Variables}. 893 @xref{Formatting Variables}.
1070 894
1071 @samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above. 895 The default value that produced those lines above is
896 @samp{%M%S%5y: %(%g%)\n}.
1072 897
1073 There should always be a colon on the line; the cursor always moves to 898 There should always be a colon on the line; the cursor always moves to
1074 the colon after performing an operation. Nothing else is required---not 899 the colon after performing an operation. Nothing else is required---not
1075 even the group name. All displayed text is just window dressing, and is 900 even the group name. All displayed text is just window dressing, and is
1076 never examined by Gnus. Gnus stores all real information it needs using 901 never examined by Gnus. Gnus stores all real information it needs using
1083 Here's a list of all available format characters: 908 Here's a list of all available format characters:
1084 909
1085 @table @samp 910 @table @samp
1086 911
1087 @item M 912 @item M
1088 An asterisk if the group only has marked articles. 913 Only marked articles.
1089 914
1090 @item S 915 @item S
1091 Whether the group is subscribed. 916 Whether the group is subscribed.
1092 917
1093 @item L 918 @item L
1104 929
1105 @item R 930 @item R
1106 Number of read articles. 931 Number of read articles.
1107 932
1108 @item t 933 @item t
1109 Estimated total number of articles. (This is really @var{max-number} 934 Total number of articles.
1110 minus @var{min-number} plus 1.)
1111 935
1112 @item y 936 @item y
1113 Number of unread, unticked, non-dormant articles. 937 Number of unread, unticked, non-dormant articles.
1114 938
1115 @item i 939 @item i
1145 969
1146 @item c 970 @item c
1147 @vindex gnus-group-uncollapsed-levels 971 @vindex gnus-group-uncollapsed-levels
1148 Short (collapsed) group name. The @code{gnus-group-uncollapsed-levels} 972 Short (collapsed) group name. The @code{gnus-group-uncollapsed-levels}
1149 variable says how many levels to leave at the end of the group name. 973 variable says how many levels to leave at the end of the group name.
1150 The default is 1---this will mean that group names like 974 The default is @code{1}.
1151 @samp{gnu.emacs.gnus} will be shortened to @samp{g.emacs.gnus}.
1152
1153 @item m
1154 @vindex gnus-new-mail-mark
1155 @cindex %
1156 @samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
1157 the group lately.
1158
1159 @item d
1160 A string that says when you last read the group (@pxref{Group
1161 Timestamp}).
1162 975
1163 @item u 976 @item u
1164 User defined specifier. The next character in the format string should 977 User defined specifier. The next character in the format string should
1165 be a letter. @sc{gnus} will call the function 978 be a letter. @sc{gnus} will call the function
1166 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter 979 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1167 following @samp{%u}. The function will be passed a single dummy 980 following @samp{%u}. The function will be passed the current headers as
1168 parameter as argument. The function should return a string, which will 981 argument. The function should return a string, which will be inserted
1169 be inserted into the buffer just like information from any other 982 into the buffer just like information from any other specifier.
1170 specifier.
1171 @end table 983 @end table
1172 984
1173 @cindex * 985 @cindex *
1174 All the ``number-of'' specs will be filled with an asterisk (@samp{*}) 986 All the ``number-of'' specs will be filled with an asterisk (@samp{*})
1175 if no info is available---for instance, if it is a non-activated foreign 987 if no info is available---for instance, if it is a non-activated foreign
1176 group, or a bogus native group. 988 group, or a bogus (or semi-bogus) native group.
1177 989
1178 990
1179 @node Group Modeline Specification 991 @node Group Modeline Specification
1180 @subsection Group Modeline Specification 992 @subsection Group Modeline Specification
1181 @cindex group modeline
1182 993
1183 @vindex gnus-group-mode-line-format 994 @vindex gnus-group-mode-line-format
1184 The mode line can be changed by setting 995 The mode line can be changed by setting
1185 @code{gnus-group-mode-line-format} (@pxref{Formatting Variables}). It 996 (@code{gnus-group-mode-line-format}). It doesn't understand that many
1186 doesn't understand that many format specifiers: 997 format specifiers:
1187 998
1188 @table @samp 999 @table @samp
1189 @item S 1000 @item S
1190 The native news server. 1001 The native news server.
1191 @item M 1002 @item M
1193 @end table 1004 @end table
1194 1005
1195 1006
1196 @node Group Highlighting 1007 @node Group Highlighting
1197 @subsection Group Highlighting 1008 @subsection Group Highlighting
1198 @cindex highlighting
1199 @cindex group highlighting
1200 1009
1201 @vindex gnus-group-highlight 1010 @vindex gnus-group-highlight
1202 Highlighting in the group buffer is controlled by the 1011 Highlighting in the group buffer is controlled by the
1203 @code{gnus-group-highlight} variable. This is an alist with elements 1012 @code{gnus-group-highlight} variable. This is an alist with elements
1204 that look like @var{(form . face)}. If @var{form} evaluates to 1013 that look like @var{(form . face)}. If @var{form} evaluates to
1207 Here's an example value for this variable that might look nice if the 1016 Here's an example value for this variable that might look nice if the
1208 background is dark: 1017 background is dark:
1209 1018
1210 @lisp 1019 @lisp
1211 (setq gnus-group-highlight 1020 (setq gnus-group-highlight
1212 `(((> unread 200) . 1021 `(((> unread 200) .
1213 ,(custom-face-lookup "Red" nil nil t nil nil)) 1022 ,(custom-face-lookup "Red" nil nil t nil nil))
1214 ((and (< level 3) (zerop unread)) . 1023 ((and (< level 3) (zerop unread)) .
1215 ,(custom-face-lookup "SeaGreen" nil nil t nil nil)) 1024 ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
1216 ((< level 3) . 1025 ((< level 3) .
1217 ,(custom-face-lookup "SpringGreen" nil nil t nil nil)) 1026 ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
1218 ((zerop unread) . 1027 ((zerop unread) .
1219 ,(custom-face-lookup "SteelBlue" nil nil t nil nil)) 1028 ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
1220 (t . 1029 (t .
1221 ,(custom-face-lookup "SkyBlue" nil nil t nil nil)))) 1030 ,(custom-face-lookup "SkyBlue" nil nil t nil nil))
1031 ))
1222 @end lisp 1032 @end lisp
1223 1033
1224 Variables that are dynamically bound when the forms are evaluated 1034 Variables that are dynamically bound when the forms are evaluated
1225 include: 1035 include:
1226 1036
1237 The level of the group. 1047 The level of the group.
1238 @item score 1048 @item score
1239 The score of the group. 1049 The score of the group.
1240 @item ticked 1050 @item ticked
1241 The number of ticked articles in the group. 1051 The number of ticked articles in the group.
1242 @item total
1243 The total number of articles in the group. Or rather, MAX-NUMBER minus
1244 MIN-NUMBER.
1245 @item topic 1052 @item topic
1246 When using the topic minor mode, this variable is bound to the current 1053 When using the topic minor mode, this variable is bound to the current
1247 topic being inserted. 1054 topic being inserted.
1248 @end table 1055 @end table
1249 1056
1272 @findex gnus-group-next-unread-group 1079 @findex gnus-group-next-unread-group
1273 Go to the next group that has unread articles 1080 Go to the next group that has unread articles
1274 (@code{gnus-group-next-unread-group}). 1081 (@code{gnus-group-next-unread-group}).
1275 1082
1276 @item p 1083 @item p
1084
1277 @itemx DEL 1085 @itemx DEL
1278 @kindex DEL (Group) 1086 @kindex DEL (Group)
1279 @kindex p (Group) 1087 @kindex p (Group)
1280 @findex gnus-group-prev-unread-group 1088 @findex gnus-group-prev-unread-group
1281 Go to the previous group that has unread articles 1089 Go to the previous group group that has unread articles
1282 (@code{gnus-group-prev-unread-group}). 1090 (@code{gnus-group-prev-unread-group}).
1283 1091
1284 @item N 1092 @item N
1285 @kindex N (Group) 1093 @kindex N (Group)
1286 @findex gnus-group-next-group 1094 @findex gnus-group-next-group
1292 Go to the previous group (@code{gnus-group-prev-group}). 1100 Go to the previous group (@code{gnus-group-prev-group}).
1293 1101
1294 @item M-p 1102 @item M-p
1295 @kindex M-p (Group) 1103 @kindex M-p (Group)
1296 @findex gnus-group-next-unread-group-same-level 1104 @findex gnus-group-next-unread-group-same-level
1297 Go to the next unread group on the same (or lower) level 1105 Go to the next unread group on the same level (or lower)
1298 (@code{gnus-group-next-unread-group-same-level}). 1106 (@code{gnus-group-next-unread-group-same-level}).
1299 1107
1300 @item M-n 1108 @item M-n
1301 @kindex M-n (Group) 1109 @kindex M-n (Group)
1302 @findex gnus-group-prev-unread-group-same-level 1110 @findex gnus-group-prev-unread-group-same-level
1303 Go to the previous unread group on the same (or lower) level 1111 Go to the previous unread group on the same level (or lower)
1304 (@code{gnus-group-prev-unread-group-same-level}). 1112 (@code{gnus-group-prev-unread-group-same-level}).
1305 @end table 1113 @end table
1306 1114
1307 Three commands for jumping to groups: 1115 Three commands for jumping to groups:
1308 1116
1346 @findex gnus-group-read-group 1154 @findex gnus-group-read-group
1347 Select the current group, switch to the summary buffer and display the 1155 Select the current group, switch to the summary buffer and display the
1348 first unread article (@code{gnus-group-read-group}). If there are no 1156 first unread article (@code{gnus-group-read-group}). If there are no
1349 unread articles in the group, or if you give a non-numerical prefix to 1157 unread articles in the group, or if you give a non-numerical prefix to
1350 this command, Gnus will offer to fetch all the old articles in this 1158 this command, Gnus will offer to fetch all the old articles in this
1351 group from the server. If you give a numerical prefix @var{N}, @var{N} 1159 group from the server. If you give a numerical prefix @var{N}, Gnus
1352 determines the number of articles Gnus will fetch. If @var{N} is 1160 will fetch @var{N} number of articles. If @var{N} is positive, fetch
1353 positive, Gnus fetches the @var{N} newest articles, if @var{N} is 1161 the @var{N} newest articles, if @var{N} is negative, fetch the
1354 negative, Gnus fetches the @var{abs(N)} oldest articles. 1162 @var{abs(N)} oldest articles.
1355 1163
1356 @item RET 1164 @item RET
1357 @kindex RET (Group) 1165 @kindex RET (Group)
1358 @findex gnus-group-select-group 1166 @findex gnus-group-select-group
1359 Select the current group and switch to the summary buffer 1167 Select the current group and switch to the summary buffer
1364 1172
1365 @item M-RET 1173 @item M-RET
1366 @kindex M-RET (Group) 1174 @kindex M-RET (Group)
1367 @findex gnus-group-quick-select-group 1175 @findex gnus-group-quick-select-group
1368 This does the same as the command above, but tries to do it with the 1176 This does the same as the command above, but tries to do it with the
1369 minimum amount of fuzz (@code{gnus-group-quick-select-group}). No 1177 minimum amount off fuzz (@code{gnus-group-quick-select-group}). No
1370 scoring/killing will be performed, there will be no highlights and no 1178 scoring/killing will be performed, there will be no highlights and no
1371 expunging. This might be useful if you're in a real hurry and have to 1179 expunging. This might be useful if you're in a real hurry and have to
1372 enter some humongous group. If you give a 0 prefix to this command 1180 enter some humongous group.
1373 (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer.
1374 This might be useful if you want to toggle threading before entering the
1375 group.
1376 1181
1377 @item M-SPACE 1182 @item M-SPACE
1378 @kindex M-SPACE (Group) 1183 @kindex M-RET (Group)
1379 @findex gnus-group-visible-select-group 1184 @findex gnus-group-visible-select-group
1380 This is yet one more command that does the same as the @kbd{RET} 1185 This is yet one more command that does the same as the one above, but
1381 command, but this one does it without expunging and hiding dormants 1186 this one does it without expunging and hiding dormants
1382 (@code{gnus-group-visible-select-group}). 1187 (@code{gnus-group-visible-select-group}).
1383 1188
1384 @item M-C-RET 1189 @item c
1385 @kindex M-C-RET (Group) 1190 @kindex c (Group)
1386 @findex gnus-group-select-group-ephemerally 1191 @findex gnus-group-catchup-current
1387 Finally, this command selects the current group ephemerally without 1192 @vindex gnus-group-catchup-group-hook
1388 doing any processing of its contents 1193 Mark all unticked articles in this group as read
1389 (@code{gnus-group-select-group-ephemerally}). Even threading has been 1194 (@code{gnus-group-catchup-current}).
1390 turned off. Everything you do in the group after selecting it in this 1195 @code{gnus-group-catchup-group-hook} is when catching up a group from
1391 manner will have no permanent effects. 1196 the group buffer.
1392 1197
1198 @item C
1199 @kindex C (Group)
1200 @findex gnus-group-catchup-current-all
1201 Mark all articles in this group, even the ticked ones, as read
1202 (@code{gnus-group-catchup-current-all}).
1393 @end table 1203 @end table
1394 1204
1395 @vindex gnus-large-newsgroup 1205 @vindex gnus-large-newsgroup
1396 The @code{gnus-large-newsgroup} variable says what Gnus should consider 1206 The @code{gnus-large-newsgroup} variable says what Gnus should consider
1397 to be a big group. This is 200 by default. If the group has more 1207 to be a big group. This is 200 by default. If the group has more
1398 (unread and/or ticked) articles than this, Gnus will query the user 1208 unread articles than this, Gnus will query the user before entering the
1399 before entering the group. The user can then specify how many articles 1209 group. The user can then specify how many articles should be fetched
1400 should be fetched from the server. If the user specifies a negative 1210 from the server. If the user specifies a negative number (@code{-n}),
1401 number (@code{-n}), the @code{n} oldest articles will be fetched. If it 1211 the @code{n} oldest articles will be fetched. If it is positive, the
1402 is positive, the @code{n} articles that have arrived most recently will 1212 @code{n} articles that have arrived most recently will be fetched.
1403 be fetched.
1404 1213
1405 @vindex gnus-select-group-hook 1214 @vindex gnus-select-group-hook
1406 @vindex gnus-auto-select-first 1215 @vindex gnus-auto-select-first
1407 @code{gnus-auto-select-first} control whether any articles are selected 1216 @code{gnus-auto-select-first} control whether any articles are selected
1408 automatically when entering a group with the @kbd{SPACE} command. 1217 automatically when entering a group.
1409 1218
1410 @table @code 1219 @table @code
1411 1220
1412 @item nil 1221 @item nil
1413 Don't select any articles when entering the group. Just display the 1222 Don't select any articles when entering the group. Just display the
1427 selected. 1236 selected.
1428 1237
1429 1238
1430 @node Subscription Commands 1239 @node Subscription Commands
1431 @section Subscription Commands 1240 @section Subscription Commands
1432 @cindex subscription 1241 @cindex subscribing
1433 1242
1434 @table @kbd 1243 @table @kbd
1435 1244
1436 @item S t 1245 @item S t
1437 @itemx u 1246 @itemx u
1486 @item S C-k 1295 @item S C-k
1487 @kindex S C-k (Group) 1296 @kindex S C-k (Group)
1488 @findex gnus-group-kill-level 1297 @findex gnus-group-kill-level
1489 Kill all groups on a certain level (@code{gnus-group-kill-level}). 1298 Kill all groups on a certain level (@code{gnus-group-kill-level}).
1490 These groups can't be yanked back after killing, so this command should 1299 These groups can't be yanked back after killing, so this command should
1491 be used with some caution. The only time where this command comes in 1300 be used with some caution. The only thing where this command comes in
1492 really handy is when you have a @file{.newsrc} with lots of unsubscribed 1301 really handy is when you have a @file{.newsrc} with lots of unsubscribed
1493 groups that you want to get rid off. @kbd{S C-k} on level 7 will 1302 groups that you want to get rid off. @kbd{S C-k} on level @code{7} will
1494 kill off all unsubscribed groups that do not have message numbers in the 1303 kill off all unsubscribed groups that do not have message numbers in the
1495 @file{.newsrc} file. 1304 @file{.newsrc} file.
1496 1305
1497 @end table 1306 @end table
1498 1307
1499 Also @pxref{Group Levels}. 1308 Also @pxref{Group Levels}.
1500
1501
1502 @node Group Data
1503 @section Group Data
1504
1505 @table @kbd
1506
1507 @item c
1508 @kindex c (Group)
1509 @findex gnus-group-catchup-current
1510 @vindex gnus-group-catchup-group-hook
1511 Mark all unticked articles in this group as read
1512 (@code{gnus-group-catchup-current}).
1513 @code{gnus-group-catchup-group-hook} is called when catching up a group from
1514 the group buffer.
1515
1516 @item C
1517 @kindex C (Group)
1518 @findex gnus-group-catchup-current-all
1519 Mark all articles in this group, even the ticked ones, as read
1520 (@code{gnus-group-catchup-current-all}).
1521
1522 @item M-c
1523 @kindex M-c (Group)
1524 @findex gnus-group-clear-data
1525 Clear the data from the current group---nix out marks and the list of
1526 read articles (@code{gnus-group-clear-data}).
1527
1528 @item M-x gnus-group-clear-data-on-native-groups
1529 @kindex M-x gnus-group-clear-data-on-native-groups
1530 @findex gnus-group-clear-data-on-native-groups
1531 If you have switched from one @sc{nntp} server to another, all your marks
1532 and read ranges have become worthless. You can use this command to
1533 clear out all data that you have on your native groups. Use with
1534 caution.
1535
1536 @end table
1537 1309
1538 1310
1539 @node Group Levels 1311 @node Group Levels
1540 @section Group Levels 1312 @section Group Levels
1541 @cindex group level 1313 @cindex group level
1542 @cindex level
1543 1314
1544 All groups have a level of @dfn{subscribedness}. For instance, if a 1315 All groups have a level of @dfn{subscribedness}. For instance, if a
1545 group is on level 2, it is more subscribed than a group on level 5. You 1316 group is on level 2, it is more subscribed than a group on level 5. You
1546 can ask Gnus to just list groups on a given level or lower 1317 can ask Gnus to just list groups on a given level or lower
1547 (@pxref{Listing Groups}), or to just check for new articles in groups on 1318 (@pxref{Listing Groups}), or to just check for new articles in groups on
1574 articles you have read, etc, stored. This distinction between dead and 1345 articles you have read, etc, stored. This distinction between dead and
1575 living groups isn't done because it is nice or clever, it is done purely 1346 living groups isn't done because it is nice or clever, it is done purely
1576 for reasons of efficiency. 1347 for reasons of efficiency.
1577 1348
1578 It is recommended that you keep all your mail groups (if any) on quite 1349 It is recommended that you keep all your mail groups (if any) on quite
1579 low levels (e.g. 1 or 2). 1350 low levels (eg. 1 or 2).
1580 1351
1581 If you want to play with the level variables, you should show some care. 1352 If you want to play with the level variables, you should show some care.
1582 Set them once, and don't touch them ever again. Better yet, don't touch 1353 Set them once, and don't touch them ever again. Better yet, don't touch
1583 them at all unless you know exactly what you're doing. 1354 them at all unless you know exactly what you're doing.
1584 1355
1616 1387
1617 @vindex gnus-activate-level 1388 @vindex gnus-activate-level
1618 Gnus will normally just activate groups that are on level 1389 Gnus will normally just activate groups that are on level
1619 @code{gnus-activate-level} or less. If you don't want to activate 1390 @code{gnus-activate-level} or less. If you don't want to activate
1620 unsubscribed groups, for instance, you might set this variable to 1391 unsubscribed groups, for instance, you might set this variable to
1621 5. The default is 6. 1392 @code{5}.
1622 1393
1623 1394
1624 @node Group Score 1395 @node Group Score
1625 @section Group Score 1396 @section Group Score
1626 @cindex group score 1397 @cindex group score
1634 group. You can then sort the group buffer based on this score. 1405 group. You can then sort the group buffer based on this score.
1635 Alternatively, you can sort on score and then level. (Taken together, 1406 Alternatively, you can sort on score and then level. (Taken together,
1636 the level and the score is called the @dfn{rank} of the group. A group 1407 the level and the score is called the @dfn{rank} of the group. A group
1637 that is on level 4 and has a score of 1 has a higher rank than a group 1408 that is on level 4 and has a score of 1 has a higher rank than a group
1638 on level 5 that has a score of 300. (The level is the most significant 1409 on level 5 that has a score of 300. (The level is the most significant
1639 part and the score is the least significant part.)) 1410 part and the score is the least significant part.)
1640 1411
1641 @findex gnus-summary-bubble-group 1412 @findex gnus-summary-bubble-group
1642 If you want groups you read often to get higher scores than groups you 1413 If you want groups you read often to get higher scores than groups you
1643 read seldom you can add the @code{gnus-summary-bubble-group} function to 1414 read seldom you can add the @code{gnus-summary-bubble-group} function to
1644 the @code{gnus-summary-exit-hook} hook. This will result (after 1415 the @code{gnus-summary-exit-hook} hook. This will result (after
1710 the command to be executed. 1481 the command to be executed.
1711 1482
1712 1483
1713 @node Foreign Groups 1484 @node Foreign Groups
1714 @section Foreign Groups 1485 @section Foreign Groups
1715 @cindex foreign groups 1486
1716 1487 Here are some group mode commands for making and editing general foreign
1717 Below are some group mode commands for making and editing general foreign
1718 groups, as well as commands to ease the creation of a few 1488 groups, as well as commands to ease the creation of a few
1719 special-purpose groups. All these commands insert the newly created 1489 special-purpose groups:
1720 groups under point---@code{gnus-subscribe-newsgroup-method} is not
1721 consulted.
1722 1490
1723 @table @kbd 1491 @table @kbd
1724 1492
1725 @item G m 1493 @item G m
1726 @kindex G m (Group) 1494 @kindex G m (Group)
1727 @findex gnus-group-make-group 1495 @findex gnus-group-make-group
1728 @cindex making groups
1729 Make a new group (@code{gnus-group-make-group}). Gnus will prompt you 1496 Make a new group (@code{gnus-group-make-group}). Gnus will prompt you
1730 for a name, a method and possibly an @dfn{address}. For an easier way 1497 for a name, a method and possibly an @dfn{address}. For an easier way
1731 to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}. 1498 to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.
1732 1499
1733 @item G r 1500 @item G r
1734 @kindex G r (Group) 1501 @kindex G r (Group)
1735 @findex gnus-group-rename-group 1502 @findex gnus-group-rename-group
1736 @cindex renaming groups
1737 Rename the current group to something else 1503 Rename the current group to something else
1738 (@code{gnus-group-rename-group}). This is legal only on some 1504 (@code{gnus-group-rename-group}). This is legal only on some
1739 groups---mail groups mostly. This command might very well be quite slow 1505 groups---mail groups mostly. This command might very well be quite slow
1740 on some backends. 1506 on some backends.
1741 1507
1742 @item G c
1743 @kindex G c (Group)
1744 @cindex customizing
1745 @findex gnus-group-customize
1746 Customize the group parameters (@code{gnus-group-customize}).
1747
1748 @item G e 1508 @item G e
1749 @kindex G e (Group) 1509 @kindex G e (Group)
1750 @findex gnus-group-edit-group-method 1510 @findex gnus-group-edit-group-method
1751 @cindex renaming groups
1752 Enter a buffer where you can edit the select method of the current 1511 Enter a buffer where you can edit the select method of the current
1753 group (@code{gnus-group-edit-group-method}). 1512 group (@code{gnus-group-edit-group-method}).
1754 1513
1755 @item G p 1514 @item G p
1756 @kindex G p (Group) 1515 @kindex G p (Group)
1765 (@code{gnus-group-edit-group}). 1524 (@code{gnus-group-edit-group}).
1766 1525
1767 @item G d 1526 @item G d
1768 @kindex G d (Group) 1527 @kindex G d (Group)
1769 @findex gnus-group-make-directory-group 1528 @findex gnus-group-make-directory-group
1770 @cindex nndir 1529 Make a directory group. You will be prompted for a directory name
1771 Make a directory group (@pxref{Directory Groups}). You will be prompted 1530 (@code{gnus-group-make-directory-group}).
1772 for a directory name (@code{gnus-group-make-directory-group}).
1773 1531
1774 @item G h 1532 @item G h
1775 @kindex G h (Group) 1533 @kindex G h (Group)
1776 @cindex help group
1777 @findex gnus-group-make-help-group 1534 @findex gnus-group-make-help-group
1778 Make the Gnus help group (@code{gnus-group-make-help-group}). 1535 Make the Gnus help group (@code{gnus-group-make-help-group}).
1779 1536
1780 @item G a 1537 @item G a
1781 @kindex G a (Group) 1538 @kindex G a (Group)
1782 @cindex (ding) archive
1783 @cindex archive group
1784 @findex gnus-group-make-archive-group 1539 @findex gnus-group-make-archive-group
1785 @vindex gnus-group-archive-directory 1540 @vindex gnus-group-archive-directory
1786 @vindex gnus-group-recent-archive-directory 1541 @vindex gnus-group-recent-archive-directory
1787 Make a Gnus archive group (@code{gnus-group-make-archive-group}). By 1542 Make a Gnus archive group (@code{gnus-group-make-archive-group}). By
1788 default a group pointing to the most recent articles will be created 1543 default a group pointing to the most recent articles will be created
1790 group will be created from @code{gnus-group-archive-directory}. 1545 group will be created from @code{gnus-group-archive-directory}.
1791 1546
1792 @item G k 1547 @item G k
1793 @kindex G k (Group) 1548 @kindex G k (Group)
1794 @findex gnus-group-make-kiboze-group 1549 @findex gnus-group-make-kiboze-group
1795 @cindex nnkiboze
1796 Make a kiboze group. You will be prompted for a name, for a regexp to 1550 Make a kiboze group. You will be prompted for a name, for a regexp to
1797 match groups to be ``included'' in the kiboze group, and a series of 1551 match groups to be ``included'' in the kiboze group, and a series of
1798 strings to match on headers (@code{gnus-group-make-kiboze-group}). 1552 strings to match on headers (@code{gnus-group-make-kiboze-group}).
1799 @xref{Kibozed Groups}. 1553 @xref{Kibozed Groups}
1800 1554
1801 @item G D 1555 @item G D
1802 @kindex G D (Group) 1556 @kindex G D (Group)
1803 @findex gnus-group-enter-directory 1557 @findex gnus-group-enter-directory
1804 @cindex nneething
1805 Read an arbitrary directory as if with were a newsgroup with the 1558 Read an arbitrary directory as if with were a newsgroup with the
1806 @code{nneething} backend (@code{gnus-group-enter-directory}). 1559 @code{nneething} backend (@code{gnus-group-enter-directory}).
1807 @xref{Anything Groups}.
1808 1560
1809 @item G f 1561 @item G f
1810 @kindex G f (Group) 1562 @kindex G f (Group)
1811 @findex gnus-group-make-doc-group 1563 @findex gnus-group-make-doc-group
1812 @cindex ClariNet Briefs 1564 @cindex ClariNet Briefs
1813 @cindex nndoc
1814 Make a group based on some file or other 1565 Make a group based on some file or other
1815 (@code{gnus-group-make-doc-group}). If you give a prefix to this 1566 (@code{gnus-group-make-doc-group}). If you give a prefix to this
1816 command, you will be prompted for a file name and a file type. 1567 command, you will be prompted for a file name and a file type.
1817 Currently supported types are @code{babyl}, @code{mbox}, @code{digest}, 1568 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
1818 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, 1569 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, and
1819 @code{rfc934}, @code{rfc822-forward}, and @code{forward}. If you run 1570 @code{forward}. If you run this command without a prefix, Gnus will
1820 this command without a prefix, Gnus will guess at the file type. 1571 guess at the file type.
1821 @xref{Document Groups}.
1822
1823 @item G w
1824 @kindex G w (Group)
1825 @findex gnus-group-make-web-group
1826 @cindex DejaNews
1827 @cindex Alta Vista
1828 @cindex InReference
1829 @cindex nnweb
1830 Make an ephemeral group based on a web search
1831 (@code{gnus-group-make-web-group}). If you give a prefix to this
1832 command, make a solid group instead. You will be prompted for the
1833 search engine type and the search string. Legal search engine types
1834 include @code{dejanews}, @code{altavista} and @code{reference}.
1835 @xref{Web Searches}.
1836 1572
1837 @item G DEL 1573 @item G DEL
1838 @kindex G DEL (Group) 1574 @kindex G DEL (Group)
1839 @findex gnus-group-delete-group 1575 @findex gnus-group-delete-group
1840 This function will delete the current group 1576 This function will delete the current group
1845 1581
1846 @item G V 1582 @item G V
1847 @kindex G V (Group) 1583 @kindex G V (Group)
1848 @findex gnus-group-make-empty-virtual 1584 @findex gnus-group-make-empty-virtual
1849 Make a new, fresh, empty @code{nnvirtual} group 1585 Make a new, fresh, empty @code{nnvirtual} group
1850 (@code{gnus-group-make-empty-virtual}). @xref{Virtual Groups}. 1586 (@code{gnus-group-make-empty-virtual}).
1851 1587
1852 @item G v 1588 @item G v
1853 @kindex G v (Group) 1589 @kindex G v (Group)
1854 @findex gnus-group-add-to-virtual 1590 @findex gnus-group-add-to-virtual
1855 Add the current group to an @code{nnvirtual} group 1591 Add the current group to an @code{nnvirtual} group
1858 1594
1859 @xref{Select Methods} for more information on the various select 1595 @xref{Select Methods} for more information on the various select
1860 methods. 1596 methods.
1861 1597
1862 @vindex gnus-activate-foreign-newsgroups 1598 @vindex gnus-activate-foreign-newsgroups
1863 If @code{gnus-activate-foreign-newsgroups} is a positive number, 1599 If the @code{gnus-activate-foreign-newsgroups} is a positive number,
1864 Gnus will check all foreign groups with this level or lower at startup. 1600 Gnus will check all foreign groups with this level or lower at startup.
1865 This might take quite a while, especially if you subscribe to lots of 1601 This might take quite a while, especially if you subscribe to lots of
1866 groups from different @sc{nntp} servers. 1602 groups from different @sc{nntp} servers.
1867 1603
1868 1604
1869 @node Group Parameters 1605 @node Group Parameters
1870 @section Group Parameters 1606 @section Group Parameters
1871 @cindex group parameters 1607 @cindex group parameters
1608
1609 Gnus stores all information on a group in a list that is usually known
1610 as the @dfn{group info}. This list has from three to six elements.
1611 Here's an example info.
1612
1613 @lisp
1614 ("nnml:mail.ding" 3 ((1 . 232) 244 (256 . 270)) ((tick 246 249))
1615 (nnml "private") ((to-address . "ding@@ifi.uio.no")))
1616 @end lisp
1617
1618 The first element is the @dfn{group name}, as Gnus knows the group,
1619 anyway. The second element is the @dfn{subscription level}, which
1620 normally is a small integer. The third element is a list of ranges of
1621 read articles. The fourth element is a list of lists of article marks
1622 of various kinds. The fifth element is the select method (or virtual
1623 server, if you like). The sixth element is a list of @dfn{group
1624 parameters}, which is what this section is about.
1625
1626 Any of the last three elements may be missing if they are not required.
1627 In fact, the vast majority of groups will normally only have the first
1628 three elements, which saves quite a lot of cons cells.
1872 1629
1873 The group parameters store information local to a particular group: 1630 The group parameters store information local to a particular group:
1874 1631
1875 @table @code 1632 @table @code
1876 @item to-address 1633 @item to-address
1897 @code{(to-list . "some@@where.com")}, that address will be used when 1654 @code{(to-list . "some@@where.com")}, that address will be used when
1898 doing a @kbd{a} in any group. It is totally ignored when doing a 1655 doing a @kbd{a} in any group. It is totally ignored when doing a
1899 followup---except that if it is present in a news group, you'll get mail 1656 followup---except that if it is present in a news group, you'll get mail
1900 group semantics when doing @kbd{f}. 1657 group semantics when doing @kbd{f}.
1901 1658
1902 If you do an @kbd{a} command in a mail group and you don't have a
1903 @code{to-list} group parameter, one will be added automatically upon
1904 sending the message.
1905
1906 @item broken-reply-to 1659 @item broken-reply-to
1907 @cindex broken-reply-to 1660 @cindex broken-reply-to
1908 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To} 1661 Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
1909 headers in this group are to be ignored. This can be useful if you're 1662 headers in this group are to be ignored. This can be useful if you're
1910 reading a mailing list group where the listserv has inserted 1663 reading a mailing list group where the listserv has inserted
1911 @code{Reply-To} headers that point back to the listserv itself. This is 1664 @code{Reply-To} headers that point back to the listserv itself. This is
1912 broken behavior. So there! 1665 broken behavior. So there!
1913 1666
1914 @item to-group 1667 @item to-group
1915 @cindex to-group 1668 @cindex to-group
1916 Elements like @code{(to-group . "some.group.name")} means that all 1669 If the group parameter list contains an element like @code{(to-group
1917 posts in that group will be sent to @code{some.group.name}. 1670 . "some.group.name")}, all posts will be sent to that group.
1918
1919 @item newsgroup
1920 @cindex newsgroup
1921 If this symbol is present in the group parameter list, Gnus will treat
1922 all responses as if they were responses to news articles. This can be
1923 useful if you have a mail group that's really a mirror of a news group.
1924
1925 @item gcc-self
1926 @cindex gcc-self
1927 If this symbol is present in the group parameter list and set to
1928 @code{t}, new composed messages will be @code{Gcc}'d to the current
1929 group. If it is present and set to @code{none}, no @code{Gcc:} header
1930 will be generated, if it is present and a string, this string will be
1931 inserted literally as a @code{gcc} header (this symbol takes precedence over
1932 any default @code{Gcc} rules as described later).
1933 1671
1934 @item auto-expire 1672 @item auto-expire
1935 @cindex auto-expire 1673 @cindex auto-expire
1936 If the group parameter has an element that looks like @code{(auto-expire 1674 If this symbol is present in the group parameter list, all articles that
1937 . t)}, , all articles that are read will be marked as expirable. For an 1675 are read will be marked as expirable. For an alternative approach,
1938 alternative approach, @pxref{Expiring Mail}. 1676 @pxref{Expiring Mail}.
1939 1677
1940 @item total-expire 1678 @item total-expire
1941 @cindex total-expire 1679 @cindex total-expire
1942 If the group parameter has an element that looks like 1680 If this symbol is present, all read articles will be put through the
1943 @code{(total-expire . t)}, all read articles will be put through the
1944 expiry process, even if they are not marked as expirable. Use with 1681 expiry process, even if they are not marked as expirable. Use with
1945 caution. 1682 caution.
1946 1683
1947 @item expiry-wait 1684 @item expiry-wait
1948 @cindex expiry-wait 1685 @cindex expiry-wait
1949 @vindex nnmail-expiry-wait-function 1686 @vindex nnmail-expiry-wait-function
1950 If the group parameter has an element that looks like @code{(expiry-wait 1687 If the group parameter has an element that looks like @code{(expiry-wait
1952 @code{nnmail-expiry-wait-function} when expiring expirable messages. 1689 @code{nnmail-expiry-wait-function} when expiring expirable messages.
1953 The value can either be a number of days (not necessarily an integer) or 1690 The value can either be a number of days (not necessarily an integer) or
1954 the symbols @code{never} or @code{immediate}. 1691 the symbols @code{never} or @code{immediate}.
1955 1692
1956 @item score-file 1693 @item score-file
1957 @cindex score file group parameter
1958 Elements that look like @code{(score-file . "file")} will make 1694 Elements that look like @code{(score-file . "file")} will make
1959 @file{file} into the current score file for the group in question. This 1695 @samp{file} into the current score file for the group in question. This
1960 means that all score commands you issue will end up in that file. 1696 means that all score commands you issue will end up in that file.
1961
1962 @item adapt-file
1963 @cindex adapt file group parameter
1964 Elements that look like @code{(adapt-file . "file")} will make
1965 @file{file} into the current adaptive file for the group in question.
1966 All adaptive score entries will be put into this file.
1967 1697
1968 @item admin-address 1698 @item admin-address
1969 When unsubscribing to a mailing list you should never send the 1699 When unsubscribing to a mailing list you should never send the
1970 unsubscription notice to the mailing list itself. Instead, you'd send 1700 unsubscription notice to the mailing list itself. Instead, you'd send
1971 messages to the administrative address. This parameter allows you to 1701 messages to the administrative address. This parameter allows you to
1972 put the admin address somewhere convenient. 1702 put the admin address somewhere convenient.
1973 1703
1974 @item display
1975 Elements that look like @code{(display . MODE)} says which articles to
1976 display on entering the group. Legal values are:
1977
1978 @table @code
1979 @item all
1980 Display all articles, both read and unread.
1981
1982 @item default
1983 Display the default visible articles, which normally includes unread and
1984 ticked articles.
1985 @end table
1986
1987 @item comment 1704 @item comment
1988 Elements that look like @code{(comment . "This is a comment")} 1705 This parameter allows you to enter a arbitrary comment on the group.
1989 are arbitrary comments on the group. They are currently ignored by
1990 Gnus, but provide a place for you to store information on particular
1991 groups.
1992 1706
1993 @item @var{(variable form)} 1707 @item @var{(variable form)}
1994 You can use the group parameters to set variables local to the group you 1708 You can use the group parameters to set variables local to the group you
1995 are entering. If you want to turn threading off in @samp{news.answers}, 1709 are entering. Say you want to turn threading off in
1996 you could put @code{(gnus-show-threads nil)} in the group parameters of 1710 @samp{news.answers}. You'd then put @code{(gnus-show-threads nil)} in
1997 that group. @code{gnus-show-threads} will be made into a local variable 1711 the group parameters of that group. @code{gnus-show-threads} will be
1998 in the summary buffer you enter, and the form @code{nil} will be 1712 made into a local variable in the summary buffer you enter, and the form
1999 @code{eval}ed there. 1713 @code{nil} will be @code{eval}ed there.
2000 1714
2001 This can also be used as a group-specific hook function, if you'd like. 1715 This can also be used as a group-specific hook function, if you'd like.
2002 If you want to hear a beep when you enter a group, you could put 1716 If you want to hear a beep when you enter the group
2003 something like @code{(dummy-variable (ding))} in the parameters of that 1717 @samp{alt.binaries.pictures.furniture}, you could put something like
2004 group. @code{dummy-variable} will be set to the result of the 1718 @code{(dummy-variable (ding))} in the parameters of that group.
2005 @code{(ding)} form, but who cares? 1719 @code{dummy-variable} will be set to the result of the @code{(ding)}
2006 1720 form, but who cares?
2007 @end table 1721
2008 1722 @end table
2009 Use the @kbd{G p} command to edit group parameters of a group. 1723
2010 1724 If you want to change the group info you can use the @kbd{G E} command
2011 Also @pxref{Topic Parameters}. 1725 to enter a buffer where you can edit it.
2012 1726
2013 Here's an example group parameter list: 1727 You usually don't want to edit the entire group info, so you'd be better
2014 1728 off using the @kbd{G p} command to just edit the group parameters.
2015 @example
2016 ((to-address . "ding@@ifi.uio.no")
2017 (auto-expiry . t))
2018 @end example
2019 1729
2020 1730
2021 @node Listing Groups 1731 @node Listing Groups
2022 @section Listing Groups 1732 @section Listing Groups
2023 @cindex group listing 1733 @cindex group listing
2032 @kindex l (Group) 1742 @kindex l (Group)
2033 @findex gnus-group-list-groups 1743 @findex gnus-group-list-groups
2034 List all groups that have unread articles 1744 List all groups that have unread articles
2035 (@code{gnus-group-list-groups}). If the numeric prefix is used, this 1745 (@code{gnus-group-list-groups}). If the numeric prefix is used, this
2036 command will list only groups of level ARG and lower. By default, it 1746 command will list only groups of level ARG and lower. By default, it
2037 only lists groups of level five (i. e., 1747 only lists groups of level five or lower (i.e., just subscribed groups).
2038 @code{gnus-group-default-list-level}) or lower (i.e., just subscribed
2039 groups).
2040 1748
2041 @item L 1749 @item L
2042 @itemx A u 1750 @itemx A u
2043 @kindex A u (Group) 1751 @kindex A u (Group)
2044 @kindex L (Group) 1752 @kindex L (Group)
2084 @kindex A A (Group) 1792 @kindex A A (Group)
2085 @findex gnus-group-list-active 1793 @findex gnus-group-list-active
2086 List absolutely all groups that are in the active file(s) of the 1794 List absolutely all groups that are in the active file(s) of the
2087 server(s) you are connected to (@code{gnus-group-list-active}). This 1795 server(s) you are connected to (@code{gnus-group-list-active}). This
2088 might very well take quite a while. It might actually be a better idea 1796 might very well take quite a while. It might actually be a better idea
2089 to do a @kbd{A M} to list all matching, and just give @samp{.} as the 1797 to do a @kbd{A m} to list all matching, and just give @samp{.} as the
2090 thing to match on. Also note that this command may list group that 1798 thing to match on.
2091 don't exist (yet)---these will be listed as if they are killed groups.
2092 Take the output with some grains of salt.
2093 1799
2094 @item A a 1800 @item A a
2095 @kindex A a (Group) 1801 @kindex A a (Group)
2096 @findex gnus-group-apropos 1802 @findex gnus-group-apropos
2097 List all groups that have names that match a regexp 1803 List all groups that have names that match a regexp
2135 1841
2136 @item gnus-group-sort-by-alphabet 1842 @item gnus-group-sort-by-alphabet
2137 @findex gnus-group-sort-by-alphabet 1843 @findex gnus-group-sort-by-alphabet
2138 Sort the group names alphabetically. This is the default. 1844 Sort the group names alphabetically. This is the default.
2139 1845
2140 @item gnus-group-sort-by-real-name
2141 @findex gnus-group-sort-by-real-name
2142 Sort the group alphabetically on the real (unprefixed) group names.
2143
2144 @item gnus-group-sort-by-level 1846 @item gnus-group-sort-by-level
2145 @findex gnus-group-sort-by-level 1847 @findex gnus-group-sort-by-level
2146 Sort by group level. 1848 Sort by group level.
2147 1849
2148 @item gnus-group-sort-by-score 1850 @item gnus-group-sort-by-score
2158 @findex gnus-group-sort-by-unread 1860 @findex gnus-group-sort-by-unread
2159 Sort by number of unread articles. 1861 Sort by number of unread articles.
2160 1862
2161 @item gnus-group-sort-by-method 1863 @item gnus-group-sort-by-method
2162 @findex gnus-group-sort-by-method 1864 @findex gnus-group-sort-by-method
2163 Sort alphabetically on the select method. 1865 Sort by alphabetically on the select method.
2164 1866
2165 1867
2166 @end table 1868 @end table
2167 1869
2168 @code{gnus-group-sort-function} can also be a list of sorting 1870 @code{gnus-group-sort-function} can also be a list of sorting
2199 (@code{gnus-group-sort-groups-by-score}). 1901 (@code{gnus-group-sort-groups-by-score}).
2200 1902
2201 @item G S r 1903 @item G S r
2202 @kindex G S r (Group) 1904 @kindex G S r (Group)
2203 @findex gnus-group-sort-groups-by-rank 1905 @findex gnus-group-sort-groups-by-rank
2204 Sort the group buffer by group rank 1906 Sort the group buffer by group level
2205 (@code{gnus-group-sort-groups-by-rank}). 1907 (@code{gnus-group-sort-groups-by-rank}).
2206 1908
2207 @item G S m 1909 @item G S m
2208 @kindex G S m (Group) 1910 @kindex G S m (Group)
2209 @findex gnus-group-sort-groups-by-method 1911 @findex gnus-group-sort-groups-by-method
2211 (@code{gnus-group-sort-groups-by-method}). 1913 (@code{gnus-group-sort-groups-by-method}).
2212 1914
2213 @end table 1915 @end table
2214 1916
2215 When given a prefix, all these commands will sort in reverse order. 1917 When given a prefix, all these commands will sort in reverse order.
2216
2217 You can also sort a subset of the groups:
2218
2219 @table @kbd
2220 @item G P a
2221 @kindex G P a (Group)
2222 @findex gnus-group-sort-selected-groups-by-alphabet
2223 Sort the process/prefixed groups in the group buffer alphabetically by
2224 group name (@code{gnus-group-sort-selected-groups-by-alphabet}).
2225
2226 @item G P u
2227 @kindex G P u (Group)
2228 @findex gnus-group-sort-selected-groups-by-unread
2229 Sort the process/prefixed groups in the group buffer by the number of
2230 unread articles (@code{gnus-group-sort-selected-groups-by-unread}).
2231
2232 @item G P l
2233 @kindex G P l (Group)
2234 @findex gnus-group-sort-selected-groups-by-level
2235 Sort the process/prefixed groups in the group buffer by group level
2236 (@code{gnus-group-sort-selected-groups-by-level}).
2237
2238 @item G P v
2239 @kindex G P v (Group)
2240 @findex gnus-group-sort-selected-groups-by-score
2241 Sort the process/prefixed groups in the group buffer by group score
2242 (@code{gnus-group-sort-selected-groups-by-score}).
2243
2244 @item G P r
2245 @kindex G P r (Group)
2246 @findex gnus-group-sort-selected-groups-by-rank
2247 Sort the process/prefixed groups in the group buffer by group rank
2248 (@code{gnus-group-sort-selected-groups-by-rank}).
2249
2250 @item G P m
2251 @kindex G P m (Group)
2252 @findex gnus-group-sort-selected-groups-by-method
2253 Sort the process/prefixed groups in the group buffer alphabetically by
2254 backend name (@code{gnus-group-sort-selected-groups-by-method}).
2255
2256 @end table
2257
2258 1918
2259 1919
2260 @node Group Maintenance 1920 @node Group Maintenance
2261 @section Group Maintenance 1921 @section Group Maintenance
2262 @cindex bogus groups 1922 @cindex bogus groups
2304 (@code{gnus-group-browse-foreign-server}). 1964 (@code{gnus-group-browse-foreign-server}).
2305 @end table 1965 @end table
2306 1966
2307 @findex gnus-browse-mode 1967 @findex gnus-browse-mode
2308 A new buffer with a list of available groups will appear. This buffer 1968 A new buffer with a list of available groups will appear. This buffer
2309 will be use the @code{gnus-browse-mode}. This buffer looks a bit (well, 1969 will be use the @code{gnus-browse-mode}. This buffer looks a bit
2310 a lot) like a normal group buffer. 1970 (well, a lot) like a normal group buffer, but with one major difference
1971 - you can't enter any of the groups. If you want to read any of the
1972 news available on that server, you have to subscribe to the groups you
1973 think may be interesting, and then you have to exit this buffer. The
1974 new groups will be added to the group buffer, and then you can read them
1975 as you would any other group.
1976
1977 Future versions of Gnus may possibly permit reading groups straight from
1978 the browse buffer.
2311 1979
2312 Here's a list of keystrokes available in the browse mode: 1980 Here's a list of keystrokes available in the browse mode:
2313 1981
2314 @table @kbd 1982 @table @kbd
2315 @item n 1983 @item n
2374 Quit Gnus (@code{gnus-group-exit}). 2042 Quit Gnus (@code{gnus-group-exit}).
2375 2043
2376 @item Q 2044 @item Q
2377 @kindex Q (Group) 2045 @kindex Q (Group)
2378 @findex gnus-group-quit 2046 @findex gnus-group-quit
2379 Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}). 2047 Quit Gnus without saving any startup files (@code{gnus-group-quit}).
2380 The dribble file will be saved, though (@pxref{Auto Save}).
2381 @end table 2048 @end table
2382 2049
2383 @vindex gnus-exit-gnus-hook 2050 @vindex gnus-exit-gnus-hook
2384 @vindex gnus-suspend-gnus-hook 2051 @vindex gnus-suspend-gnus-hook
2385 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and 2052 @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
2394 trying to customize meta-variables. 2061 trying to customize meta-variables.
2395 2062
2396 Note: 2063 Note:
2397 2064
2398 @quotation 2065 @quotation
2399 Miss Lisa Cannifax, while sitting in English class, felt her feet go 2066 Miss Lisa Cannifax, while sitting in English class, feels her feet go
2400 numbly heavy and herself fall into a hazy trance as the boy sitting 2067 numbly heavy and herself fall into a hazy trance as the boy sitting
2401 behind her drew repeated lines with his pencil across the back of her 2068 behind her drew repeated lines with his pencil across the back of her
2402 plastic chair. 2069 plastic chair.
2403 @end quotation 2070 @end quotation
2404 2071
2412 here, your sex groups over there, and the rest (what, two groups or so?) 2079 here, your sex groups over there, and the rest (what, two groups or so?)
2413 you put in some misc section that you never bother with anyway. You can 2080 you put in some misc section that you never bother with anyway. You can
2414 even group the Emacs sex groups as a sub-topic to either the Emacs 2081 even group the Emacs sex groups as a sub-topic to either the Emacs
2415 groups or the sex groups---or both! Go wild! 2082 groups or the sex groups---or both! Go wild!
2416 2083
2417 Here's an example:
2418
2419 @example
2420 Gnus
2421 Emacs -- I wuw it!
2422 3: comp.emacs
2423 2: alt.religion.emacs
2424 Naughty Emacs
2425 452: alt.sex.emacs
2426 0: comp.talk.emacs.recovery
2427 Misc
2428 8: comp.binaries.fractals
2429 13: comp.sources.unix
2430 @end example
2431
2432 @findex gnus-topic-mode 2084 @findex gnus-topic-mode
2433 @kindex t (Group) 2085 @kindex t (Group)
2434 To get this @emph{fab} functionality you simply turn on (ooh!) the 2086 To get this @emph{fab} functionality you simply turn on (ooh!) the
2435 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer. (This 2087 @code{gnus-topic} minor mode---type @kbd{t} in the group buffer. (This
2436 is a toggling command.) 2088 is a toggling command.)
2449 @end lisp 2101 @end lisp
2450 2102
2451 @menu 2103 @menu
2452 * Topic Variables:: How to customize the topics the Lisp Way. 2104 * Topic Variables:: How to customize the topics the Lisp Way.
2453 * Topic Commands:: Interactive E-Z commands. 2105 * Topic Commands:: Interactive E-Z commands.
2454 * Topic Sorting:: Sorting each topic individually.
2455 * Topic Topology:: A map of the world. 2106 * Topic Topology:: A map of the world.
2456 * Topic Parameters:: Parameters that apply to all groups in a topic.
2457 @end menu 2107 @end menu
2458 2108
2459 2109
2460 @node Topic Variables 2110 @node Topic Variables
2461 @subsection Topic Variables 2111 @subsection Topic Variables
2464 Now, if you select a topic, if will fold/unfold that topic, which is 2114 Now, if you select a topic, if will fold/unfold that topic, which is
2465 really neat, I think. 2115 really neat, I think.
2466 2116
2467 @vindex gnus-topic-line-format 2117 @vindex gnus-topic-line-format
2468 The topic lines themselves are created according to the 2118 The topic lines themselves are created according to the
2469 @code{gnus-topic-line-format} variable (@pxref{Formatting Variables}). 2119 @code{gnus-topic-line-format} variable. @xref{Formatting Variables}.
2470 Legal elements are: 2120 Elements allowed are:
2471 2121
2472 @table @samp 2122 @table @samp
2473 @item i 2123 @item i
2474 Indentation. 2124 Indentation.
2475 @item n 2125 @item n
2487 @end table 2137 @end table
2488 2138
2489 @vindex gnus-topic-indent-level 2139 @vindex gnus-topic-indent-level
2490 Each sub-topic (and the groups in the sub-topics) will be indented with 2140 Each sub-topic (and the groups in the sub-topics) will be indented with
2491 @code{gnus-topic-indent-level} times the topic level number of spaces. 2141 @code{gnus-topic-indent-level} times the topic level number of spaces.
2492 The default is 2. 2142 The default is @code{2}.
2493 2143
2494 @vindex gnus-topic-mode-hook 2144 @vindex gnus-topic-mode-hook
2495 @code{gnus-topic-mode-hook} is called in topic minor mode buffers. 2145 @code{gnus-topic-mode-hook} is called in topic minor mode buffers.
2496
2497 @vindex gnus-topic-display-empty-topics
2498 The @code{gnus-topic-display-empty-topics} says whether to display even
2499 topics that have no unread articles in them. The default is @code{t}.
2500 2146
2501 2147
2502 @node Topic Commands 2148 @node Topic Commands
2503 @subsection Topic Commands 2149 @subsection Topic Commands
2504 @cindex topic commands 2150 @cindex topic commands
2508 definitions slightly. 2154 definitions slightly.
2509 2155
2510 @table @kbd 2156 @table @kbd
2511 2157
2512 @item T n 2158 @item T n
2513 @kindex T n (Topic) 2159 @kindex T n (Group)
2514 @findex gnus-topic-create-topic 2160 @findex gnus-topic-create-topic
2515 Prompt for a new topic name and create it 2161 Prompt for a new topic name and create it
2516 (@code{gnus-topic-create-topic}). 2162 (@code{gnus-topic-create-topic}).
2517 2163
2518 @item T m 2164 @item T m
2519 @kindex T m (Topic) 2165 @kindex T m (Group)
2520 @findex gnus-topic-move-group 2166 @findex gnus-topic-move-group
2521 Move the current group to some other topic 2167 Move the current group to some other topic
2522 (@code{gnus-topic-move-group}). This command uses the process/prefix 2168 (@code{gnus-topic-move-group}). This command understands the
2523 convention (@pxref{Process/Prefix}). 2169 process/prefix convention (@pxref{Process/Prefix}).
2524 2170
2525 @item T c 2171 @item T c
2526 @kindex T c (Topic) 2172 @kindex T c (Group)
2527 @findex gnus-topic-copy-group 2173 @findex gnus-topic-copy-group
2528 Copy the current group to some other topic 2174 Copy the current group to some other topic
2529 (@code{gnus-topic-copy-group}). This command uses the process/prefix 2175 (@code{gnus-topic-copy-group}). This command understands the
2530 convention (@pxref{Process/Prefix}). 2176 process/prefix convention (@pxref{Process/Prefix}).
2531 2177
2532 @item T D 2178 @item T D
2533 @kindex T D (Topic) 2179 @kindex T D (Group)
2534 @findex gnus-topic-remove-group 2180 @findex gnus-topic-remove-group
2535 Remove a group from the current topic (@code{gnus-topic-remove-group}). 2181 Remove a group from the current topic (@code{gnus-topic-remove-group}).
2536 This command uses the process/prefix convention 2182 This command understands the process/prefix convention
2537 (@pxref{Process/Prefix}). 2183 (@pxref{Process/Prefix}).
2538 2184
2539 @item T M 2185 @item T M
2540 @kindex T M (Topic) 2186 @kindex T M (Group)
2541 @findex gnus-topic-move-matching 2187 @findex gnus-topic-move-matching
2542 Move all groups that match some regular expression to a topic 2188 Move all groups that match some regular expression to a topic
2543 (@code{gnus-topic-move-matching}). 2189 (@code{gnus-topic-move-matching}).
2544 2190
2545 @item T C 2191 @item T C
2546 @kindex T C (Topic) 2192 @kindex T C (Group)
2547 @findex gnus-topic-copy-matching 2193 @findex gnus-topic-copy-matching
2548 Copy all groups that match some regular expression to a topic 2194 Copy all groups that match some regular expression to a topic
2549 (@code{gnus-topic-copy-matching}). 2195 (@code{gnus-topic-copy-matching}).
2550 2196
2551 @item T # 2197 @item T #
2552 @kindex T # (Topic) 2198 @kindex T # (Group)
2553 @findex gnus-topic-mark-topic 2199 @findex gnus-topic-mark-topic
2554 Mark all groups in the current topic with the process mark 2200 Mark all groups in the current topic with the process mark
2555 (@code{gnus-topic-mark-topic}). 2201 (@code{gnus-topic-mark-topic}).
2556 2202
2557 @item T M-# 2203 @item T M-#
2558 @kindex T M-# (Topic) 2204 @kindex T M-# (Group)
2559 @findex gnus-topic-unmark-topic 2205 @findex gnus-topic-unmark-topic
2560 Remove the process mark from all groups in the current topic 2206 Remove the process mark from all groups in the current topic
2561 (@code{gnus-topic-unmark-topic}). 2207 (@code{gnus-topic-unmark-topic}).
2562 2208
2563 @item RET 2209 @item RET
2564 @kindex RET (Topic) 2210 @kindex RET (Group)
2565 @findex gnus-topic-select-group 2211 @findex gnus-topic-select-group
2566 @itemx SPACE 2212 @itemx SPACE
2567 Either select a group or fold a topic (@code{gnus-topic-select-group}). 2213 Either select a group or fold a topic (@code{gnus-topic-select-group}).
2568 When you perform this command on a group, you'll enter the group, as 2214 When you perform this command on a group, you'll enter the group, as
2569 usual. When done on a topic line, the topic will be folded (if it was 2215 usual. When done on a topic line, the topic will be folded (if it was
2570 visible) or unfolded (if it was folded already). So it's basically a 2216 visible) or unfolded (if it was folded already). So it's basically a
2571 toggling command on topics. In addition, if you give a numerical 2217 toggling command on topics. In addition, if you give a numerical
2572 prefix, group on that level (and lower) will be displayed. 2218 prefix, group on that level (and lower) will be displayed.
2573 2219
2574 @item T TAB 2220 @item T TAB
2575 @kindex T TAB (Topic) 2221 @kindex T TAB (Group)
2576 @findex gnus-topic-indent 2222 @findex gnus-topic-indent
2577 ``Indent'' the current topic so that it becomes a sub-topic of the 2223 ``Indent'' the current topic so that it becomes a sub-topic of the
2578 previous topic (@code{gnus-topic-indent}). If given a prefix, 2224 previous topic (@code{gnus-topic-indent}). If given a prefix,
2579 ``un-indent'' the topic instead. 2225 ``un-indent'' the topic instead.
2580 2226
2581 @item C-k 2227 @item C-k
2582 @kindex C-k (Topic) 2228 @kindex C-k (Group)
2583 @findex gnus-topic-kill-group 2229 @findex gnus-topic-kill-group
2584 Kill a group or topic (@code{gnus-topic-kill-group}). All groups in the 2230 Kill a group or topic (@code{gnus-topic-kill-group}).
2585 topic will be removed along with the topic.
2586 2231
2587 @item C-y 2232 @item C-y
2588 @kindex C-y (Topic) 2233 @kindex C-y (Group)
2589 @findex gnus-topic-yank-group 2234 @findex gnus-topic-yank-group
2590 Yank the previously killed group or topic 2235 Yank the previously killed group or topic (@code{gnus-topic-yank-group}).
2591 (@code{gnus-topic-yank-group}). Note that all topics will be yanked 2236 Note that all topics will be yanked before all groups.
2592 before all groups.
2593 2237
2594 @item T r 2238 @item T r
2595 @kindex T r (Topic) 2239 @kindex T r (Group)
2596 @findex gnus-topic-rename 2240 @findex gnus-topic-rename
2597 Rename a topic (@code{gnus-topic-rename}). 2241 Rename a topic (@code{gnus-topic-rename}).
2598 2242
2599 @item T DEL 2243 @item T DEL
2600 @kindex T DEL (Topic) 2244 @kindex T DEL (Group)
2601 @findex gnus-topic-delete 2245 @findex gnus-topic-delete
2602 Delete an empty topic (@code{gnus-topic-delete}). 2246 Delete an empty topic (@code{gnus-topic-delete}).
2603 2247
2604 @item A T 2248 @item A T
2605 @kindex A T (Topic) 2249 @kindex A T (Group)
2606 @findex gnus-topic-list-active 2250 @findex gnus-topic-list-active
2607 List all groups that Gnus knows about in a topics-ified way 2251 List all groups that Gnus knows about in a topics-ified way
2608 (@code{gnus-topic-list-active}). 2252 (@code{gnus-topic-list-active}).
2609 2253
2610 @item G p 2254 @end table
2611 @kindex G p (Topic)
2612 @findex gnus-topic-edit-parameters
2613 @cindex group parameters
2614 @cindex topic parameters
2615 @cindex parameters
2616 Edit the topic parameters (@code{gnus-topic-edit-parameters}).
2617 @xref{Topic Parameters}.
2618
2619 @end table
2620
2621
2622 @node Topic Sorting
2623 @subsection Topic Sorting
2624 @cindex topic sorting
2625
2626 You can sort the groups in each topic individually with the following
2627 commands:
2628
2629
2630 @table @kbd
2631 @item T S a
2632 @kindex T S a (Topic)
2633 @findex gnus-topic-sort-groups-by-alphabet
2634 Sort the current topic alphabetically by group name
2635 (@code{gnus-topic-sort-groups-by-alphabet}).
2636
2637 @item T S u
2638 @kindex T S u (Topic)
2639 @findex gnus-topic-sort-groups-by-unread
2640 Sort the current topic by the number of unread articles
2641 (@code{gnus-topic-sort-groups-by-unread}).
2642
2643 @item T S l
2644 @kindex T S l (Topic)
2645 @findex gnus-topic-sort-groups-by-level
2646 Sort the current topic by group level
2647 (@code{gnus-topic-sort-groups-by-level}).
2648
2649 @item T S v
2650 @kindex T S v (Topic)
2651 @findex gnus-topic-sort-groups-by-score
2652 Sort the current topic by group score
2653 (@code{gnus-topic-sort-groups-by-score}).
2654
2655 @item T S r
2656 @kindex T S r (Topic)
2657 @findex gnus-topic-sort-groups-by-rank
2658 Sort the current topic by group rank
2659 (@code{gnus-topic-sort-groups-by-rank}).
2660
2661 @item T S m
2662 @kindex T S m (Topic)
2663 @findex gnus-topic-sort-groups-by-method
2664 Sort the current topic alphabetically by backend name
2665 (@code{gnus-topic-sort-groups-by-method}).
2666
2667 @end table
2668
2669 @xref{Sorting Groups} for more information about group sorting.
2670 2255
2671 2256
2672 @node Topic Topology 2257 @node Topic Topology
2673 @subsection Topic Topology 2258 @subsection Topic Topology
2674 @cindex topic topology 2259 @cindex topic topology
2677 So, let's have a look at an example group buffer: 2262 So, let's have a look at an example group buffer:
2678 2263
2679 @example 2264 @example
2680 Gnus 2265 Gnus
2681 Emacs -- I wuw it! 2266 Emacs -- I wuw it!
2682 3: comp.emacs 2267 3: comp.emacs
2683 2: alt.religion.emacs 2268 2: alt.religion.emacs
2684 Naughty Emacs 2269 Naughty Emacs
2685 452: alt.sex.emacs 2270 452: alt.sex.emacs
2686 0: comp.talk.emacs.recovery 2271 0: comp.talk.emacs.recovery
2687 Misc 2272 Misc
2688 8: comp.binaries.fractals 2273 8: comp.binaries.fractals
2689 13: comp.sources.unix 2274 13: comp.sources.unix
2690 @end example 2275 @end example
2691 2276
2692 So, here we have one top-level topic (@samp{Gnus}), two topics under 2277 So, here we have one top-level topic, two topics under that, and one
2693 that, and one sub-topic under one of the sub-topics. (There is always 2278 sub-topic under one of the sub-topics. (There is always just one (1)
2694 just one (1) top-level topic). This topology can be expressed as 2279 top-level topic). This topology can be expressed as follows:
2695 follows:
2696 2280
2697 @lisp 2281 @lisp
2698 (("Gnus" visible) 2282 (("Gnus" visible)
2699 (("Emacs -- I wuw it!" visible) 2283 (("Emacs -- I wuw it!" visible)
2700 (("Naughty Emacs" visible))) 2284 (("Naughty Emacs" visible)))
2711 This topology shows what topics are sub-topics of what topics (right), 2295 This topology shows what topics are sub-topics of what topics (right),
2712 and which topics are visible. Two settings are currently 2296 and which topics are visible. Two settings are currently
2713 allowed---@code{visible} and @code{invisible}. 2297 allowed---@code{visible} and @code{invisible}.
2714 2298
2715 2299
2716 @node Topic Parameters
2717 @subsection Topic Parameters
2718 @cindex topic parameters
2719
2720 All groups in a topic will inherit group parameters from the parent (and
2721 ancestor) topic parameters. All legal group parameters are legal topic
2722 parameters (@pxref{Group Parameters}).
2723
2724 Group parameters (of course) override topic parameters, and topic
2725 parameters in sub-topics override topic parameters in super-topics. You
2726 know. Normal inheritance rules. (@dfn{Rules} is here a noun, not a
2727 verb, although you may feel free to disagree with me here.)
2728
2729 @example
2730 Gnus
2731 Emacs
2732 3: comp.emacs
2733 2: alt.religion.emacs
2734 452: alt.sex.emacs
2735 Relief
2736 452: alt.sex.emacs
2737 0: comp.talk.emacs.recovery
2738 Misc
2739 8: comp.binaries.fractals
2740 13: comp.sources.unix
2741 452: alt.sex.emacs
2742 @end example
2743
2744 The @samp{Emacs} topic has the topic parameter @code{(score-file
2745 . "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
2746 @code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
2747 topic parameter @code{(score-file . "emacs.SCORE")}. In addition,
2748 @samp{alt.religion.emacs} has the group parameter @code{(score-file
2749 . "religion.SCORE")}.
2750
2751 Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
2752 will get the @file{relief.SCORE} home score file. If you enter the same
2753 group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
2754 score file. If you enter the group @samp{alt.religion.emacs}, you'll
2755 get the @file{religion.SCORE} home score file.
2756
2757 This seems rather simple and self-evident, doesn't it? Well, yes. But
2758 there are some problems, especially with the @code{total-expiry}
2759 parameter. Say you have a mail group in two topics; one with
2760 @code{total-expiry} and one without. What happens when you do @kbd{M-x
2761 gnus-expire-all-expirable-groups}? Gnus has no way of telling which one
2762 of these topics you mean to expire articles from, so anything may
2763 happen. In fact, I hereby declare that it is @dfn{undefined} what
2764 happens. You just have to be careful if you do stuff like that.
2765
2766
2767 @node Misc Group Stuff 2300 @node Misc Group Stuff
2768 @section Misc Group Stuff 2301 @section Misc Group Stuff
2769 2302
2770 @menu 2303 @menu
2771 * Scanning New Messages:: Asking Gnus to see whether new messages have arrived. 2304 * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
2772 * Group Information:: Information and help on groups and Gnus. 2305 * Group Information:: Information and help on groups and Gnus.
2773 * Group Timestamp:: Making Gnus keep track of when you last read a group.
2774 * File Commands:: Reading and writing the Gnus files. 2306 * File Commands:: Reading and writing the Gnus files.
2775 @end menu 2307 @end menu
2776 2308
2777 @table @kbd 2309 @table @kbd
2778 2310
2779 @item ^ 2311 @item ^
2780 @kindex ^ (Group) 2312 @kindex ^ (Group)
2781 @findex gnus-group-enter-server-mode 2313 @findex gnus-group-enter-server-mode
2782 Enter the server buffer (@code{gnus-group-enter-server-mode}). 2314 Enter the server buffer (@code{gnus-group-enter-server-mode}). @xref{The
2783 @xref{The Server Buffer}. 2315 Server Buffer}.
2784 2316
2785 @item a 2317 @item a
2786 @kindex a (Group) 2318 @kindex a (Group)
2787 @findex gnus-group-post-news 2319 @findex gnus-group-post-news
2788 Post an article to a group (@code{gnus-group-post-news}). The current 2320 Post an article to a group (@code{gnus-group-post-news}). The current
2837 @item M-g 2369 @item M-g
2838 @kindex M-g (Group) 2370 @kindex M-g (Group)
2839 @findex gnus-group-get-new-news-this-group 2371 @findex gnus-group-get-new-news-this-group
2840 @vindex gnus-goto-next-group-when-activating 2372 @vindex gnus-goto-next-group-when-activating
2841 Check whether new articles have arrived in the current group 2373 Check whether new articles have arrived in the current group
2842 (@code{gnus-group-get-new-news-this-group}). 2374 (@code{gnus-group-get-new-news-this-group}). The
2843 @code{gnus-goto-next-group-when-activating} says whether this command is 2375 @code{gnus-goto-next-group-when-activating} variable controls whether
2844 to move point to the next group or not. It is @code{t} by default. 2376 this command is to move point to the next group or not. It is @code{t}
2377 by default.
2845 2378
2846 @findex gnus-activate-all-groups 2379 @findex gnus-activate-all-groups
2847 @cindex activating groups 2380 @cindex activating groups
2848 @item C-c M-g 2381 @item C-c M-g
2849 @kindex C-c M-g (Group) 2382 @kindex C-c M-g (Group)
2851 2384
2852 @item R 2385 @item R
2853 @kindex R (Group) 2386 @kindex R (Group)
2854 @cindex restarting 2387 @cindex restarting
2855 @findex gnus-group-restart 2388 @findex gnus-group-restart
2856 Restart Gnus (@code{gnus-group-restart}). This saves the @file{.newsrc} 2389 Restart Gnus (@code{gnus-group-restart}).
2857 file(s), closes the connection to all servers, clears up all run-time
2858 Gnus variables, and then starts Gnus all over again.
2859 2390
2860 @end table 2391 @end table
2861 2392
2862 @vindex gnus-get-new-news-hook 2393 @vindex gnus-get-new-news-hook
2863 @code{gnus-get-new-news-hook} is run just before checking for new news. 2394 @code{gnus-get-new-news-hook} is run just before checking for new news.
2872 @cindex group information 2403 @cindex group information
2873 @cindex information on groups 2404 @cindex information on groups
2874 2405
2875 @table @kbd 2406 @table @kbd
2876 2407
2877 2408 @item M-f
2878 @item H f 2409 @kindex M-f (Group)
2879 @kindex H f (Group)
2880 @findex gnus-group-fetch-faq 2410 @findex gnus-group-fetch-faq
2881 @vindex gnus-group-faq-directory
2882 @cindex FAQ 2411 @cindex FAQ
2883 @cindex ange-ftp 2412 @cindex ange-ftp
2884 Try to fetch the FAQ for the current group 2413 Try to fetch the FAQ for the current group
2885 (@code{gnus-group-fetch-faq}). Gnus will try to get the FAQ from 2414 (@code{gnus-group-fetch-faq}). Gnus will try to get the FAQ from
2886 @code{gnus-group-faq-directory}, which is usually a directory on a 2415 @code{gnus-group-faq-directory}, which is usually a directory on a
2887 remote machine. This variable can also be a list of directories. In 2416 remote machine. @code{ange-ftp} will be used for fetching the file.
2888 that case, giving a prefix to this command will allow you to choose 2417
2889 between the various sites. @code{ange-ftp} (or @code{efs}) will be used 2418 @item D
2890 for fetching the file. 2419 @kindex D (Group)
2891
2892 If fetching from the first site is unsuccessful, Gnus will attempt to go
2893 through @code{gnus-group-faq-directory} and try to open them one by one.
2894
2895 @item H d
2896 @itemx C-c C-d
2897 @kindex H d (Group)
2898 @kindex C-c C-d (Group)
2899 @cindex describing groups 2420 @cindex describing groups
2900 @cindex group description 2421 @cindex group description
2901 @findex gnus-group-describe-group 2422 @findex gnus-group-describe-group
2902 Describe the current group (@code{gnus-group-describe-group}). If given 2423 Describe the current group (@code{gnus-group-describe-group}). If given
2903 a prefix, force Gnus to re-read the description from the server. 2424 a prefix, force Gnus to re-read the description from the server.
2926 @findex gnus-info-find-node 2447 @findex gnus-info-find-node
2927 Go to the Gnus info node (@code{gnus-info-find-node}). 2448 Go to the Gnus info node (@code{gnus-info-find-node}).
2928 @end table 2449 @end table
2929 2450
2930 2451
2931 @node Group Timestamp
2932 @subsection Group Timestamp
2933 @cindex timestamps
2934 @cindex group timestamps
2935
2936 It can be convenient to let Gnus keep track of when you last read a
2937 group. To set the ball rolling, you should add
2938 @code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
2939
2940 @lisp
2941 (add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
2942 @end lisp
2943
2944 After doing this, each time you enter a group, it'll be recorded.
2945
2946 This information can be displayed in various ways---the easiest is to
2947 use the @samp{%d} spec in the group line format:
2948
2949 @lisp
2950 (setq gnus-group-line-format
2951 "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
2952 @end lisp
2953
2954 This will result in lines looking like:
2955
2956 @example
2957 * 0: mail.ding 19961002T012943
2958 0: custom 19961002T012713
2959 @end example
2960
2961 As you can see, the date is displayed in compact ISO 8601 format. This
2962 may be a bit too much, so to just display the date, you could say
2963 something like:
2964
2965 @lisp
2966 (setq gnus-group-line-format
2967 "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
2968 @end lisp
2969
2970
2971 @node File Commands 2452 @node File Commands
2972 @subsection File Commands 2453 @subsection File Commands
2973 @cindex file commands 2454 @cindex file commands
2974 2455
2975 @table @kbd 2456 @table @kbd
2977 @item r 2458 @item r
2978 @kindex r (Group) 2459 @kindex r (Group)
2979 @findex gnus-group-read-init-file 2460 @findex gnus-group-read-init-file
2980 @vindex gnus-init-file 2461 @vindex gnus-init-file
2981 @cindex reading init file 2462 @cindex reading init file
2982 Re-read the init file (@code{gnus-init-file}, which defaults to 2463 Read the init file (@code{gnus-init-file}, which defaults to
2983 @file{~/.gnus}) (@code{gnus-group-read-init-file}). 2464 @file{~/.gnus}) (@code{gnus-group-read-init-file}).
2984 2465
2985 @item s 2466 @item s
2986 @kindex s (Group) 2467 @kindex s (Group)
2987 @findex gnus-group-save-newsrc 2468 @findex gnus-group-save-newsrc
3002 @chapter The Summary Buffer 2483 @chapter The Summary Buffer
3003 @cindex summary buffer 2484 @cindex summary buffer
3004 2485
3005 A line for each article is displayed in the summary buffer. You can 2486 A line for each article is displayed in the summary buffer. You can
3006 move around, read articles, post articles and reply to articles. 2487 move around, read articles, post articles and reply to articles.
3007
3008 The most common way to a summary buffer is to select a group from the
3009 group buffer (@pxref{Selecting a Group}).
3010
3011 You can have as many summary buffers open as you wish.
3012 2488
3013 @menu 2489 @menu
3014 * Summary Buffer Format:: Deciding how the summary buffer is to look. 2490 * Summary Buffer Format:: Deciding how the summary buffer is to look.
3015 * Summary Maneuvering:: Moving around the summary buffer. 2491 * Summary Maneuvering:: Moving around the summary buffer.
3016 * Choosing Articles:: Reading articles. 2492 * Choosing Articles:: Reading articles.
3026 * Persistent Articles:: Making articles expiry-resistant. 2502 * Persistent Articles:: Making articles expiry-resistant.
3027 * Article Backlog:: Having already read articles hang around. 2503 * Article Backlog:: Having already read articles hang around.
3028 * Saving Articles:: Ways of customizing article saving. 2504 * Saving Articles:: Ways of customizing article saving.
3029 * Decoding Articles:: Gnus can treat series of (uu)encoded articles. 2505 * Decoding Articles:: Gnus can treat series of (uu)encoded articles.
3030 * Article Treatment:: The article buffer can be mangled at will. 2506 * Article Treatment:: The article buffer can be mangled at will.
3031 * Article Commands:: Doing various things with the article buffer.
3032 * Summary Sorting:: Sorting the summary buffer in various ways. 2507 * Summary Sorting:: Sorting the summary buffer in various ways.
3033 * Finding the Parent:: No child support? Get the parent. 2508 * Finding the Parent:: No child support? Get the parent.
3034 * Alternative Approaches:: Reading using non-default summaries. 2509 * Alternative Approaches:: Reading using non-default summaries.
3035 * Tree Display:: A more visual display of threads. 2510 * Tree Display:: A more visual display of threads.
3036 * Mail Group Commands:: Some commands can only be used in mail groups. 2511 * Mail Group Commands:: Some commands can only be used in mail groups.
3037 * Various Summary Stuff:: What didn't fit anywhere else. 2512 * Various Summary Stuff:: What didn't fit anywhere else.
3038 * Exiting the Summary Buffer:: Returning to the Group buffer. 2513 * Exiting the Summary Buffer:: Returning to the Group buffer.
3039 * Crosspost Handling:: How crossposted articles are dealt with.
3040 * Duplicate Suppression:: An alternative when crosspost handling fails.
3041 @end menu 2514 @end menu
3042 2515
3043 2516
3044 @node Summary Buffer Format 2517 @node Summary Buffer Format
3045 @section Summary Buffer Format 2518 @section Summary Buffer Format
3073 @subsection Summary Buffer Lines 2546 @subsection Summary Buffer Lines
3074 2547
3075 @vindex gnus-summary-line-format 2548 @vindex gnus-summary-line-format
3076 You can change the format of the lines in the summary buffer by changing 2549 You can change the format of the lines in the summary buffer by changing
3077 the @code{gnus-summary-line-format} variable. It works along the same 2550 the @code{gnus-summary-line-format} variable. It works along the same
3078 lines a a normal @code{format} string, with some extensions 2551 lines a a normal @code{format} string, with some extensions.
3079 (@pxref{Formatting Variables}).
3080 2552
3081 The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}. 2553 The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.
3082 2554
3083 The following format specification characters are understood: 2555 The following format specification characters are understood:
3084 2556
3086 @item N 2558 @item N
3087 Article number. 2559 Article number.
3088 @item S 2560 @item S
3089 Subject string. 2561 Subject string.
3090 @item s 2562 @item s
3091 Subject if the article is the root or the previous article had a 2563 Subject if the article is the root, @code{gnus-summary-same-subject}
3092 different subject, @code{gnus-summary-same-subject} otherwise. 2564 otherwise.
3093 (@code{gnus-summary-same-subject} defaults to @samp{}.)
3094 @item F 2565 @item F
3095 Full @code{From} header. 2566 Full @code{From} line.
3096 @item n 2567 @item n
3097 The name (from the @code{From} header). 2568 The name (from the @code{From} header).
3098 @item a 2569 @item a
3099 The name (from the @code{From} header). This differs from the @code{n} 2570 The name (from the @code{From} header). This differs from the @code{n}
3100 spec in that it uses the function designated by the 2571 spec in that it uses @code{gnus-extract-address-components}, which is
3101 @code{gnus-extract-address-components} variable, which is slower, but 2572 slower, but may be more thorough.
3102 may be more thorough.
3103 @item A 2573 @item A
3104 The address (from the @code{From} header). This works the same way as 2574 The address (from the @code{From} header). This works the same way as
3105 the @code{a} spec. 2575 the @code{a} spec.
3106 @item L 2576 @item L
3107 Number of lines in the article. 2577 Number of lines in the article.
3110 @item I 2580 @item I
3111 Indentation based on thread level (@pxref{Customizing Threading}). 2581 Indentation based on thread level (@pxref{Customizing Threading}).
3112 @item T 2582 @item T
3113 Nothing if the article is a root and lots of spaces if it isn't (it 2583 Nothing if the article is a root and lots of spaces if it isn't (it
3114 pushes everything after it off the screen). 2584 pushes everything after it off the screen).
3115 @item [ 2585 @item \[
3116 Opening bracket, which is normally @samp{[}, but can also be @samp{<} 2586 Opening bracket, which is normally @samp{\[}, but can also be @samp{<}
3117 for adopted articles (@pxref{Customizing Threading}). 2587 for adopted articles.
3118 @item ] 2588 @item \]
3119 Closing bracket, which is normally @samp{]}, but can also be @samp{>} 2589 Closing bracket, which is normally @samp{\]}, but can also be @samp{>}
3120 for adopted articles. 2590 for adopted articles.
3121 @item > 2591 @item >
3122 One space for each thread level. 2592 One space for each thread level.
3123 @item < 2593 @item <
3124 Twenty minus thread level spaces. 2594 Twenty minus thread level spaces.
3138 Total thread score. 2608 Total thread score.
3139 @item x 2609 @item x
3140 @code{Xref}. 2610 @code{Xref}.
3141 @item D 2611 @item D
3142 @code{Date}. 2612 @code{Date}.
3143 @item d
3144 The @code{Date} in @code{DD-MMM} format.
3145 @item o
3146 The @code{Date} in @code{YYYYMMDDTHHMMSS} format.
3147 @item M 2613 @item M
3148 @code{Message-ID}. 2614 @code{Message-ID}.
3149 @item r 2615 @item r
3150 @code{References}. 2616 @code{References}.
3151 @item t 2617 @item t
3152 Number of articles in the current sub-thread. Using this spec will slow 2618 Number of articles in the current sub-thread. Using this spec will slow
3153 down summary buffer generation somewhat. 2619 down summary buffer generation somewhat.
3154 @item e 2620 @item e
3155 An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the 2621 A single character will be displayed if the article has any children.
3156 article has any children.
3157 @item P
3158 The line number.
3159 @item u 2622 @item u
3160 User defined specifier. The next character in the format string should 2623 User defined specifier. The next character in the format string should
3161 be a letter. @sc{gnus} will call the function 2624 be a letter. @sc{gnus} will call the function
3162 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter 2625 @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
3163 following @samp{%u}. The function will be passed the current header as 2626 following @samp{%u}. The function will be passed the current header as
3181 @node Summary Buffer Mode Line 2644 @node Summary Buffer Mode Line
3182 @subsection Summary Buffer Mode Line 2645 @subsection Summary Buffer Mode Line
3183 2646
3184 @vindex gnus-summary-mode-line-format 2647 @vindex gnus-summary-mode-line-format
3185 You can also change the format of the summary mode bar. Set 2648 You can also change the format of the summary mode bar. Set
3186 @code{gnus-summary-mode-line-format} to whatever you like. The default 2649 @code{gnus-summary-mode-line-format} to whatever you like. Here are the
3187 is @samp{Gnus: %%b [%A] %Z}. 2650 elements you can play with:
3188
3189 Here are the elements you can play with:
3190 2651
3191 @table @samp 2652 @table @samp
3192 @item G 2653 @item G
3193 Group name. 2654 Group name.
3194 @item p 2655 @item p
3201 Number of unread articles in this group. 2662 Number of unread articles in this group.
3202 @item e 2663 @item e
3203 Number of unselected articles in this group. 2664 Number of unselected articles in this group.
3204 @item Z 2665 @item Z
3205 A string with the number of unread and unselected articles represented 2666 A string with the number of unread and unselected articles represented
3206 either as @samp{<%U(+%e) more>} if there are both unread and unselected 2667 either as @samp{<%U(+%u) more>} if there are both unread and unselected
3207 articles, and just as @samp{<%U more>} if there are just unread articles 2668 articles, and just as @samp{<%U more>} if there are just unread articles
3208 and no unselected ones. 2669 and no unselected ones.
3209 @item g 2670 @item g
3210 Shortish group name. For instance, @samp{rec.arts.anime} will be 2671 Shortish group name. For instance, @samp{rec.arts.anime} will be
3211 shortened to @samp{r.a.anime}. 2672 shortened to @samp{r.a.anime}.
3212 @item S 2673 @item S
3213 Subject of the current article. 2674 Subject of the current article.
3214 @item u 2675 @item u
3215 User-defined spec. 2676 Used-defined spec.
3216 @item s 2677 @item s
3217 Name of the current score file. 2678 Name of the current score file.
3218 @item d 2679 @item d
3219 Number of dormant articles. 2680 Number of dormant articles.
3220 @item t 2681 @item t
3248 highlight the current article in the summary buffer. 2709 highlight the current article in the summary buffer.
3249 2710
3250 @item gnus-summary-highlight 2711 @item gnus-summary-highlight
3251 @vindex gnus-summary-highlight 2712 @vindex gnus-summary-highlight
3252 Summary lines are highlighted according to this variable, which is a 2713 Summary lines are highlighted according to this variable, which is a
3253 list where the elements are on the format @var{(FORM . FACE)}. If you 2714 list where the elements are on the format @code{(FORM . FACE)}. If you
3254 would, for instance, like ticked articles to be italic and high-scored 2715 would, for instance, like ticked articles to be italic and high-scored
3255 articles to be bold, you could set this variable to something like 2716 articles to be bold, you could set this variable to something like
3256 @lisp 2717 @lisp
3257 (((eq mark gnus-ticked-mark) . italic) 2718 (((eq mark gnus-ticked-mark) . italic)
3258 ((> score default) . bold)) 2719 ((> score default) . bold))
3291 @item G j 2752 @item G j
3292 @itemx j 2753 @itemx j
3293 @kindex j (Summary) 2754 @kindex j (Summary)
3294 @kindex G j (Summary) 2755 @kindex G j (Summary)
3295 @findex gnus-summary-goto-article 2756 @findex gnus-summary-goto-article
3296 Ask for an article number and then go to that article 2757 Ask for an article number and then go that article
3297 (@code{gnus-summary-goto-article}). 2758 (@code{gnus-summary-goto-article}).
3298 2759
3299 @item G g 2760 @item G g
3300 @kindex G g (Summary) 2761 @kindex G g (Summary)
3301 @findex gnus-summary-goto-subject 2762 @findex gnus-summary-goto-subject
3302 Ask for an article number and then go the summary line of that article 2763 Ask for an article number and then go the summary line of that article
3303 without displaying the article (@code{gnus-summary-goto-subject}). 2764 (@code{gnus-summary-goto-subject}).
3304 @end table 2765 @end table
3305 2766
3306 If Gnus asks you to press a key to confirm going to the next group, you 2767 If Gnus asks you to press a key to confirm going to the next group, you
3307 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group 2768 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
3308 buffer, searching for the next group to read without actually returning 2769 buffer, searching for the next group to read without actually returning
3312 2773
3313 @table @code 2774 @table @code
3314 2775
3315 @vindex gnus-auto-select-next 2776 @vindex gnus-auto-select-next
3316 @item gnus-auto-select-next 2777 @item gnus-auto-select-next
3317 If you issue one of the movement commands (like @kbd{n}) and there are 2778 If you are at the end of the group and issue one of the movement
3318 no more unread articles after the current one, Gnus will offer to go to 2779 commands, Gnus will offer to go to the next group. If this variable is
3319 the next group. If this variable is @code{t} and the next group is 2780 @code{t} and the next group is empty, Gnus will exit summary mode and
3320 empty, Gnus will exit summary mode and return to the group buffer. If 2781 return to the group buffer. If this variable is neither @code{t} nor
3321 this variable is neither @code{t} nor @code{nil}, Gnus will select the 2782 @code{nil}, Gnus will select the next group, no matter whether it has
3322 next group, no matter whether it has any unread articles or not. As a 2783 any unread articles or not. As a special case, if this variable is
3323 special case, if this variable is @code{quietly}, Gnus will select the 2784 @code{quietly}, Gnus will select the next group without asking for
3324 next group without asking for confirmation. If this variable is 2785 confirmation. If this variable is @code{almost-quietly}, the same will
3325 @code{almost-quietly}, the same will happen only if you are located on 2786 happen only if you are located on the last article in the group.
3326 the last article in the group. Finally, if this variable is 2787 Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
3327 @code{slightly-quietly}, the @kbd{Z n} command will go to the next group 2788 command will go to the next group without confirmation. Also
3328 without confirmation. Also @pxref{Group Levels}. 2789 @pxref{Group Levels}.
3329 2790
3330 @item gnus-auto-select-same 2791 @item gnus-auto-select-same
3331 @vindex gnus-auto-select-same 2792 @vindex gnus-auto-select-same
3332 If non-@code{nil}, all the movement commands will try to go to the next 2793 If non-@code{nil}, all the movement commands will try to go to the next
3333 article with the same subject as the current. (@dfn{Same} here might 2794 article with the same subject as the current. (@dfn{Same} here might
3356 2817
3357 @node Choosing Articles 2818 @node Choosing Articles
3358 @section Choosing Articles 2819 @section Choosing Articles
3359 @cindex selecting articles 2820 @cindex selecting articles
3360 2821
3361 @menu
3362 * Choosing Commands:: Commands for choosing articles.
3363 * Choosing Variables:: Variables that influence these commands.
3364 @end menu
3365
3366
3367 @node Choosing Commands
3368 @subsection Choosing Commands
3369
3370 None of the following movement commands understand the numeric prefix, 2822 None of the following movement commands understand the numeric prefix,
3371 and they all select and display an article. 2823 and they all select and display an article.
3372 2824
3373 @table @kbd 2825 @table @kbd
3374 @item SPACE 2826 @item SPACE
3445 Pop an article off the summary history and go to this article 2897 Pop an article off the summary history and go to this article
3446 (@code{gnus-summary-pop-article}). This command differs from the 2898 (@code{gnus-summary-pop-article}). This command differs from the
3447 command above in that you can pop as many previous articles off the 2899 command above in that you can pop as many previous articles off the
3448 history as you like. 2900 history as you like.
3449 @end table 2901 @end table
3450
3451
3452 @node Choosing Variables
3453 @subsection Choosing Variables
3454 2902
3455 Some variables that are relevant for moving and selecting articles: 2903 Some variables that are relevant for moving and selecting articles:
3456 2904
3457 @table @code 2905 @table @code
3458 @item gnus-auto-extend-newsgroup 2906 @item gnus-auto-extend-newsgroup
3533 @kindex A > (Summary) 2981 @kindex A > (Summary)
3534 @findex gnus-summary-end-of-article 2982 @findex gnus-summary-end-of-article
3535 Scroll to the end of the article (@code{gnus-summary-end-of-article}). 2983 Scroll to the end of the article (@code{gnus-summary-end-of-article}).
3536 2984
3537 @item A s 2985 @item A s
3538 @itemx s
3539 @kindex A s (Summary) 2986 @kindex A s (Summary)
3540 @kindex s (Summary)
3541 @findex gnus-summary-isearch-article 2987 @findex gnus-summary-isearch-article
3542 Perform an isearch in the article buffer 2988 Perform an isearch in the article buffer
3543 (@code{gnus-summary-isearch-article}). 2989 (@code{gnus-summary-isearch-article}).
3544 2990
3545 @end table 2991 @end table
3578 @findex gnus-summary-reply-with-original 3024 @findex gnus-summary-reply-with-original
3579 Mail a reply to the author of the current article and include the 3025 Mail a reply to the author of the current article and include the
3580 original message (@code{gnus-summary-reply-with-original}). This 3026 original message (@code{gnus-summary-reply-with-original}). This
3581 command uses the process/prefix convention. 3027 command uses the process/prefix convention.
3582 3028
3583 @item S w
3584 @kindex S w (Summary)
3585 @findex gnus-summary-wide-reply
3586 Mail a wide reply to the author of the current article
3587 (@code{gnus-summary-wide-reply}).
3588
3589 @item S W
3590 @kindex S W (Summary)
3591 @findex gnus-summary-wide-reply-with-original
3592 Mail a wide reply to the current article and include the original
3593 message (@code{gnus-summary-reply-with-original}). This command uses
3594 the process/prefix convention.
3595
3596 @item S o m 3029 @item S o m
3597 @kindex S o m (Summary) 3030 @kindex S o m (Summary)
3598 @findex gnus-summary-mail-forward 3031 @findex gnus-summary-mail-forward
3599 Forward the current article to some other person 3032 Forward the current article to some other person
3600 (@code{gnus-summary-mail-forward}). If given a prefix, include the full 3033 (@code{gnus-summary-mail-forward}).
3601 headers of the forwarded article. 3034
3035 @item S o p
3036 @kindex S o p (Summary)
3037 @findex gnus-summary-post-forward
3038 Forward the current article to a newsgroup
3039 (@code{gnus-summary-post-forward}).
3602 3040
3603 @item S m 3041 @item S m
3604 @itemx m 3042 @itemx m
3605 @kindex m (Summary) 3043 @kindex m (Summary)
3606 @kindex S m (Summary) 3044 @kindex S m (Summary)
3635 3073
3636 This command is mainly used if you have several accounts and want to 3074 This command is mainly used if you have several accounts and want to
3637 ship a mail to a different account of yours. (If you're both 3075 ship a mail to a different account of yours. (If you're both
3638 @code{root} and @code{postmaster} and get a mail for @code{postmaster} 3076 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
3639 to the @code{root} account, you may want to resend it to 3077 to the @code{root} account, you may want to resend it to
3640 @code{postmaster}. Ordnung muß sein! 3078 @code{postmaster}. Ordnung muss sein!
3641
3642 This command understands the process/prefix convention
3643 (@pxref{Process/Prefix}).
3644 3079
3645 @item S O m 3080 @item S O m
3646 @kindex S O m (Summary) 3081 @kindex S O m (Summary)
3647 @findex gnus-uu-digest-mail-forward 3082 @findex gnus-uu-digest-mail-forward
3648 Digest the current series and forward the result using mail 3083 Digest the current series and forward the result using mail
3649 (@code{gnus-uu-digest-mail-forward}). This command uses the 3084 (@code{gnus-uu-digest-mail-forward}). This command uses the
3650 process/prefix convention (@pxref{Process/Prefix}). 3085 process/prefix convention (@pxref{Process/Prefix}).
3651 3086
3652 @item S M-c 3087 @item S O p
3653 @kindex S M-c (Summary) 3088 @kindex S O p (Summary)
3654 @findex gnus-summary-mail-crosspost-complaint 3089 @findex gnus-uu-digest-post-forward
3655 @cindex crossposting 3090 Digest the current series and forward the result to a newsgroup
3656 @cindex excessive crossposting 3091 (@code{gnus-uu-digest-mail-forward}).
3657 Send a complaint about excessive crossposting to the author of the
3658 current article (@code{gnus-summary-mail-crosspost-complaint}).
3659
3660 @findex gnus-crosspost-complaint
3661 This command is provided as a way to fight back agains the current
3662 crossposting pandemic that's sweeping Usenet. It will compose a reply
3663 using the @code{gnus-crosspost-complaint} variable as a preamble. This
3664 command understands the process/prefix convention
3665 (@pxref{Process/Prefix}) and will prompt you before sending each mail.
3666
3667 @end table 3092 @end table
3668 3093
3669 3094
3670 @node Summary Post Commands 3095 @node Summary Post Commands
3671 @subsection Summary Post Commands 3096 @subsection Summary Post Commands
3672 @cindex post 3097 @cindex post
3673 @cindex composing news 3098 @cindex composing news
3674 3099
3675 Commands for posting a news article: 3100 Commands for posting an article:
3676 3101
3677 @table @kbd 3102 @table @kbd
3678 @item S p 3103 @item S p
3679 @itemx a 3104 @itemx a
3680 @kindex a (Summary) 3105 @kindex a (Summary)
3697 @findex gnus-summary-followup-with-original 3122 @findex gnus-summary-followup-with-original
3698 Post a followup to the current article and include the original message 3123 Post a followup to the current article and include the original message
3699 (@code{gnus-summary-followup-with-original}). This command uses the 3124 (@code{gnus-summary-followup-with-original}). This command uses the
3700 process/prefix convention. 3125 process/prefix convention.
3701 3126
3702 @item S n
3703 @kindex S n (Summary)
3704 @findex gnus-summary-followup-to-mail
3705 Post a followup to the current article via news, even if you got the
3706 message through mail (@code{gnus-summary-followup-to-mail}).
3707
3708 @item S n
3709 @kindex S n (Summary)
3710 @findex gnus-summary-followup-to-mail
3711 Post a followup to the current article via news, even if you got the
3712 message through mail and include the original message
3713 (@code{gnus-summary-followup-to-mail-with-original}). This command uses
3714 the process/prefix convention.
3715
3716 @item S o p
3717 @kindex S o p (Summary)
3718 @findex gnus-summary-post-forward
3719 Forward the current article to a newsgroup
3720 (@code{gnus-summary-post-forward}). If given a prefix, include the full
3721 headers of the forwarded article.
3722
3723 @item S O p
3724 @kindex S O p (Summary)
3725 @findex gnus-uu-digest-post-forward
3726 Digest the current series and forward the result to a newsgroup
3727 (@code{gnus-uu-digest-mail-forward}).
3728
3729 @item S u 3127 @item S u
3730 @kindex S u (Summary) 3128 @kindex S u (Summary)
3731 @findex gnus-uu-post-news 3129 @findex gnus-uu-post-news
3732 Uuencode a file, split it into parts, and post it as a series 3130 Uuencode a file, split it into parts, and post it as a series
3733 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}). 3131 (@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
3771 have posted almost the same article twice. 3169 have posted almost the same article twice.
3772 3170
3773 If you have just posted the article, and change your mind right away, 3171 If you have just posted the article, and change your mind right away,
3774 there is a trick you can use to cancel/supersede the article without 3172 there is a trick you can use to cancel/supersede the article without
3775 waiting for the article to appear on your site first. You simply return 3173 waiting for the article to appear on your site first. You simply return
3776 to the post buffer (which is called @code{*sent ...*}). There you will 3174 to the post buffer (which is called @code{*post-buf*}). There you will
3777 find the article you just posted, with all the headers intact. Change 3175 find the article you just posted, with all the headers intact. Change
3778 the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes} 3176 the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
3779 header by substituting one of those words for the word 3177 header by substituting one of those words for @code{Message-ID}. Then
3780 @code{Message-ID}. Then just press @kbd{C-c C-c} to send the article as 3178 just press @kbd{C-c C-c} to send the article as you would do normally.
3781 you would do normally. The previous article will be 3179 The previous article will be canceled/superseded.
3782 canceled/superseded.
3783 3180
3784 Just remember, kids: There is no 'c' in 'supersede'. 3181 Just remember, kids: There is no 'c' in 'supersede'.
3785 3182
3786 3183
3787 @node Marking Articles 3184 @node Marking Articles
3815 3212
3816 3213
3817 @node Unread Articles 3214 @node Unread Articles
3818 @subsection Unread Articles 3215 @subsection Unread Articles
3819 3216
3820 The following marks mark articles as (kinda) unread, in one form or 3217 The following marks mark articles as unread, in one form or other.
3821 other. 3218
3822 3219 @vindex gnus-dormant-mark
3220 @vindex gnus-ticked-mark
3823 @table @samp 3221 @table @samp
3824 @item ! 3222 @item !
3825 @vindex gnus-ticked-mark
3826 Marked as ticked (@code{gnus-ticked-mark}).
3827
3828 @dfn{Ticked articles} are articles that will remain visible always. If 3223 @dfn{Ticked articles} are articles that will remain visible always. If
3829 you see an article that you find interesting, or you want to put off 3224 you see an article that you find interesting, or you want to put off
3830 reading it, or replying to it, until sometime later, you'd typically 3225 reading it, or replying to it, until sometime later, you'd typically
3831 tick it. However, articles can be expired, so if you want to keep an 3226 tick it. However, articles can be expired, so if you want to keep an
3832 article forever, you'll have to make it persistent (@pxref{Persistent 3227 article forever, you'll have to save it. Ticked articles have a
3833 Articles}). 3228 @samp{!} (@code{gnus-ticked-mark}) in the first column.
3834 3229
3835 @item ? 3230 @item ?
3836 @vindex gnus-dormant-mark 3231 @vindex gnus-dormant-mark
3837 Marked as dormant (@code{gnus-dormant-mark}). 3232 A @dfn{dormant} article is marked with a @samp{?}
3838 3233 (@code{gnus-dormant-mark}), and will only appear in the summary buffer
3839 @dfn{Dormant articles} will only appear in the summary buffer if there 3234 if there are followups to it.
3840 are followups to it.
3841 3235
3842 @item SPACE 3236 @item SPACE
3843 @vindex gnus-unread-mark 3237 @vindex gnus-unread-mark
3844 Markes as unread (@code{gnus-unread-mark}). 3238 An @dfn{unread} article is marked with a @samp{SPACE}
3845 3239 (@code{gnus-unread-mark}). These are articles that haven't been read at
3846 @dfn{Unread articles} are articles that haven't been read at all yet. 3240 all yet.
3847 @end table 3241 @end table
3848 3242
3849 3243
3850 @node Read Articles 3244 @node Read Articles
3851 @subsection Read Articles 3245 @subsection Read Articles
3855 3249
3856 @table @samp 3250 @table @samp
3857 3251
3858 @item r 3252 @item r
3859 @vindex gnus-del-mark 3253 @vindex gnus-del-mark
3860 These are articles that the user has marked as read with the @kbd{d} 3254 Articles that are marked as read. They have a @samp{r}
3861 command manually, more or less (@code{gnus-del-mark}). 3255 (@code{gnus-del-mark}) in the first column. These are articles that the
3256 user has marked as read more or less manually.
3862 3257
3863 @item R 3258 @item R
3864 @vindex gnus-read-mark 3259 @vindex gnus-read-mark
3865 Articles that have actually been read (@code{gnus-read-mark}). 3260 Articles that are actually read are marked with @samp{R}
3261 (@code{gnus-read-mark}).
3866 3262
3867 @item O 3263 @item O
3868 @vindex gnus-ancient-mark 3264 @vindex gnus-ancient-mark
3869 Articles that were marked as read in previous sessions and are now 3265 Articles that were marked as read in previous sessions are now
3870 @dfn{old} (@code{gnus-ancient-mark}). 3266 @dfn{old} and marked with @samp{O} (@code{gnus-ancient-mark}).
3871 3267
3872 @item K 3268 @item K
3873 @vindex gnus-killed-mark 3269 @vindex gnus-killed-mark
3874 Marked as killed (@code{gnus-killed-mark}). 3270 Marked as killed (@code{gnus-killed-mark}).
3875 3271
3889 @vindex gnus-canceled-mark 3285 @vindex gnus-canceled-mark
3890 Canceled article (@code{gnus-canceled-mark}) 3286 Canceled article (@code{gnus-canceled-mark})
3891 3287
3892 @item F 3288 @item F
3893 @vindex gnus-souped-mark 3289 @vindex gnus-souped-mark
3894 @sc{SOUP}ed article (@code{gnus-souped-mark}). @xref{SOUP}. 3290 @sc{SOUP}ed article (@code{gnus-souped-mark}).
3895 3291
3896 @item Q 3292 @item Q
3897 @vindex gnus-sparse-mark 3293 @vindex gnus-sparse-mark
3898 Sparsely reffed article (@code{gnus-sparse-mark}). @xref{Customizing 3294 Sparsely reffed article (@code{gnus-sparse-mark}).
3899 Threading}.
3900
3901 @item M
3902 @vindex gnus-duplicate-mark
3903 Article marked as read by duplicate suppression
3904 (@code{gnus-duplicated-mark}). @xref{Duplicate Suppression}.
3905
3906 @end table 3295 @end table
3907 3296
3908 All these marks just mean that the article is marked as read, really. 3297 All these marks just mean that the article is marked as read, really.
3909 They are interpreted differently when doing adaptive scoring, though. 3298 They are interpreted differently by the adaptive scoring scheme,
3299 however.
3910 3300
3911 One more special mark, though: 3301 One more special mark, though:
3912 3302
3913 @table @samp 3303 @table @samp
3914 @item E 3304 @item E
3915 @vindex gnus-expirable-mark 3305 @vindex gnus-expirable-mark
3916 Marked as expirable (@code{gnus-expirable-mark}). 3306 You can also mark articles as @dfn{expirable} (or have them marked as
3917 3307 such automatically). That doesn't make much sense in normal groups,
3918 Marking articles as @dfn{expirable} (or have them marked as such 3308 because a user does not control the expiring of news articles, but in
3919 automatically) doesn't make much sense in normal groups---a user doesn't 3309 mail groups, for instance, articles that are marked as @dfn{expirable}
3920 control the expiring of news articles, but in mail groups, for instance, 3310 can be deleted by Gnus at any time. Expirable articles are marked with
3921 articles that are marked as @dfn{expirable} can be deleted by Gnus at 3311 @samp{E} (@code{gnus-expirable-mark}).
3922 any time.
3923 @end table 3312 @end table
3924 3313
3925 3314
3926 @node Other Marks 3315 @node Other Marks
3927 @subsection Other Marks 3316 @subsection Other Marks
3936 @item 3325 @item
3937 You can set a bookmark in the current article. Say you are reading a 3326 You can set a bookmark in the current article. Say you are reading a
3938 long thesis on cats' urinary tracts, and have to go home for dinner 3327 long thesis on cats' urinary tracts, and have to go home for dinner
3939 before you've finished reading the thesis. You can then set a bookmark 3328 before you've finished reading the thesis. You can then set a bookmark
3940 in the article, and Gnus will jump to this bookmark the next time it 3329 in the article, and Gnus will jump to this bookmark the next time it
3941 encounters the article. @xref{Setting Marks} 3330 encounters the article.
3942 3331
3943 @item 3332 @item
3944 @vindex gnus-replied-mark 3333 @vindex gnus-replied-mark
3945 All articles that you have replied to or made a followup to (i.e., have 3334 All articles that you have replied to or made a followup to (i.e., have
3946 answered) will be marked with an @samp{A} in the second column 3335 answered) will be marked with an @samp{A} in the second column
4010 @kindex M d (Summary) 3399 @kindex M d (Summary)
4011 @kindex d (Summary) 3400 @kindex d (Summary)
4012 @findex gnus-summary-mark-as-read-forward 3401 @findex gnus-summary-mark-as-read-forward
4013 Mark the current article as read 3402 Mark the current article as read
4014 (@code{gnus-summary-mark-as-read-forward}). 3403 (@code{gnus-summary-mark-as-read-forward}).
4015
4016 @item D
4017 @kindex D (Summary)
4018 @findex gnus-summary-mark-as-read-backward
4019 Mark the current article as read and move point to the previous line
4020 (@code{gnus-summary-mark-as-read-backward}).
4021 3404
4022 @item M k 3405 @item M k
4023 @itemx k 3406 @itemx k
4024 @kindex k (Summary) 3407 @kindex k (Summary)
4025 @kindex M k (Summary) 3408 @kindex M k (Summary)
4037 (@code{gnus-summary-kill-same-subject}). 3420 (@code{gnus-summary-kill-same-subject}).
4038 3421
4039 @item M C 3422 @item M C
4040 @kindex M C (Summary) 3423 @kindex M C (Summary)
4041 @findex gnus-summary-catchup 3424 @findex gnus-summary-catchup
4042 Mark all unread articles as read (@code{gnus-summary-catchup}). 3425 Mark all unread articles in the group as read
3426 (@code{gnus-summary-catchup}).
4043 3427
4044 @item M C-c 3428 @item M C-c
4045 @kindex M C-c (Summary) 3429 @kindex M C-c (Summary)
4046 @findex gnus-summary-catchup-all 3430 @findex gnus-summary-catchup-all
4047 Mark all articles in the group as read---even the ticked and dormant 3431 Mark all articles in the group as read---even the ticked and dormant
4149 @kindex M P U (Summary) 3533 @kindex M P U (Summary)
4150 @findex gnus-summary-unmark-all-processable 3534 @findex gnus-summary-unmark-all-processable
4151 Remove the process mark from all articles 3535 Remove the process mark from all articles
4152 (@code{gnus-summary-unmark-all-processable}). 3536 (@code{gnus-summary-unmark-all-processable}).
4153 3537
4154 @item M P i
4155 @kindex M P i (Summary)
4156 @findex gnus-uu-invert-processable
4157 Invert the list of process marked articles
4158 (@code{gnus-uu-invert-processable}).
4159
4160 @item M P R 3538 @item M P R
4161 @kindex M P R (Summary) 3539 @kindex M P R (Summary)
4162 @findex gnus-uu-mark-by-regexp 3540 @findex gnus-uu-mark-by-regexp
4163 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}). 3541 Mark articles by a regular expression (@code{gnus-uu-mark-by-regexp}).
4164 3542
4204 @item M P b 3582 @item M P b
4205 @kindex M P b (Summary) 3583 @kindex M P b (Summary)
4206 @findex gnus-uu-mark-buffer 3584 @findex gnus-uu-mark-buffer
4207 Mark all articles in the buffer in the order they appear 3585 Mark all articles in the buffer in the order they appear
4208 (@code{gnus-uu-mark-buffer}). 3586 (@code{gnus-uu-mark-buffer}).
4209
4210 @item M P k
4211 @kindex M P k (Summary)
4212 @findex gnus-summary-kill-process-mark
4213 Push the current process mark set onto the stack and unmark all articles
4214 (@code{gnus-summary-kill-process-mark}).
4215
4216 @item M P y
4217 @kindex M P y (Summary)
4218 @findex gnus-summary-yank-process-mark
4219 Pop the previous process mark set from the stack and restore it
4220 (@code{gnus-summary-yank-process-mark}).
4221
4222 @item M P w
4223 @kindex M P w (Summary)
4224 @findex gnus-summary-save-process-mark
4225 Push the current process mark set onto the stack
4226 (@code{gnus-summary-save-process-mark}).
4227
4228 @end table 3587 @end table
4229 3588
4230 3589
4231 @node Limiting 3590 @node Limiting
4232 @section Limiting 3591 @section Limiting
4266 @kindex / m (Summary) 3625 @kindex / m (Summary)
4267 @findex gnus-summary-limit-to-marks 3626 @findex gnus-summary-limit-to-marks
4268 Ask for a mark and then limit to all articles that have not been marked 3627 Ask for a mark and then limit to all articles that have not been marked
4269 with that mark (@code{gnus-summary-limit-to-marks}). 3628 with that mark (@code{gnus-summary-limit-to-marks}).
4270 3629
4271 @item / t
4272 @kindex / t (Summary)
4273 @findex gnus-summary-limit-to-age
4274 Ask for a number and then limit the summary buffer to articles that are
4275 older than (or equal to) that number of days
4276 (@code{gnus-summary-limit-to-marks}). If given a prefix, limit to
4277 articles that are younger than that number of days.
4278
4279 @item / n 3630 @item / n
4280 @kindex / n (Summary) 3631 @kindex / n (Summary)
4281 @findex gnus-summary-limit-to-articles 3632 @findex gnus-summary-limit-to-articles
4282 Limit the summary buffer to the current article 3633 Limit the summary buffer to the current article
4283 (@code{gnus-summary-limit-to-articles}). Uses the process/prefix 3634 (@code{gnus-summary-limit-to-articles}). Uses the process/prefix
4333 @node Threading 3684 @node Threading
4334 @section Threading 3685 @section Threading
4335 @cindex threading 3686 @cindex threading
4336 @cindex article threading 3687 @cindex article threading
4337 3688
4338 Gnus threads articles by default. @dfn{To thread} is to put responses 3689 Gnus threads articles by default. @dfn{To thread} is to put replies to
4339 to articles directly after the articles they respond to---in a 3690 articles directly after the articles they reply to---in a hierarchical
4340 hierarchical fashion. 3691 fashion.
4341 3692
4342 @menu 3693 @menu
4343 * Customizing Threading:: Variables you can change to affect the threading. 3694 * Customizing Threading:: Variables you can change to affect the threading.
4344 * Thread Commands:: Thread based commands in the summary buffer. 3695 * Thread Commands:: Thread based commands in the summary buffer.
4345 @end menu 3696 @end menu
4400 variable to a really low number, you'll find that Gnus will gather 3751 variable to a really low number, you'll find that Gnus will gather
4401 everything in sight into one thread, which isn't very helpful. 3752 everything in sight into one thread, which isn't very helpful.
4402 3753
4403 @cindex fuzzy article gathering 3754 @cindex fuzzy article gathering
4404 If you set this variable to the special value @code{fuzzy}, Gnus will 3755 If you set this variable to the special value @code{fuzzy}, Gnus will
4405 use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy 3756 use a fuzzy string comparison algorithm on the subjects.
4406 Matching}).
4407 3757
4408 @item gnus-simplify-subject-fuzzy-regexp 3758 @item gnus-simplify-subject-fuzzy-regexp
4409 @vindex gnus-simplify-subject-fuzzy-regexp 3759 @vindex gnus-simplify-subject-fuzzy-regexp
4410 This can either be a regular expression or list of regular expressions 3760 This can either be a regular expression or list of regular expressions
4411 that match strings that will be removed from subjects if fuzzy subject 3761 that match strings that will be removed from subjects if fuzzy subject
4419 @c Written by Michael Ernst <mernst@cs.rice.edu> 3769 @c Written by Michael Ernst <mernst@cs.rice.edu>
4420 @lisp 3770 @lisp
4421 (setq gnus-simplify-ignored-prefixes 3771 (setq gnus-simplify-ignored-prefixes
4422 (concat 3772 (concat
4423 "\\`\\[?\\(" 3773 "\\`\\[?\\("
4424 (mapconcat
4425 'identity
4426 '("looking"
4427 "wanted" "followup" "summary\\( of\\)?"
4428 "help" "query" "problem" "question"
4429 "answer" "reference" "announce"
4430 "How can I" "How to" "Comparison of"
4431 ;; ...
4432 )
4433 "\\|")
4434 "\\)\\s *\\("
4435 (mapconcat 'identity 3774 (mapconcat 'identity
4436 '("for" "for reference" "with" "about") 3775 '("looking"
3776 "wanted" "followup" "summary\\( of\\)?"
3777 "help" "query" "problem" "question"
3778 "answer" "reference" "announce"
3779 "How can I" "How to" "Comparison of"
3780 ;; ...
3781 )
4437 "\\|") 3782 "\\|")
4438 "\\)?\\]?:?[ \t]*")) 3783 "\\)\\s *\\("
3784 (mapconcat 'identity
3785 '("for" "for reference" "with" "about")
3786 "\\|")
3787 "\\)?\\]?:?[ \t]*"))
4439 @end lisp 3788 @end lisp
4440 3789
4441 All words that match this regexp will be removed before comparing two 3790 All words that match this regexp will be removed before comparing two
4442 subjects. 3791 subjects.
4443 3792
4527 @item gnus-thread-hide-subtree 3876 @item gnus-thread-hide-subtree
4528 @vindex gnus-thread-hide-subtree 3877 @vindex gnus-thread-hide-subtree
4529 If non-@code{nil}, all threads will be hidden when the summary buffer is 3878 If non-@code{nil}, all threads will be hidden when the summary buffer is
4530 generated. 3879 generated.
4531 3880
4532 @item gnus-thread-expunge-below
4533 @vindex gnus-thread-expunge-below
4534 All threads that have a total score (as defined by
4535 @code{gnus-thread-score-function}) less than this number will be
4536 expunged. This variable is @code{nil} by default, which means that no
4537 threads are expunged.
4538
4539 @item gnus-thread-hide-killed 3881 @item gnus-thread-hide-killed
4540 @vindex gnus-thread-hide-killed 3882 @vindex gnus-thread-hide-killed
4541 if you kill a thread and this variable is non-@code{nil}, the subtree 3883 if you kill a thread and this variable is non-@code{nil}, the subtree
4542 will be hidden. 3884 will be hidden.
4543 3885
4549 in a new thread. 3891 in a new thread.
4550 3892
4551 @item gnus-thread-indent-level 3893 @item gnus-thread-indent-level
4552 @vindex gnus-thread-indent-level 3894 @vindex gnus-thread-indent-level
4553 This is a number that says how much each sub-thread should be indented. 3895 This is a number that says how much each sub-thread should be indented.
4554 The default is 4. 3896 The default is @code{4}.
4555
4556 @item gnus-parse-headers-hook
4557 @vindex gnus-parse-headers-hook
4558 Hook run before parsing any headers. The default value is
4559 @code{(gnus-decode-rfc1522)}, which means that QPized headers will be
4560 slightly decoded in a hackish way. This is likely to change in the
4561 future when Gnus becomes @sc{MIME}ified.
4562
4563 @end table 3897 @end table
4564 3898
4565 3899
4566 @node Thread Commands 3900 @node Thread Commands
4567 @subsection Thread Commands 3901 @subsection Thread Commands
4572 @item T k 3906 @item T k
4573 @itemx M-C-k 3907 @itemx M-C-k
4574 @kindex T k (Summary) 3908 @kindex T k (Summary)
4575 @kindex M-C-k (Summary) 3909 @kindex M-C-k (Summary)
4576 @findex gnus-summary-kill-thread 3910 @findex gnus-summary-kill-thread
4577 Mark all articles in the current (sub-)thread as read 3911 Mark all articles in the current sub-thread as read
4578 (@code{gnus-summary-kill-thread}). If the prefix argument is positive, 3912 (@code{gnus-summary-kill-thread}). If the prefix argument is positive,
4579 remove all marks instead. If the prefix argument is negative, tick 3913 remove all marks instead. If the prefix argument is negative, tick
4580 articles instead. 3914 articles instead.
4581 3915
4582 @item T l 3916 @item T l
4583 @itemx M-C-l 3917 @itemx M-C-l
4584 @kindex T l (Summary) 3918 @kindex T l (Summary)
4585 @kindex M-C-l (Summary) 3919 @kindex M-C-l (Summary)
4586 @findex gnus-summary-lower-thread 3920 @findex gnus-summary-lower-thread
4587 Lower the score of the current (sub-)thread 3921 Lower the score of the current thread
4588 (@code{gnus-summary-lower-thread}). 3922 (@code{gnus-summary-lower-thread}).
4589 3923
4590 @item T i 3924 @item T i
4591 @kindex T i (Summary) 3925 @kindex T i (Summary)
4592 @findex gnus-summary-raise-thread 3926 @findex gnus-summary-raise-thread
4593 Increase the score of the current (sub-)thread 3927 Increase the score of the current thread
4594 (@code{gnus-summary-raise-thread}). 3928 (@code{gnus-summary-raise-thread}).
4595 3929
4596 @item T # 3930 @item T #
4597 @kindex T # (Summary) 3931 @kindex T # (Summary)
4598 @findex gnus-uu-mark-thread 3932 @findex gnus-uu-mark-thread
4599 Set the process mark on the current (sub-)thread 3933 Set the process mark on the current thread
4600 (@code{gnus-uu-mark-thread}). 3934 (@code{gnus-uu-mark-thread}).
4601 3935
4602 @item T M-# 3936 @item T M-#
4603 @kindex T M-# (Summary) 3937 @kindex T M-# (Summary)
4604 @findex gnus-uu-unmark-thread 3938 @findex gnus-uu-unmark-thread
4605 Remove the process mark from the current (sub-)thread 3939 Remove the process mark from the current thread
4606 (@code{gnus-uu-unmark-thread}). 3940 (@code{gnus-uu-unmark-thread}).
4607 3941
4608 @item T T 3942 @item T T
4609 @kindex T T (Summary) 3943 @kindex T T (Summary)
4610 @findex gnus-summary-toggle-threads 3944 @findex gnus-summary-toggle-threads
4611 Toggle threading (@code{gnus-summary-toggle-threads}). 3945 Toggle threading (@code{gnus-summary-toggle-threads}).
4612 3946
4613 @item T s 3947 @item T s
4614 @kindex T s (Summary) 3948 @kindex T s (Summary)
4615 @findex gnus-summary-show-thread 3949 @findex gnus-summary-show-thread
4616 Expose the (sub-)thread hidden under the current article, if any 3950 Expose the thread hidden under the current article, if any
4617 (@code{gnus-summary-show-thread}). 3951 (@code{gnus-summary-show-thread}).
4618 3952
4619 @item T h 3953 @item T h
4620 @kindex T h (Summary) 3954 @kindex T h (Summary)
4621 @findex gnus-summary-hide-thread 3955 @findex gnus-summary-hide-thread
4622 Hide the current (sub-)thread (@code{gnus-summary-hide-thread}). 3956 Hide the current (sub)thread (@code{gnus-summary-hide-thread}).
4623 3957
4624 @item T S 3958 @item T S
4625 @kindex T S (Summary) 3959 @kindex T S (Summary)
4626 @findex gnus-summary-show-all-threads 3960 @findex gnus-summary-show-all-threads
4627 Expose all hidden threads (@code{gnus-summary-show-all-threads}). 3961 Expose all hidden threads (@code{gnus-summary-show-all-threads}).
4686 you can fiddle with @code{gnus-thread-operation-ignore-subject}. If is 4020 you can fiddle with @code{gnus-thread-operation-ignore-subject}. If is
4687 is non-@code{nil} (which it is by default), subjects will be ignored 4021 is non-@code{nil} (which it is by default), subjects will be ignored
4688 when doing thread commands. If this variable is @code{nil}, articles in 4022 when doing thread commands. If this variable is @code{nil}, articles in
4689 the same thread with different subjects will not be included in the 4023 the same thread with different subjects will not be included in the
4690 operation in question. If this variable is @code{fuzzy}, only articles 4024 operation in question. If this variable is @code{fuzzy}, only articles
4691 that have subjects that are fuzzily equal will be included (@pxref{Fuzzy 4025 that have subjects that are fuzzily equal will be included.
4692 Matching}).
4693 4026
4694 4027
4695 @node Sorting 4028 @node Sorting
4696 @section Sorting 4029 @section Sorting
4697 4030
4778 4111
4779 4112
4780 @node Asynchronous Fetching 4113 @node Asynchronous Fetching
4781 @section Asynchronous Article Fetching 4114 @section Asynchronous Article Fetching
4782 @cindex asynchronous article fetching 4115 @cindex asynchronous article fetching
4783 @cindex article pre-fetch
4784 @cindex pre-fetch
4785 4116
4786 If you read your news from an @sc{nntp} server that's far away, the 4117 If you read your news from an @sc{nntp} server that's far away, the
4787 network latencies may make reading articles a chore. You have to wait 4118 network latencies may make reading articles a chore. You have to wait
4788 for a while after pressing @kbd{n} to go to the next article before the 4119 for a while after pressing @kbd{n} to go to the next article before the
4789 article appears. Why can't Gnus just go ahead and fetch the article 4120 article appears. Why can't Gnus just go ahead and fetch the article
4790 while you are reading the previous one? Why not, indeed. 4121 while you are reading the previous one? Why not, indeed.
4791 4122
4792 First, some caveats. There are some pitfalls to using asynchronous 4123 First, some caveats. There are some pitfalls to using asynchronous
4793 article fetching, especially the way Gnus does it. 4124 article fetching, especially the way Gnus does it.
4794 4125
4795 Let's say you are reading article 1, which is short, and article 2 is 4126 Let's say you are reading article 1, which is short, and article 2 is
4814 4145
4815 @vindex gnus-asynchronous 4146 @vindex gnus-asynchronous
4816 Here's how: Set @code{gnus-asynchronous} to @code{t}. The rest should 4147 Here's how: Set @code{gnus-asynchronous} to @code{t}. The rest should
4817 happen automatically. 4148 happen automatically.
4818 4149
4819 @vindex gnus-use-article-prefetch 4150 @vindex nntp-async-number
4820 You can control how many articles that are to be pre-fetched by setting 4151 You can control how many articles that are to be pre-fetched by setting
4821 @code{gnus-use-article-prefetch}. This is 30 by default, which means 4152 @code{nntp-async-number}. This is five by default, which means that when
4822 that when you read an article in the group, the backend will pre-fetch 4153 you read an article in the group, @code{nntp} will pre-fetch the next
4823 the next 30 articles. If this variable is @code{t}, the backend will 4154 five articles. If this variable is @code{t}, @code{nntp} will pre-fetch
4824 pre-fetch all the articles that it can without bound. If it is 4155 all the articles that it can without bound. If it is @code{nil}, no
4825 @code{nil}, no pre-fetching will be made. 4156 pre-fetching will be made.
4826 4157
4827 @vindex gnus-async-prefetch-article-p 4158 @vindex gnus-asynchronous-article-function
4828 @findex gnus-async-read-p 4159 You may wish to create some sort of scheme for choosing which articles
4829 There are probably some articles that you don't want to pre-fetch---read 4160 that @code{nntp} should consider as candidates for pre-fetching. For
4830 articles, for instance. Which articles to pre-fetch is controlled by 4161 instance, you may wish to pre-fetch all articles with high scores, and
4831 the @code{gnus-async-prefetch-article-p} variable. This function should 4162 not pre-fetch low-scored articles. You can do that by setting the
4832 return non-@code{nil} when the article in question is to be 4163 @code{gnus-asynchronous-article-function}, which will be called with an
4833 pre-fetched. The default is @code{gnus-async-read-p}, which returns 4164 alist where the keys are the article numbers. Your function should
4834 @code{nil} on read articles. The function is called with an article 4165 return an alist where the articles you are not interested in have been
4835 data structure as the only parameter. 4166 removed. You could also do sorting on article score and the like.
4836
4837 If, for instance, you wish to pre-fetch only unread articles that are
4838 shorter than 100 lines, you could say something like:
4839
4840 @lisp
4841 (defun my-async-short-unread-p (data)
4842 "Return non-nil for short, unread articles."
4843 (and (gnus-data-unread-p data)
4844 (< (mail-header-lines (gnus-data-header data))
4845 100)))
4846
4847 (setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
4848 @end lisp
4849
4850 These functions will be called many, many times, so they should
4851 preferrably be short and sweet to avoid slowing down Gnus too much.
4852 It's also probably a good idea to byte-compile things like this.
4853
4854 @vindex gnus-prefetched-article-deletion-strategy
4855 Articles have to be removed from the asynch buffer sooner or later. The
4856 @code{gnus-prefetched-article-deletion-strategy} says when to remove
4857 articles. This is a list that may contain the following elements:
4858
4859 @table @code
4860 @item read
4861 Remove articles when they are read.
4862
4863 @item exit
4864 Remove articles when exiting the group.
4865 @end table
4866
4867 The default value is @code{(read exit)}.
4868
4869 @vindex gnus-use-header-prefetch
4870 If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
4871 from the next group.
4872 4167
4873 4168
4874 @node Article Caching 4169 @node Article Caching
4875 @section Article Caching 4170 @section Article Caching
4876 @cindex article caching 4171 @cindex article caching
5055 @item O f 4350 @item O f
5056 @kindex O f (Summary) 4351 @kindex O f (Summary)
5057 @findex gnus-summary-save-article-file 4352 @findex gnus-summary-save-article-file
5058 Save the current article in plain file format 4353 Save the current article in plain file format
5059 (@code{gnus-summary-save-article-file}). 4354 (@code{gnus-summary-save-article-file}).
5060
5061 @item O F
5062 @kindex O F (Summary)
5063 @findex gnus-summary-write-article-file
5064 Write the current article in plain file format, overwriting any previous
5065 file contents (@code{gnus-summary-write-article-file}).
5066 4355
5067 @item O b 4356 @item O b
5068 @kindex O b (Summary) 4357 @kindex O b (Summary)
5069 @findex gnus-summary-save-article-body-file 4358 @findex gnus-summary-save-article-body-file
5070 Save the current article body in plain file format 4359 Save the current article body in plain file format
5172 4461
5173 @table @code 4462 @table @code
5174 4463
5175 @item gnus-Numeric-save-name 4464 @item gnus-Numeric-save-name
5176 @findex gnus-Numeric-save-name 4465 @findex gnus-Numeric-save-name
5177 File names like @file{~/News/Alt.andrea-dworkin/45}. 4466 Generates file names that look like @file{~/News/Alt.andrea-dworkin/45}.
5178 4467
5179 @item gnus-numeric-save-name 4468 @item gnus-numeric-save-name
5180 @findex gnus-numeric-save-name 4469 @findex gnus-numeric-save-name
5181 File names like @file{~/News/alt.andrea-dworkin/45}. 4470 Generates file names that look like @file{~/News/alt.andrea-dworkin/45}.
5182 4471
5183 @item gnus-Plain-save-name 4472 @item gnus-Plain-save-name
5184 @findex gnus-Plain-save-name 4473 @findex gnus-Plain-save-name
5185 File names like @file{~/News/Alt.andrea-dworkin}. 4474 Generates file names that look like @file{~/News/Alt.andrea-dworkin}.
5186 4475
5187 @item gnus-plain-save-name 4476 @item gnus-plain-save-name
5188 @findex gnus-plain-save-name 4477 @findex gnus-plain-save-name
5189 File names like @file{~/News/alt.andrea-dworkin}. 4478 Generates file names that look like @file{~/News/alt.andrea-dworkin}.
5190 @end table 4479 @end table
5191 4480
5192 @vindex gnus-split-methods 4481 @vindex gnus-split-methods
5193 You can have Gnus suggest where to save articles by plonking a regexp into 4482 You can have Gnus suggest where to save articles by plonking a regexp into
5194 the @code{gnus-split-methods} alist. For instance, if you would like to 4483 the @code{gnus-split-methods} alist. For instance, if you would like to
5433 @cindex sox 4722 @cindex sox
5434 This variable is consulted first when viewing files. If you wish to use, 4723 This variable is consulted first when viewing files. If you wish to use,
5435 for instance, @code{sox} to convert an @samp{.au} sound file, you could 4724 for instance, @code{sox} to convert an @samp{.au} sound file, you could
5436 say something like: 4725 say something like:
5437 @lisp 4726 @lisp
5438 (setq gnus-uu-user-view-rules 4727 (setq gnus-uu-user-view-rules
5439 (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\"))) 4728 (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
5440 @end lisp 4729 @end lisp
5441 4730
5442 @item gnus-uu-user-view-rules-end 4731 @item gnus-uu-user-view-rules-end
5443 @vindex gnus-uu-user-view-rules-end 4732 @vindex gnus-uu-user-view-rules-end
5444 This variable is consulted if Gnus couldn't make any matches from the 4733 This variable is consulted if Gnus couldn't make any matches from the
5471 4760
5472 @item gnus-uu-grab-move 4761 @item gnus-uu-grab-move
5473 @findex gnus-uu-grab-move 4762 @findex gnus-uu-grab-move
5474 Move the file (if you're using a saving function.) 4763 Move the file (if you're using a saving function.)
5475 @end table 4764 @end table
5476
5477 @item gnus-uu-be-dangerous
5478 @vindex gnus-uu-be-dangerous
5479 Specifies what to do if unusual situations arise during decoding. If
5480 @code{nil}, be as conservative as possible. If @code{t}, ignore things
5481 that didn't work, and overwrite existing files. Otherwise, ask each
5482 time.
5483 4765
5484 @item gnus-uu-ignore-files-by-name 4766 @item gnus-uu-ignore-files-by-name
5485 @vindex gnus-uu-ignore-files-by-name 4767 @vindex gnus-uu-ignore-files-by-name
5486 Files with name matching this regular expression won't be viewed. 4768 Files with name matching this regular expression won't be viewed.
5487 4769
5639 writing, so there are tons of functions and variables to make reading 4921 writing, so there are tons of functions and variables to make reading
5640 these articles easier. 4922 these articles easier.
5641 4923
5642 @menu 4924 @menu
5643 * Article Highlighting:: You want to make the article look like fruit salad. 4925 * Article Highlighting:: You want to make the article look like fruit salad.
5644 * Article Fontisizing:: Making emphasized text look niced.
5645 * Article Hiding:: You also want to make certain info go away. 4926 * Article Hiding:: You also want to make certain info go away.
5646 * Article Washing:: Lots of way-neat functions to make life better. 4927 * Article Washing:: Lots of way-neat functions to make life better.
5647 * Article Buttons:: Click on URLs, Message-IDs, addresses and the like. 4928 * Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
5648 * Article Date:: Grumble, UT! 4929 * Article Date:: Grumble, UT!
5649 * Article Signature:: What is a signature?
5650 @end menu 4930 @end menu
5651 4931
5652 4932
5653 @node Article Highlighting 4933 @node Article Highlighting
5654 @subsection Article Highlighting 4934 @subsection Article Highlighting
5739 @kindex W H s (Summary) 5019 @kindex W H s (Summary)
5740 @vindex gnus-signature-separator 5020 @vindex gnus-signature-separator
5741 @vindex gnus-signature-face 5021 @vindex gnus-signature-face
5742 @findex gnus-article-highlight-signature 5022 @findex gnus-article-highlight-signature
5743 Highlight the signature (@code{gnus-article-highlight-signature}). 5023 Highlight the signature (@code{gnus-article-highlight-signature}).
5744 Everything after @code{gnus-signature-separator} (@pxref{Article 5024 Everything after @code{gnus-signature-separator} in an article will be
5745 Signature}) in an article will be considered a signature and will be 5025 considered a signature and will be highlighted with
5746 highlighted with @code{gnus-signature-face}, which is @code{italic} by 5026 @code{gnus-signature-face}, which is @code{italic} by default.
5747 default. 5027
5748 5028 @end table
5749 @end table
5750
5751
5752 @node Article Fontisizing
5753 @subsection Article Fontisizing
5754 @cindex emphasis
5755 @cindex article emphasis
5756
5757 @findex gnus-article-emphasize
5758 @kindex W e (Summary)
5759 People commonly add emphasis to words in news articles by writing things
5760 like @samp{_this_} or @samp{*this*}. Gnus can make this look nicer by
5761 running the article through the @kbd{W e}
5762 (@code{gnus-article-emphasize}) command.
5763
5764 @vindex gnus-article-emphasis
5765 How the emphasis is computed is controlled by the
5766 @code{gnus-article-emphasis} variable. This is an alist where the first
5767 element is a regular expression to be matched. The second is a number
5768 that says what regular expression grouping used to find the entire
5769 emphasized word. The third is a number that says what regexp grouping
5770 should be displayed and highlighted. (The text between these two
5771 groupings will be hidden.) The fourth is the face used for
5772 highlighting.
5773
5774 @lisp
5775 (setq gnus-article-emphasis
5776 '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
5777 ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
5778 @end lisp
5779
5780 @vindex gnus-emphasis-underline
5781 @vindex gnus-emphasis-bold
5782 @vindex gnus-emphasis-italic
5783 @vindex gnus-emphasis-underline-bold
5784 @vindex gnus-emphasis-underline-italic
5785 @vindex gnus-emphasis-bold-italic
5786 @vindex gnus-emphasis-underline-bold-italic
5787 By default, there are seven rules, and they use the following faces:
5788 @code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
5789 @code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
5790 @code{gnus-emphasis-underline-italic},
5791 @code{gnus-emphasis-undeline-bold}, and
5792 @code{gnus-emphasis-underline-bold-italic}.
5793
5794 If you want to change these faces, you can either use @kbd{M-x
5795 customize}, or you can use @code{copy-face}. For instance, if you want
5796 to make @code{gnus-emphasis-italic} use a red face instead, you could
5797 say something like:
5798
5799 @lisp
5800 (copy-face 'red 'gnus-emphasis-italic)
5801 @end lisp
5802 5029
5803 5030
5804 @node Article Hiding 5031 @node Article Hiding
5805 @subsection Article Hiding 5032 @subsection Article Hiding
5806 @cindex article hiding 5033 @cindex article hiding
5828 (@code{gnus-article-hide-boring-headers}). @xref{Hiding Headers}. 5055 (@code{gnus-article-hide-boring-headers}). @xref{Hiding Headers}.
5829 5056
5830 @item W W s 5057 @item W W s
5831 @kindex W W s (Summary) 5058 @kindex W W s (Summary)
5832 @findex gnus-article-hide-signature 5059 @findex gnus-article-hide-signature
5833 Hide signature (@code{gnus-article-hide-signature}). @xref{Article 5060 Hide signature (@code{gnus-article-hide-signature}).
5834 Signature}.
5835 5061
5836 @item W W p 5062 @item W W p
5837 @kindex W W p (Summary) 5063 @kindex W W p (Summary)
5838 @findex gnus-article-hide-pgp 5064 @findex gnus-article-hide-pgp
5839 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). 5065 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).
5840 5066
5841 @item W W P 5067 @item W W P
5842 @kindex W W P (Summary) 5068 @kindex W W P (Summary)
5843 @findex gnus-article-hide-pem 5069 @findex gnus-article-hide-pem
5844 Hide @sc{pem} (privacy enhanced messages) gruft 5070 Hide @sc{pem} (privacy enhavnced hessages) gruft
5845 (@code{gnus-article-hide-pem}). 5071 (@code{gnus-article-hide-pem}).
5846 5072
5847 @item W W c 5073 @item W W c
5848 @kindex W W c (Summary) 5074 @kindex W W c (Summary)
5849 @findex gnus-article-hide-citation 5075 @findex gnus-article-hide-citation
5864 5090
5865 @item gnus-cited-text-button-line-format 5091 @item gnus-cited-text-button-line-format
5866 @vindex gnus-cited-text-button-line-format 5092 @vindex gnus-cited-text-button-line-format
5867 Gnus adds buttons show where the cited text has been hidden, and to 5093 Gnus adds buttons show where the cited text has been hidden, and to
5868 allow toggle hiding the text. The format of the variable is specified 5094 allow toggle hiding the text. The format of the variable is specified
5869 by this format-like variable (@pxref{Formatting Variables}). These 5095 by this format-like variable. These specs are legal:
5870 specs are legal:
5871 5096
5872 @table @samp 5097 @table @samp
5873 @item b 5098 @item b
5874 Start point of the hidden text. 5099 Start point of the hidden text.
5875 @item e 5100 @item e
5899 hidden. If you give a positive prefix, they will always hide. 5124 hidden. If you give a positive prefix, they will always hide.
5900 5125
5901 Also @pxref{Article Highlighting} for further variables for 5126 Also @pxref{Article Highlighting} for further variables for
5902 citation customization. 5127 citation customization.
5903 5128
5129 @vindex gnus-signature-limit
5130 @code{gnus-signature-limit} provides a limit to what is considered a
5131 signature. If it is a number, no signature may not be longer (in
5132 characters) than that number. If it is a function, the function will be
5133 called without any parameters, and if it returns @code{nil}, there is no
5134 signature in the buffer. If it is a string, it will be used as a
5135 regexp. If it matches, the text in question is not a signature.
5136
5904 5137
5905 @node Article Washing 5138 @node Article Washing
5906 @subsection Article Washing 5139 @subsection Article Washing
5907 @cindex washing 5140 @cindex washing
5908 @cindex article washing 5141 @cindex article washing
5956 @findex gnus-article-fill-cited-article 5189 @findex gnus-article-fill-cited-article
5957 Do word wrap (@code{gnus-article-fill-cited-article}). If you use this 5190 Do word wrap (@code{gnus-article-fill-cited-article}). If you use this
5958 function in @code{gnus-article-display-hook}, it should be run fairly 5191 function in @code{gnus-article-display-hook}, it should be run fairly
5959 late and certainly after any highlighting. 5192 late and certainly after any highlighting.
5960 5193
5961 You can give the command a numerical prefix to specify the width to use
5962 when filling.
5963
5964 @item W c 5194 @item W c
5965 @kindex W c (Summary) 5195 @kindex W c (Summary)
5966 @findex gnus-article-remove-cr 5196 @findex gnus-article-remove-cr
5967 Remove CR (@code{gnus-article-remove-cr}). 5197 Remove CR (@code{gnus-article-remove-cr}).
5198
5199 @item W L
5200 @kindex W L (Summary)
5201 @findex gnus-article-remove-trailing-blank-lines
5202 Remove all blank lines at the end of the article
5203 (@code{gnus-article-remove-trailing-blank-lines}).
5968 5204
5969 @item W q 5205 @item W q
5970 @kindex W q (Summary) 5206 @kindex W q (Summary)
5971 @findex gnus-article-de-quoted-unreadable 5207 @findex gnus-article-de-quoted-unreadable
5972 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). 5208 Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
6003 @kindex W B (Summary) 5239 @kindex W B (Summary)
6004 @findex gnus-article-add-buttons-to-head 5240 @findex gnus-article-add-buttons-to-head
6005 Add clickable buttons to the article headers 5241 Add clickable buttons to the article headers
6006 (@code{gnus-article-add-buttons-to-head}). 5242 (@code{gnus-article-add-buttons-to-head}).
6007 5243
6008 @item W E l
6009 @kindex W E l (Summary)
6010 @findex gnus-article-strip-leading-blank-lines
6011 Remove all blank lines from the beginning of the article
6012 (@code{gnus-article-strip-leading-blank-lines}).
6013
6014 @item W E m
6015 @kindex W E m (Summary)
6016 @findex gnus-article-strip-multiple-blank-lines
6017 Replace all blank lines with empty lines and then all multiple empty
6018 lines with a single empty line.
6019 (@code{gnus-article-strip-multiple-blank-lines}).
6020
6021 @item W E t
6022 @kindex W E t (Summary)
6023 @findex gnus-article-remove-trailing-blank-lines
6024 Remove all blank lines at the end of the article
6025 (@code{gnus-article-remove-trailing-blank-lines}).
6026
6027 @item W E a
6028 @kindex W E a (Summary)
6029 @findex gnus-article-strip-blank-lines
6030 Do all the three commands above
6031 (@code{gnus-article-strip-blank-lines}).
6032
6033 @item W E s
6034 @kindex W E s (Summary)
6035 @findex gnus-article-strip-leading-space
6036 Remove all white space from the beginning of all lines of the article
6037 body (@code{gnus-article-strip-leading-space}).
6038
6039 @end table 5244 @end table
6040 5245
6041 5246
6042 @node Article Buttons 5247 @node Article Buttons
6043 @subsection Article Buttons 5248 @subsection Article Buttons
6070 @samp{<URL:\\([^\n\r>]*\\)>}. 5275 @samp{<URL:\\([^\n\r>]*\\)>}.
6071 5276
6072 @item button-par 5277 @item button-par
6073 Gnus has to know which parts of the match is to be highlighted. This is 5278 Gnus has to know which parts of the match is to be highlighted. This is
6074 a number that says what sub-expression of the regexp that is to be 5279 a number that says what sub-expression of the regexp that is to be
6075 highlighted. If you want it all highlighted, you use 0 here. 5280 highlighted. If you want it all highlighted, you use @code{0} here.
6076 5281
6077 @item use-p 5282 @item use-p
6078 This form will be @code{eval}ed, and if the result is non-@code{nil}, 5283 This form will be @code{eval}ed, and if the result is non-@code{nil},
6079 this is considered a match. This is useful if you want extra sifting to 5284 this is considered a match. This is useful if you want extra sifting to
6080 avoid false matches. 5285 avoid false matches.
6111 A regular expression that matches embedded URLs. It is used in the 5316 A regular expression that matches embedded URLs. It is used in the
6112 default values of the variables above. 5317 default values of the variables above.
6113 5318
6114 @item gnus-article-button-face 5319 @item gnus-article-button-face
6115 @vindex gnus-article-button-face 5320 @vindex gnus-article-button-face
6116 Face used on buttons. 5321 Face used on bottons.
6117 5322
6118 @item gnus-article-mouse-face 5323 @item gnus-article-mouse-face
6119 @vindex gnus-article-mouse-face 5324 @vindex gnus-article-mouse-face
6120 Face is used when the mouse cursor is over a button. 5325 Face is used when the mouse cursor is over a button.
6121 5326
6139 5344
6140 @item W T l 5345 @item W T l
6141 @kindex W T l (Summary) 5346 @kindex W T l (Summary)
6142 @findex gnus-article-date-local 5347 @findex gnus-article-date-local
6143 Display the date in the local timezone (@code{gnus-article-date-local}). 5348 Display the date in the local timezone (@code{gnus-article-date-local}).
6144
6145 @item W T s
6146 @kindex W T s (Summary)
6147 @vindex gnus-article-time-format
6148 @findex gnus-article-date-user
6149 @findex format-time-string
6150 Display the date using a user-defined format
6151 (@code{gnus-article-date-user}). The format is specified by the
6152 @code{gnus-article-time-format} variable, and is a string that's passed
6153 to @code{format-time-string}. See the documentation of that variable
6154 for a list possible format specs.
6155 5349
6156 @item W T e 5350 @item W T e
6157 @kindex W T e (Summary) 5351 @kindex W T e (Summary)
6158 @findex gnus-article-date-lapsed 5352 @findex gnus-article-date-lapsed
6159 Say how much time has (e)lapsed between the article was posted and now 5353 Say how much time has (e)lapsed between the article was posted and now
6169 @emph{totally} impossible. Don't you trust me? *titter* 5363 @emph{totally} impossible. Don't you trust me? *titter*
6170 5364
6171 @end table 5365 @end table
6172 5366
6173 5367
6174 @node Article Signature
6175 @subsection Article Signature
6176 @cindex signatures
6177 @cindex article signature
6178
6179 @vindex gnus-signature-separator
6180 Each article is divided into two parts---the head and the body. The
6181 body can be divided into a signature part and a text part. The variable
6182 that says what is to be considered a signature is
6183 @code{gnus-signature-separator}. This is normally the standard
6184 @samp{^-- $} as mandated by son-of-RFC 1036. However, many people use
6185 non-standard signature separators, so this variable can also be a list
6186 of regular expressions to be tested, one by one. (Searches are done
6187 from the end of the body towards the beginning.) One likely value is:
6188
6189 @lisp
6190 (setq gnus-signature-separator
6191 '("^-- $" ; The standard
6192 "^-- *$" ; A common mangling
6193 "^-------*$" ; Many people just use a looong
6194 ; line of dashes. Shame!
6195 "^ *--------*$" ; Double-shame!
6196 "^________*$" ; Underscores are also popular
6197 "^========*$")) ; Pervert!
6198 @end lisp
6199
6200 The more permissive you are, the more likely it is that you'll get false
6201 positives.
6202
6203 @vindex gnus-signature-limit
6204 @code{gnus-signature-limit} provides a limit to what is considered a
6205 signature.
6206
6207 @enumerate
6208 @item
6209 If it is an integer, no signature may be longer (in characters) than
6210 that integer.
6211 @item
6212 If it is a floating point number, no signature may be longer (in lines)
6213 than that number.
6214 @item
6215 If it is a function, the function will be called without any parameters,
6216 and if it returns @code{nil}, there is no signature in the buffer.
6217 @item
6218 If it is a string, it will be used as a regexp. If it matches, the text
6219 in question is not a signature.
6220 @end enumerate
6221
6222 This variable can also be a list where the elements may be of the types
6223 listed above.
6224
6225
6226 @node Article Commands
6227 @section Article Commands
6228
6229 @table @kbd
6230
6231 @item A P
6232 @cindex PostScript
6233 @cindex printing
6234 @kindex A P (Summary)
6235 @vindex gnus-ps-print-hook
6236 @findex gnus-summary-print-article
6237 Generate and print a PostScript image of the article buffer
6238 (@code{gnus-summary-print-article}). @code{gnus-ps-print-hook} will be
6239 run just before printing the buffer.
6240
6241 @end table
6242
6243
6244 @node Summary Sorting 5368 @node Summary Sorting
6245 @section Summary Sorting 5369 @section Summary Sorting
6246 @cindex summary sorting 5370 @cindex summary sorting
6247 5371
6248 You can have the summary buffer sorted in various ways, even though I 5372 You can have the summary buffer sorted in various ways, even though I
6267 5391
6268 @item C-c C-s C-d 5392 @item C-c C-s C-d
6269 @kindex C-c C-s C-d (Summary) 5393 @kindex C-c C-s C-d (Summary)
6270 @findex gnus-summary-sort-by-date 5394 @findex gnus-summary-sort-by-date
6271 Sort by date (@code{gnus-summary-sort-by-date}). 5395 Sort by date (@code{gnus-summary-sort-by-date}).
6272
6273 @item C-c C-s C-l
6274 @kindex C-c C-s C-l (Summary)
6275 @findex gnus-summary-sort-by-lines
6276 Sort by lines (@code{gnus-summary-sort-by-lines}).
6277 5396
6278 @item C-c C-s C-i 5397 @item C-c C-s C-i
6279 @kindex C-c C-s C-i (Summary) 5398 @kindex C-c C-s C-i (Summary)
6280 @findex gnus-summary-sort-by-score 5399 @findex gnus-summary-sort-by-score
6281 Sort by score (@code{gnus-summary-sort-by-score}). 5400 Sort by score (@code{gnus-summary-sort-by-score}).
6303 can just press @kbd{^} or @kbd{A r} 5422 can just press @kbd{^} or @kbd{A r}
6304 (@code{gnus-summary-refer-parent-article}). If everything goes well, 5423 (@code{gnus-summary-refer-parent-article}). If everything goes well,
6305 you'll get the parent. If the parent is already displayed in the 5424 you'll get the parent. If the parent is already displayed in the
6306 summary buffer, point will just move to this article. 5425 summary buffer, point will just move to this article.
6307 5426
6308 If given a positive numerical prefix, fetch that many articles back into
6309 the ancestry. If given a negative numerical prefix, fetch just that
6310 ancestor. So if you say @kbd{3 ^}, Gnus will fetch the parent, the
6311 grandparent and the grandgrandparent of the current article. If you say
6312 @kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
6313 article.
6314
6315 @findex gnus-summary-refer-references 5427 @findex gnus-summary-refer-references
6316 @kindex A R (Summary) 5428 @kindex A R (Summary)
6317 You can have Gnus fetch all articles mentioned in the @code{References} 5429 You can have Gnus fetch all articles mentioned in the @code{References}
6318 header of the article by pushing @kbd{A R} 5430 header of the article by pushing @kbd{A R}
6319 (@code{gnus-summary-refer-references}). 5431 (@code{gnus-summary-refer-references}).
6320 5432
6321 @findex gnus-summary-refer-article 5433 @findex gnus-summary-refer-article
6322 @kindex M-^ (Summary) 5434 @kindex M-^ (Summary)
6323 @cindex Message-ID
6324 @cindex fetching by Message-ID
6325 You can also ask the @sc{nntp} server for an arbitrary article, no 5435 You can also ask the @sc{nntp} server for an arbitrary article, no
6326 matter what group it belongs to. @kbd{M-^} 5436 matter what group it belongs to. @kbd{M-^}
6327 (@code{gnus-summary-refer-article}) will ask you for a 5437 (@code{gnus-summary-refer-article}) will ask you for a
6328 @code{Message-ID}, which is one of those long, hard-to-read thingies 5438 @code{Message-ID}, which is one of those long thingies that look
6329 that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You 5439 something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You have to get
6330 have to get it all exactly right. No fuzzy searches, I'm afraid. 5440 it all exactly right. No fuzzy searches, I'm afraid.
6331 5441
6332 @vindex gnus-refer-article-method 5442 @vindex gnus-refer-article-method
6333 If the group you are reading is located on a backend that does not 5443 If the group you are reading is located on a backend that does not
6334 support fetching by @code{Message-ID} very well (like @code{nnspool}), 5444 support fetching by @code{Message-ID} very well (like @code{nnspool}),
6335 you can set @code{gnus-refer-article-method} to an @sc{nntp} method. It 5445 you can set @code{gnus-refer-article-method} to an @sc{nntp} method. It
6375 available. 5485 available.
6376 5486
6377 Here are the available keystrokes when using pick mode: 5487 Here are the available keystrokes when using pick mode:
6378 5488
6379 @table @kbd 5489 @table @kbd
6380 @item .
6381 @kindex . (Pick)
6382 @findex gnus-summary-mark-as-processable
6383 Pick the article on the current line
6384 (@code{gnus-summary-mark-as-processable}). If given a numerical prefix,
6385 go to the article on that line and pick that article. (The line number
6386 is normally displayed on the beginning of the summary pick lines.)
6387
6388 @item SPACE 5490 @item SPACE
6389 @kindex SPACE (Pick) 5491 @kindex SPACE (Pick)
6390 @findex gnus-pick-next-page 5492 @findex gnus-summary-mark-as-processable
6391 Scroll the summary buffer up one page (@code{gnus-pick-next-page}). If 5493 Pick the article (@code{gnus-summary-mark-as-processable}).
6392 at the end of the buffer, start reading the picked articles.
6393 5494
6394 @item u 5495 @item u
6395 @kindex u (Pick) 5496 @kindex u (Pick)
6396 @findex gnus-summary-unmark-as-processable 5497 @findex gnus-summary-unmark-as-processable
6397 Unpick the article (@code{gnus-summary-unmark-as-processable}). 5498 Unpick the article (@code{gnus-summary-unmark-as-processable}).
6458 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode) 5559 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
6459 @end lisp 5560 @end lisp
6460 5561
6461 @vindex gnus-pick-mode-hook 5562 @vindex gnus-pick-mode-hook
6462 @code{gnus-pick-mode-hook} is run in pick minor mode buffers. 5563 @code{gnus-pick-mode-hook} is run in pick minor mode buffers.
6463
6464 @vindex gnus-mark-unpicked-articles-as-read
6465 If @code{gnus-mark-unpicked-articles-as-read} is non-@code{nil}, mark
6466 all unpicked articles as read. The default is @code{nil}.
6467
6468 @vindex gnus-summary-pick-line-format
6469 The summary line format in pick mode is slightly different than the
6470 standard format. At the beginning of each line the line number is
6471 displayed. The pick mode line format is controlled by the
6472 @code{gnus-summary-pick-line-format} variable (@pxref{Formatting
6473 Variables}). It accepts the same format specs that
6474 @code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
6475 5564
6476 5565
6477 @node Binary Groups 5566 @node Binary Groups
6478 @subsection Binary Groups 5567 @subsection Binary Groups
6479 @cindex binary groups 5568 @cindex binary groups
6586 5675
6587 Here's and example from a horizontal tree buffer: 5676 Here's and example from a horizontal tree buffer:
6588 5677
6589 @example 5678 @example
6590 @{***@}-(***)-[odd]-[Gun] 5679 @{***@}-(***)-[odd]-[Gun]
6591 | \[Jan] 5680 | \[Jan]
6592 | \[odd]-[Eri] 5681 | \[odd]-[Eri]
6593 | \(***)-[Eri] 5682 | \(***)-[Eri]
6594 | \[odd]-[Paa] 5683 | \[odd]-[Paa]
6595 \[Bjo] 5684 \[Bjo]
6596 \[Gun] 5685 \[Gun]
6597 \[Gun]-[Jor] 5686 \[Gun]-[Jor]
6598 @end example 5687 @end example
6599 5688
6631 (@code{gnus-summary-expire-articles}). 5720 (@code{gnus-summary-expire-articles}).
6632 5721
6633 @item B M-C-e 5722 @item B M-C-e
6634 @kindex B M-C-e (Summary) 5723 @kindex B M-C-e (Summary)
6635 @findex gnus-summary-expire-articles-now 5724 @findex gnus-summary-expire-articles-now
6636 Delete all the expirable articles in the group 5725 Expunge all the expirable articles in the group
6637 (@code{gnus-summary-expire-articles-now}). This means that @strong{all} 5726 (@code{gnus-summary-expire-articles-now}). This means that @strong{all}
6638 articles that are eligible for expiry in the current group will 5727 articles that are eligible for expiry in the current group will
6639 disappear forever into that big @file{/dev/null} in the sky. 5728 disappear forever into that big @file{/dev/null} in the sky.
6640 5729
6641 @item B DEL 5730 @item B DEL
6677 5766
6678 @item B r 5767 @item B r
6679 @kindex B r (Summary) 5768 @kindex B r (Summary)
6680 @findex gnus-summary-respool-article 5769 @findex gnus-summary-respool-article
6681 Respool the mail article (@code{gnus-summary-move-article}). 5770 Respool the mail article (@code{gnus-summary-move-article}).
6682 @code{gnus-summary-respool-default-method} will be used as the default
6683 select method when respooling. This variable is @code{nil} by default,
6684 which means that the current group select method will be used instead.
6685 5771
6686 @item B w 5772 @item B w
6687 @itemx e 5773 @itemx e
6688 @kindex B w (Summary) 5774 @kindex B w (Summary)
6689 @kindex e (Summary) 5775 @kindex e (Summary)
6697 @kindex B q (Summary) 5783 @kindex B q (Summary)
6698 @findex gnus-summary-respool-query 5784 @findex gnus-summary-respool-query
6699 If you want to re-spool an article, you might be curious as to what group 5785 If you want to re-spool an article, you might be curious as to what group
6700 the article will end up in before you do the re-spooling. This command 5786 the article will end up in before you do the re-spooling. This command
6701 will tell you (@code{gnus-summary-respool-query}). 5787 will tell you (@code{gnus-summary-respool-query}).
6702
6703 @item B p
6704 @kindex B p (Summary)
6705 @findex gnus-summary-article-posted-p
6706 Some people have a tendency to send you "courtesy" copies when they
6707 follow up to articles you have posted. These usually have a
6708 @code{Newsgroups} header in them, but not always. This command
6709 (@code{gnus-summary-article-posted-p}) will try to fetch the current
6710 article from your news server (or rather, from
6711 @code{gnus-refer-article-method} or @code{gnus-select-method}) and will
6712 report back whether it found the article or not. Even if it says that
6713 it didn't find the article, it may have been posted anyway---mail
6714 propagation is much faster than news propagation, and the news copy may
6715 just not have arrived yet.
6716
6717 @end table 5788 @end table
6718 5789
6719 @vindex gnus-move-split-methods 5790 @vindex gnus-move-split-methods
6720 @cindex moving articles 5791 @cindex moving articles
6721 If you move (or copy) articles regularly, you might wish to have Gnus 5792 If you move (or copy) articles regularly, you might wish to have Gnus
6722 suggest where to put the articles. @code{gnus-move-split-methods} is a 5793 suggest where to put the articles. @code{gnus-move-split-methods} is a
6723 variable that uses the same syntax as @code{gnus-split-methods} 5794 variable that uses the same syntax as @code{gnus-split-methods}
6724 (@pxref{Saving Articles}). You may customize that variable to create 5795 (@pxref{Saving Articles}). You may customize that variable to create
6725 suggestions you find reasonable. 5796 suggestions you find reasonable.
6726 5797
6727 @lisp
6728 (setq gnus-move-split-methods
6729 '(("^From:.*Lars Magne" "nnml:junk")
6730 ("^Subject:.*gnus" "nnfolder:important")
6731 (".*" "nnml:misc")))
6732 @end lisp
6733
6734 5798
6735 @node Various Summary Stuff 5799 @node Various Summary Stuff
6736 @section Various Summary Stuff 5800 @section Various Summary Stuff
6737 5801
6738 @menu 5802 @menu
6739 * Summary Group Information:: Information oriented commands. 5803 * Summary Group Information:: Information oriented commands.
6740 * Searching for Articles:: Multiple article commands. 5804 * Searching for Articles:: Multiple article commands.
6741 * Summary Generation Commands:: (Re)generating the summary buffer.
6742 * Really Various Summary Commands:: Those pesky non-conformant commands. 5805 * Really Various Summary Commands:: Those pesky non-conformant commands.
6743 @end menu 5806 @end menu
6744 5807
6745 @table @code 5808 @table @code
6746 @vindex gnus-summary-mode-hook 5809 @vindex gnus-summary-mode-hook
6758 @vindex gnus-summary-prepare-hook 5821 @vindex gnus-summary-prepare-hook
6759 @item gnus-summary-prepare-hook 5822 @item gnus-summary-prepare-hook
6760 Is is called after the summary buffer has been generated. You might use 5823 Is is called after the summary buffer has been generated. You might use
6761 it to, for instance, highlight lines or modify the look of the buffer in 5824 it to, for instance, highlight lines or modify the look of the buffer in
6762 some other ungodly manner. I don't care. 5825 some other ungodly manner. I don't care.
6763
6764 @vindex gnus-summary-ignore-duplicates
6765 @item gnus-summary-ignore-duplicates
6766 When Gnus discovers two articles that have the same @code{Message-ID},
6767 it has to do something drastic. No articles are allowed to have the
6768 same @code{Message-ID}, but this may happen when reading mail from some
6769 sources. Gnus allows you to customize what happens with this variable.
6770 If it is @code{nil} (which is the default), Gnus will rename the
6771 @code{Message-ID} (for display purposes only) and display the article as
6772 any other article. If this variable is @code{t}, it won't display the
6773 article---it'll be as if it never existed.
6774 5826
6775 @end table 5827 @end table
6776 5828
6777 5829
6778 @node Summary Group Information 5830 @node Summary Group Information
6800 rereading the description from the server. 5852 rereading the description from the server.
6801 5853
6802 @item H h 5854 @item H h
6803 @kindex H h (Summary) 5855 @kindex H h (Summary)
6804 @findex gnus-summary-describe-briefly 5856 @findex gnus-summary-describe-briefly
6805 Give an extremely brief description of the most important summary 5857 Give a very brief description of the most important summary keystrokes
6806 keystrokes (@code{gnus-summary-describe-briefly}). 5858 (@code{gnus-summary-describe-briefly}).
6807 5859
6808 @item H i 5860 @item H i
6809 @kindex H i (Summary) 5861 @kindex H i (Summary)
6810 @findex gnus-info-find-node 5862 @findex gnus-info-find-node
6811 Go to the Gnus info node (@code{gnus-info-find-node}). 5863 Go to the Gnus info node (@code{gnus-info-find-node}).
6841 @findex gnus-summary-universal-argument 5893 @findex gnus-summary-universal-argument
6842 Perform any operation on all articles that have been marked with 5894 Perform any operation on all articles that have been marked with
6843 the process mark (@code{gnus-summary-universal-argument}). 5895 the process mark (@code{gnus-summary-universal-argument}).
6844 @end table 5896 @end table
6845 5897
6846 @node Summary Generation Commands
6847 @subsection Summary Generation Commands
6848
6849 @table @kbd
6850
6851 @item Y g
6852 @kindex Y g (Summary)
6853 @findex gnus-summary-prepare
6854 Regenerate the current summary buffer (@code{gnus-summary-prepare}).
6855
6856 @item Y c
6857 @kindex Y c (Summary)
6858 @findex gnus-summary-insert-cached-articles
6859 Pull all cached articles (for the current group) into the summary buffer
6860 (@code{gnus-summary-insert-cached-articles}).
6861
6862 @end table
6863
6864 5898
6865 @node Really Various Summary Commands 5899 @node Really Various Summary Commands
6866 @subsection Really Various Summary Commands 5900 @subsection Really Various Summary Commands
6867 5901
6868 @table @kbd 5902 @table @kbd
6869 5903
6870 @item C-d 5904 @item A D
6871 @kindex C-d (Summary) 5905 @kindex A D (Summary)
6872 @findex gnus-summary-enter-digest-group 5906 @findex gnus-summary-enter-digest-group
6873 If the current article is a collection of other articles (for instance, 5907 If the current article is a collection of other articles (for instance,
6874 a digest), you might use this command to enter a group based on the that 5908 a digest), you might use this command to enter a group based on the that
6875 article (@code{gnus-summary-enter-digest-group}). Gnus will try to 5909 article (@code{gnus-summary-enter-digest-group}). Gnus will try to
6876 guess what article type is currently displayed unless you give a prefix 5910 guess what article type is currently displayed unless you give a prefix
6877 to this command, which forces a ``digest'' interpretation. Basically, 5911 to this command, which forces a ``digest'' interpretation. Basically,
6878 whenever you see a message that is a collection of other messages on 5912 whenever you see a message that is a collection of other messages on
6879 some format, you @kbd{C-d} and read these messages in a more convenient 5913 some format, you @kbd{A D} and read these messages in a more convenient
6880 fashion. 5914 fashion.
6881
6882 @item M-C-d
6883 @kindex M-C-d (Summary)
6884 @findex gnus-summary-read-document
6885 This command is very similar to the one above, but lets you gather
6886 several documents into one biiig group
6887 (@code{gnus-summary-read-document}). It does this by opening several
6888 @code{nndoc} groups for each document, and then opening an
6889 @code{nnvirtual} group on top of these @code{nndoc} groups. This
6890 command understands the process/prefix convention
6891 (@pxref{Process/Prefix}).
6892 5915
6893 @item C-t 5916 @item C-t
6894 @kindex C-t (Summary) 5917 @kindex C-t (Summary)
6895 @findex gnus-summary-toggle-truncation 5918 @findex gnus-summary-toggle-truncation
6896 Toggle truncation of summary lines 5919 Toggle truncation of summary lines (@code{gnus-summary-toggle-truncation}).
6897 (@code{gnus-summary-toggle-truncation}). This will probably confuse the
6898 line centering function in the summary buffer, so it's not a good idea
6899 to have truncation switched off while reading articles.
6900 5920
6901 @item = 5921 @item =
6902 @kindex = (Summary) 5922 @kindex = (Summary)
6903 @findex gnus-summary-expand-window 5923 @findex gnus-summary-expand-window
6904 Expand the summary buffer window (@code{gnus-summary-expand-window}). 5924 Expand the summary buffer window (@code{gnus-summary-expand-window}).
6905 If given a prefix, force an @code{article} window configuration. 5925 If given a prefix, force an @code{article} window configuration.
6906
6907 @end table 5926 @end table
6908 5927
6909 5928
6910 @node Exiting the Summary Buffer 5929 @node Exiting the Summary Buffer
6911 @section Exiting the Summary Buffer 5930 @section Exiting the Summary Buffer
6927 Exit the current group and update all information on the group 5946 Exit the current group and update all information on the group
6928 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is 5947 (@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
6929 called before doing much of the exiting, and calls 5948 called before doing much of the exiting, and calls
6930 @code{gnus-summary-expire-articles} by default. 5949 @code{gnus-summary-expire-articles} by default.
6931 @code{gnus-summary-exit-hook} is called after finishing the exiting 5950 @code{gnus-summary-exit-hook} is called after finishing the exiting
6932 process. @code{gnus-group-no-more-groups-hook} is run when returning to 5951 process.
6933 group mode having no more (unread) groups.
6934 5952
6935 @item Z E 5953 @item Z E
6936 @itemx Q 5954 @itemx Q
6937 @kindex Z E (Summary) 5955 @kindex Z E (Summary)
6938 @kindex Q (Summary) 5956 @kindex Q (Summary)
6985 @item Z P 6003 @item Z P
6986 @kindex Z P (Summary) 6004 @kindex Z P (Summary)
6987 @findex gnus-summary-prev-group 6005 @findex gnus-summary-prev-group
6988 Exit the group and go to the previous group 6006 Exit the group and go to the previous group
6989 (@code{gnus-summary-prev-group}). 6007 (@code{gnus-summary-prev-group}).
6990
6991 @item Z s
6992 @kindex Z s (Summary)
6993 @findex gnus-summary-save-newsrc
6994 Save the current number of read/marked articles in the dribble buffer
6995 and then save the dribble buffer (@code{gnus-summary-save-newsrc}). If
6996 given a prefix, also save the @file{.newsrc} file(s). Using this
6997 command will make exit without updating (the @kbd{Q} command) worthless.
6998 @end table 6008 @end table
6999 6009
7000 @vindex gnus-exit-group-hook 6010 @vindex gnus-exit-group-hook
7001 @code{gnus-exit-group-hook} is called when you exit the current 6011 @code{gnus-exit-group-hook} is called when you exit the current
7002 group. 6012 group.
7022 summary buffer. If the @code{gnus-use-cross-reference} variable is 6032 summary buffer. If the @code{gnus-use-cross-reference} variable is
7023 @code{t} (which is the default), articles that are cross-referenced to 6033 @code{t} (which is the default), articles that are cross-referenced to
7024 this group and are marked as read, will also be marked as read in the 6034 this group and are marked as read, will also be marked as read in the
7025 other subscribed groups they were cross-posted to. If this variable is 6035 other subscribed groups they were cross-posted to. If this variable is
7026 neither @code{nil} nor @code{t}, the article will be marked as read in 6036 neither @code{nil} nor @code{t}, the article will be marked as read in
7027 both subscribed and unsubscribed groups (@pxref{Crosspost Handling}). 6037 both subscribed and unsubscribed groups.
7028
7029
7030 @node Crosspost Handling
7031 @section Crosspost Handling
7032 6038
7033 @cindex velveeta 6039 @cindex velveeta
7034 @cindex spamming 6040 @cindex spamming
7035 Marking cross-posted articles as read ensures that you'll never have to 6041 Marking cross-posted articles as read ensures that you'll never have to
7036 read the same article more than once. Unless, of course, somebody has 6042 read the same article more than once. Unless, of course, somebody has
7037 posted it to several groups separately. Posting the same article to 6043 posted it to several groups separately. Posting the same article to
7038 several groups (not cross-posting) is called @dfn{spamming}, and you are 6044 several groups (not cross-posting) is called @dfn{spamming}, and you are
7039 by law required to send nasty-grams to anyone who perpetrates such a 6045 by law required to send nasty-grams to anyone who perpetrates such a
7040 heinous crime. You may want to try NoCeM handling to filter out spam 6046 heinous crime.
7041 (@pxref{NoCeM}).
7042 6047
7043 Remember: Cross-posting is kinda ok, but posting the same article 6048 Remember: Cross-posting is kinda ok, but posting the same article
7044 separately to several groups is not. Massive cross-posting (aka. 6049 separately to several groups is not. Massive cross-posting (aka.
7045 @dfn{velveeta}) is to be avoided at all costs, and you can even use the 6050 @dfn{velveeta}) is to be avoided.
7046 @code{gnus-summary-mail-crosspost-complaint} command to complain about
7047 excessive crossposting (@pxref{Summary Mail Commands}).
7048 6051
7049 @cindex cross-posting 6052 @cindex cross-posting
7050 @cindex Xref 6053 @cindex Xref
7051 @cindex @sc{nov} 6054 @cindex @sc{nov}
7052 One thing that may cause Gnus to not do the cross-posting thing 6055 One thing that may cause Gnus to not do the cross-posting thing
7075 set @code{gnus-nov-is-evil} to @code{t}, which slows things down 6078 set @code{gnus-nov-is-evil} to @code{t}, which slows things down
7076 considerably. 6079 considerably.
7077 6080
7078 C'est la vie. 6081 C'est la vie.
7079 6082
7080 For an alternative approach, @pxref{Duplicate Suppression}.
7081
7082
7083 @node Duplicate Suppression
7084 @section Duplicate Suppression
7085
7086 By default, Gnus tries to make sure that you don't have to read the same
7087 article more than once by utilizing the crossposting mechanism
7088 (@pxref{Crosspost Handling}). However, that simple and efficient
7089 approach may not work satisfactorily for some users for various
7090 reasons.
7091
7092 @enumerate
7093 @item
7094 The @sc{nntp} server may fail to generate the @code{Xref} header. This
7095 is evil and not very common.
7096
7097 @item
7098 The @sc{nntp} server may fail to include the @code{Xref} header in the
7099 @file{.overview} data bases. This is evil and all too common, alas.
7100
7101 @item
7102 You may be reading the same group (or several related groups) from
7103 different @sc{nntp} servers.
7104
7105 @item
7106 You may be getting mail that duplicates articles posted to groups.
7107 @end enumerate
7108
7109 I'm sure there are other situations that @code{Xref} handling fails as
7110 well, but these four are the most common situations.
7111
7112 If, and only if, @code{Xref} handling fails for you, then you may
7113 consider switching on @dfn{duplicate suppression}. If you do so, Gnus
7114 will remember the @code{Message-ID}s of all articles you have read or
7115 otherwise marked as read, and then, as if by magic, mark them as read
7116 all subsequent times you see them---in @emph{all} groups. Using this
7117 mechanism is quite likely to be somewhat inefficient, but not overly
7118 so. It's certainly preferable to reading the same articles more than
7119 once.
7120
7121 Duplicate suppression is not a very subtle instrument. It's more like a
7122 sledge hammer than anything else. It works in a very simple
7123 fashion---if you have marked an article as read, it adds this Message-ID
7124 to a cache. The next time it sees this Message-ID, it will mark the
7125 article as read the the @samp{M} mark. It doesn't care what group it
7126 saw the article in.
7127
7128 @table @code
7129 @item gnus-suppress-duplicates
7130 @vindex gnus-suppress-duplicates
7131 If non-@code{nil}, suppress duplicates.
7132
7133 @item gnus-save-duplicate-list
7134 @vindex gnus-save-duplicate-list
7135 If non-@code{nil}, save the list of duplicates to a file. This will
7136 make startup and shutdown take longer, so the default is @code{nil}.
7137 However, this means that only duplicate articles that is read in a
7138 single Gnus session are suppressed.
7139
7140 @item gnus-duplicate-list-length
7141 @vindex gnus-duplicate-list-length
7142 This variables says how many @code{Message-ID}s to keep in the duplicate
7143 suppression list. The default is 10000.
7144
7145 @item gnus-duplicate-file
7146 @vindex gnus-duplicate-file
7147 The name of the file to store the duplicate suppression list. The
7148 default is @file{~/News/suppression}.
7149 @end table
7150
7151 If you have a tendency to stop and start Gnus often, setting
7152 @code{gnus-save-duplicate-list} to @code{t} is probably a good idea. If
7153 you leave Gnus running for weeks on end, you may have it @code{nil}. On
7154 the other hand, saving the list makes startup and shutdown much slower,
7155 so that means that if you stop and start Gnus often, you should set
7156 @code{gnus-save-duplicate-list} to @code{nil}. Uhm. I'll leave this up
7157 to you to figure out, I think.
7158
7159 6083
7160 @node The Article Buffer 6084 @node The Article Buffer
7161 @chapter The Article Buffer 6085 @chapter The Article Buffer
7162 @cindex article buffer 6086 @cindex article buffer
7163 6087
7167 6091
7168 @menu 6092 @menu
7169 * Hiding Headers:: Deciding what headers should be displayed. 6093 * Hiding Headers:: Deciding what headers should be displayed.
7170 * Using MIME:: Pushing articles through @sc{mime} before reading them. 6094 * Using MIME:: Pushing articles through @sc{mime} before reading them.
7171 * Customizing Articles:: Tailoring the look of the articles. 6095 * Customizing Articles:: Tailoring the look of the articles.
7172 * Article Keymap:: Keystrokes available in the article buffer. 6096 * Article Keymap:: Keystrokes available in the article buffer
7173 * Misc Article:: Other stuff. 6097 * Misc Article:: Other stuff.
7174 @end menu 6098 @end menu
7175 6099
7176 6100
7177 @node Hiding Headers 6101 @node Hiding Headers
7305 6229
7306 @vindex gnus-show-mime 6230 @vindex gnus-show-mime
7307 @vindex gnus-show-mime-method 6231 @vindex gnus-show-mime-method
7308 @vindex gnus-strict-mime 6232 @vindex gnus-strict-mime
7309 @findex metamail-buffer 6233 @findex metamail-buffer
7310 Gnus handles @sc{mime} by pushing the articles through 6234 Gnus handles @sc{mime} by shoving the articles through
7311 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by 6235 @code{gnus-show-mime-method}, which is @code{metamail-buffer} by
7312 default. Set @code{gnus-show-mime} to @code{t} if you want to use 6236 default. Set @code{gnus-show-mime} to @code{t} if you want to use
7313 @sc{mime} all the time. However, if @code{gnus-strict-mime} is 6237 @sc{mime} all the time. However, if @code{gnus-strict-mime} is
7314 non-@code{nil}, the @sc{mime} method will only be used if there are 6238 non-@code{nil}, the @sc{mime} method will only be used if there are
7315 @sc{mime} headers in the article. If you have @code{gnus-show-mime} 6239 @sc{mime} headers in the article.
7316 set, then you'll see some unfortunate display glitches in the article
7317 buffer. These can't be avoided.
7318 6240
7319 It might be best to just use the toggling functions from the summary 6241 It might be best to just use the toggling functions from the summary
7320 buffer to avoid getting nasty surprises. (For instance, you enter the 6242 buffer to avoid getting nasty surprises. (For instance, you enter the
7321 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has 6243 group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
7322 decoded the sound file in the article and some horrible sing-a-long song 6244 decoded the sound file in the article and some horrible sing-a-long song
7337 The @code{gnus-article-display-hook} is called after the article has 6259 The @code{gnus-article-display-hook} is called after the article has
7338 been inserted into the article buffer. It is meant to handle all 6260 been inserted into the article buffer. It is meant to handle all
7339 treatment of the article before it is displayed. 6261 treatment of the article before it is displayed.
7340 6262
7341 @findex gnus-article-maybe-highlight 6263 @findex gnus-article-maybe-highlight
7342 By default this hook just contains @code{gnus-article-hide-headers}, 6264 By default it contains @code{gnus-article-hide-headers},
7343 @code{gnus-article-treat-overstrike}, and 6265 @code{gnus-article-treat-overstrike}, and
7344 @code{gnus-article-maybe-highlight}, but there are thousands, nay 6266 @code{gnus-article-maybe-highlight}, but there are thousands, nay
7345 millions, of functions you can put in this hook. For an overview of 6267 millions, of functions you can put in this hook. For an overview of
7346 functions @pxref{Article Highlighting}, @pxref{Article Hiding}, 6268 functions @pxref{Article Highlighting}, @pxref{Article Hiding},
7347 @pxref{Article Washing}, @pxref{Article Buttons} and @pxref{Article 6269 @pxref{Article Washing}, @pxref{Article Buttons} and @pxref{Article
7348 Date}. Note that the order of functions in this hook might affect 6270 Date}.
7349 things, so you may have to fiddle a bit to get the desired results.
7350 6271
7351 You can, of course, write your own functions. The functions are called 6272 You can, of course, write your own functions. The functions are called
7352 from the article buffer, and you can do anything you like, pretty much. 6273 from the article buffer, and you can do anything you like, pretty much.
7353 There is no information that you have to keep in the buffer---you can 6274 There is no information that you have to keep in the buffer---you can
7354 change everything. However, you shouldn't delete any headers. Instead 6275 change everything. However, you shouldn't delete any headers. Instead
7443 6364
7444 @item gnus-article-mode-hook 6365 @item gnus-article-mode-hook
7445 @vindex gnus-article-mode-hook 6366 @vindex gnus-article-mode-hook
7446 Hook called in article mode buffers. 6367 Hook called in article mode buffers.
7447 6368
7448 @item gnus-article-mode-syntax-table
7449 @vindex gnus-article-mode-syntax-table
7450 Syntax table used in article buffers. It is initialized from
7451 @code{text-mode-syntax-table}.
7452
7453 @vindex gnus-article-mode-line-format 6369 @vindex gnus-article-mode-line-format
7454 @item gnus-article-mode-line-format 6370 @item gnus-article-mode-line-format
7455 This variable is a format string along the same lines as 6371 This variable is a format string along the same lines as
7456 @code{gnus-summary-mode-line-format}. It accepts the same 6372 @code{gnus-summary-mode-line-format}. It accepts exactly the same
7457 format specifications as that variable, with one extension: 6373 format specifications as that variable.
7458
7459 @table @samp
7460 @item w
7461 The @dfn{wash status} of the article. This is a short string with one
7462 character for each possible article wash operation that may have been
7463 performed.
7464 @end table
7465
7466 @vindex gnus-break-pages 6374 @vindex gnus-break-pages
7467 6375
7468 @item gnus-break-pages 6376 @item gnus-break-pages
7469 Controls whether @dfn{page breaking} is to take place. If this variable 6377 Controls whether @dfn{page breaking} is to take place. If this variable
7470 is non-@code{nil}, the articles will be divided into pages whenever a 6378 is non-@code{nil}, the articles will be divided into pages whenever a
7569 Now, if you've done this, and then this server rejects your article, or 6477 Now, if you've done this, and then this server rejects your article, or
7570 this server is down, what do you do then? To override this variable you 6478 this server is down, what do you do then? To override this variable you
7571 can use a non-zero prefix to the @kbd{C-c C-c} command to force using 6479 can use a non-zero prefix to the @kbd{C-c C-c} command to force using
7572 the ``current'' server for posting. 6480 the ``current'' server for posting.
7573 6481
7574 If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command, 6482 If you give a zero prefix (i. e., @kbd{C-u 0 C-c C-c}) to that command,
7575 Gnus will prompt you for what method to use for posting. 6483 Gnus will prompt you for what method to use for posting.
7576 6484
7577 You can also set @code{gnus-post-method} to a list of select methods. 6485 You can also set @code{gnus-post-method} to a list of select methods.
7578 If that's the case, Gnus will always prompt you for what method to use 6486 If that's the case, Gnus will always prompt you for what method to use
7579 for posting. 6487 for posting.
7616 @node Archived Messages 6524 @node Archived Messages
7617 @section Archived Messages 6525 @section Archived Messages
7618 @cindex archived messages 6526 @cindex archived messages
7619 @cindex sent messages 6527 @cindex sent messages
7620 6528
7621 Gnus provides a few different methods for storing the mail and news you 6529 Gnus provides a few different methods for storing the mail you send.
7622 send. The default method is to use the @dfn{archive virtual server} to 6530 The default method is to use the @dfn{archive virtual server} to store
7623 store the messages. If you want to disable this completely, the 6531 the mail. If you want to disable this completely, you should set
7624 @code{gnus-message-archive-group} variable should be @code{nil}, which 6532 @code{gnus-message-archive-group} to @code{nil}.
7625 is the default.
7626 6533
7627 @vindex gnus-message-archive-method 6534 @vindex gnus-message-archive-method
7628 @code{gnus-message-archive-method} says what virtual server Gnus is to 6535 @code{gnus-message-archive-method} says what virtual server Gnus is to
7629 use to store sent messages. The default is: 6536 use to store sent messages. It is @code{(nnfolder "archive"
7630 6537 (nnfolder-directory "~/Mail/archive/"))} by default, but you can use any
7631 @lisp 6538 mail select method (@code{nnml}, @code{nnmbox}, etc.). However,
7632 (nnfolder "archive" 6539 @code{nnfolder} is a quite likeable select method for doing this sort of
7633 (nnfolder-directory "~/Mail/archive/")) 6540 thing. If you don't like the default directory chosen, you could say
7634 @end lisp 6541 something like:
7635
7636 You can, however, use any mail select method (@code{nnml},
7637 @code{nnmbox}, etc.). @code{nnfolder} is a quite likeable select method
7638 for doing this sort of thing, though. If you don't like the default
7639 directory chosen, you could say something like:
7640 6542
7641 @lisp 6543 @lisp
7642 (setq gnus-message-archive-method 6544 (setq gnus-message-archive-method
7643 '(nnfolder "archive" 6545 '(nnfolder "archive"
7644 (nnfolder-inhibit-expiry t) 6546 (nnfolder-inhibit-expiry t)
7713 group. If the group gets really big and annoying, you can simply rename 6615 group. If the group gets really big and annoying, you can simply rename
7714 if (using @kbd{G r} in the group buffer) to something 6616 if (using @kbd{G r} in the group buffer) to something
7715 nice---@samp{misc-mail-september-1995}, or whatever. New messages will 6617 nice---@samp{misc-mail-september-1995}, or whatever. New messages will
7716 continue to be stored in the old (now empty) group. 6618 continue to be stored in the old (now empty) group.
7717 6619
7718 That's the default method of archiving sent messages. Gnus also a 6620 That's the default method of archiving sent mail. Gnus also offers two
7719 different way for the people who don't like the default method. In that 6621 other variables for the people who don't like the default method. In
7720 case you should set @code{gnus-message-archive-group} to @code{nil}; 6622 that case you should set @code{gnus-message-archive-group} to
7721 this will disable archiving. 6623 @code{nil}; this will disable archiving.
7722 6624
7723 XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to 6625 XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
7724 use a different value for @code{gnus-message-archive-group} there. 6626 use a different value for @code{gnus-message-archive-group} there.
6627
7725 6628
7726 @table @code 6629 @table @code
7727 @item gnus-outgoing-message-group 6630 @item gnus-outgoing-message-group
7728 @vindex gnus-outgoing-message-group 6631 @vindex gnus-outgoing-message-group
7729 All outgoing messages will be put in this group. If you want to store 6632 All outgoing messages will be put in this group. If you want to store
7733 6636
7734 If you want to have greater control over what group to put each 6637 If you want to have greater control over what group to put each
7735 message in, you can set this variable to a function that checks the 6638 message in, you can set this variable to a function that checks the
7736 current newsgroup name and then returns a suitable group name (or list 6639 current newsgroup name and then returns a suitable group name (or list
7737 of names). 6640 of names).
7738
7739 This variable can be used instead of @code{gnus-message-archive-group},
7740 but the latter is the preferred method.
7741 @end table 6641 @end table
7742 6642
7743 6643
7744 @c @node Posting Styles 6644 @c @node Posting Styles
7745 @c @section Posting Styles 6645 @c @section Posting Styles
7914 @sc{nntp} server, it could be a virtual group, or it could be your own 6814 @sc{nntp} server, it could be a virtual group, or it could be your own
7915 personal mail group. 6815 personal mail group.
7916 6816
7917 A foreign group (or any group, really) is specified by a @dfn{name} and 6817 A foreign group (or any group, really) is specified by a @dfn{name} and
7918 a @dfn{select method}. To take the latter first, a select method is a 6818 a @dfn{select method}. To take the latter first, a select method is a
7919 list where the first element says what backend to use (e.g. @code{nntp}, 6819 list where the first element says what backend to use (eg. @code{nntp},
7920 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server 6820 @code{nnspool}, @code{nnml}) and the second element is the @dfn{server
7921 name}. There may be additional elements in the select method, where the 6821 name}. There may be additional elements in the select method, where the
7922 value may have special meaning for the backend in question. 6822 value may have special meaning for the backend in question.
7923 6823
7924 One could say that a select method defines a @dfn{virtual server}---so 6824 One could say that a select method defines a @dfn{virtual server}---so
7927 The @dfn{name} of the group is the name the backend will recognize the 6827 The @dfn{name} of the group is the name the backend will recognize the
7928 group as. 6828 group as.
7929 6829
7930 For instance, the group @samp{soc.motss} on the @sc{nntp} server 6830 For instance, the group @samp{soc.motss} on the @sc{nntp} server
7931 @samp{some.where.edu} will have the name @samp{soc.motss} and select 6831 @samp{some.where.edu} will have the name @samp{soc.motss} and select
7932 method @code{(nntp "some.where.edu")}. Gnus will call this group 6832 method @code{(nntp "some.where.edu")}. Gnus will call this group, in
7933 @samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp} 6833 all circumstances, @samp{nntp+some.where.edu:soc.motss}, even though the
7934 backend just knows this group as @samp{soc.motss}. 6834 @code{nntp} backend just knows this group as @samp{soc.motss}.
7935 6835
7936 The different methods all have their peculiarities, of course. 6836 The different methods all have their peculiarities, of course.
7937 6837
7938 @menu 6838 @menu
7939 * The Server Buffer:: Making and editing virtual servers. 6839 * The Server Buffer:: Making and editing virtual servers.
7959 on the same actual @sc{nntp} server. You tell Gnus which backend to 6859 on the same actual @sc{nntp} server. You tell Gnus which backend to
7960 use, and what parameters to set by specifying a @dfn{select method}. 6860 use, and what parameters to set by specifying a @dfn{select method}.
7961 6861
7962 These select methods specifications can sometimes become quite 6862 These select methods specifications can sometimes become quite
7963 complicated---say, for instance, that you want to read from the 6863 complicated---say, for instance, that you want to read from the
7964 @sc{nntp} server @samp{news.funet.fi} on port number 13, which 6864 @sc{nntp} server @samp{news.funet.fi} on port number @code{13}, which
7965 hangs if queried for @sc{nov} headers and has a buggy select. Ahem. 6865 hangs if queried for @sc{nov} headers and has a buggy select. Ahem.
7966 Anyways, if you had to specify that for each group that used this 6866 Anyways, if you had to specify that for each group that used this
7967 server, that would be too much work, so Gnus offers a way of naming 6867 server, that would be too much work, so Gnus offers a way of naming
7968 select methods, which is what you do in the server buffer. 6868 select methods, which is what you do in the server buffer.
7969 6869
7973 @menu 6873 @menu
7974 * Server Buffer Format:: You can customize the look of this buffer. 6874 * Server Buffer Format:: You can customize the look of this buffer.
7975 * Server Commands:: Commands to manipulate servers. 6875 * Server Commands:: Commands to manipulate servers.
7976 * Example Methods:: Examples server specifications. 6876 * Example Methods:: Examples server specifications.
7977 * Creating a Virtual Server:: An example session. 6877 * Creating a Virtual Server:: An example session.
7978 * Server Variables:: Which variables to set.
7979 * Servers and Methods:: You can use server names as select methods. 6878 * Servers and Methods:: You can use server names as select methods.
7980 * Unavailable Servers:: Some servers you try to contact may be down. 6879 * Unavailable Servers:: Some servers you try to contact may be down.
7981 @end menu 6880 @end menu
7982 6881
7983 @vindex gnus-server-mode-hook 6882 @vindex gnus-server-mode-hook
8068 @item l 6967 @item l
8069 @kindex l (Server) 6968 @kindex l (Server)
8070 @findex gnus-server-list-servers 6969 @findex gnus-server-list-servers
8071 List all servers (@code{gnus-server-list-servers}). 6970 List all servers (@code{gnus-server-list-servers}).
8072 6971
8073 @item s
8074 @kindex s (Server)
8075 @findex gnus-server-scan-server
8076 Request that the server scan its sources for new articles
8077 (@code{gnus-server-scan-server}). This is mainly sensible with mail
8078 servers.
8079
8080 @item g
8081 @kindex g (Server)
8082 @findex gnus-server-regenerate-server
8083 Request that the server regenerate all its data structures
8084 (@code{gnus-server-regenerate-server}). This can be useful if you have
8085 a mail backend that has gotten out of synch.
8086
8087 @end table 6972 @end table
8088 6973
8089 6974
8090 @node Example Methods 6975 @node Example Methods
8091 @subsection Example Methods 6976 @subsection Example Methods
8108 6993
8109 After these two elements, there may be a arbitrary number of 6994 After these two elements, there may be a arbitrary number of
8110 @var{(variable form)} pairs. 6995 @var{(variable form)} pairs.
8111 6996
8112 To go back to the first example---imagine that you want to read from 6997 To go back to the first example---imagine that you want to read from
8113 port 15 from that machine. This is what the select method should 6998 port @code{15} from that machine. This is what the select method should
8114 look like then: 6999 look like then:
8115 7000
8116 @lisp 7001 @lisp
8117 (nntp "news.funet.fi" (nntp-port-number 15)) 7002 (nntp "news.funet.fi" (nntp-port-number 15))
8118 @end lisp 7003 @end lisp
8138 (nnmh "public" 7023 (nnmh "public"
8139 (nnmh-directory "/usr/information/spool/") 7024 (nnmh-directory "/usr/information/spool/")
8140 (nnmh-get-new-mail nil)) 7025 (nnmh-get-new-mail nil))
8141 @end lisp 7026 @end lisp
8142 7027
8143 If you are behind a firewall and only have access to the @sc{nntp}
8144 server from the firewall machine, you can instruct Gnus to @code{rlogin}
8145 on the firewall machine and telnet from there to the @sc{nntp} server.
8146 Doing this can be rather fiddly, but your virtual server definition
8147 should probably look something like this:
8148
8149 @lisp
8150 (nntp "firewall"
8151 (nntp-address "the.firewall.machine")
8152 (nntp-open-connection-function nntp-open-rlogin)
8153 (nntp-end-of-line "\n")
8154 (nntp-rlogin-parameters
8155 ("telnet" "the.real.nntp.host" "nntp")))
8156 @end lisp
8157
8158
8159 7028
8160 @node Creating a Virtual Server 7029 @node Creating a Virtual Server
8161 @subsection Creating a Virtual Server 7030 @subsection Creating a Virtual Server
8162 7031
8163 If you're saving lots of articles in the cache by using persistent 7032 If you're saving lots of articles in the cache by using persistent
8180 7049
8181 Change that to: 7050 Change that to:
8182 7051
8183 @lisp 7052 @lisp
8184 (nnspool "cache" 7053 (nnspool "cache"
8185 (nnspool-spool-directory "~/News/cache/") 7054 (nnspool-spool-directory "~/News/cache/")
8186 (nnspool-nov-directory "~/News/cache/") 7055 (nnspool-nov-directory "~/News/cache/")
8187 (nnspool-active-file "~/News/cache/active")) 7056 (nnspool-active-file "~/News/cache/active"))
8188 @end lisp 7057 @end lisp
8189 7058
8190 Type @kbd{C-c C-c} to return to the server buffer. If you now press 7059 Type @kbd{C-c C-c} to return to the server buffer. If you now press
8191 @kbd{RET} over this virtual server, you should be entered into a browse 7060 @kbd{RET} over this virtual server, you should be entered into a browse
8192 buffer, and you should be able to enter any of the groups displayed. 7061 buffer, and you should be able to enter any of the groups displayed.
8193 7062
8194 7063
8195 @node Server Variables
8196 @subsection Server Variables
8197
8198 One sticky point when defining variables (both on backends and in Emacs
8199 in general) is that some variables are typically initialized from other
8200 variables when the definition of the variables is being loaded. If you
8201 change the "base" variable after the variables have been loaded, you
8202 won't change the "derived" variables.
8203
8204 This typically affects directory and file variables. For instance,
8205 @code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}
8206 directory variables are initialized from that variable, so
8207 @code{nnml-active-file} will be @file{~/Mail/active}. If you define a
8208 new virtual @code{nnml} server, it will @emph{not} suffice to set just
8209 @code{nnml-directory}---you have to explicitly set all the file
8210 variables to be what you want them to be. For a complete list of
8211 variables for each backend, see each backend's section later in this
8212 manual, but here's an example @code{nnml} definition:
8213
8214 @lisp
8215 (nnml "public"
8216 (nnml-directory "~/my-mail/")
8217 (nnml-active-file "~/my-mail/active")
8218 (nnml-newsgroups-file "~/my-mail/newsgroups"))
8219 @end lisp
8220
8221
8222 @node Servers and Methods 7064 @node Servers and Methods
8223 @subsection Servers and Methods 7065 @subsection Servers and Methods
8224 7066
8225 Wherever you would normally use a select method 7067 Wherever you would normally use a select method
8226 (e.g. @code{gnus-secondary-select-method}, in the group select method, 7068 (eg. @code{gnus-secondary-select-method}, in the group select method,
8227 when browsing a foreign server) you can use a virtual server name 7069 when browsing a foreign server) you can use a virtual server name
8228 instead. This could potentially save lots of typing. And it's nice all 7070 instead. This could potentially save lots of typing. And it's nice all
8229 over. 7071 over.
8230 7072
8231 7073
8238 will tell you, without making the least effort to see whether that is 7080 will tell you, without making the least effort to see whether that is
8239 actually the case or not. 7081 actually the case or not.
8240 7082
8241 That might seem quite naughty, but it does make sense most of the time. 7083 That might seem quite naughty, but it does make sense most of the time.
8242 Let's say you have 10 groups subscribed to the server 7084 Let's say you have 10 groups subscribed to the server
8243 @samp{nephelococcygia.com}. This server is located somewhere quite far 7085 @samp{nepholococcygia.com}. This server is located somewhere quite far
8244 away from you and the machine is quite slow, so it takes 1 minute just 7086 away from you, the machine is quite, so it takes 1 minute just to find
8245 to find out that it refuses connection from you today. If Gnus were to 7087 out that it refuses connection from you today. If Gnus were to attempt
8246 attempt to do that 10 times, you'd be quite annoyed, so Gnus won't 7088 to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
8247 attempt to do that. Once it has gotten a single ``connection refused'', 7089 that. Once it has gotten a single ``connection refused'', it will
8248 it will regard that server as ``down''. 7090 regard that server as ``down''.
8249 7091
8250 So, what happens if the machine was only feeling unwell temporarily? 7092 So, what happens if the machine was only feeling unwell temporarily?
8251 How do you test to see whether the machine has come up again? 7093 How do you test to see whether the machine has come up again?
8252 7094
8253 You jump to the server buffer (@pxref{The Server Buffer}) and poke it 7095 You jump to the server buffer (@pxref{The Server Buffer}) and poke it
8270 @item D 7112 @item D
8271 @kindex D (Server) 7113 @kindex D (Server)
8272 @findex gnus-server-deny-server 7114 @findex gnus-server-deny-server
8273 Mark the current server as unreachable 7115 Mark the current server as unreachable
8274 (@code{gnus-server-deny-server}). 7116 (@code{gnus-server-deny-server}).
8275
8276 @item M-o
8277 @kindex M-o (Server)
8278 @findex gnus-server-open-all-servers
8279 Open the connections to all servers in the buffer
8280 (@code{gnus-server-open-all-servers}).
8281
8282 @item M-c
8283 @kindex M-c (Server)
8284 @findex gnus-server-close-all-servers
8285 Close the connections to all servers in the buffer
8286 (@code{gnus-server-close-all-servers}).
8287 7117
8288 @item R 7118 @item R
8289 @kindex R (Server) 7119 @kindex R (Server)
8290 @findex gnus-server-remove-denials 7120 @findex gnus-server-remove-denials
8291 Remove all marks to whether Gnus was denied connection from all servers 7121 Remove all marks to whether Gnus was denied connection from all servers
8340 @findex nntp-send-authinfo 7170 @findex nntp-send-authinfo
8341 @findex nntp-send-mode-reader 7171 @findex nntp-send-mode-reader
8342 @code{nntp-server-opened-hook} is run after a connection has been made. 7172 @code{nntp-server-opened-hook} is run after a connection has been made.
8343 It can be used to send commands to the @sc{nntp} server after it has 7173 It can be used to send commands to the @sc{nntp} server after it has
8344 been contacted. By default is sends the command @code{MODE READER} to 7174 been contacted. By default is sends the command @code{MODE READER} to
8345 the server with the @code{nntp-send-mode-reader} function. 7175 the server with the @code{nntp-send-mode-reader} function. Another
8346 7176 popular function is @code{nntp-send-authinfo}, which will prompt you for
8347 @item nntp-authinfo-function 7177 an @sc{nntp} password and stuff.
8348 @vindex nntp-authinfo-function
8349 This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
8350 server. Available functions include:
8351
8352 @table @code
8353 @item nntp-send-authinfo
8354 @findex nntp-send-authinfo
8355 This function will used you current login name as the user name and will
8356 prompt you for the password. This is the default.
8357
8358 @item nntp-send-nosy-authinfo
8359 @findex nntp-send-nosy-authinfo
8360 This function will prompt you for both user name and password.
8361
8362 @item nntp-send-authinfo-from-file
8363 @findex nntp-send-authinfo-from-file
8364 This function will use your current login name as the user name and will
8365 read the @sc{nntp} password from @file{~/.nntp-authinfo}.
8366 @end table
8367 7178
8368 @item nntp-server-action-alist 7179 @item nntp-server-action-alist
8369 @vindex nntp-server-action-alist 7180 @vindex nntp-server-action-alist
8370 This is an list of regexps to match on server types and actions to be 7181 This is an list of regexps to match on server types and actions to be
8371 taken when matches are made. For instance, if you want Gnus to beep 7182 taken when matches are made. For instance, if you want Gnus to beep
8433 This hook is run as the last step when connecting to an @sc{nntp} 7244 This hook is run as the last step when connecting to an @sc{nntp}
8434 server. 7245 server.
8435 7246
8436 @findex nntp-open-rlogin 7247 @findex nntp-open-rlogin
8437 @findex nntp-open-network-stream 7248 @findex nntp-open-network-stream
8438 @item nntp-open-connection-function 7249 @item nntp-open-server-function
8439 @vindex nntp-open-connection-function 7250 @vindex nntp-open-server-function
8440 This function is used to connect to the remote system. Two pre-made 7251 This function is used to connect to the remote system. Two pre-made
8441 functions are @code{nntp-open-network-stream}, which is the default, and 7252 functions are @code{nntp-open-network-stream}, which is the default, and
8442 simply connects to some port or other on the remote system. The other 7253 simply connects to some port or other on the remote system. The other
8443 is @code{nntp-open-rlogin}, which does an rlogin on the remote system, 7254 is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
8444 and then does a telnet to the @sc{nntp} server available there. 7255 and then does a telnet to the @sc{nntp} server available there.
8445 7256
8446 @item nntp-rlogin-parameters 7257 @item nntp-rlogin-parameters
8447 @vindex nntp-rlogin-parameters 7258 @vindex nntp-rlogin-parameters
8448 If you use @code{nntp-open-rlogin} as the 7259 If you use @code{nntp-open-rlogin} as the
8449 @code{nntp-open-connection-function}, this list will be used as the 7260 @code{nntp-open-server-function}, this list will be used as the
8450 parameter list given to @code{rsh}. 7261 parameter list given to @code{rsh}.
8451 7262
8452 @item nntp-end-of-line 7263 @item nntp-end-of-line
8453 @vindex nntp-end-of-line 7264 @vindex nntp-end-of-line
8454 String to use as end-of-line markers when talking to the @sc{nntp} 7265 String to use as end-of-line markers when talking to the @sc{nntp}
8502 7313
8503 @item nntp-prepare-server-hook 7314 @item nntp-prepare-server-hook
8504 @vindex nntp-prepare-server-hook 7315 @vindex nntp-prepare-server-hook
8505 A hook run before attempting to connect to an @sc{nntp} server. 7316 A hook run before attempting to connect to an @sc{nntp} server.
8506 7317
7318 @item nntp-async-number
7319 @vindex nntp-async-number
7320 How many articles should be pre-fetched when in asynchronous mode. If
7321 this variable is @code{t}, @code{nntp} will pre-fetch all the articles
7322 that it can without bound. If it is @code{nil}, no pre-fetching will be
7323 made.
7324
8507 @item nntp-warn-about-losing-connection 7325 @item nntp-warn-about-losing-connection
8508 @vindex nntp-warn-about-losing-connection 7326 @vindex nntp-warn-about-losing-connection
8509 If this variable is non-@code{nil}, some noise will be made when a 7327 If this variable is non-@code{nil}, some noise will be made when a
8510 server closes connection. 7328 server closes connection.
8511 7329
8516 @subsection News Spool 7334 @subsection News Spool
8517 @cindex nnspool 7335 @cindex nnspool
8518 @cindex news spool 7336 @cindex news spool
8519 7337
8520 Subscribing to a foreign group from the local spool is extremely easy, 7338 Subscribing to a foreign group from the local spool is extremely easy,
8521 and might be useful, for instance, to speed up reading groups that 7339 and might be useful, for instance, to speed up reading groups like
8522 contain very big articles---@samp{alt.binaries.pictures.furniture}, for 7340 @samp{alt.binaries.pictures.furniture}.
8523 instance.
8524 7341
8525 Anyways, you just specify @code{nnspool} as the method and @samp{} (or 7342 Anyways, you just specify @code{nnspool} as the method and @samp{} (or
8526 anything else) as the address. 7343 anything else) as the address.
8527 7344
8528 If you have access to a local spool, you should probably use that as the 7345 If you have access to a local spool, you should probably use that as the
8599 * Mail Backend Variables:: Variables for customizing mail handling. 7416 * Mail Backend Variables:: Variables for customizing mail handling.
8600 * Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail. 7417 * Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail.
8601 * Mail and Procmail:: Reading mail groups that procmail create. 7418 * Mail and Procmail:: Reading mail groups that procmail create.
8602 * Incorporating Old Mail:: What about the old mail you have? 7419 * Incorporating Old Mail:: What about the old mail you have?
8603 * Expiring Mail:: Getting rid of unwanted mail. 7420 * Expiring Mail:: Getting rid of unwanted mail.
8604 * Washing Mail:: Removing gruft from the mail you get.
8605 * Duplicates:: Dealing with duplicated mail. 7421 * Duplicates:: Dealing with duplicated mail.
8606 * Not Reading Mail:: Using mail backends for reading other files. 7422 * Not Reading Mail:: Using mail backends for reading other files.
8607 * Choosing a Mail Backend:: Gnus can read a variety of mail formats. 7423 * Choosing a Mail Backend:: Gnus can read a variety of mail formats.
8608 @end menu 7424 @end menu
8609 7425
8631 7447
8632 You will probably want to split the mail into several groups, though: 7448 You will probably want to split the mail into several groups, though:
8633 7449
8634 @lisp 7450 @lisp
8635 (setq nnmail-split-methods 7451 (setq nnmail-split-methods
8636 '(("junk" "^From:.*Lars Ingebrigtsen") 7452 '(("junk" "^From:.*Lars Ingebrigtsen")
8637 ("crazy" "^Subject:.*die\\|^Organization:.*flabby") 7453 ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
8638 ("other" ""))) 7454 ("other" "")))
8639 @end lisp 7455 @end lisp
8640 7456
8641 This will result in three new @code{nnml} mail groups being created: 7457 This will result in three new mail groups being created:
8642 @samp{nnml:junk}, @samp{nnml:crazy}, and @samp{nnml:other}. All the 7458 @samp{nnml:junk}, @samp{nnml:crazy}, and @samp{nnml:other}. All the
8643 mail that doesn't fit into the first two groups will be placed in the 7459 mail that doesn't fit into the first two groups will be placed in the
8644 latter group. 7460 latter group.
8645 7461
8646 This should be sufficient for reading mail with Gnus. You might want to 7462 This should be sufficient for reading mail with Gnus. You might want to
8668 these lists is the name of the mail group (they do not have to be called 7484 these lists is the name of the mail group (they do not have to be called
8669 something beginning with @samp{mail}, by the way), and the second 7485 something beginning with @samp{mail}, by the way), and the second
8670 element is a regular expression used on the header of each mail to 7486 element is a regular expression used on the header of each mail to
8671 determine if it belongs in this mail group. 7487 determine if it belongs in this mail group.
8672 7488
8673 If the first element is the special symbol @code{junk}, then messages
8674 that match the regexp will disappear into the aether. Use with
8675 extreme caution.
8676
8677 The second element can also be a function. In that case, it will be 7489 The second element can also be a function. In that case, it will be
8678 called narrowed to the headers with the first element of the rule as the 7490 called narrowed to the headers with the first element of the rule as the
8679 argument. It should return a non-@code{nil} value if it thinks that the 7491 argument. It should return a non-@code{nil} value if it thinks that the
8680 mail belongs in that group. 7492 mail belongs in that group.
8681 7493
8682 The last of these groups should always be a general one, and the regular 7494 The last of these groups should always be a general one, and the regular
8683 expression should @emph{always} be @samp{} so that it matches any mails 7495 expression should @emph{always} be @samp{} so that it matches any
8684 that haven't been matched by any of the other regexps. (These rules are 7496 mails that haven't been matched by any of the other regexps.
8685 processed from the beginning of the alist toward the end. The first
8686 rule to make a match will "win", unless you have crossposting enabled.
8687 In that case, all matching rules will "win".)
8688 7497
8689 If you like to tinker with this yourself, you can set this variable to a 7498 If you like to tinker with this yourself, you can set this variable to a
8690 function of your choice. This function will be called without any 7499 function of your choice. This function will be called without any
8691 arguments in a buffer narrowed to the headers of an incoming mail 7500 arguments in a buffer narrowed to the headers of an incoming mail
8692 message. The function should return a list of groups names that it 7501 message. The function should return a list of groups names that it
8709 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to 7518 @code{nnmh} and @code{nnml} makes crossposts by creating hard links to
8710 the crossposted articles. However, not all files systems support hard 7519 the crossposted articles. However, not all files systems support hard
8711 links. If that's the case for you, set 7520 links. If that's the case for you, set
8712 @code{nnmail-crosspost-link-function} to @code{copy-file}. (This 7521 @code{nnmail-crosspost-link-function} to @code{copy-file}. (This
8713 variable is @code{add-name-to-file} by default.) 7522 variable is @code{add-name-to-file} by default.)
8714
8715 @kindex M-x nnmail-split-history
8716 @kindex nnmail-split-history
8717 If you wish to see where the previous mail split put the messages, you
8718 can use the @kbd{M-x nnmail-split-history} command.
8719 7523
8720 Gnus gives you all the opportunity you could possibly want for shooting 7524 Gnus gives you all the opportunity you could possibly want for shooting
8721 yourself in the foot. Let's say you create a group that will contain 7525 yourself in the foot. Let's say you create a group that will contain
8722 all the mail you get from your boss. And then you accidentally 7526 all the mail you get from your boss. And then you accidentally
8723 unsubscribe from the group. Gnus will still put all the mail from your 7527 unsubscribe from the group. Gnus will still put all the mail from your
8759 @code{MAILHOST} environment variable. If the POP server needs a 7563 @code{MAILHOST} environment variable. If the POP server needs a
8760 password, you can either set @code{nnmail-pop-password-required} to 7564 password, you can either set @code{nnmail-pop-password-required} to
8761 @code{t} and be prompted for the password, or set 7565 @code{t} and be prompted for the password, or set
8762 @code{nnmail-pop-password} to the password itself. 7566 @code{nnmail-pop-password} to the password itself.
8763 7567
8764 @code{nnmail-spool-file} can also be a list of mailboxes.
8765
8766 Your Emacs has to have been configured with @samp{--with-pop} before
8767 compilation. This is the default, but some installations have it
8768 switched off.
8769
8770 When you use a mail backend, Gnus will slurp all your mail from your 7568 When you use a mail backend, Gnus will slurp all your mail from your
8771 inbox and plonk it down in your home directory. Gnus doesn't move any 7569 inbox and plonk it down in your home directory. Gnus doesn't move any
8772 mail if you're not using a mail backend---you have to do a lot of magic 7570 mail if you're not using a mail backend---you have to do a lot of magic
8773 invocations first. At the time when you have finished drawing the 7571 invocations first. At the time when you have finished drawing the
8774 pentagram, lightened the candles, and sacrificed the goat, you really 7572 pentagram, lightened the candles, and sacrificed the goat, you really
8792 7590
8793 @vindex nnmail-prepare-incoming-hook 7591 @vindex nnmail-prepare-incoming-hook
8794 @item nnmail-prepare-incoming-hook 7592 @item nnmail-prepare-incoming-hook
8795 This is run in a buffer that holds all the new incoming mail, and can be 7593 This is run in a buffer that holds all the new incoming mail, and can be
8796 used for, well, anything, really. 7594 used for, well, anything, really.
8797
8798 @vindex nnmail-split-hook
8799 @item nnmail-split-hook
8800 @findex article-decode-rfc1522
8801 @findex RFC1522 decoding
8802 Hook run in the buffer where the mail headers of each message is kept
8803 just before the splitting based on these headers is done. The hook is
8804 free to modify the buffer contents in any way it sees fit---the buffer
8805 is discarded after the splitting has been done, and no changes performed
8806 in the buffer will show up in any files. @code{gnus-article-decode-rfc1522}
8807 is one likely function to add to this hook.
8808 7595
8809 @vindex nnmail-pre-get-new-mail-hook 7596 @vindex nnmail-pre-get-new-mail-hook
8810 @vindex nnmail-post-get-new-mail-hook 7597 @vindex nnmail-post-get-new-mail-hook
8811 @item nnmail-pre-get-new-mail-hook 7598 @item nnmail-pre-get-new-mail-hook
8812 @itemx nnmail-post-get-new-mail-hook 7599 @itemx nnmail-post-get-new-mail-hook
8835 @item nnmail-movemail-program 7622 @item nnmail-movemail-program
8836 @vindex nnmail-movemail-program 7623 @vindex nnmail-movemail-program
8837 This program is executed to move mail from the user's inbox to her home 7624 This program is executed to move mail from the user's inbox to her home
8838 directory. The default is @samp{movemail}. 7625 directory. The default is @samp{movemail}.
8839 7626
8840 This can also be a function. In that case, the function will be called
8841 with two parameters -- the name of the inbox, and the file to be moved
8842 to.
8843
8844 @item nnmail-delete-incoming 7627 @item nnmail-delete-incoming
8845 @vindex nnmail-delete-incoming 7628 @vindex nnmail-delete-incoming
8846 @cindex incoming mail files 7629 @cindex incoming mail files
8847 @cindex deleting incoming files 7630 @cindex deleting incoming files
8848 If non-@code{nil}, the mail backends will delete the temporary incoming 7631 If non-@code{nil}, the mail backends will delete the temporary incoming
8849 file after splitting mail into the proper groups. This is @code{t} by 7632 file after splitting mail into the proper groups. This is @code{nil} by
8850 default. 7633 default for reasons of security.
8851
8852 @c This is @code{nil} by
8853 @c default for reasons of security.
8854
8855 @c Since Red Gnus is an alpha release, it is to be expected to lose mail.
8856 (No Gnus release since (ding) Gnus 0.10 (or something like that) have
8857 lost mail, I think, but that's not the point. (Except certain versions
8858 of Red Gnus.)) By not deleting the Incoming* files, one can be sure to
8859 not lose mail -- if Gnus totally whacks out, one can always recover what
8860 was lost.
8861
8862 Delete the @file{Incoming*} files at will.
8863 7634
8864 @item nnmail-use-long-file-names 7635 @item nnmail-use-long-file-names
8865 @vindex nnmail-use-long-file-names 7636 @vindex nnmail-use-long-file-names
8866 If non-@code{nil}, the mail backends will use long file and directory 7637 If non-@code{nil}, the mail backends will use long file and directory
8867 names. Groups like @samp{mail.misc} will end up in directories like 7638 names. Groups like @samp{mail.misc} will end up in directories like
8871 @item nnmail-delete-file-function 7642 @item nnmail-delete-file-function
8872 @vindex nnmail-delete-file-function 7643 @vindex nnmail-delete-file-function
8873 @findex delete-file 7644 @findex delete-file
8874 Function called to delete files. It is @code{delete-file} by default. 7645 Function called to delete files. It is @code{delete-file} by default.
8875 7646
8876 @item nnmail-cache-accepted-message-ids
8877 @vindex nnmail-cache-accepted-message-ids
8878 If non-@code{nil}, put the @code{Message-ID}s of articles imported into
8879 the backend (via @code{Gcc}, for instance) into the mail duplication
8880 discovery cache. The default is @code{nil}.
8881
8882 @end table 7647 @end table
8883 7648
8884 7649
8885 @node Fancy Mail Splitting 7650 @node Fancy Mail Splitting
8886 @subsection Fancy Mail Splitting 7651 @subsection Fancy Mail Splitting
8890 @vindex nnmail-split-fancy 7655 @vindex nnmail-split-fancy
8891 @findex nnmail-split-fancy 7656 @findex nnmail-split-fancy
8892 If the rather simple, standard method for specifying how to split mail 7657 If the rather simple, standard method for specifying how to split mail
8893 doesn't allow you to do what you want, you can set 7658 doesn't allow you to do what you want, you can set
8894 @code{nnmail-split-methods} to @code{nnmail-split-fancy}. Then you can 7659 @code{nnmail-split-methods} to @code{nnmail-split-fancy}. Then you can
8895 play with the @code{nnmail-split-fancy} variable. 7660 play with the @code{nnmail-split-fancy} variable.
8896 7661
8897 Let's look at an example value of this variable first: 7662 Let's look at an example value of this variable first:
8898 7663
8899 @lisp 7664 @lisp
8900 ;; Messages from the mailer daemon are not crossposted to any of 7665 ;; Messages from the mailer daemon are not crossposted to any of
8909 ("subject" "ding" "ding.misc")) 7674 ("subject" "ding" "ding.misc"))
8910 ;; Other mailing lists... 7675 ;; Other mailing lists...
8911 (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list") 7676 (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
8912 (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list") 7677 (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
8913 ;; People... 7678 ;; People...
8914 (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) 7679 (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
8915 ;; Unmatched mail goes to the catch all group. 7680 ;; Unmatched mail goes to the catch all group.
8916 "misc.misc") 7681 "misc.misc"))")
8917 @end lisp 7682 @end lisp
8918 7683
8919 This variable has the format of a @dfn{split}. A split is a (possibly) 7684 This variable has the format of a @dfn{split}. A split is a (possibly)
8920 recursive structure where each split may contain other splits. Here are 7685 recursive structure where each split may contain other splits. Here are
8921 the five possible split syntaxes: 7686 the four possible split syntaxes:
8922 7687
8923 @enumerate 7688 @table @dfn
8924 7689
8925 @item 7690 @item GROUP
8926 @samp{group}: If the split is a string, that will be taken as a group name. 7691 If the split is a string, that will be taken as a group name.
8927 7692
8928 @item 7693 @item (FIELD VALUE SPLIT)
8929 @var{(FIELD VALUE SPLIT)}: If the split is a list, and the first 7694 If the split is a list, and the first element is a string, then that
8930 element is a string, then that means that if header FIELD (a regexp) 7695 means that if header FIELD (a regexp) contains VALUE (also a regexp),
8931 contains VALUE (also a regexp), then store the message as specified by 7696 then store the message as specified by SPLIT.
8932 SPLIT. 7697
8933 7698 @item (| SPLIT...)
8934 @item 7699 If the split is a list, and the first element is @code{|} (vertical
8935 @var{(| SPLIT...)}: If the split is a list, and the first element is 7700 bar), then process each SPLIT until one of them matches. A SPLIT is
8936 @code{|} (vertical bar), then process each SPLIT until one of them 7701 said to match if it will cause the mail message to be stored in one or
8937 matches. A SPLIT is said to match if it will cause the mail message to 7702 more groups.
8938 be stored in one or more groups. 7703
8939 7704 @item (& SPLIT...)
8940 @item 7705 If the split is a list, and the first element is @code{&}, then process
8941 @var{(& SPLIT...)}: If the split is a list, and the first element is 7706 all SPLITs in the list.
8942 @code{&}, then process all SPLITs in the list. 7707 @end table
8943 7708
8944 @item 7709 In these splits, FIELD must match a complete field name. VALUE must
8945 @code{junk}: If the split is the symbol @code{junk}, then don't save 7710 match a complete word according to the fundamental mode syntax table.
8946 this message anywhere. 7711 You can use @code{.*} in the regexps to match partial field names or
8947 7712 words.
8948 @item
8949 @var{(: function arg1 arg2 ...)}: If the split is a list, and the first
8950 element is @code{:}, then the second element will be called as a
8951 function with @var{args} given as arguments. The function should return
8952 a SPLIT.
8953
8954 @end enumerate
8955
8956 In these splits, @var{FIELD} must match a complete field name.
8957 @var{VALUE} must match a complete word according to the fundamental mode
8958 syntax table. You can use @code{.*} in the regexps to match partial
8959 field names or words. In other words, all @var{VALUE}'s are wrapped in
8960 @samp{\<} and @samp{\>} pairs.
8961 7713
8962 @vindex nnmail-split-abbrev-alist 7714 @vindex nnmail-split-abbrev-alist
8963 @var{FIELD} and @var{VALUE} can also be lisp symbols, in that case they 7715 FIELD and VALUE can also be lisp symbols, in that case they are expanded
8964 are expanded as specified by the variable 7716 as specified by the variable @code{nnmail-split-abbrev-alist}. This is
8965 @code{nnmail-split-abbrev-alist}. This is an alist of cons cells, where 7717 an alist of cons cells, where the car of the cells contains the key, and
8966 the car of the cells contains the key, and the cdr contains a string. 7718 the cdr contains a string.
8967 7719
8968 @vindex nnmail-split-fancy-syntax-table 7720 @vindex nnmail-split-fancy-syntax-table
8969 @code{nnmail-split-fancy-syntax-table} is the syntax table in effect 7721 @code{nnmail-split-fancy-syntax-table} is the syntax table in effect
8970 when all this splitting is performed. 7722 when all this splitting is performed.
8971
8972 If you want to have Gnus create groups dynamically based on some
8973 information in the headers, you can say things like:
8974
8975 @example
8976 (any "debian-\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
8977 @end example
8978
8979 That is, do @code{replace-match}-like substitions in the group names.
8980 7723
8981 7724
8982 @node Mail and Procmail 7725 @node Mail and Procmail
8983 @subsection Mail and Procmail 7726 @subsection Mail and Procmail
8984 @cindex procmail 7727 @cindex procmail
9035 7778
9036 @vindex nnmail-keep-last-article 7779 @vindex nnmail-keep-last-article
9037 If you use @code{procmail} to split things directory into an @code{nnmh} 7780 If you use @code{procmail} to split things directory into an @code{nnmh}
9038 directory (which you shouldn't do), you should set 7781 directory (which you shouldn't do), you should set
9039 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from 7782 @code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
9040 ever expiring the final article (i. e., the article with the highest 7783 ever expiring the final article in a mail newsgroup. This is quite,
9041 article number) in a mail newsgroup. This is quite, quite important. 7784 quite important.
9042
9043 Here's an example setup: The incoming spools are located in
9044 @file{~/incoming/} and have @samp{""} as suffixes (i. e., the incoming
9045 spool files have the same names as the equivalent groups). The
9046 @code{nnfolder} backend is to be used as the mail interface, and the
9047 @code{nnfolder} directory is @file{~/fMail/}.
9048
9049 @lisp
9050 (setq nnfolder-directory "~/fMail/")
9051 (setq nnmail-spool-file 'procmail)
9052 (setq nnmail-procmail-directory "~/incoming/")
9053 (setq gnus-secondary-select-methods '((nnfolder "")))
9054 (setq nnmail-procmail-suffix "")
9055 @end lisp
9056 7785
9057 7786
9058 @node Incorporating Old Mail 7787 @node Incorporating Old Mail
9059 @subsection Incorporating Old Mail 7788 @subsection Incorporating Old Mail
9060 7789
9134 match the regular expression @code{gnus-auto-expirable-newsgroups} will 7863 match the regular expression @code{gnus-auto-expirable-newsgroups} will
9135 have all articles that you read marked as expirable automatically. All 7864 have all articles that you read marked as expirable automatically. All
9136 articles that are marked as expirable have an @samp{E} in the first 7865 articles that are marked as expirable have an @samp{E} in the first
9137 column in the summary buffer. 7866 column in the summary buffer.
9138 7867
9139 Note that making a group auto-expirable don't mean that all read
9140 articles are expired---only the articles that are marked as expirable
9141 will be expired. Also note the using the @kbd{d} command won't make
9142 groups expirable---only semi-automatic marking of articles as read will
9143 mark the articles as expirable in auto-expirable groups.
9144
9145 Let's say you subscribe to a couple of mailing lists, and you want the 7868 Let's say you subscribe to a couple of mailing lists, and you want the
9146 articles you have read to disappear after a while: 7869 articles you have read to disappear after a while:
9147 7870
9148 @lisp 7871 @lisp
9149 (setq gnus-auto-expirable-newsgroups 7872 (setq gnus-auto-expirable-newsgroups
9151 @end lisp 7874 @end lisp
9152 7875
9153 Another way to have auto-expiry happen is to have the element 7876 Another way to have auto-expiry happen is to have the element
9154 @code{auto-expire} in the group parameters of the group. 7877 @code{auto-expire} in the group parameters of the group.
9155 7878
9156 If you use adaptive scoring (@pxref{Adaptive Scoring}) and
9157 auto-expiring, you'll have problems. Auto-expiring and adaptive scoring
9158 doesn't really mix very well.
9159
9160 @vindex nnmail-expiry-wait 7879 @vindex nnmail-expiry-wait
9161 The @code{nnmail-expiry-wait} variable supplies the default time an 7880 The @code{nnmail-expiry-wait} variable supplies the default time an
9162 expirable article has to live. Gnus starts counting days from when the 7881 expirable article has to live. The default is seven days.
9163 message @emph{arrived}, not from when it was sent. The default is seven
9164 days.
9165 7882
9166 Gnus also supplies a function that lets you fine-tune how long articles 7883 Gnus also supplies a function that lets you fine-tune how long articles
9167 are to live, based on what group they are in. Let's say you want to 7884 are to live, based on what group they are in. Let's say you want to
9168 have one month expiry period in the @samp{mail.private} group, a one day 7885 have one month expiry period in the @samp{mail.private} group, a one day
9169 expiry period in the @samp{mail.junk} group, and a six day expiry period 7886 expiry period in the @samp{mail.junk} group, and a six day expiry period
9212 crying to me when you discover that the regexp you used matched the 7929 crying to me when you discover that the regexp you used matched the
9213 wrong group and all your important mail has disappeared. Be a 7930 wrong group and all your important mail has disappeared. Be a
9214 @emph{man}! Or a @emph{woman}! Whatever you feel more comfortable 7931 @emph{man}! Or a @emph{woman}! Whatever you feel more comfortable
9215 with! So there! 7932 with! So there!
9216 7933
9217 Most people make most of their mail groups total-expirable, though.
9218
9219
9220 @node Washing Mail
9221 @subsection Washing Mail
9222 @cindex mail washing
9223 @cindex list server brain damage
9224 @cindex incoming mail treatment
9225
9226 Mailers and list servers are notorious for doing all sorts of really,
9227 really stupid things with mail. ``Hey, RFC822 doesn't explicitly
9228 prohibit us from adding the string @code{wE aRe ElItE!!!!!1!!} to the
9229 end of all lines passing through our server, so let's do that!!!!1!''
9230 Yes, but RFC822 wasn't designed to be read by morons. Things that were
9231 considered to be self-evident were not discussed. So. Here we are.
9232
9233 Case in point: The German version of Microsoft Exchange adds @samp{AW:
9234 } to the subjects of replies instead of @samp{Re: }. I could pretend to
9235 be shocked and dismayed by this, but I haven't got the energy. It is to
9236 laugh.
9237
9238 Gnus provides a plethora of functions for washing articles while
9239 displaying them, but it might be nicer to do the filtering before
9240 storing the mail to disc. For that purpose, we have three hooks and
9241 various functions that can be put in these hooks.
9242
9243 @table @code
9244 @item nnmail-prepare-incoming-hook
9245 @vindex nnmail-prepare-incoming-hook
9246 This hook is called before doing anything with the mail and is meant for
9247 grand, sweeping gestures. Functions to be used include:
9248
9249 @table @code
9250 @item nnheader-ms-strip-cr
9251 @findex nnheader-ms-strip-cr
9252 Remove trailing carriage returns from each line. This is default on
9253 Emacs running on MS machines.
9254
9255 @end table
9256
9257 @item nnmail-prepare-incoming-header-hook
9258 @vindex nnmail-prepare-incoming-header-hook
9259 This hook is called narrowed to each header. It can be used when
9260 cleaning up the headers. Functions that can be used include:
9261
9262 @table @code
9263 @item nnmail-remove-leading-whitespace
9264 @findex nnmail-remove-leading-whitespace
9265 Clear leading white space that ``helpful'' listservs have added to the
9266 headers too make them look nice. Aaah.
9267
9268 @item nnmail-remove-list-identifiers
9269 @findex nnmail-remove-list-identifiers
9270 Some list servers add an identifier---for example, @samp{(idm)}---to the
9271 beginning of all @code{Subject} headers. I'm sure that's nice for
9272 people who use stone age mail readers. This function will remove
9273 strings that match the @code{nnmail-list-identifiers} regexp, which can
9274 also be a list of regexp.
9275
9276 For instance, if you want to remove the @samp{(idm)} and the
9277 @samp{nagnagnag} identifiers:
9278
9279 @lisp
9280 (setq nnmail-list-identifiers
9281 '("(idm)" "nagnagnag"))
9282 @end lisp
9283
9284 @item nnmail-remove-tabs
9285 @findex nnmail-remove-tabs
9286 Translate all @samp{TAB} characters into @samp{SPACE} characters.
9287
9288 @end table
9289
9290 @item nnmail-prepare-incoming-message-hook
9291 @vindex nnmail-prepare-incoming-message-hook
9292 This hook is called narrowed to each message. Functions to be used
9293 include:
9294
9295 @table @code
9296 @item article-de-quoted-unreadable
9297 @findex article-de-quoted-unreadable
9298 Decode Quoted Readable encoding.
9299
9300 @end table
9301 @end table
9302
9303 7934
9304 @node Duplicates 7935 @node Duplicates
9305 @subsection Duplicates 7936 @subsection Duplicates
9306 7937
9307 @vindex nnmail-treat-duplicates 7938 @vindex nnmail-treat-duplicates
9309 @vindex nnmail-message-id-cache-file 7940 @vindex nnmail-message-id-cache-file
9310 @cindex duplicate mails 7941 @cindex duplicate mails
9311 If you are a member of a couple of mailing list, you will sometime 7942 If you are a member of a couple of mailing list, you will sometime
9312 receive two copies of the same mail. This can be quite annoying, so 7943 receive two copies of the same mail. This can be quite annoying, so
9313 @code{nnmail} checks for and treats any duplicates it might find. To do 7944 @code{nnmail} checks for and treats any duplicates it might find. To do
9314 this, it keeps a cache of old @code{Message-ID}s--- 7945 this, it keeps a cache of old @code{Message-ID}s -
9315 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by 7946 @code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
9316 default. The approximate maximum number of @code{Message-ID}s stored 7947 default. The approximate maximum number of @code{Message-ID}s stored
9317 there is controlled by the @code{nnmail-message-id-cache-length} 7948 there is controlled by the @code{nnmail-message-id-cache-length}
9318 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be 7949 variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
9319 stored.) If all this sounds scary to you, you can set 7950 stored.) If all this sounds scary to you, you can set
9320 @code{nnmail-treat-duplicates} to @code{warn} (which is what it is by 7951 @code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
9321 default), and @code{nnmail} won't delete duplicate mails. Instead it 7952 default), and @code{nnmail} won't delete duplicate mails. Instead it
9322 will insert a warning into the head of the mail saying that it thinks 7953 will generate a brand new @code{Message-ID} for the mail and insert a
9323 that this is a duplicate of a different message. 7954 warning into the head of the mail saying that it thinks that this is a
7955 duplicate of a different message.
9324 7956
9325 This variable can also be a function. If that's the case, the function 7957 This variable can also be a function. If that's the case, the function
9326 will be called from a buffer narrowed to the message in question with 7958 will be called from a buffer narrowed to the message in question with
9327 the @code{Message-ID} as a parameter. The function must return either 7959 the @code{Message-ID} as a parameter. The function must return either
9328 @code{nil}, @code{warn}, or @code{delete}. 7960 @code{nil}, @code{warn}, or @code{delete}.
9527 @findex nnml-generate-nov-databases 8159 @findex nnml-generate-nov-databases
9528 If your @code{nnml} groups and @sc{nov} files get totally out of whack, 8160 If your @code{nnml} groups and @sc{nov} files get totally out of whack,
9529 you can do a complete update by typing @kbd{M-x 8161 you can do a complete update by typing @kbd{M-x
9530 nnml-generate-nov-databases}. This command will trawl through the 8162 nnml-generate-nov-databases}. This command will trawl through the
9531 entire @code{nnml} hierarchy, looking at each and every article, so it 8163 entire @code{nnml} hierarchy, looking at each and every article, so it
9532 might take a while to complete. A better interface to this 8164 might take a while to complete.
9533 functionality can be found in the server buffer (@pxref{Server
9534 Commands}).
9535 8165
9536 8166
9537 @node MH Spool 8167 @node MH Spool
9538 @subsubsection MH Spool 8168 @subsubsection MH Spool
9539 @cindex nnmh 8169 @cindex nnmh
9611 Gnus can do more than just read news or mail. The methods described 8241 Gnus can do more than just read news or mail. The methods described
9612 below allow Gnus to view directories and files as if they were 8242 below allow Gnus to view directories and files as if they were
9613 newsgroups. 8243 newsgroups.
9614 8244
9615 @menu 8245 @menu
9616 * Directory Groups:: You can read a directory as if it was a newsgroup. 8246 * Directory Groups:: You can read a directory as if it was a newsgroup.
9617 * Anything Groups:: Dired? Who needs dired? 8247 * Anything Groups:: Dired? Who needs dired?
9618 * Document Groups:: Single files can be the basis of a group. 8248 * Document Groups:: Single files can be the basis of a group.
9619 * SOUP:: Reading @sc{SOUP} packets ``offline''. 8249 * SOUP:: Reading @sc{SOUP} packets ``offline''.
9620 * Web Searches:: Creating groups from articles that match a string.
9621 * Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
9622 @end menu 8250 @end menu
9623 8251
9624 8252
9625 @node Directory Groups 8253 @node Directory Groups
9626 @subsection Directory Groups 8254 @subsection Directory Groups
9634 This might be an opportune moment to mention @code{ange-ftp}, that most 8262 This might be an opportune moment to mention @code{ange-ftp}, that most
9635 wonderful of all wonderful Emacs packages. When I wrote @code{nndir}, I 8263 wonderful of all wonderful Emacs packages. When I wrote @code{nndir}, I
9636 didn't think much about it---a backend to read directories. Big deal. 8264 didn't think much about it---a backend to read directories. Big deal.
9637 8265
9638 @code{ange-ftp} changes that picture dramatically. For instance, if you 8266 @code{ange-ftp} changes that picture dramatically. For instance, if you
9639 enter the @code{ange-ftp} file name 8267 enter @file{"/ftp.hpc.uh.edu:/pub/emacs/ding-list/"} as the the
9640 @file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the the directory name, 8268 directory name, ange-ftp will actually allow you to read this directory
9641 @code{ange-ftp} will actually allow you to read this directory over at 8269 over at @samp{sina} as a newsgroup. Distributed news ahoy!
9642 @samp{sina} as a newsgroup. Distributed news ahoy!
9643 8270
9644 @code{nndir} will use @sc{nov} files if they are present. 8271 @code{nndir} will use @sc{nov} files if they are present.
9645 8272
9646 @code{nndir} is a ``read-only'' backend---you can't delete or expire 8273 @code{nndir} is a ``read-only'' backend---you can't delete or expire
9647 articles with this method. You can use @code{nnmh} or @code{nnml} for 8274 articles with this method. You can use @code{nnmh} or @code{nnml} for
9663 a group, @code{nneething} must create ``headers'' that Gnus can use. 8290 a group, @code{nneething} must create ``headers'' that Gnus can use.
9664 After all, Gnus is a newsreader, in case you're 8291 After all, Gnus is a newsreader, in case you're
9665 forgetting. @code{nneething} does this in a two-step process. First, it 8292 forgetting. @code{nneething} does this in a two-step process. First, it
9666 snoops each file in question. If the file looks like an article (i.e., 8293 snoops each file in question. If the file looks like an article (i.e.,
9667 the first few lines look like headers), it will use this as the head. 8294 the first few lines look like headers), it will use this as the head.
9668 If this is just some arbitrary file without a head (e.g. a C source 8295 If this is just some arbitrary file without a head (eg. a C source
9669 file), @code{nneething} will cobble up a header out of thin air. It 8296 file), @code{nneething} will cobble up a header out of thin air. It
9670 will use file ownership, name and date and do whatever it can with these 8297 will use file ownership, name and date and do whatever it can with these
9671 elements. 8298 elements.
9672 8299
9673 All this should happen automatically for you, and you will be presented 8300 All this should happen automatically for you, and you will be presented
9770 8397
9771 If you have some old archived articles that you want to insert into your 8398 If you have some old archived articles that you want to insert into your
9772 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with 8399 new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
9773 that. Say you have an old @file{RMAIL} file with mail that you now want 8400 that. Say you have an old @file{RMAIL} file with mail that you now want
9774 to split into your new @code{nnml} groups. You look at that file using 8401 to split into your new @code{nnml} groups. You look at that file using
9775 @code{nndoc} (using the @kbd{G f} command in the group buffer 8402 @code{nndoc}, set the process mark on all the articles in the buffer
9776 (@pxref{Foreign Groups})), set the process mark on all the articles in 8403 (@kbd{M P b}, for instance), and then re-spool (@kbd{B r}) using
9777 the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r}) 8404 @code{nnml}. If all goes well, all the mail in the @file{RMAIL} file is
9778 using @code{nnml}. If all goes well, all the mail in the @file{RMAIL} 8405 now also stored in lots of @code{nnml} directories, and you can delete
9779 file is now also stored in lots of @code{nnml} directories, and you can 8406 that pesky @file{RMAIL} file. If you have the guts!
9780 delete that pesky @file{RMAIL} file. If you have the guts!
9781 8407
9782 Virtual server variables: 8408 Virtual server variables:
9783 8409
9784 @table @code 8410 @table @code
9785 @item nndoc-article-type 8411 @item nndoc-article-type
9786 @vindex nndoc-article-type 8412 @vindex nndoc-article-type
9787 This should be one of @code{mbox}, @code{babyl}, @code{digest}, 8413 This should be one of @code{mbox}, @code{babyl}, @code{digest},
9788 @code{mmdf}, @code{forward}, @code{rfc934}, @code{rfc822-forward}, 8414 @code{mmdf}, @code{forward}, @code{news}, @code{rnews},
9789 @code{news}, @code{rnews}, @code{mime-digest}, @code{clari-briefs}, or 8415 @code{mime-digest}, @code{clari-briefs}, or @code{guess}.
9790 @code{guess}.
9791 8416
9792 @item nndoc-post-type 8417 @item nndoc-post-type
9793 @vindex nndoc-post-type 8418 @vindex nndoc-post-type
9794 This variable says whether Gnus is to consider the group a news group or 8419 This variable says whether Gnus is to consider the group a news group or
9795 a mail group. There are two legal values: @code{mail} (the default) 8420 a mail group. There are two legal values: @code{mail} (the default)
9796 and @code{news}. 8421 and @code{news}.
9797 @end table 8422 @end table
9798 8423
9799 @menu
9800 * Document Server Internals:: How to add your own document types.
9801 @end menu
9802
9803
9804 @node Document Server Internals
9805 @subsubsection Document Server Internals
9806
9807 Adding new document types to be recognized by @code{nndoc} isn't
9808 difficult. You just have to whip up a definition of what the document
9809 looks like, write a predicate function to recognize that document type,
9810 and then hook into @code{nndoc}.
9811
9812 First, here's an example document type definition:
9813
9814 @example
9815 (mmdf
9816 (article-begin . "^\^A\^A\^A\^A\n")
9817 (body-end . "^\^A\^A\^A\^A\n"))
9818 @end example
9819
9820 The definition is simply a unique @dfn{name} followed by a series of
9821 regexp pseudo-variable settings. Below are the possible
9822 variables---don't be daunted by the number of variables; most document
9823 types can be defined with very few settings:
9824
9825 @table @code
9826 @item first-article
9827 If present, @code{nndoc} will skip past all text until it finds
9828 something that match this regexp. All text before this will be
9829 totally ignored.
9830
9831 @item article-begin
9832 This setting has to be present in all document type definitions. It
9833 says what the beginning of each article looks like.
9834
9835 @item head-begin-function
9836 If present, this should be a function that moves point to the head of
9837 the article.
9838
9839 @item nndoc-head-begin
9840 If present, this should be a regexp that matches the head of the
9841 article.
9842
9843 @item nndoc-head-end
9844 This should match the end of the head of the article. It defaults to
9845 @samp{^$}---the empty line.
9846
9847 @item body-begin-function
9848 If present, this function should move point to the beginning of the body
9849 of the article.
9850
9851 @item body-begin
9852 This should match the beginning of the body of the article. It defaults
9853 to @samp{^\n}.
9854
9855 @item body-end-function
9856 If present, this function should move point to the end of the body of
9857 the article.
9858
9859 @item body-end
9860 If present, this should match the end of the body of the article.
9861
9862 @item nndoc-file-end
9863 If present, this should match the end of the file. All text after this
9864 regexp will be totally ignored.
9865
9866 @end table
9867
9868 So, using these variables @code{nndoc} is able to dissect a document
9869 file into a series of articles, each with a head and a body. However, a
9870 few more variables are needed since not all document types are all that
9871 news-like---variables needed to transform the head or the body into
9872 something that's palatable for Gnus:
9873
9874 @table @code
9875 @item prepare-body-function
9876 If present, this function will be called when requesting an article. It
9877 will be called with point at the start of the body, and is useful if the
9878 document has encoded some parts of its contents.
9879
9880 @item article-transform-function
9881 If present, this function is called when requesting an article. It's
9882 meant to be used how more wide-ranging transformation of both head and
9883 body of the article.
9884
9885 @item generate-head-function
9886 If present, this function is called to generate a head that Gnus can
9887 understand. It is called with the article number as a parameter, and is
9888 expected to generate a nice head for the article in question. It is
9889 called when requesting the headers of all articles.
9890
9891 @end table
9892
9893 Let's look at the most complicated example I can come up with---standard
9894 digests:
9895
9896 @example
9897 (standard-digest
9898 (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
9899 (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
9900 (prepare-body-function . nndoc-unquote-dashes)
9901 (body-end-function . nndoc-digest-body-end)
9902 (head-end . "^ ?$")
9903 (body-begin . "^ ?\n")
9904 (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
9905 (subtype digest guess))
9906 @end example
9907
9908 We see that all text before a 70-width line of dashes is ignored; all
9909 text after a line that starts with that @samp{^End of} is also ignored;
9910 each article begins with a 30-width line of dashes; the line separating
9911 the head from the body may contain a single space; and that the body is
9912 run through @code{nndoc-unquote-dashes} before being delivered.
9913
9914 To hook your own document definition into @code{nndoc}, use the
9915 @code{nndoc-add-type} function. It takes two parameters---the first is
9916 the definition itself and the second (optional) parameter says where in
9917 the document type definition alist to put this definition. The alist is
9918 traversed sequentially, and @code{nndoc-TYPE-type-p} is called for each
9919 type. So @code{nndoc-mmdf-type-p} is called to see whether a document
9920 is of @code{mmdf} type, and so on. These type predicates should return
9921 @code{nil} if the document is not of the correct type; @code{t} if it is
9922 of the correct type; and a number if the document might be of the
9923 correct type. A high number means high probability; a low number means
9924 low probability with @samp{0} being the lowest legal number.
9925
9926 8424
9927 @node SOUP 8425 @node SOUP
9928 @subsection SOUP 8426 @subsection SOUP
9929 @cindex SOUP 8427 @cindex SOUP
9930 @cindex offline 8428 @cindex offline
9944 8442
9945 A file format called @sc{soup} has been developed for transporting news 8443 A file format called @sc{soup} has been developed for transporting news
9946 and mail from servers to home machines and back again. It can be a bit 8444 and mail from servers to home machines and back again. It can be a bit
9947 fiddly. 8445 fiddly.
9948 8446
9949 First some terminology:
9950
9951 @table @dfn
9952
9953 @item server
9954 This is the machine that is connected to the outside world and where you
9955 get news and/or mail from.
9956
9957 @item home machine
9958 This is the machine that you want to do the actual reading and responding
9959 on. It is typically not connected to the rest of the world in any way.
9960
9961 @item packet
9962 Something that contains messages and/or commands. There are two kinds
9963 of packets:
9964
9965 @table @dfn
9966 @item message packets
9967 These are packets made at the server, and typically contains lots of
9968 messages for you to read. These are called @file{SoupoutX.tgz} by
9969 default, where @var{X} is a number.
9970
9971 @item response packets
9972 These are packets made at the home machine, and typically contains
9973 replies that you've written. These are called @file{SoupinX.tgz} by
9974 default, where @var{X} is a number.
9975
9976 @end table
9977
9978 @end table
9979
9980
9981 @enumerate 8447 @enumerate
9982 8448
9983 @item 8449 @item
9984 You log in on the server and create a @sc{soup} packet. You can either 8450 You log in on the server and create a @sc{soup} packet. You can either
9985 use a dedicated @sc{soup} thingie (like the @code{awk} program), or you 8451 use a dedicated @sc{soup} thingie, or you can use Gnus to create the
9986 can use Gnus to create the packet with its @sc{soup} commands (@kbd{O 8452 packet with the @kbd{O s} command.
9987 s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
9988 8453
9989 @item 8454 @item
9990 You transfer the packet home. Rail, boat, car or modem will do fine. 8455 You transfer the packet home. Rail, boat, car or modem will do fine.
9991 8456
9992 @item 8457 @item
9993 You put the packet in your home directory. 8458 You put the packet in your home directory.
9994 8459
9995 @item 8460 @item
9996 You fire up Gnus on your home machine using the @code{nnsoup} backend as 8461 You fire up Gnus using the @code{nnsoup} backend as the native server.
9997 the native or secondary server.
9998 8462
9999 @item 8463 @item
10000 You read articles and mail and answer and followup to the things you 8464 You read articles and mail and answer and followup to the things you
10001 want (@pxref{SOUP Replies}). 8465 want.
10002 8466
10003 @item 8467 @item
10004 You do the @kbd{G s r} command to pack these replies into a @sc{soup} 8468 You do the @kbd{G s r} command to pack these replies into a @sc{soup}
10005 packet. 8469 packet.
10006 8470
10025 @end menu 8489 @end menu
10026 8490
10027 8491
10028 @node SOUP Commands 8492 @node SOUP Commands
10029 @subsubsection SOUP Commands 8493 @subsubsection SOUP Commands
10030
10031 These are commands for creating and manipulating @sc{soup} packets.
10032 8494
10033 @table @kbd 8495 @table @kbd
10034 @item G s b 8496 @item G s b
10035 @kindex G s b (Group) 8497 @kindex G s b (Group)
10036 @findex gnus-group-brew-soup 8498 @findex gnus-group-brew-soup
10039 process/prefix convention. 8501 process/prefix convention.
10040 8502
10041 @item G s w 8503 @item G s w
10042 @kindex G s w (Group) 8504 @kindex G s w (Group)
10043 @findex gnus-soup-save-areas 8505 @findex gnus-soup-save-areas
10044 Save all @sc{soup} data files (@code{gnus-soup-save-areas}). 8506 Save all data files (@code{gnus-soup-save-areas}).
10045 8507
10046 @item G s s 8508 @item G s s
10047 @kindex G s s (Group) 8509 @kindex G s s (Group)
10048 @findex gnus-soup-send-replies 8510 @findex gnus-soup-send-replies
10049 Send all replies from the replies packet 8511 Send all replies from the replies packet
10062 @item O s 8524 @item O s
10063 @kindex O s (Summary) 8525 @kindex O s (Summary)
10064 @findex gnus-soup-add-article 8526 @findex gnus-soup-add-article
10065 This summary-mode command adds the current article to a @sc{soup} packet 8527 This summary-mode command adds the current article to a @sc{soup} packet
10066 (@code{gnus-soup-add-article}). It understands the process/prefix 8528 (@code{gnus-soup-add-article}). It understands the process/prefix
10067 convention (@pxref{Process/Prefix}). 8529 convention.
10068 8530
10069 @end table 8531 @end table
10070 8532
10071 8533
10072 There are a few variables to customize where Gnus will put all these 8534 There are a few variables to customize where Gnus will put all these
10080 @sc{soup} packets. The default is @file{~/SoupBrew/}. 8542 @sc{soup} packets. The default is @file{~/SoupBrew/}.
10081 8543
10082 @item gnus-soup-replies-directory 8544 @item gnus-soup-replies-directory
10083 @vindex gnus-soup-replies-directory 8545 @vindex gnus-soup-replies-directory
10084 This is what Gnus will use as a temporary directory while sending our 8546 This is what Gnus will use as a temporary directory while sending our
10085 reply packets. @file{~/SoupBrew/SoupReplies/} is the default. 8547 reply packets. The default is @file{~/SoupBrew/SoupReplies/}.
10086 8548
10087 @item gnus-soup-prefix-file 8549 @item gnus-soup-prefix-file
10088 @vindex gnus-soup-prefix-file 8550 @vindex gnus-soup-prefix-file
10089 Name of the file where Gnus stores the last used prefix. The default is 8551 Name of the file where Gnus stores the last used prefix. The default is
10090 @samp{gnus-prefix}. 8552 @samp{gnus-prefix}.
10192 @sc{soup} system. 8654 @sc{soup} system.
10193 8655
10194 In specific, this is what it does: 8656 In specific, this is what it does:
10195 8657
10196 @lisp 8658 @lisp
10197 (setq message-send-news-function 'nnsoup-request-post) 8659 (setq gnus-inews-article-function 'nnsoup-request-post)
10198 (setq message-send-mail-function 'nnsoup-request-mail) 8660 (setq send-mail-function 'nnsoup-request-mail)
10199 @end lisp 8661 @end lisp
10200 8662
10201 And that's it, really. If you only want news to go into the @sc{soup} 8663 And that's it, really. If you only want news to go into the @sc{soup}
10202 system you just use the first line. If you only want mail to be 8664 system you just use the first line. If you only want mail to be
10203 @sc{soup}ed you use the second. 8665 @sc{soup}ed you use the second.
10204
10205
10206 @node Web Searches
10207 @subsection Web Searches
10208 @cindex nnweb
10209 @cindex DejaNews
10210 @cindex Alta Vista
10211 @cindex InReference
10212 @cindex Usenet searches
10213 @cindex searching the Usenet
10214
10215 It's, like, too neat to search the Usenet for articles that match a
10216 string, but it, like, totally @emph{sucks}, like, totally, to use one of
10217 those, like, Web browsers, and you, like, have to, rilly, like, look at
10218 the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
10219 searches without having to use a browser.
10220
10221 The @code{nnweb} backend allows an easy interface to the mighty search
10222 engine. You create an @code{nnweb} group, enter a search pattern, and
10223 then enter the group and read the articles like you would any normal
10224 group. The @kbd{G w} command in the group buffer (@pxref{Foreign
10225 Groups}) will do this in an easy-to-use fashion.
10226
10227 @code{nnweb} groups don't really lend themselves to being solid
10228 groups---they have a very fleeting idea of article numbers. In fact,
10229 each time you enter an @code{nnweb} group (not even changing the search
10230 pattern), you are likely to get the articles ordered in a different
10231 manner. Not even using duplicate suppression (@code{Duplicate
10232 Suppression}) will help, since @code{nnweb} doesn't even know the
10233 @code{Message-ID} of the articles before reading them using some search
10234 engines (DejaNews, for instance). The only possible way to keep track
10235 of which articles you've read is by scoring on the @code{Date}
10236 header---mark all articles that were posted before the last date you
10237 read the group as read.
10238
10239 If the search engine changes its output substantially, @code{nnweb}
10240 won't be able to parse it and will fail. One could hardly fault the Web
10241 providers if they were to do this---their @emph{raison d'être} is to
10242 make money off of advertisements, not to provide services to the
10243 community. Since @code{nnweb} washes the ads off all the articles, one
10244 might think that the providers might be somewhat miffed. We'll see.
10245
10246 You must have the @code{url} and @code{w3} package installed to be able
10247 to use @code{nnweb}.
10248
10249 Virtual server variables:
10250
10251 @table @code
10252 @item nnweb-type
10253 @vindex nnweb-type
10254 What search engine type is being used. The currently supported types
10255 are @code{dejanews}, @code{altavista} and @code{reference}.
10256
10257 @item nnweb-search
10258 @vindex nnweb-search
10259 The search string to feed to the search engine.
10260
10261 @item nnweb-max-hits
10262 @vindex nnweb-max-hits
10263 Advisory maximum number of hits per search to display. The default is
10264 100.
10265
10266 @item nnweb-type-definition
10267 @vindex nnweb-type-definition
10268 Type-to-definition alist. This alist says what @code{nnweb} should do
10269 with the various search engine types. The following elements must be
10270 present:
10271
10272 @table @code
10273 @item article
10274 Function to decode the article and provide something that Gnus
10275 understands.
10276
10277 @item map
10278 Function to create an article number to message header and URL alist.
10279
10280 @item search
10281 Function to send the search string to the search engine.
10282
10283 @item address
10284 The address the aforementioned function should send the search string
10285 to.
10286
10287 @item id
10288 Format string URL to fetch an article by @code{Message-ID}.
10289 @end table
10290
10291 @end table
10292
10293
10294
10295 @node Mail-To-News Gateways
10296 @subsection Mail-To-News Gateways
10297 @cindex mail-to-news gateways
10298 @cindex gateways
10299
10300 If your local @code{nntp} server doesn't allow posting, for some reason
10301 or other, you can post using one of the numerous mail-to-news gateways.
10302 The @code{nngateway} backend provides the interface.
10303
10304 Note that you can't read anything from this backend---it can only be
10305 used to post with.
10306
10307 Server variables:
10308
10309 @table @code
10310 @item nngateway-address
10311 @vindex nngateway-address
10312 This is the address of the mail-to-news gateway.
10313
10314 @item nngateway-header-transformation
10315 @vindex nngateway-header-transformation
10316 News headers have often have to be transformed in some odd way or other
10317 for the mail-to-news gateway to accept it. This variable says what
10318 transformation should be called, and defaults to
10319 @code{nngateway-simple-header-transformation}. The function is called
10320 narrowed to the headers to be transformed and with one parameter---the
10321 gateway address.
10322
10323 This default function just inserts a new @code{To} header based on the
10324 @code{Newsgroups} header and the gateway address---an article with this
10325 @code{Newsgroups} header:
10326
10327 @example
10328 Newsgroups: alt.religion.emacs
10329 @end example
10330
10331 will get this @code{From} header inserted:
10332
10333 @example
10334 To: alt-religion-emacs@@GATEWAY
10335 @end example
10336
10337 @end table
10338
10339 So, to use this, simply say something like:
10340
10341 @lisp
10342 (setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
10343 @end lisp
10344 8666
10345 8667
10346 @node Combined Groups 8668 @node Combined Groups
10347 @section Combined Groups 8669 @section Combined Groups
10348 8670
10501 * Summary Score Commands:: Adding score entries for the current group. 8823 * Summary Score Commands:: Adding score entries for the current group.
10502 * Group Score Commands:: General score commands. 8824 * Group Score Commands:: General score commands.
10503 * Score Variables:: Customize your scoring. (My, what terminology). 8825 * Score Variables:: Customize your scoring. (My, what terminology).
10504 * Score File Format:: What a score file may contain. 8826 * Score File Format:: What a score file may contain.
10505 * Score File Editing:: You can edit score files by hand as well. 8827 * Score File Editing:: You can edit score files by hand as well.
10506 * Adaptive Scoring:: Big Sister Gnus knows what you read. 8828 * Adaptive Scoring:: Big Sister Gnus @emph{knows} what you read.
10507 * Home Score File:: How to say where new score entries are to go.
10508 * Followups To Yourself:: Having Gnus notice when people answer you. 8829 * Followups To Yourself:: Having Gnus notice when people answer you.
10509 * Scoring Tips:: How to score effectively. 8830 * Scoring Tips:: How to score effectively.
10510 * Reverse Scoring:: That problem child of old is not problem. 8831 * Reverse Scoring:: That problem child of old is not problem.
10511 * Global Score Files:: Earth-spanning, ear-splitting score files. 8832 * Global Score Files:: Earth-spanning, ear-splitting score files.
10512 * Kill Files:: They are still here, but they can be ignored. 8833 * Kill Files:: They are still here, but they can be ignored.
10513 * Converting Kill Files:: Translating kill files to score files.
10514 * GroupLens:: Getting predictions on what you like to read. 8834 * GroupLens:: Getting predictions on what you like to read.
10515 * Advanced Scoring:: Using logical expressions to build score rules.
10516 * Score Decays:: It can be useful to let scores wither away.
10517 @end menu 8835 @end menu
10518 8836
10519 8837
10520 @node Summary Score Commands 8838 @node Summary Score Commands
10521 @section Summary Score Commands 8839 @section Summary Score Commands
10527 @dfn{current score file alist}. The score commands simply insert 8845 @dfn{current score file alist}. The score commands simply insert
10528 entries into this list, and upon group exit, this list is saved. 8846 entries into this list, and upon group exit, this list is saved.
10529 8847
10530 The current score file is by default the group's local score file, even 8848 The current score file is by default the group's local score file, even
10531 if no such score file actually exists. To insert score commands into 8849 if no such score file actually exists. To insert score commands into
10532 some other score file (e.g. @file{all.SCORE}), you must first make this 8850 some other score file (eg. @file{all.SCORE}), you must first make this
10533 score file the current one. 8851 score file the current one.
10534 8852
10535 General score commands that don't actually change the score file: 8853 General score commands that don't actually change the score file:
10536 8854
10537 @table @kbd 8855 @table @kbd
10552 @findex gnus-score-find-trace 8870 @findex gnus-score-find-trace
10553 Display all score rules that have been used on the current article 8871 Display all score rules that have been used on the current article
10554 (@code{gnus-score-find-trace}). 8872 (@code{gnus-score-find-trace}).
10555 8873
10556 @item V R 8874 @item V R
10557 @kindex V R (Summary) 8875 @cindex V R (Summary)
10558 @findex gnus-summary-rescore 8876 @findex gnus-summary-rescore
10559 Run the current summary through the scoring process 8877 Run the current summary through the scoring process
10560 (@code{gnus-summary-rescore}). This might be useful if you're playing 8878 (@code{gnus-summary-rescore}). This might be useful if you're playing
10561 around with your score files behind Gnus' back and want to see the 8879 around with your score files behind Gnus' back and want to see the
10562 effect you're having. 8880 effect you're having.
10587 (@code{gnus-score-edit-file}). 8905 (@code{gnus-score-edit-file}).
10588 8906
10589 @item V F 8907 @item V F
10590 @kindex V F (Summary) 8908 @kindex V F (Summary)
10591 @findex gnus-score-flush-cache 8909 @findex gnus-score-flush-cache
10592 Flush the score cache (@code{gnus-score-flush-cache}). This is useful 8910 Flush the score cahe (@code{gnus-score-flush-cache}). This is useful
10593 after editing score files. 8911 after editing score files.
10594 8912
10595 @item V C 8913 @item V C
10596 @kindex V C (Summary) 8914 @kindex V C (Summary)
10597 @findex gnus-score-customize 8915 @findex gnus-score-customize
10688 9006
10689 @item s 9007 @item s
10690 Substring matching. 9008 Substring matching.
10691 9009
10692 @item f 9010 @item f
10693 Fuzzy matching (@pxref{Fuzzy Matching}). 9011 Fuzzy matching.
10694 9012
10695 @item r 9013 @item r
10696 Regexp matching 9014 Regexp matching
10697 @end table 9015 @end table
10698 9016
10834 9152
10835 @item gnus-summary-default-score 9153 @item gnus-summary-default-score
10836 @vindex gnus-summary-default-score 9154 @vindex gnus-summary-default-score
10837 Default score of an article, which is 0 by default. 9155 Default score of an article, which is 0 by default.
10838 9156
10839 @item gnus-summary-expunge-below
10840 @vindex gnus-summary-expunge-below
10841 Don't display the summary lines of articles that have scores lower than
10842 this variable. This is @code{nil} by default, which means that no
10843 articles will be hidden.
10844
10845 @item gnus-score-over-mark 9157 @item gnus-score-over-mark
10846 @vindex gnus-score-over-mark 9158 @vindex gnus-score-over-mark
10847 Mark (in the third column) used for articles with a score over the 9159 Mark (in the third column) used for articles with a score over the
10848 default. Default is @samp{+}. 9160 default. Default is @samp{+}.
10849 9161
10865 Only apply the group's own score file. 9177 Only apply the group's own score file.
10866 9178
10867 @item gnus-score-find-bnews 9179 @item gnus-score-find-bnews
10868 @findex gnus-score-find-bnews 9180 @findex gnus-score-find-bnews
10869 Apply all score files that match, using bnews syntax. This is the 9181 Apply all score files that match, using bnews syntax. This is the
10870 default. If the current group is @samp{gnu.emacs.gnus}, for instance, 9182 default. For instance, if the current group is @samp{gnu.emacs.gnus},
10871 @file{all.emacs.all.SCORE}, @file{not.alt.all.SCORE} and 9183 @file{all.emacs.all.SCORE}, @file{not.alt.all.SCORE} and
10872 @file{gnu.all.SCORE} would all apply. In short, the instances of 9184 @file{gnu.all.SCORE} would all apply. In short, the instances of
10873 @samp{all} in the score file names are translated into @samp{.*}, and 9185 @samp{all} in the score file names are translated into @samp{.*}, and
10874 then a regexp match is done. 9186 then a regexp match is done.
10875 9187
10876 This means that if you have some score entries that you want to apply to 9188 This means that if you have some score entries that you want to apply to
10877 all groups, then you put those entries in the @file{all.SCORE} file. 9189 all groups, then you put those entries in the @file{all.SCORE} file.
10878 9190
10879 The score files are applied in a semi-random order, although Gnus will
10880 try to apply the more general score files before the more specific score
10881 files. It does this by looking at the number of elements in the score
10882 file names---discarding the @samp{all} elements.
10883
10884 @item gnus-score-find-hierarchical 9191 @item gnus-score-find-hierarchical
10885 @findex gnus-score-find-hierarchical 9192 @findex gnus-score-find-hierarchical
10886 Apply all score files from all the parent groups. This means that you 9193 Apply all score files from all the parent groups. This means that you
10887 can't have score files like @file{all.SCORE}, but you can have 9194 can't have score files like @file{all.SCORE} or @file{all.emacs.SCORE},
10888 @file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE}. 9195 but you can have @file{SCORE}, @file{comp.SCORE} and
9196 @file{comp.emacs.SCORE}.
10889 9197
10890 @end table 9198 @end table
10891 This variable can also be a list of functions. In that case, all these 9199 This variable can also be a list of functions. In that case, all these
10892 functions will be called, and all the returned lists of score files will 9200 functions will be called, and all the returned lists of score files will
10893 be applied. These functions can also return lists of score alists 9201 be applied. These functions can also return lists of score alists
10997 @item 9305 @item
10998 If the third element is present, it should be a number---the @dfn{date 9306 If the third element is present, it should be a number---the @dfn{date
10999 element}. This date says when the last time this score entry matched, 9307 element}. This date says when the last time this score entry matched,
11000 which provides a mechanism for expiring the score entries. It this 9308 which provides a mechanism for expiring the score entries. It this
11001 element is not present, the score entry is permanent. The date is 9309 element is not present, the score entry is permanent. The date is
11002 represented by the number of days since December 31, 1 BCE. 9310 represented by the number of days since December 31, 1 ce.
11003 9311
11004 @item 9312 @item
11005 If the fourth element is present, it should be a symbol---the @dfn{type 9313 If the fourth element is present, it should be a symbol---the @dfn{type
11006 element}. This element specifies what function should be used to see 9314 element}. This element specifies what function should be used to see
11007 whether this score entry matches the article. What match types that can 9315 whether this score entry matches the article. What match types that can
11008 be used depends on what header you wish to perform the match on. 9316 be used depends on what header you wish to perform the match on.
11009 @table @dfn 9317 @table @dfn
11010 9318
11011 @item From, Subject, References, Xref, Message-ID 9319 @item From, Subject, References, Xref, Message-ID
11012 For most header types, there are the @code{r} and @code{R} (regexp), as 9320 For most header types, there are the @code{r} and @code{R} (regexp) as
11013 well as @code{s} and @code{S} (substring) types, and @code{e} and 9321 well as @code{s} and @code{S} (substring) types and @code{e} and
11014 @code{E} (exact match), and @code{w} (word match) types. If this 9322 @code{E} (exact match) types. If this element is not present, Gnus will
11015 element is not present, Gnus will assume that substring matching should 9323 assume that substring matching should be used. @code{R} and @code{S}
11016 be used. @code{R}, @code{S}, and @code{E} differ from the others in 9324 differ from the other two in that the matches will be done in a
11017 that the matches will be done in a case-sensitive manner. All these 9325 case-sensitive manner. All these one-letter types are really just
11018 one-letter types are really just abbreviations for the @code{regexp}, 9326 abbreviations for the @code{regexp}, @code{string} and @code{exact}
11019 @code{string}, @code{exact}, and @code{word} types, which you can use 9327 types, which you can use instead, if you feel like.
11020 instead, if you feel like.
11021 9328
11022 @item Lines, Chars 9329 @item Lines, Chars
11023 These two headers use different match types: @code{<}, @code{>}, 9330 These two headers use different match types: @code{<}, @code{>},
11024 @code{=}, @code{>=} and @code{<=}. When matching on @code{Lines}, be 9331 @code{=}, @code{>=} and @code{<=}.
11025 careful because some backends (like @code{nndir}) do not generate
11026 @code{Lines} header, so every article ends up being marked as having 0
11027 lines. This can lead to strange results if you happen to lower score of
11028 the articles with few lines.
11029 9332
11030 @item Date 9333 @item Date
11031 For the Date header we have three kinda silly match types: 9334 For the Date header we have three match types: @code{before}, @code{at}
11032 @code{before}, @code{at} and @code{after}. I can't really imagine this 9335 and @code{after}. I can't really imagine this ever being useful, but,
11033 ever being useful, but, like, it would feel kinda silly not to provide 9336 like, it would feel kinda silly not to provide this function. Just in
11034 this function. Just in case. You never know. Better safe than sorry. 9337 case. You never know. Better safe than sorry. Once burnt, twice shy.
11035 Once burnt, twice shy. Don't judge a book by its cover. Never not have 9338 Don't judge a book by its cover. Never not have sex on a first date.
11036 sex on a first date. (I have been told that at least one person, and I 9339 (I have been told that at least one person, and I quote, ``found this
11037 quote, ``found this function indispensable'', however.) 9340 function indispensable'', however.)
11038
11039 @cindex ISO8601
11040 @cindex date
11041 A more useful match type is @code{regexp}. With it, you can match the
11042 date string using a regular expression. The date is normalized to
11043 ISO8601 compact format first---@samp{YYYYMMDDTHHMMSS}. If you want to
11044 match all articles that have been posted on April 1st in every year, you
11045 could use @samp{....0401.........} as a match string, for instance.
11046 (Note that the date is kept in its original time zone, so this will
11047 match articles that were posted when it was April 1st where the article
11048 was posted from. Time zones are such wholesome fun for the whole
11049 family, eh?)
11050 9341
11051 @item Head, Body, All 9342 @item Head, Body, All
11052 These three match keys use the same match types as the @code{From} (etc) 9343 These three match keys use the same match types as the @code{From} (etc)
11053 header uses. 9344 header uses.
11054 9345
11055 @item Followup 9346 @item Followup
11056 This match key is somewhat special, in that it will match the 9347 This match key will add a score entry on all articles that followup to
11057 @code{From} header, and affect the score of not only the matching 9348 some author. Uses the same match types as the @code{From} header uses.
11058 articles, but also all followups to the matching articles. This allows 9349
11059 you e.g. increase the score of followups to your own articles, or 9350 @item Thread
11060 decrease the score of followups to the articles of some known 9351 This match key will add a score entry on all articles that are part of
11061 trouble-maker. Uses the same match types as the @code{From} header 9352 a thread. Uses the same match types as the @code{References} header
11062 uses. 9353 uses.
11063
11064 @item Thread
11065 This match key works along the same lines as the @code{Followup} match
11066 key. If you say that you want to score on a (sub-)thread that is
11067 started by an article with a @code{Message-ID} @var{X}, then you add a
11068 @samp{thread} match. This will add a new @samp{thread} match for each
11069 article that has @var{X} in its @code{References} header. (These new
11070 @samp{thread} matches will use the @code{Message-ID}s of these matching
11071 articles.) This will ensure that you can raise/lower the score of an
11072 entire thread, even though some articles in the thread may not have
11073 complete @code{References} headers. Note that using this may lead to
11074 undeterministic scores of the articles in the thread.
11075 @end table 9354 @end table
11076 @end enumerate 9355 @end enumerate
11077 9356
11078 @item mark 9357 @item mark
11079 The value of this entry should be a number. Any articles with a score 9358 The value of this entry should be a number. Any articles with a score
11098 The value of this entry should be any number of file names. These files 9377 The value of this entry should be any number of file names. These files
11099 are assumed to be score files as well, and will be loaded the same way 9378 are assumed to be score files as well, and will be loaded the same way
11100 this one was. 9379 this one was.
11101 9380
11102 @item exclude-files 9381 @item exclude-files
11103 The clue of this entry should be any number of files. These files will 9382 The clue of this entry should be any number of files. This files will
11104 not be loaded, even though they would normally be so, for some reason or 9383 not be loaded, even though they would normally be so, for some reason or
11105 other. 9384 other.
11106 9385
11107 @item eval 9386 @item eval
11108 The value of this entry will be @code{eval}el. This element will be 9387 The value of this entry will be @code{eval}el. This element will be
11119 will only follow a few of the threads, also want to see any new threads. 9398 will only follow a few of the threads, also want to see any new threads.
11120 9399
11121 You can do this with the following two score file entries: 9400 You can do this with the following two score file entries:
11122 9401
11123 @example 9402 @example
11124 (orphan -500) 9403 (orphan -500)
11125 (mark-and-expunge -100) 9404 (mark-and-expunge -100)
11126 @end example 9405 @end example
11127 9406
11128 When you enter the group the first time, you will only see the new 9407 When you enter the group the first time, you will only see the new
11129 threads. You then raise the score of the threads that you find 9408 threads. You then raise the score of the threads that you find
11130 interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the 9409 interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the
11220 @vindex gnus-use-adaptive-scoring 9499 @vindex gnus-use-adaptive-scoring
11221 When you read an article, or mark an article as read, or kill an 9500 When you read an article, or mark an article as read, or kill an
11222 article, you leave marks behind. On exit from the group, Gnus can sniff 9501 article, you leave marks behind. On exit from the group, Gnus can sniff
11223 these marks and add score elements depending on what marks it finds. 9502 these marks and add score elements depending on what marks it finds.
11224 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to 9503 You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
11225 @code{t} or @code{(line)}. If you want score adaptively on separate 9504 @code{t}.
11226 words appearing in the subjects, you should set this variable to
11227 @code{(word)}. If you want to use both adaptive methods, set this
11228 variable to @code{(word line)}.
11229 9505
11230 @vindex gnus-default-adaptive-score-alist 9506 @vindex gnus-default-adaptive-score-alist
11231 To give you complete control over the scoring process, you can customize 9507 To give you complete control over the scoring process, you can customize
11232 the @code{gnus-default-adaptive-score-alist} variable. For instance, it 9508 the @code{gnus-default-adaptive-score-alist} variable. For instance, it
11233 might look something like this: 9509 might look something like this:
11266 If you have marked 10 articles with the same subject with 9542 If you have marked 10 articles with the same subject with
11267 @code{gnus-del-mark}, the rule for that mark will be applied ten times. 9543 @code{gnus-del-mark}, the rule for that mark will be applied ten times.
11268 That means that that subject will get a score of ten times -1, which 9544 That means that that subject will get a score of ten times -1, which
11269 should be, unless I'm much mistaken, -10. 9545 should be, unless I'm much mistaken, -10.
11270 9546
11271 If you have auto-expirable (mail) groups (@pxref{Expiring Mail}), all
11272 the read articles will be marked with the @samp{E} mark. This'll
11273 probably make adaptive scoring slightly impossible, so auto-expiring and
11274 adaptive scoring doesn't really mix very well.
11275
11276 The headers you can score on are @code{from}, @code{subject}, 9547 The headers you can score on are @code{from}, @code{subject},
11277 @code{message-id}, @code{references}, @code{xref}, @code{lines}, 9548 @code{message-id}, @code{references}, @code{xref}, @code{lines},
11278 @code{chars} and @code{date}. In addition, you can score on 9549 @code{chars} and @code{date}. In addition, you can score on
11279 @code{followup}, which will create an adaptive score entry that matches 9550 @code{followup}, which will create an adaptive score entry that matches
11280 on the @code{References} header using the @code{Message-ID} of the 9551 on the @code{References} header using the @code{Message-ID} of the
11311 the length of the match is less than 9582 the length of the match is less than
11312 @code{gnus-score-exact-adapt-limit}, exact matching will be used. If 9583 @code{gnus-score-exact-adapt-limit}, exact matching will be used. If
11313 this variable is @code{nil}, exact matching will always be used to avoid 9584 this variable is @code{nil}, exact matching will always be used to avoid
11314 this problem. 9585 this problem.
11315 9586
11316 @vindex gnus-default-adaptive-word-score-alist
11317 As mentioned above, you can adapt either on individual words or entire
11318 headers. If you adapt on words, the
11319 @code{gnus-default-adaptive-word-score-alist} variable says what score
11320 each instance of a word should add given a mark.
11321
11322 @lisp
11323 (setq gnus-default-adaptive-word-score-alist
11324 `((,gnus-read-mark . 30)
11325 (,gnus-catchup-mark . -10)
11326 (,gnus-killed-mark . -20)
11327 (,gnus-del-mark . -15)))
11328 @end lisp
11329
11330 This is the default value. If you have adaption on words enabled, every
11331 word that appears in subjects of articles that are marked with
11332 @code{gnus-read-mark} will result in a score rule that increase the
11333 score with 30 points.
11334
11335 @vindex gnus-default-ignored-adaptive-words
11336 @vindex gnus-ignored-adaptive-words
11337 Words that appear in the @code{gnus-default-ignored-adaptive-words} list
11338 will be ignored. If you wish to add more words to be ignored, use the
11339 @code{gnus-ignored-adaptive-words} list instead.
11340
11341 @vindex gnus-adaptive-word-syntax-table
11342 When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
11343 syntax table in effect. It is similar to the standard syntax table, but
11344 it considers numbers to be non-word-constituent characters.
11345
11346 After using this scheme for a while, it might be nice to write a
11347 @code{gnus-psychoanalyze-user} command to go through the rules and see
11348 what words you like and what words you don't like. Or perhaps not.
11349
11350 Note that the adaptive word scoring thing is highly experimental and is
11351 likely to change in the future. Initial impressions seem to indicate
11352 that it's totally useless as it stands. Some more work (involving more
11353 rigorous statistical methods) will have to be done to make this useful.
11354
11355
11356 @node Home Score File
11357 @section Home Score File
11358
11359 The score file where new score file entries will go is called the
11360 @dfn{home score file}. This is normally (and by default) the score file
11361 for the group itself. For instance, the home score file for
11362 @samp{gnu.emacs.gnus} is @file{gnu.emacs.gnus.SCORE}.
11363
11364 However, this may not be what you want. It is often convenient to share
11365 a common home score file among many groups---all @samp{emacs} groups
11366 could perhaps use the same home score file.
11367
11368 @vindex gnus-home-score-file
11369 The variable that controls this is @code{gnus-home-score-file}. It can
11370 be:
11371
11372 @enumerate
11373 @item
11374 A string. Then this file will be used as the home score file for all
11375 groups.
11376
11377 @item
11378 A function. The result of this function will be used as the home score
11379 file. The function will be called with the name of the group as the
11380 parameter.
11381
11382 @item
11383 A list. The elements in this list can be:
11384
11385 @enumerate
11386 @item
11387 @var{(regexp file-name)}. If the @var{regexp} matches the group name,
11388 the @var{file-name} will will be used as the home score file.
11389
11390 @item
11391 A function. If the function returns non-nil, the result will be used as
11392 the home score file.
11393
11394 @item
11395 A string. Use the string as the home score file.
11396 @end enumerate
11397
11398 The list will be traversed from the beginning towards the end looking
11399 for matches.
11400
11401 @end enumerate
11402
11403 So, if you want to use just a single score file, you could say:
11404
11405 @lisp
11406 (setq gnus-home-score-file
11407 "my-total-score-file.SCORE")
11408 @end lisp
11409
11410 If you want to use @file{gnu.SCORE} for all @samp{gnu} groups and
11411 @file{rec.SCORE} for all @samp{rec} groups (and so on), you can say:
11412
11413 @lisp
11414 (setq gnus-home-score-file
11415 'gnus-hierarchial-home-score-file)
11416 @end lisp
11417
11418 This is a ready-made function provided for your convenience.
11419
11420 If you want to have one score file for the @samp{emacs} groups and
11421 another for the @samp{comp} groups, while letting all other groups use
11422 their own home score files:
11423
11424 @lisp
11425 (setq gnus-home-score-file
11426 ;; All groups that match the regexp "\\.emacs"
11427 '("\\.emacs" "emacs.SCORE")
11428 ;; All the comp groups in one score file
11429 ("^comp" "comp.SCORE"))
11430 @end lisp
11431
11432 @vindex gnus-home-adapt-file
11433 @code{gnus-home-adapt-file} works exactly the same way as
11434 @code{gnus-home-score-file}, but says what the home adaptive score file
11435 is instead. All new adaptive file entries will go into the file
11436 specified by this variable, and the same syntax is allowed.
11437
11438 In addition to using @code{gnus-home-score-file} and
11439 @code{gnus-home-adapt-file}, you can also use group parameters
11440 (@pxref{Group Parameters}) and topic parameters (@pxref{Topic
11441 Parameters}) to achieve much the same. Group and topic parameters take
11442 precedence over this variable.
11443
11444 9587
11445 @node Followups To Yourself 9588 @node Followups To Yourself
11446 @section Followups To Yourself 9589 @section Followups To Yourself
11447 9590
11448 Gnus offers two commands for picking out the @code{Message-ID} header in 9591 Gnus offers two commands for picking out the @code{Message-ID} header in
11463 @findex gnus-score-followup-thread 9606 @findex gnus-score-followup-thread
11464 This will add a score to all articles that appear in a thread ``below'' 9607 This will add a score to all articles that appear in a thread ``below''
11465 your own article. 9608 your own article.
11466 @end table 9609 @end table
11467 9610
11468 @vindex message-sent-hook 9611 @vindex gnus-inews-article-hook
11469 These two functions are both primarily meant to be used in hooks like 9612 These two functions are both primarily meant to be used in hooks like
11470 @code{message-sent-hook}. 9613 @code{message-send-hook}.
11471
11472 If you look closely at your own @code{Message-ID}, you'll notice that
11473 the first two or three characters are always the same. Here's two of
11474 mine:
11475
11476 @example
11477 <x6u3u47icf.fsf@@eyesore.no>
11478 <x6sp9o7ibw.fsf@@eyesore.no>
11479 @end example
11480
11481 So ``my'' ident on this machine is @samp{x6}. This can be
11482 exploited---the following rule will raise the score on all followups to
11483 myself:
11484
11485 @lisp
11486 ("references"
11487 ("<x6[0-9a-z]+\\.fsf@@.*eyesore.no>" 1000 nil r))
11488 @end lisp
11489
11490 Whether it's the first two or first three characters that are ``yours''
11491 is system-dependent.
11492
11493 9614
11494 @node Scoring Tips 9615 @node Scoring Tips
11495 @section Scoring Tips 9616 @section Scoring Tips
11496 @cindex scoring tips 9617 @cindex scoring tips
11497 9618
11574 All you have to do to use other people's score files is to set the 9695 All you have to do to use other people's score files is to set the
11575 @code{gnus-global-score-files} variable. One entry for each score file, 9696 @code{gnus-global-score-files} variable. One entry for each score file,
11576 or each score file directory. Gnus will decide by itself what score 9697 or each score file directory. Gnus will decide by itself what score
11577 files are applicable to which group. 9698 files are applicable to which group.
11578 9699
11579 Say you want to use the score file 9700 Say you want to use all score files in the
11580 @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE} and 9701 @file{/ftp@@ftp.some-where:/pub/score} directory and the single score
11581 all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory: 9702 file @file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE}:
11582 9703
11583 @lisp 9704 @lisp
11584 (setq gnus-global-score-files 9705 (setq gnus-global-score-files
11585 '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE" 9706 '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
11586 "/ftp@@ftp.some-where:/pub/score/")) 9707 "/ftp@@ftp.some-where:/pub/score/"))
11647 Anyway, a kill file is a normal @code{emacs-lisp} file. You can put any 9768 Anyway, a kill file is a normal @code{emacs-lisp} file. You can put any
11648 forms into this file, which means that you can use kill files as some 9769 forms into this file, which means that you can use kill files as some
11649 sort of primitive hook function to be run on group entry, even though 9770 sort of primitive hook function to be run on group entry, even though
11650 that isn't a very good idea. 9771 that isn't a very good idea.
11651 9772
11652 Normal kill files look like this: 9773 XCNormal kill files look like this:
11653 9774
11654 @lisp 9775 @lisp
11655 (gnus-kill "From" "Lars Ingebrigtsen") 9776 (gnus-kill "From" "Lars Ingebrigtsen")
11656 (gnus-kill "Subject" "ding") 9777 (gnus-kill "Subject" "ding")
11657 (gnus-expunge "X") 9778 (gnus-expunge "X")
11726 A hook called in kill-file mode buffers. 9847 A hook called in kill-file mode buffers.
11727 9848
11728 @end table 9849 @end table
11729 9850
11730 9851
11731 @node Converting Kill Files
11732 @section Converting Kill Files
11733 @cindex kill files
11734 @cindex converting kill files
11735
11736 If you have loads of old kill files, you may want to convert them into
11737 score files. If they are ``regular'', you can use
11738 the @file{gnus-kill-to-score.el} package; if not, you'll have to do it
11739 by hand.
11740
11741 The kill to score conversion package isn't included in Gnus by default.
11742 You can fetch it from
11743 @file{http://www.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}.
11744
11745 If your old kill files are very complex---if they contain more
11746 non-@code{gnus-kill} forms than not, you'll have to convert them by
11747 hand. Or just let them be as they are. Gnus will still use them as
11748 before.
11749
11750
11751 @node GroupLens 9852 @node GroupLens
11752 @section GroupLens 9853 @section GroupLens
11753 @cindex GroupLens 9854 @cindex GroupLens
11754 9855
11755 GroupLens is a collaborative filtering system that helps you work 9856 GroupLens is a collaborative filtering system that helps you work
11776 9877
11777 @node Using GroupLens 9878 @node Using GroupLens
11778 @subsection Using GroupLens 9879 @subsection Using GroupLens
11779 9880
11780 To use GroupLens you must register a pseudonym with your local Better 9881 To use GroupLens you must register a pseudonym with your local Better
11781 Bit Bureau (BBB). 9882 Bit Bureau (BBB). At the moment the only better bit in town is at
11782 @samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only 9883 @samp{http://www.cs.umn.edu/Research/GroupLens/bbb.html}.
11783 better bit in town is at the moment.
11784 9884
11785 Once you have registered you'll need to set a couple of variables. 9885 Once you have registered you'll need to set a couple of variables.
11786 9886
11787 @table @code 9887 @table @code
11788 9888
11791 Setting this variable to a non-@code{nil} value will make Gnus hook into 9891 Setting this variable to a non-@code{nil} value will make Gnus hook into
11792 all the relevant GroupLens functions. 9892 all the relevant GroupLens functions.
11793 9893
11794 @item grouplens-pseudonym 9894 @item grouplens-pseudonym
11795 @vindex grouplens-pseudonym 9895 @vindex grouplens-pseudonym
11796 This variable should be set to the pseudonym you got when registering 9896 This variable should be set to the pseudonum you got when registering
11797 with the Better Bit Bureau. 9897 with the Better Bit Bureau.
11798 9898
11799 @item grouplens-newsgroups 9899 @item grouplens-newsgroups
11800 @vindex grouplens-newsgroups 9900 @vindex grouplens-newsgroups
11801 A list of groups that you want to get GroupLens predictions for. 9901 A list of groups that you want to get GroupLens predictions for.
11924 enhanced. It accepts the same specs as the normal summary line format 10024 enhanced. It accepts the same specs as the normal summary line format
11925 (@pxref{Summary Buffer Lines}). The default is 10025 (@pxref{Summary Buffer Lines}). The default is
11926 @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n}. 10026 @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n}.
11927 10027
11928 @item grouplens-bbb-host 10028 @item grouplens-bbb-host
11929 Host running the bbbd server. @samp{grouplens.cs.umn.edu} is the 10029 Host running the bbbd server. The default is
11930 default. 10030 @samp{grouplens.cs.umn.edu}.
11931 10031
11932 @item grouplens-bbb-port 10032 @item grouplens-bbb-port
11933 Port of the host running the bbbd server. The default is 9000. 10033 Port of the host running the bbbd server. The default is 9000.
11934 10034
11935 @item grouplens-score-offset 10035 @item grouplens-score-offset
11941 This variable allows the user to magnify the effect of GroupLens scores. 10041 This variable allows the user to magnify the effect of GroupLens scores.
11942 The scale factor is applied after the offset. The default is 1. 10042 The scale factor is applied after the offset. The default is 1.
11943 10043
11944 @end table 10044 @end table
11945 10045
11946
11947 @node Advanced Scoring
11948 @section Advanced Scoring
11949
11950 Scoring on Subjects and From headers is nice enough, but what if you're
11951 really interested in what a person has to say only when she's talking
11952 about a particular subject? Or what about if you really don't want to
11953 read what person A has to say when she's following up to person B, but
11954 want to read what she says when she's following up to person C?
11955
11956 By using advanced scoring rules you may create arbitrarily complex
11957 scoring patterns.
11958
11959 @menu
11960 * Advanced Scoring Syntax:: A definition.
11961 * Advanced Scoring Examples:: What they look like.
11962 * Advanced Scoring Tips:: Getting the most out of it.
11963 @end menu
11964
11965
11966 @node Advanced Scoring Syntax
11967 @subsection Advanced Scoring Syntax
11968
11969 Ordinary scoring rules have a string as the first element in the rule.
11970 Advanced scoring rules have a list as the first element. The second
11971 element is the score to be applied if the first element evaluated to a
11972 non-@code{nil} value.
11973
11974 These lists may consist of three logical operators, one redirection
11975 operator, and various match operators.
11976
11977 Logical operators:
11978
11979 @table @code
11980 @item &
11981 @itemx and
11982 This logical operator will evaluate each of its arguments until it finds
11983 one that evaluates to @code{false}, and then it'll stop. If all arguments
11984 evaluate to @code{true} values, then this operator will return
11985 @code{true}.
11986
11987 @item |
11988 @itemx or
11989 This logical operator will evaluate each of its arguments until it finds
11990 one that evaluates to @code{true}. If no arguments are @code{true},
11991 then this operator will return @code{false}.
11992
11993 @item !
11994 @itemx not
11995 @itemx ¬
11996 This logical operator only takes a single argument. It returns the
11997 inverse of the value of its argument.
11998
11999 @end table
12000
12001 There is an @dfn{indirection operator} that will make its arguments
12002 apply to the ancestors of the current article being scored. For
12003 instance, @code{1-} will make score rules apply to the parent of the
12004 current article. @code{2-} will make score fules apply to the
12005 grandparent of the current article. Alternatively, you can write
12006 @code{^^}, where the number of @code{^}s (carets) say how far back into
12007 the ancestry you want to go.
12008
12009 Finally, we have the match operators. These are the ones that do the
12010 real work. Match operators are header name strings followed by a match
12011 and a match type. A typical match operator looks like @samp{("from"
12012 "Lars Ingebrigtsen" s)}. The header names are the same as when using
12013 simple scoring, and the match types are also the same.
12014
12015
12016 @node Advanced Scoring Examples
12017 @subsection Advanced Scoring Examples
12018
12019 Let's say you want to increase the score of articles written by Lars
12020 when he's talking about Gnus:
12021
12022 @example
12023 ((&
12024 ("from" "Lars Ingebrigtsen")
12025 ("subject" "Gnus"))
12026 1000)
12027 @end example
12028
12029 Quite simple, huh?
12030
12031 When he writes long articles, he sometimes has something nice to say:
12032
12033 @example
12034 ((&
12035 ("from" "Lars Ingebrigtsen")
12036 (|
12037 ("subject" "Gnus")
12038 ("lines" 100 >)))
12039 1000)
12040 @end example
12041
12042 However, when he responds to things written by Reig Eigil Logge, you
12043 really don't want to read what he's written:
12044
12045 @example
12046 ((&
12047 ("from" "Lars Ingebrigtsen")
12048 (1- ("from" "Reig Eigir Logge")))
12049 -100000)
12050 @end example
12051
12052 Everybody that follows up Redmondo when he writes about disappearing
12053 socks should have their scores raised, but only when they talk about
12054 white socks. However, when Lars talks about socks, it's usually not
12055 very interesting:
12056
12057 @example
12058 ((&
12059 (1-
12060 (&
12061 ("from" "redmondo@@.*no" r)
12062 ("body" "disappearing.*socks" t)))
12063 (! ("from" "Lars Ingebrigtsen"))
12064 ("body" "white.*socks"))
12065 1000)
12066 @end example
12067
12068 The possibilities are endless.
12069
12070
12071 @node Advanced Scoring Tips
12072 @subsection Advanced Scoring Tips
12073
12074 The @code{&} and @code{|} logical operators do short-circuit logic.
12075 That is, they stop processing their arguments when it's clear what the
12076 result of the operation will be. For instance, if one of the arguments
12077 of an @code{&} evaluates to @code{false}, there's no point in evaluating
12078 the rest of the arguments. This means that you should put slow matches
12079 (@samp{body}, @code{header}) last and quick matches (@samp{from},
12080 @samp{subject}) first.
12081
12082 The indirection arguments (@code{1-} and so on) will make their
12083 arguments work on previous generations of the thread. If you say
12084 something like:
12085
12086 @example
12087 ...
12088 (1-
12089 (1-
12090 ("from" "lars")))
12091 ...
12092 @end example
12093
12094 Then that means "score on the from header of the grandparent of the
12095 current article". An indirection is quite fast, but it's better to say:
12096
12097 @example
12098 (1-
12099 (&
12100 ("from" "Lars")
12101 ("subject" "Gnus")))
12102 @end example
12103
12104 than it is to say:
12105
12106 @example
12107 (&
12108 (1- ("from" "Lars"))
12109 (1- ("subject" "Gnus")))
12110 @end example
12111
12112
12113 @node Score Decays
12114 @section Score Decays
12115 @cindex score decays
12116 @cindex decays
12117
12118 You may find that your scores have a tendency to grow without
12119 bounds, especially if you're using adaptive scoring. If scores get too
12120 big, they lose all meaning---they simply max out and it's difficult to
12121 use them in any sensible way.
12122
12123 @vindex gnus-decay-scores
12124 @findex gnus-decay-score
12125 @vindex gnus-score-decay-function
12126 Gnus provides a mechanism for decaying scores to help with this problem.
12127 When score files are loaded and @code{gnus-decay-scores} is
12128 non-@code{nil}, Gnus will run the score files through the decaying
12129 mechanism thereby lowering the scores of all non-permanent score rules.
12130 The decay itself if performed by the @code{gnus-score-decay-function}
12131 function, which is @code{gnus-decay-score} by default. Here's the
12132 definition of that function:
12133
12134 @lisp
12135 (defun gnus-decay-score (score)
12136 (floor
12137 (- score
12138 (* (if (< score 0) 1 -1)
12139 (min score
12140 (max gnus-score-decay-constant
12141 (* (abs score)
12142 gnus-score-decay-scale)))))))
12143 @end lisp
12144
12145 @vindex gnus-score-decay-scale
12146 @vindex gnus-score-decay-constant
12147 @code{gnus-score-decay-constant} is 3 by default and
12148 @code{gnus-score-decay-scale} is 0.05. This should cause the following:
12149
12150 @enumerate
12151 @item
12152 Scores between -3 and 3 will be set to 0 when this function is called.
12153
12154 @item
12155 Scores with magnitudes between 3 and 60 will be shrunk by 3.
12156
12157 @item
12158 Scores with magnitudes greater than 60 will be shrunk by 5% of the
12159 score.
12160 @end enumerate
12161
12162 If you don't like this decay function, write your own. It is called
12163 with the score to be decayed as its only parameter, and it should return
12164 the new score, which should be an integer.
12165
12166 Gnus will try to decay scores once a day. If you haven't run Gnus for
12167 four days, Gnus will decay the scores four times, for instance.
12168 10046
12169 10047
12170 @node Various 10048 @node Various
12171 @chapter Various 10049 @chapter Various
12172 10050
12180 * Highlighting and Menus:: Making buffers look all nice and cozy. 10058 * Highlighting and Menus:: Making buffers look all nice and cozy.
12181 * Buttons:: Get tendonitis in ten easy steps! 10059 * Buttons:: Get tendonitis in ten easy steps!
12182 * Daemons:: Gnus can do things behind your back. 10060 * Daemons:: Gnus can do things behind your back.
12183 * NoCeM:: How to avoid spam and other fatty foods. 10061 * NoCeM:: How to avoid spam and other fatty foods.
12184 * Picons:: How to display pictures of what your reading. 10062 * Picons:: How to display pictures of what your reading.
12185 * Undo:: Some actions can be undone.
12186 * Moderation:: What to do if you're a moderator.
12187 * XEmacs Enhancements:: There are more pictures and stuff under XEmacs.
12188 * Fuzzy Matching:: What's the big fuzz?
12189 * Thwarting Email Spam:: A how-to on avoiding unsolited commercial email.
12190 * Various Various:: Things that are really various. 10063 * Various Various:: Things that are really various.
12191 @end menu 10064 @end menu
12192 10065
12193 10066
12194 @node Process/Prefix 10067 @node Process/Prefix
12219 If there is neither a numeric prefix nor any articles marked with the 10092 If there is neither a numeric prefix nor any articles marked with the
12220 process mark, just perform the operation on the current article. 10093 process mark, just perform the operation on the current article.
12221 10094
12222 Quite simple, really, but it needs to be made clear so that surprises 10095 Quite simple, really, but it needs to be made clear so that surprises
12223 are avoided. 10096 are avoided.
12224
12225 Commands that react to the process mark will push the current list of
12226 process marked articles onto a stack and will then clear all process
12227 marked articles. You can restore the previous configuration with the
12228 @kbd{M P y} command (@pxref{Setting Process Marks}).
12229 10097
12230 @vindex gnus-summary-goto-unread 10098 @vindex gnus-summary-goto-unread
12231 One thing that seems to shock & horrify lots of people is that, for 10099 One thing that seems to shock & horrify lots of people is that, for
12232 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}. 10100 instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
12233 Since each @kbd{d} (which marks the current article as read) by default 10101 Since each @kbd{d} (which marks the current article as read) by default
12282 10150
12283 Here's an example format spec (from the group buffer): @samp{%M%S%5y: 10151 Here's an example format spec (from the group buffer): @samp{%M%S%5y:
12284 %(%g%)\n}. We see that it is indeed extremely ugly, and that there are 10152 %(%g%)\n}. We see that it is indeed extremely ugly, and that there are
12285 lots of percentages everywhere. 10153 lots of percentages everywhere.
12286 10154
12287 @menu
12288 * Formatting Basics:: A formatting variable is basically a format string.
12289 * Advanced Formatting:: Modifying output in various ways.
12290 * User-Defined Specs:: Having Gnus call your own functions.
12291 * Formatting Fonts:: Making the formatting look colorful and nice.
12292 @end menu
12293
12294 Currently Gnus uses the following formatting variables:
12295 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
12296 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
12297 @code{gnus-group-mode-line-format},
12298 @code{gnus-summary-mode-line-format},
12299 @code{gnus-article-mode-line-format},
12300 @code{gnus-server-mode-line-format}, and
12301 @code{gnus-summary-pick-line-format}.
12302
12303 All these format variables can also be arbitrary elisp forms. In that
12304 case, they will be @code{eval}ed to insert the required lines.
12305
12306 @kindex M-x gnus-update-format
12307 @findex gnus-update-format
12308 Gnus includes a command to help you while creating your own format
12309 specs. @kbd{M-x gnus-update-format} will @code{eval} the current form,
12310 update the spec in question and pop you to a buffer where you can
12311 examine the resulting lisp code to be run to generate the line.
12312
12313
12314
12315 @node Formatting Basics
12316 @subsection Formatting Basics
12317
12318 Each @samp{%} element will be replaced by some string or other when the 10155 Each @samp{%} element will be replaced by some string or other when the
12319 buffer in question is generated. @samp{%5y} means ``insert the @samp{y} 10156 buffer in question is generated. @samp{%5y} means ``insert the @samp{y}
12320 spec, and pad with spaces to get a 5-character field''. 10157 spec, and pad with spaces to get a 5-character field''. Just like a
12321 10158 normal format spec, almost.
12322 As with normal C and Emacs Lisp formatting strings, the numerical 10159
12323 modifier between the @samp{%} and the formatting type character will 10160 You can also say @samp{%6,4y}, which means that the field will never be
12324 @dfn{pad} the output so that it is always at least that long. 10161 more than 4 characters wide and never less than 6 characters wide.
12325 @samp{%5y} will make the field always (at least) five characters wide by 10162
12326 padding with spaces to the left. If you say @samp{%-5y}, it will pad to 10163 There are also specs for highlighting, and these are shared by all the
12327 the right instead. 10164 format variables. Text inside the @samp{%(} and @samp{%)} specifiers
12328 10165 will get the special @code{mouse-face} property set, which means that it
12329 You may also wish to limit the length of the field to protect against 10166 will be highlighted (with @code{gnus-mouse-face}) when you put the mouse
12330 particularly wide values. For that you can say @samp{%4,6y}, which 10167 pointer over it.
12331 means that the field will never be more than 6 characters wide and never
12332 less than 4 characters wide.
12333
12334
12335 @node Advanced Formatting
12336 @subsection Advanced Formatting
12337
12338 It is frequently useful to post-process the fields in some way.
12339 Padding, limiting, cutting off parts and suppressing certain values can
12340 be achieved by using @dfn{tilde modifiers}. A typical tilde spec might
12341 look like @samp{%~(cut 3)~(ignore "0")y}.
12342
12343 These are the legal modifiers:
12344
12345 @table @code
12346 @item pad
12347 @itemx pad-left
12348 Pad the field to the left with spaces until it reaches the required
12349 length.
12350
12351 @item pad-right
12352 Pad the field to the right with spaces until it reaches the required
12353 length.
12354
12355 @item max
12356 @itemx max-left
12357 Cut off characters from the left until it reaches the specified length.
12358
12359 @item max-right
12360 Cut off characters from the right until it reaches the specified
12361 length.
12362
12363 @item cut
12364 @itemx cut-left
12365 Cut off the specified number of characters from the left.
12366
12367 @item cut-right
12368 Cut off the specified number of characters from the right.
12369
12370 @item ignore
12371 Return an empty string if the field is equal to the specified value.
12372
12373 @item form
12374 Use the specified form as the field value when the @samp{@@} spec is
12375 used.
12376 @end table
12377
12378 Let's take an example. The @samp{%o} spec in the summary mode lines
12379 will return a date in compact ISO8601 format---@samp{19960809T230410}.
12380 This is quite a mouthful, so we want to shave off the century number and
12381 the time, leaving us with a six-character date. That would be
12382 @samp{%~(cut-left 2)~(max-right 6)~(pad 6)o}. (Cutting is done before
12383 maxing, and we need the padding to ensure that the date is never less
12384 than 6 characters to make it look nice in columns.)
12385
12386 Ignoring is done first; then cutting; then maxing; and then as the very
12387 last operation, padding.
12388
12389 If you use lots of these advanced thingies, you'll find that Gnus gets
12390 quite slow. This can be helped enormously by running @kbd{M-x
12391 gnus-compile} when you are satisfied with the look of your lines.
12392 @xref{Compilation}.
12393
12394
12395 @node User-Defined Specs
12396 @subsection User-Defined Specs
12397
12398 All the specs allow for inserting user defined specifiers---@samp{u}.
12399 The next character in the format string should be a letter. Gnus
12400 will call the function @code{gnus-user-format-function-}@samp{X}, where
12401 @samp{X} is the letter following @samp{%u}. The function will be passed
12402 a single parameter---what the parameter means depends on what buffer
12403 it's being called from. The function should return a string, which will
12404 be inserted into the buffer just like information from any other
12405 specifier. This function may also be called with dummy values, so it
12406 should protect against that.
12407
12408 You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve
12409 much the same without defining new functions. Here's an example:
12410 @samp{%~(form (count-lines (point-min) (point)))@@}. The form
12411 given here will be evaluated to yield the current line number, and then
12412 inserted.
12413
12414
12415 @node Formatting Fonts
12416 @subsection Formatting Fonts
12417
12418 There are specs for highlighting, and these are shared by all the format
12419 variables. Text inside the @samp{%(} and @samp{%)} specifiers will get
12420 the special @code{mouse-face} property set, which means that it will be
12421 highlighted (with @code{gnus-mouse-face}) when you put the mouse pointer
12422 over it.
12423 10168
12424 Text inside the @samp{%[} and @samp{%]} specifiers will have their 10169 Text inside the @samp{%[} and @samp{%]} specifiers will have their
12425 normal faces set using @code{gnus-face-0}, which is @code{bold} by 10170 normal faces set using @code{gnus-face-0}, which is @code{bold} by
12426 default. If you say @samp{%1[} instead, you'll get @code{gnus-face-1} 10171 default. If you say @samp{%1[} instead, you'll get @code{gnus-face-1}
12427 instead, and so on. Create as many faces as you wish. The same goes 10172 instead, and so on. Create as many faces as you wish. The same goes
12449 @end lisp 10194 @end lisp
12450 10195
12451 I'm sure you'll be able to use this scheme to create totally unreadable 10196 I'm sure you'll be able to use this scheme to create totally unreadable
12452 and extremely vulgar displays. Have fun! 10197 and extremely vulgar displays. Have fun!
12453 10198
10199 Currently Gnus uses the following formatting variables:
10200 @code{gnus-group-line-format}, @code{gnus-summary-line-format},
10201 @code{gnus-server-line-format}, @code{gnus-topic-line-format},
10202 @code{gnus-group-mode-line-format},
10203 @code{gnus-summary-mode-line-format},
10204 @code{gnus-article-mode-line-format},
10205 @code{gnus-server-mode-line-format}.
10206
12454 Note that the @samp{%(} specs (and friends) do not make any sense on the 10207 Note that the @samp{%(} specs (and friends) do not make any sense on the
12455 mode-line variables. 10208 mode-line variables.
10209
10210 All these format variables can also be arbitrary elisp forms. In that
10211 case, they will be @code{eval}ed to insert the required lines.
10212
10213 @kindex M-x gnus-update-format
10214 @findex gnus-update-format
10215 Gnus includes a command to help you while creating your own format
10216 specs. @kbd{M-x gnus-update-format} will @code{eval} the current form,
10217 update the spec in question and pop you to a buffer where you can
10218 examine the resulting lisp code to be run to generate the line.
12456 10219
12457 10220
12458 @node Windows Configuration 10221 @node Windows Configuration
12459 @section Windows Configuration 10222 @section Windows Configuration
12460 @cindex windows configuration 10223 @cindex windows configuration
12480 This is an alist. The @dfn{key} is a symbol that names some action or 10243 This is an alist. The @dfn{key} is a symbol that names some action or
12481 other. For instance, when displaying the group buffer, the window 10244 other. For instance, when displaying the group buffer, the window
12482 configuration function will use @code{group} as the key. A full list of 10245 configuration function will use @code{group} as the key. A full list of
12483 possible names is listed below. 10246 possible names is listed below.
12484 10247
12485 The @dfn{value} (i.e., the @dfn{split}) says how much space each buffer 10248 The @dfn{value} (i. e., the @dfn{split}) says how much space each buffer
12486 should occupy. To take the @code{article} split as an example - 10249 should occupy. To take the @code{article} split as an example -
12487 10250
12488 @lisp 10251 @lisp
12489 (article (vertical 1.0 (summary 0.25 point) 10252 (article (vertical 1.0 (summary 0.25 point)
12490 (article 1.0))) 10253 (article 1.0)))
12636 10399
12637 @code{group}, @code{summary}, @code{article}, @code{server}, 10400 @code{group}, @code{summary}, @code{article}, @code{server},
12638 @code{browse}, @code{message}, @code{pick}, @code{info}, 10401 @code{browse}, @code{message}, @code{pick}, @code{info},
12639 @code{summary-faq}, @code{edit-group}, @code{edit-server}, 10402 @code{summary-faq}, @code{edit-group}, @code{edit-server},
12640 @code{edit-score}, @code{post}, @code{reply}, @code{forward}, 10403 @code{edit-score}, @code{post}, @code{reply}, @code{forward},
12641 @code{reply-yank}, @code{mail-bounce}, @code{draft}, @code{pipe}, 10404 @code{reply-yank}, @code{mail-bounce}, @code{draft},
12642 @code{bug}, @code{compose-bounce}. 10405 @code{pipe}, @code{bug}, @code{compose-bounce}.
12643 10406
12644 Note that the @code{message} key is used for both 10407 Note that the @code{message} key is used for both
12645 @code{gnus-group-mail} and @code{gnus-summary-mail-other-window}. If 10408 @code{gnus-group-mail} and @code{gnus-summary-mail-other-window}. If
12646 it is desirable to distinguish between the two, something like this 10409 it is desireable to distinguish between the two, something like this
12647 might be used: 10410 might be used:
12648 10411
12649 @lisp 10412 @lisp
12650 (message (horizontal 1.0 10413 (message (horizontal 1.0
12651 (vertical 1.0 (message 1.0 point)) 10414 (vertical 1.0 (message 1.0 point))
12652 (vertical 0.24 10415 (vertical 0.24
12653 (if (buffer-live-p gnus-summary-buffer) 10416 (if (buffer-live-p gnus-summary-buffer)
12654 '(summary 0.5)) 10417 '(summary 0.5))
12655 (group 1.0))))) 10418 (group 1.0)))))
12656 @end lisp 10419 @end lisp
12657 10420
12658 @findex gnus-add-configuration 10421 @findex gnus-add-configuration
12659 Since the @code{gnus-buffer-configuration} variable is so long and 10422 Since the @code{gnus-buffer-configuration} variable is so long and
12660 complicated, there's a function you can use to ease changing the config 10423 complicated, there's a function you can use to ease changing the config
12668 (summary .25 point) 10431 (summary .25 point)
12669 (article 1.0)))) 10432 (article 1.0))))
12670 @end lisp 10433 @end lisp
12671 10434
12672 You'd typically stick these @code{gnus-add-configuration} calls in your 10435 You'd typically stick these @code{gnus-add-configuration} calls in your
12673 @file{.gnus.el} file or in some startup hook---they should be run after 10436 @file{.gnus} file or in some startup hook---they should be run after
12674 Gnus has been loaded. 10437 Gnus has been loaded.
12675 10438
12676 @vindex gnus-always-force-window-configuration 10439
12677 If all windows mentioned in the configuration are already visible, Gnus 10440 @node Compilation
12678 won't change the window configuration. If you always want to force the 10441 @section Compilation
12679 ``right'' window configuration, you can set
12680 @code{gnus-always-force-window-configuration} to non-@code{nil}.
12681
12682
12683 @node Compilation
12684 @section Compilation
12685 @cindex compilation 10442 @cindex compilation
12686 @cindex byte-compilation 10443 @cindex byte-compilation
12687 10444
12688 @findex gnus-compile 10445 @findex gnus-compile
12689 10446
12696 course.) 10453 course.)
12697 10454
12698 To help with this, you can run @kbd{M-x gnus-compile} after you've 10455 To help with this, you can run @kbd{M-x gnus-compile} after you've
12699 fiddled around with the variables and feel that you're (kind of) 10456 fiddled around with the variables and feel that you're (kind of)
12700 satisfied. This will result in the new specs being byte-compiled, and 10457 satisfied. This will result in the new specs being byte-compiled, and
12701 you'll get top speed again. Gnus will save these compiled specs in the 10458 you'll get top speed again.
12702 @file{.newsrc.eld} file. (User-defined functions aren't compiled by
12703 this function, though---you should compile them yourself by sticking
12704 them into the @code{.gnus.el} file and byte-compiling that file.)
12705 10459
12706 10460
12707 @node Mode Lines 10461 @node Mode Lines
12708 @section Mode Lines 10462 @section Mode Lines
12709 @cindex mode lines 10463 @cindex mode lines
12720 @cindex display-time 10474 @cindex display-time
12721 10475
12722 @vindex gnus-mode-non-string-length 10476 @vindex gnus-mode-non-string-length
12723 By default, Gnus displays information on the current article in the mode 10477 By default, Gnus displays information on the current article in the mode
12724 lines of the summary and article buffers. The information Gnus wishes 10478 lines of the summary and article buffers. The information Gnus wishes
12725 to display (e.g. the subject of the article) is often longer than the 10479 to display (eg. the subject of the article) is often longer than the
12726 mode lines, and therefore have to be cut off at some point. The 10480 mode lines, and therefore have to be cut off at some point. The
12727 @code{gnus-mode-non-string-length} variable says how long the other 10481 @code{gnus-mode-non-string-length} variable says how long the other
12728 elements on the line is (i.e., the non-info part). If you put 10482 elements on the line is (i.e., the non-info part). If you put
12729 additional elements on the mode line (e.g. a clock), you should modify 10483 additional elements on the mode line (eg. a clock), you should modify
12730 this variable: 10484 this variable:
12731 10485
12732 @c Hook written by Francesco Potorti` <pot@cnuce.cnr.it> 10486 @c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
12733 @lisp 10487 @lisp
12734 (add-hook 'display-time-hook 10488 (add-hook 'display-time-hook
12739 (length display-time-string))))) 10493 (length display-time-string)))))
12740 @end lisp 10494 @end lisp
12741 10495
12742 If this variable is @code{nil} (which is the default), the mode line 10496 If this variable is @code{nil} (which is the default), the mode line
12743 strings won't be chopped off, and they won't be padded either. 10497 strings won't be chopped off, and they won't be padded either.
12744 Note that the default is unlikely to be desirable, as even the
12745 percentage complete in the buffer may be crowded off the mode line;
12746 the user should configure this variable appropriately for their
12747 configuration.
12748 10498
12749 10499
12750 @node Highlighting and Menus 10500 @node Highlighting and Menus
12751 @section Highlighting and Menus 10501 @section Highlighting and Menus
12752 @cindex visual 10502 @cindex visual
12809 @item gnus-mouse-face 10559 @item gnus-mouse-face
12810 @vindex gnus-mouse-face 10560 @vindex gnus-mouse-face
12811 This is the face (i.e., font) used for mouse highlighting in Gnus. No 10561 This is the face (i.e., font) used for mouse highlighting in Gnus. No
12812 mouse highlights will be done if @code{gnus-visual} is @code{nil}. 10562 mouse highlights will be done if @code{gnus-visual} is @code{nil}.
12813 10563
10564 @item gnus-display-type
10565 @vindex gnus-display-type
10566 This variable is symbol indicating the display type Emacs is running
10567 under. The symbol should be one of @code{color}, @code{grayscale} or
10568 @code{mono}. If Gnus guesses this display attribute wrongly, either set
10569 this variable in your @file{~/.emacs} or set the resource
10570 @code{Emacs.displayType} in your @file{~/.Xdefaults}.
10571
10572 @item gnus-background-mode
10573 @vindex gnus-background-mode
10574 This is a symbol indicating the Emacs background brightness. The symbol
10575 should be one of @code{light} or @code{dark}. If Gnus guesses this
10576 frame attribute wrongly, either set this variable in your @file{~/.emacs} or
10577 set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}.
10578 `gnus-display-type'.
12814 @end table 10579 @end table
12815 10580
12816 There are hooks associated with the creation of all the different menus: 10581 There are hooks associated with the creation of all the different menus:
12817 10582
12818 @table @code 10583 @table @code
12950 the function will then be called once every day somewhere near that 10715 the function will then be called once every day somewhere near that
12951 time. Modified by the @var{idle} parameter, of course. 10716 time. Modified by the @var{idle} parameter, of course.
12952 10717
12953 @vindex gnus-demon-timestep 10718 @vindex gnus-demon-timestep
12954 (When I say ``minute'' here, I really mean @code{gnus-demon-timestep} 10719 (When I say ``minute'' here, I really mean @code{gnus-demon-timestep}
12955 seconds. This is 60 by default. If you change that variable, 10720 seconds. This is @code{60} by default. If you change that variable,
12956 all the timings in the handlers will be affected.) 10721 all the timings in the handlers will be affected.)
12957 10722
12958 @vindex gnus-use-demon 10723 @vindex gnus-use-demon
12959 To set the whole thing in motion, though, you have to set 10724 To set the whole thing in motion, though, you have to set
12960 @code{gnus-use-demon} to @code{t}. 10725 @code{gnus-use-demon} to @code{t}.
12967 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30) 10732 (gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
12968 @end lisp 10733 @end lisp
12969 10734
12970 @findex gnus-demon-add-nocem 10735 @findex gnus-demon-add-nocem
12971 @findex gnus-demon-add-scanmail 10736 @findex gnus-demon-add-scanmail
12972 @findex gnus-demon-add-rescan
12973 @findex gnus-demon-add-disconnection 10737 @findex gnus-demon-add-disconnection
12974 Some ready-made functions to do this has been created: 10738 Some ready-made functions to do this has been created:
12975 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, 10739 @code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection}, and
12976 @code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}. Just 10740 @code{gnus-demon-add-scanmail}. Just put those functions in your
12977 put those functions in your @file{.gnus} if you want those abilities. 10741 @file{.gnus} if you want those abilities.
12978 10742
12979 @findex gnus-demon-init 10743 @findex gnus-demon-init
12980 @findex gnus-demon-cancel 10744 @findex gnus-demon-cancel
12981 @vindex gnus-demon-handlers 10745 @vindex gnus-demon-handlers
12982 If you add handlers to @code{gnus-demon-handlers} directly, you should 10746 If you add handlers to @code{gnus-demon-handlers} directly, you should
12984 daemons, you can use the @code{gnus-demon-cancel} function. 10748 daemons, you can use the @code{gnus-demon-cancel} function.
12985 10749
12986 Note that adding daemons can be pretty naughty if you overdo it. Adding 10750 Note that adding daemons can be pretty naughty if you overdo it. Adding
12987 functions that scan all news and mail from all servers every two seconds 10751 functions that scan all news and mail from all servers every two seconds
12988 is a sure-fire way of getting booted off any respectable system. So 10752 is a sure-fire way of getting booted off any respectable system. So
12989 behave. 10753 behave.
12990 10754
12991 10755
12992 @node NoCeM 10756 @node NoCeM
12993 @section NoCeM 10757 @section NoCeM
12994 @cindex nocem 10758 @cindex nocem
13020 by default. 10784 by default.
13021 10785
13022 @item gnus-nocem-groups 10786 @item gnus-nocem-groups
13023 @vindex gnus-nocem-groups 10787 @vindex gnus-nocem-groups
13024 Gnus will look for NoCeM messages in the groups in this list. The 10788 Gnus will look for NoCeM messages in the groups in this list. The
13025 default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins" 10789 default is @code{("alt.nocem.misc" "news.admin.net-abuse.announce")}.
13026 "alt.nocem.misc" "news.admin.net-abuse.announce")}.
13027 10790
13028 @item gnus-nocem-issuers 10791 @item gnus-nocem-issuers
13029 @vindex gnus-nocem-issuers 10792 @vindex gnus-nocem-issuers
13030 There are many people issuing NoCeM messages. This list says what 10793 There are many people issuing NoCeM messages. This list says what
13031 people you want to listen to. The default is @code{("Automoose-1" 10794 people you want to listen to. The default is @code{("Automoose-1"
13045 The CancelMoose[tm] on autopilot. The CancelMoose[tm] is reputed to be 10808 The CancelMoose[tm] on autopilot. The CancelMoose[tm] is reputed to be
13046 Norwegian, and was the person(s) who invented NoCeM. 10809 Norwegian, and was the person(s) who invented NoCeM.
13047 10810
13048 @item jem@@xpat.com; 10811 @item jem@@xpat.com;
13049 @cindex Jem 10812 @cindex Jem
13050 John Milburn---despammer located in Korea who is getting very busy these 10813 Jem---Korean despammer who is getting very busy these days.
13051 days.
13052 10814
13053 @item red@@redpoll.mrfs.oh.us (Richard E. Depew) 10815 @item red@@redpoll.mrfs.oh.us (Richard E. Depew)
13054 Richard E. Depew---lone American despammer. He mostly cancels binary 10816 Richard E. Depew---lone American despammer. He mostly cancels binary
13055 postings to non-binary groups and removes spews (regurgitated articles). 10817 postings to non-binary groups and removes spews (regurgitated articles).
13056 @end table 10818 @end table
13057 10819
13058 You do not have to heed NoCeM messages from all these people---just the 10820 You do not have to heed NoCeM messages from all these people---just the
13059 ones you want to listen to. 10821 ones you want to listen to.
13060
13061 @item gnus-nocem-verifyer
13062 @vindex gnus-nocem-verifyer
13063 @findex mc-verify
13064 This should be a function for verifying that the NoCeM issuer is who she
13065 says she is. The default is @code{mc-verify}, which is a Mailcrypt
13066 function. If this is too slow and you don't care for verification
13067 (which may be dangerous), you can set this variable to @code{nil}.
13068 10822
13069 @item gnus-nocem-directory 10823 @item gnus-nocem-directory
13070 @vindex gnus-nocem-directory 10824 @vindex gnus-nocem-directory
13071 This is where Gnus will store its NoCeM cache files. The default is 10825 This is where Gnus will store its NoCeM cache files. The default is
13072 @file{~/News/NoCeM/}. 10826 @file{~/News/NoCeM/}.
13097 10851
13098 10852
13099 @node Picon Basics 10853 @node Picon Basics
13100 @subsection Picon Basics 10854 @subsection Picon Basics
13101 10855
13102 What are Picons? To quote directly from the Picons Web site: 10856 What are Picons? To quote directly from the Picons Web site
10857 (@samp{http://www.cs.indiana.edu/picons/ftp/index.html}):
13103 10858
13104 @quotation 10859 @quotation
13105 @dfn{Picons} is short for ``personal icons''. They're small, 10860 @dfn{Picons} is short for ``personal icons''. They're small,
13106 constrained images used to represent users and domains on the net, 10861 constrained images used to represent users and domains on the net,
13107 organized into databases so that the appropriate image for a given 10862 organized into databases so that the appropriate image for a given
13109 databases for Usenet newsgroups and weather forecasts. The picons are 10864 databases for Usenet newsgroups and weather forecasts. The picons are
13110 in either monochrome @code{XBM} format or color @code{XPM} and 10865 in either monochrome @code{XBM} format or color @code{XPM} and
13111 @code{GIF} formats. 10866 @code{GIF} formats.
13112 @end quotation 10867 @end quotation
13113 10868
13114 For instructions on obtaining and installing the picons databases, point 10869 Please see the above mentioned web site for instructions on obtaining
13115 your Web browser at 10870 and installing the picons databases, or the following ftp site:
13116 @file{http://www.cs.indiana.edu/picons/ftp/index.html}. 10871 @samp{http://www.cs.indiana.edu/picons/ftp/index.html}.
13117 10872
13118 @vindex gnus-picons-database 10873 @vindex gnus-picons-database
13119 Gnus expects picons to be installed into a location pointed to by 10874 Gnus expects picons to be installed into a location pointed to by
13120 @code{gnus-picons-database}. 10875 @code{gnus-picons-database}.
13121 10876
13163 @item gnus-picons-display-where 10918 @item gnus-picons-display-where
13164 @vindex gnus-picons-display-where 10919 @vindex gnus-picons-display-where
13165 Where the picon images should be displayed. It is @code{picons} by 10920 Where the picon images should be displayed. It is @code{picons} by
13166 default (which by default maps to the buffer @samp{*Picons*}). Other 10921 default (which by default maps to the buffer @samp{*Picons*}). Other
13167 valid places could be @code{article}, @code{summary}, or 10922 valid places could be @code{article}, @code{summary}, or
13168 @samp{*scratch*} for all I care. Just make sure that you've made the 10923 @samp{"*scratch*"} for all I care. Just make sure that you've made the
13169 buffer visible using the standard Gnus window configuration 10924 buffer visible using the standard Gnus window configuration
13170 routines---@pxref{Windows Configuration}. 10925 routines---@xref{Windows Configuration}.
13171 10926
13172 @end table 10927 @end table
13173 10928
13174 Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your 10929 Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your
13175 window configuration for you to include the @code{picons} buffer. 10930 window configuration for you to include the @code{picons} buffer.
13229 newsgroups. 10984 newsgroups.
13230 10985
13231 @item gnus-picons-user-directories 10986 @item gnus-picons-user-directories
13232 @vindex gnus-picons-user-directories 10987 @vindex gnus-picons-user-directories
13233 List of subdirectories to search in @code{gnus-picons-database} for user 10988 List of subdirectories to search in @code{gnus-picons-database} for user
13234 faces. @code{("local" "users" "usenix" "misc/MISC")} is the default. 10989 faces. Defaults to @code{("local" "users" "usenix" "misc/MISC")}.
13235 10990
13236 @item gnus-picons-domain-directories 10991 @item gnus-picons-domain-directories
13237 @vindex gnus-picons-domain-directories 10992 @vindex gnus-picons-domain-directories
13238 List of subdirectories to search in @code{gnus-picons-database} for 10993 List of subdirectories to search in @code{gnus-picons-database} for
13239 domain name faces. Defaults to @code{("domains")}. Some people may 10994 domain name faces. Defaults to @code{("domains")}. Some people may
13257 @samp{*Icon Buffer*}. 11012 @samp{*Icon Buffer*}.
13258 11013
13259 @end table 11014 @end table
13260 11015
13261 11016
13262 @node Undo
13263 @section Undo
13264 @cindex undo
13265
13266 It is very useful to be able to undo actions one has done. In normal
13267 Emacs buffers, it's easy enough---you just push the @code{undo} button.
13268 In Gnus buffers, however, it isn't that simple.
13269
13270 The things Gnus displays in its buffer is of no value whatsoever to
13271 Gnus---it's all just data that is designed to look nice to the user.
13272 Killing a group in the group buffer with @kbd{C-k} makes the line
13273 disappear, but that's just a side-effect of the real action---the
13274 removal of the group in question from the internal Gnus structures.
13275 Undoing something like that can't be done by the normal Emacs
13276 @code{undo} function.
13277
13278 Gnus tries to remedy this somewhat by keeping track of what the user
13279 does and coming up with actions that would reverse the actions the user
13280 takes. When the user then presses the @code{undo} key, Gnus will run
13281 the code to reverse the previous action, or the previous actions.
13282 However, not all actions are easily reversible, so Gnus currently offers
13283 a few key functions to be undoable. These include killing groups,
13284 yanking groups, and changing the list of read articles of groups.
13285 That's it, really. More functions may be added in the future, but each
13286 added function means an increase in data to be stored, so Gnus will
13287 never be totally undoable.
13288
13289 @findex gnus-undo-mode
13290 @vindex gnus-use-undo
13291 @findex gnus-undo
13292 The undoability is provided by the @code{gnus-undo-mode} minor mode. It
13293 is used if @code{gnus-use-undo} is non-@code{nil}, which is the
13294 default. The @kbd{M-C-_} key performs the @code{gnus-undo} command
13295 command, which should feel kinda like the normal Emacs @code{undo}
13296 command.
13297
13298
13299 @node Moderation
13300 @section Moderation
13301 @cindex moderation
13302
13303 If you are a moderator, you can use the @file{gnus-mdrtn.el} package.
13304 It is not included in the standard Gnus package. Write a mail to
13305 @samp{larsi@@ifi.uio.no} and state what group you moderate, and you'll
13306 get a copy.
13307
13308 The moderation package is implemented as a minor mode for summary
13309 buffers. Put
13310
13311 @lisp
13312 (add-hook 'gnus-summary-mode-hook 'gnus-moderate)
13313 @end lisp
13314
13315 in your @file{.gnus.el} file.
13316
13317 If you are the moderation of @samp{rec.zoofle}, this is how it's
13318 supposed to work:
13319
13320 @enumerate
13321 @item
13322 You split your incoming mail by matching on
13323 @samp{Newsgroups:.*rec.zoofle}, which will put all the to-be-posted
13324 articles in some mail group---for instance, @samp{nnml:rec.zoofle}.
13325
13326 @item
13327 You enter that group once in a while and post articles using the @kbd{e}
13328 (edit-and-post) or @kbd{s} (just send unedited) commands.
13329
13330 @item
13331 If, while reading the @samp{rec.zoofle} newsgroup, you happen upon some
13332 articles that weren't approved by you, you can cancel them with the
13333 @kbd{c} command.
13334 @end enumerate
13335
13336 To use moderation mode in these two groups, say:
13337
13338 @lisp
13339 (setq gnus-moderated-list
13340 "^nnml:rec.zoofle$\\|^rec.zoofle$")
13341 @end lisp
13342
13343
13344 @node XEmacs Enhancements
13345 @section XEmacs Enhancements
13346 @cindex XEmacs
13347
13348 XEmacs is able to display pictures and stuff, so Gnus has taken
13349 advantage of that. Relevant variables include:
13350
13351 @table @code
13352 @item gnus-xmas-glyph-directory
13353 @vindex gnus-xmas-glyph-directory
13354 This is where Gnus will look for pictures. Gnus will normally
13355 auto-detect this directory, but you may set it manually if you have an
13356 unusual directory structure.
13357
13358 @item gnus-xmas-logo-color-alist
13359 @vindex gnus-xmas-logo-color-alist
13360 This is an alist where the key is a type symbol and the values are the
13361 foreground and background color of the splash page glyph.
13362
13363 @item gnus-xmas-logo-color-style
13364 @vindex gnus-xmas-logo-color-style
13365 This is the key used to look up the color in the alist described above.
13366 Legal values include @code{flame}, @code{pine}, @code{moss},
13367 @code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
13368 @code{labia}, @code{berry}, @code{neutral}, and @code{september}.
13369
13370 @item gnus-use-toolbar
13371 @vindex gnus-use-toolbar
13372 If @code{nil}, don't display toolbars. If non-@code{nil}, it should be
13373 one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
13374 @code{right-toolbar}, or @code{left-toolbar}.
13375
13376 @item gnus-group-toolbar
13377 @vindex gnus-group-toolbar
13378 The toolbar in the group buffer.
13379
13380 @item gnus-summary-toolbar
13381 @vindex gnus-summary-toolbar
13382 The toolbar in the summary buffer.
13383
13384 @item gnus-summary-mail-toolbar
13385 @vindex gnus-summary-mail-toolbar
13386 The toolbar in the summary buffer of mail groups.
13387
13388 @item gnus-xmas-modeline-glyph
13389 @vindex gnus-xmas-modeline-glyph
13390 A glyph displayed in all Gnus mode lines. It is a tiny gnu head by
13391 default.
13392
13393 @end table
13394
13395
13396 @node Fuzzy Matching
13397 @section Fuzzy Matching
13398 @cindex fuzzy matching
13399
13400 Gnus provides @dfn{fuzzy matching} of @code{Subject} lines when doing
13401 things like scoring, thread gathering and thread comparison.
13402
13403 As opposed to regular expression matching, fuzzy matching is very fuzzy.
13404 It's so fuzzy that there's not even a definition of what @dfn{fuzziness}
13405 means, and the implementation has changed over time.
13406
13407 Basically, it tries to remove all noise from lines before comparing.
13408 @samp{Re: }, parenthetical remarks, white space, and so on, are filtered
13409 out of the strings before comparing the results. This often leads to
13410 adequate results---even when faced with strings generated by text
13411 manglers masquerading as newsreaders.
13412
13413
13414 @node Thwarting Email Spam
13415 @section Thwarting Email Spam
13416 @cindex email spam
13417 @cindex spam
13418 @cindex UCE
13419 @cindex unsolicited commercial email
13420
13421 In these last days of the Usenet, commercial vultures are hanging about
13422 and grepping through news like crazy to find email addresses they can
13423 foist off their scams and products to. As a reaction to this, many
13424 people have started putting nonsense addresses into their @code{From}
13425 lines. I think this is counterproductive---it makes it difficult for
13426 people to send you legitimate mail in response to things you write, as
13427 well as making it difficult to see who wrote what. This rewriting may
13428 perhaps be a bigger menace than the unsolicited commercial email itself
13429 in the end.
13430
13431 The biggest problem I have with email spam is that it comes in under
13432 false pretenses. I press @kbd{g} and Gnus merrily informs me that I
13433 have 10 new emails. I say ``Golly gee! Happy is me!'' and selects the
13434 mail group, only to find two pyramid schemes, seven advertisements
13435 ``New! Miracle tonic for growing full, lustrouos hair on your toes!''
13436 and one mail asking me to repent and find some god.
13437
13438 This is annoying.
13439
13440 The way to deal with this is having Gnus split out all spam into a
13441 @samp{spam} mail group (@pxref{Splitting Mail}).
13442
13443 First, pick one (1) legal mail address that you can be reached at, and
13444 put it in your @code{From} header of all your news articles. (I've
13445 chosen @samp{larsi@@trym.ifi.uio.no}.)
13446
13447 @lisp
13448 (setq message-default-news-headers
13449 "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
13450 @end lisp
13451
13452 Then put the following split rule in @code{nnmail-split-fancy}
13453 (@pxref{Fancy Mail Splitting}):
13454
13455 @lisp
13456 (
13457 ...
13458 (to "larsi@@trym.ifi.uio.no"
13459 (| ("subject" "re:.*" "misc")
13460 ("references" ".*@@.*" "misc")
13461 "spam"))
13462 ...
13463 )
13464 @end lisp
13465
13466 This says that all mail to this address is suspect, but if it has a
13467 @code{Subject} that starts with a @samp{Re:} or has a @code{References}
13468 header, it's probably ok. All the rest goes to the @samp{spam} group.
13469 (This idea probably comes from Tim Pierce.)
13470
13471 In my experience, this will sort virtually everything into the right
13472 group. You still have to check the @samp{spam} group from time to time to
13473 check for legitimate mail, though. If you feel like being a good net
13474 citizen, you can even send off complaints to the proper authorities on
13475 each unsolicited commercial email---at your leisure.
13476
13477 This works for me. It allows people an easy way to contact me (they can
13478 just press @kbd{r} in the usual way), and I'm not bothered at all with
13479 spam. It's a win-win situation. Forging @code{From} headers to point
13480 to non-existant domains is yucky, in my opinion.
13481
13482
13483 @node Various Various 11017 @node Various Various
13484 @section Various Various 11018 @section Various Various
13485 @cindex mode lines 11019 @cindex mode lines
13486 @cindex highlights 11020 @cindex highlights
13487 11021
13488 @table @code 11022 @table @code
13489
13490 @item gnus-home-directory
13491 All Gnus path variables will be initialized from this variable, which
13492 defaults to @file{~/}.
13493
13494 @item gnus-directory
13495 @vindex gnus-directory
13496 Most Gnus storage path variables will be initialized from this variable,
13497 which defaults to the @samp{SAVEDIR} environment variable, or
13498 @file{~/News/} if that variable isn't set.
13499
13500 @item gnus-default-directory
13501 @vindex gnus-default-directory
13502 Not related to the above variable at all---this variable says what the
13503 default directory of all Gnus buffers should be. If you issue commands
13504 like @kbd{C-x C-f}, the prompt you'll get starts in the current buffer's
13505 default directory. If this variable is @code{nil} (which is the
13506 default), the default directory will be the default directory of the
13507 buffer you were in when you started Gnus.
13508 11023
13509 @item gnus-verbose 11024 @item gnus-verbose
13510 @vindex gnus-verbose 11025 @vindex gnus-verbose
13511 This variable is an integer between zero and ten. The higher the value, 11026 This variable is an integer between zero and ten. The higher the value,
13512 the more messages will be displayed. If this variable is zero, Gnus 11027 the more messages will be displayed. If this variable is zero, Gnus
13520 to the Gnus backends instead of Gnus proper. 11035 to the Gnus backends instead of Gnus proper.
13521 11036
13522 @item nnheader-max-head-length 11037 @item nnheader-max-head-length
13523 @vindex nnheader-max-head-length 11038 @vindex nnheader-max-head-length
13524 When the backends read straight heads of articles, they all try to read 11039 When the backends read straight heads of articles, they all try to read
13525 as little as possible. This variable (default 4096) specifies 11040 as little as possible. This variable (default @code{4096}) specifies
13526 the absolute max length the backends will try to read before giving up 11041 the absolute max length the backends will try to read before giving up
13527 on finding a separator line between the head and the body. If this 11042 on finding a separator line between the head and the body. If this
13528 variable is @code{nil}, there is no upper read bound. If it is 11043 variable is @code{nil}, there is no upper read bound. If it is
13529 @code{t}, the backends won't try to read the articles piece by piece, 11044 @code{t}, the backends won't try to read the articles piece by piece,
13530 but read the entire articles. This makes sense with some versions of 11045 but read the entire articles. This makes sense with some versions of
13531 @code{ange-ftp}. 11046 @code{ange-ftp}.
13532
13533 @item nnheader-head-chop-length
13534 @vindex nnheader-head-chop-length
13535 This variable says how big a piece of each article to read when doing
13536 the operation described above.
13537 11047
13538 @item nnheader-file-name-translation-alist 11048 @item nnheader-file-name-translation-alist
13539 @vindex nnheader-file-name-translation-alist 11049 @vindex nnheader-file-name-translation-alist
13540 @cindex file names 11050 @cindex file names
13541 @cindex illegal characters in file names 11051 @cindex illegal characters in file names
13582 11092
13583 Ol' Charles Reznikoff said it pretty well, so I leave the floor to him: 11093 Ol' Charles Reznikoff said it pretty well, so I leave the floor to him:
13584 11094
13585 @quotation 11095 @quotation
13586 @strong{Te Deum} 11096 @strong{Te Deum}
13587
13588 @sp 1 11097 @sp 1
13589 Not because of victories @* 11098 Not because of victories @*
13590 I sing,@* 11099 I sing,@*
13591 having none,@* 11100 having none,@*
13592 but for the common sunshine,@* 11101 but for the common sunshine,@*
13593 the breeze,@* 11102 the breeze,@*
13594 the largess of the spring. 11103 the largess of the spring.
13595
13596 @sp 1 11104 @sp 1
13597 Not for victory@* 11105 Not for victory@*
13598 but for the day's work done@* 11106 but for the day's work done@*
13599 as well as I was able;@* 11107 as well as I was able;@*
13600 not for a seat upon the dais@* 11108 not for a seat upon the dais@*
13628 @file{http://www.ifi.uio.no/~larsi/}. This is also the primary 11136 @file{http://www.ifi.uio.no/~larsi/}. This is also the primary
13629 distribution point for the new and spiffy versions of Gnus, and is known 11137 distribution point for the new and spiffy versions of Gnus, and is known
13630 as The Site That Destroys Newsrcs And Drives People Mad. 11138 as The Site That Destroys Newsrcs And Drives People Mad.
13631 11139
13632 During the first extended alpha period of development, the new Gnus was 11140 During the first extended alpha period of development, the new Gnus was
13633 called ``(ding) Gnus''. @dfn{(ding)} is, of course, short for 11141 called ``(ding) Gnus''. @dfn{(ding)}, is, of course, short for
13634 @dfn{ding is not Gnus}, which is a total and utter lie, but who cares? 11142 @dfn{ding is not Gnus}, which is a total and utter lie, but who cares?
13635 (Besides, the ``Gnus'' in this abbreviation should probably be 11143 (Besides, the ``Gnus'' in this abbreviation should probably be
13636 pronounced ``news'' as @sc{Umeda} intended, which makes it a more 11144 pronounced ``news'' as @sc{Umeda} intended, which makes it a more
13637 appropriate name, don't you think?) 11145 appropriate name, don't you think?)
13638 11146
13640 spunky name, we decided that the name was @emph{too} spunky, so we 11148 spunky name, we decided that the name was @emph{too} spunky, so we
13641 renamed it back again to ``Gnus''. But in mixed case. ``Gnus'' vs. 11149 renamed it back again to ``Gnus''. But in mixed case. ``Gnus'' vs.
13642 ``@sc{gnus}''. New vs. old. 11150 ``@sc{gnus}''. New vs. old.
13643 11151
13644 The first ``proper'' release of Gnus 5 was done in November 1995 when it 11152 The first ``proper'' release of Gnus 5 was done in November 1995 when it
13645 was included in the Emacs 19.30 distribution (132 (ding) Gnus releases 11153 was included in the Emacs 19.30 distribution.
13646 plus 15 Gnus 5.0 releases). 11154
13647 11155 In May 1996 the next Gnus generation (aka. ``September Gnus'') was
13648 In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99 11156 released under the name ``Gnus 5.2''.
13649 releases)) was released under the name ``Gnus 5.2'' (40 releases).
13650
13651 On July 28th 1996 work on Red Gnus was begun, and it was released on
13652 January 25th 1997 (after 84 releases) as ``Gnus 5.4''.
13653
13654 If you happen upon a version of Gnus that has a name that is prefixed --
13655 ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
13656 don't panic. Don't let it know that you're frightened. Back away.
13657 Slowly. Whatever you do, don't run. Walk away, calmly, until you're
13658 out of its reach. Find a proper released version of Gnus and snuggle up
13659 to that instead.
13660 11157
13661 @menu 11158 @menu
13662 * Why?:: What's the point of Gnus? 11159 * Why?:: What's the point of Gnus?
13663 * Compatibility:: Just how compatible is Gnus with @sc{gnus}? 11160 * Compatibility:: Just how compatible is Gnus with @sc{gnus}?
13664 * Conformity:: Gnus tries to conform to all standards. 11161 * Conformity:: Gnus tries to conform to all standards.
13798 This is considered to be a ``vanity header'', while I consider it to be 11295 This is considered to be a ``vanity header'', while I consider it to be
13799 consumer information. After seeing so many badly formatted articles 11296 consumer information. After seeing so many badly formatted articles
13800 coming from @code{tin} and @code{Netscape} I know not to use either of 11297 coming from @code{tin} and @code{Netscape} I know not to use either of
13801 those for posting articles. I would not have known that if it wasn't 11298 those for posting articles. I would not have known that if it wasn't
13802 for the @code{X-Newsreader} header. 11299 for the @code{X-Newsreader} header.
11300
11301 @item References
11302 Gnus does line breaking on this header. I infer from RFC1036 that being
11303 conservative in what you output is not creating 5000-character lines, so
11304 it seems like a good idea to me. However, this standard-to-be says that
11305 whitespace in the @code{References} header is to be preserved, so... It
11306 doesn't matter one way or the other to Gnus, so if somebody tells me
11307 what The Way is, I'll change it. Or not.
13803 @end table 11308 @end table
13804 11309
13805 @end table 11310 @end table
13806 11311
13807 If you ever notice Gnus acting non-compliantly with regards to the texts 11312 If you ever notice Gnus acting non-compliantly with regards to the texts
13819 Gnus should work on : 11324 Gnus should work on :
13820 11325
13821 @itemize @bullet 11326 @itemize @bullet
13822 11327
13823 @item 11328 @item
13824 Emacs 19.32 and up. 11329 Emacs 19.30 and up.
13825 11330
13826 @item 11331 @item
13827 XEmacs 19.14 and up. 11332 XEmacs 19.13 and up.
13828 11333
13829 @item 11334 @item
13830 Mule versions based on Emacs 19.32 and up. 11335 Mule versions based on Emacs 19.30 and up.
13831 11336
13832 @end itemize 11337 @end itemize
13833 11338
13834 Gnus will absolutely not work on any Emacsen older than that. Not 11339 Gnus will absolutely not work on any Emacsen older than that. Not
13835 reliably, at least. 11340 reliably, at least.
13836 11341
13837 There are some vague differences between Gnus on the various 11342 There are some vague differences between Gnus on the various platforms:
13838 platforms---XEmacs features more graphics (a logo and a toolbar)---but 11343
13839 other than that, things should look pretty much the same under all 11344 @itemize @bullet
13840 Emacsen. 11345
11346 @item
11347 The mouse-face on Gnus lines under Emacs and Mule is delimited to
11348 certain parts of the lines while they cover the entire line under
11349 XEmacs.
11350
11351 @item
11352 The same with current-article marking---XEmacs puts an underline under
11353 the entire summary line while Emacs and Mule are nicer and kinder.
11354
11355 @item
11356 XEmacs features more graphics---a logo and a toolbar.
11357
11358 @item
11359 Citation highlighting us better under Emacs and Mule than under XEmacs.
11360
11361 @item
11362 Emacs 19.26-19.28 have tangible hidden headers, which can be a bit
11363 confusing.
11364
11365 @end itemize
13841 11366
13842 11367
13843 @node Contributors 11368 @node Contributors
13844 @subsection Contributors 11369 @subsection Contributors
13845 @cindex contributors 11370 @cindex contributors
13858 I would like to take this opportunity to thank the Academy for... oops, 11383 I would like to take this opportunity to thank the Academy for... oops,
13859 wrong show. 11384 wrong show.
13860 11385
13861 @itemize @bullet 11386 @itemize @bullet
13862 11387
13863 @item 11388 @item Masanobu @sc{Umeda}
13864 Masanobu @sc{Umeda}---the writer of the original @sc{gnus}. 11389 The writer of the original @sc{gnus}.
13865 11390
13866 @item 11391 @item Per Abrahamsen
13867 Per Abrahamsen---custom, scoring, highlighting and @sc{soup} code (as 11392 Custom, scoring, highlighting and @sc{soup} code (as well as numerous
13868 well as numerous other things). 11393 other things).
13869 11394
13870 @item 11395 @item Luis Fernandes
13871 Luis Fernandes---design and graphics. 11396 Design and graphics.
13872 11397
13873 @item 11398 @item Wes Hardaker
13874 Erik Naggum---help, ideas, support, code and stuff. 11399 @file{gnus-picon.el} and the manual section on @dfn{picons}
13875 11400 (@pxref{Picons}).
13876 @item 11401
13877 Wes Hardaker---@file{gnus-picon.el} and the manual section on 11402 @item Brad Miller
13878 @dfn{picons} (@pxref{Picons}). 11403 @file{gnus-gl.el} and the GroupLens manual section (@pxref{GroupLens}).
13879 11404
13880 @item 11405 @item Sudish Joseph
13881 Brad Miller---@file{gnus-gl.el} and the GroupLens manual section 11406 Innumerable bug fixes.
13882 (@pxref{GroupLens}). 11407
13883 11408 @item Ilja Weis
13884 @item 11409 @file{gnus-topic.el}.
13885 Sudish Joseph---innumerable bug fixes. 11410
13886 11411 @item Steven L. Baur
13887 @item 11412 Lots and lots of bugs detections and fixes.
13888 Ilja Weis---@file{gnus-topic.el}. 11413
13889 11414 @item Vladimir Alexiev
13890 @item 11415 The refcard and reference booklets.
13891 Steven L. Baur---lots and lots and lots of bugs detections and fixes. 11416
13892 11417 @item Felix Lee & JWZ
13893 @item 11418 I stole some pieces from the XGnus distribution by Felix Lee and JWZ.
13894 Vladimir Alexiev---the refcard and reference booklets. 11419
13895 11420 @item Scott Byer
13896 @item 11421 @file{nnfolder.el} enhancements & rewrite.
13897 Felix Lee & Jamie Zawinsky---I stole some pieces from the XGnus 11422
13898 distribution by Felix Lee and JWZ. 11423 @item Peter Mutsaers
13899 11424 Orphan article scoring code.
13900 @item 11425
13901 Scott Byer---@file{nnfolder.el} enhancements & rewrite. 11426 @item Ken Raeburn
13902 11427 POP mail support.
13903 @item 11428
13904 Peter Mutsaers---orphan article scoring code. 11429 @item Hallvard B Furuseth
13905 11430 Various bits and pieces, especially dealing with .newsrc files.
13906 @item 11431
13907 Ken Raeburn---POP mail support. 11432 @item Brian Edmonds
13908 11433 @file{gnus-bbdb.el}.
13909 @item 11434
13910 Hallvard B Furuseth---various bits and pieces, especially dealing with 11435 @item Ricardo Nassif and Mark Borges
13911 .newsrc files. 11436 Proof-reading.
13912 11437
13913 @item 11438 @item Kevin Davidson
13914 Brian Edmonds---@file{gnus-bbdb.el}. 11439 Came up with the name @dfn{ding}, so blame him.
13915
13916 @item
13917 David Moore---rewrite of @file{nnvirtual.el} and many other things.
13918
13919 @item
13920 Ricardo Nassif, Mark Borges, and Jost Krieger---proof-reading.
13921
13922 @item
13923 Kevin Davidson---came up with the name @dfn{ding}, so blame him.
13924
13925 @item
13926 François Pinard---many, many interesting and thorough bug reports.
13927 11440
13928 @end itemize 11441 @end itemize
13929 11442
13930 The following people have contributed many patches and suggestions: 11443 Peter Arius, Stainless Steel Rat, Ulrik Dickow, Jack Vinson, Daniel
13931 11444 Quinlan, Frank D. Cringle, Geoffrey T. Dairiki, Fabrice Popineau and
13932 Christopher Davis, 11445 Andrew Eskilsson have all contributed code and suggestions.
13933 Andrew Eskilsson,
13934 Kai Grossjohann,
13935 David Kågedal,
13936 Richard Pieri,
13937 Fabrice Popineau,
13938 Daniel Quinlan,
13939 Jason L. Tibbitts, III,
13940 and
13941 Jack Vinson.
13942
13943 Also thanks to the following for patches and stuff:
13944
13945 Adrian Aichner,
13946 Peter Arius,
13947 Matt Armstrong,
13948 Marc Auslander,
13949 Chris Bone,
13950 Mark Borges,
13951 Lance A. Brown,
13952 Kees de Bruin,
13953 Martin Buchholz,
13954 Kevin Buhr,
13955 Alastair Burt,
13956 Joao Cachopo,
13957 Zlatko Calusic,
13958 Massimo Campostrini,
13959 Michael R. Cook,
13960 Glenn Coombs,
13961 Frank D. Cringle,
13962 Geoffrey T. Dairiki,
13963 Andre Deparade,
13964 Ulrik Dickow,
13965 Dave Disser,
13966 Joev Dubach,
13967 Paul Eggert,
13968 Michael Ernst,
13969 Luc Van Eycken,
13970 Sam Falkner,
13971 Paul Franklin,
13972 David S. Goldberg,
13973 D. Hall,
13974 Magnus Hammerin,
13975 Raja R. Harinath,
13976 Hisashige Kenji, @c Hisashige
13977 Marc Horowitz,
13978 François Felix Ingrand,
13979 Ishikawa Ichiro, @c Ishikawa
13980 Lee Iverson,
13981 Rajappa Iyer,
13982 Randell Jesup,
13983 Fred Johansen,
13984 Greg Klanderman,
13985 Karl Kleinpaste,
13986 Peter Skov Knudsen,
13987 Shuhei Kobayashi, @c Kobayashi
13988 Thor Kristoffersen,
13989 Jens Lautenbacher,
13990 Carsten Leonhardt,
13991 James LewisMoss,
13992 Christian Limpach,
13993 Markus Linnala,
13994 Dave Love,
13995 Tonny Madsen,
13996 Shlomo Mahlab,
13997 Nat Makarevitch,
13998 David Martin,
13999 Gordon Matzigkeit,
14000 Timo Metzemakers,
14001 Richard Mlynarik,
14002 Lantz Moore,
14003 Morioka Tomohiko, @c Morioka
14004 Erik Toubro Nielsen,
14005 Hrvoje Niksic,
14006 Andy Norman,
14007 C. R. Oldham,
14008 Alexandre Oliva,
14009 Ken Olstad,
14010 Masaharu Onishi, @c Onishi
14011 Hideki Ono, @c Ono
14012 William Perry,
14013 Stephen Peters,
14014 Ulrich Pfeifer,
14015 John McClary Prevost,
14016 Colin Rafferty,
14017 Bart Robinson,
14018 Jason Rumney,
14019 Loren Schall,
14020 Dan Schmidt,
14021 Ralph Schleicher,
14022 Philippe Schnoebelen,
14023 Randal L. Schwartz,
14024 Danny Siu,
14025 Paul D. Smith,
14026 Jeff Sparkes,
14027 Michael Sperber,
14028 Richard Stallman,
14029 Greg Stark,
14030 Paul Stodghill,
14031 Kurt Swanson,
14032 Samuel Tardieu,
14033 Teddy,
14034 Chuck Thompson,
14035 Philippe Troin,
14036 Jan Vroonhof,
14037 Barry A. Warsaw,
14038 Christoph Wedler,
14039 Joe Wells,
14040 and
14041 Katsumi Yamaoka. @c Yamaoka
14042
14043 For a full overview of what each person has done, the ChangeLogs
14044 included in the Gnus alpha distributions should give ample reading
14045 (550kB and counting).
14046
14047 Apologies to everybody that I've forgotten, of which there are many, I'm
14048 sure.
14049
14050 Gee, that's quite a list of people. I guess that must mean that there
14051 actually are people who are using Gnus. Who'd'a thunk it!
14052 11446
14053 11447
14054 @node New Features 11448 @node New Features
14055 @subsection New Features 11449 @subsection New Features
14056 @cindex new features 11450 @cindex new features
14057
14058 @menu
14059 * ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
14060 * September Gnus:: The Thing Formally Known As Gnus 5.3/5.3.
14061 * Red Gnus:: Third time best---Gnus 5.4/5.5.
14062 @end menu
14063
14064 These lists are, of course, just @emph{short} overviews of the
14065 @emph{most} important new features. No, really. There are tons more.
14066 Yes, we have feeping creaturism in full effect.
14067
14068
14069 @node ding Gnus
14070 @subsubsection (ding) Gnus
14071
14072 New features in Gnus 5.0/5.1:
14073 11451
14074 @itemize @bullet 11452 @itemize @bullet
14075 11453
14076 @item 11454 @item
14077 The look of all buffers can be changed by setting format-like variables 11455 The look of all buffers can be changed by setting format-like variables
14178 11556
14179 @item 11557 @item
14180 You can click on buttons instead of using the keyboard 11558 You can click on buttons instead of using the keyboard
14181 (@pxref{Buttons}). 11559 (@pxref{Buttons}).
14182 11560
11561 @item
11562 Gnus can use NoCeM files to weed out spam (@pxref{NoCeM}).
11563
14183 @end itemize 11564 @end itemize
14184 11565
14185 11566 This is, of course, just a @emph{short} overview of the @emph{most}
14186 @node September Gnus 11567 important new features. No, really. There are tons more. Yes, we have
14187 @subsubsection September Gnus 11568 feeping creaturism in full effect, but nothing too gratuitous, I would
14188 11569 hope.
14189 New features in Gnus 5.2/5.3:
14190
14191 @itemize @bullet
14192
14193 @item
14194 A new message composition mode is used. All old customization variables
14195 for @code{mail-mode}, @code{rnews-reply-mode} and @code{gnus-msg} are
14196 now obsolete.
14197
14198 @item
14199 Gnus is now able to generate @dfn{sparse} threads---threads where
14200 missing articles are represented by empty nodes (@pxref{Customizing
14201 Threading}).
14202
14203 @lisp
14204 (setq gnus-build-sparse-threads 'some)
14205 @end lisp
14206
14207 @item
14208 Outgoing articles are stored on a special archive server
14209 (@pxref{Archived Messages}).
14210
14211 @item
14212 Partial thread regeneration now happens when articles are
14213 referred.
14214
14215 @item
14216 Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
14217
14218 @item
14219 Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
14220
14221 @item
14222 A @code{trn}-line tree buffer can be displayed (@pxref{Tree Display}).
14223
14224 @lisp
14225 (setq gnus-use-trees t)
14226 @end lisp
14227
14228 @item
14229 An @code{nn}-like pick-and-read minor mode is available for the summary
14230 buffers (@pxref{Pick and Read}).
14231
14232 @lisp
14233 (add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
14234 @end lisp
14235
14236 @item
14237 In binary groups you can use a special binary minor mode (@pxref{Binary
14238 Groups}).
14239
14240 @item
14241 Groups can be grouped in a folding topic hierarchy (@pxref{Group
14242 Topics}).
14243
14244 @lisp
14245 (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
14246 @end lisp
14247
14248 @item
14249 Gnus can re-send and bounce mail (@pxref{Summary Mail Commands}).
14250
14251 @item
14252 Groups can now have a score, and bubbling based on entry frequency
14253 is possible (@pxref{Group Score}).
14254
14255 @lisp
14256 (add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
14257 @end lisp
14258
14259 @item
14260 Groups can be process-marked, and commands can be performed on
14261 groups of groups (@pxref{Marking Groups}).
14262
14263 @item
14264 Caching is possible in virtual groups.
14265
14266 @item
14267 @code{nndoc} now understands all kinds of digests, mail boxes, rnews
14268 news batches, ClariNet briefs collections, and just about everything
14269 else (@pxref{Document Groups}).
14270
14271 @item
14272 Gnus has a new backend (@code{nnsoup}) to create/read SOUP packets
14273 (@pxref{SOUP}).
14274
14275 @item
14276 The Gnus cache is much faster.
14277
14278 @item
14279 Groups can be sorted according to many criteria (@pxref{Sorting
14280 Groups}).
14281
14282 @item
14283 New group parameters have been introduced to set list-address and
14284 expiry times (@pxref{Group Parameters}).
14285
14286 @item
14287 All formatting specs allow specifying faces to be used
14288 (@pxref{Formatting Fonts}).
14289
14290 @item
14291 There are several more commands for setting/removing/acting on process
14292 marked articles on the @kbd{M P} submap (@pxref{Setting Process Marks}).
14293
14294 @item
14295 The summary buffer can be limited to show parts of the available
14296 articles based on a wide range of criteria. These commands have been
14297 bound to keys on the @kbd{/} submap (@pxref{Limiting}).
14298
14299 @item
14300 Articles can be made persistent with the @kbd{*} command
14301 (@pxref{Persistent Articles}).
14302
14303 @item
14304 All functions for hiding article elements are now toggles.
14305
14306 @item
14307 Article headers can be buttonized (@pxref{Article Washing}).
14308
14309 @lisp
14310 (add-hook 'gnus-article-display-hook
14311 'gnus-article-add-buttons-to-head)
14312 @end lisp
14313
14314 @item
14315 All mail backends support fetching articles by @code{Message-ID}.
14316
14317 @item
14318 Duplicate mail can now be treated properly (@pxref{Duplicates}).
14319
14320 @item
14321 All summary mode commands are available directly from the article
14322 buffer (@pxref{Article Keymap}).
14323
14324 @item
14325 Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows
14326 Configuration}).
14327
14328 @item
14329 Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
14330
14331 @item
14332 Gnus can make use of NoCeM files to weed out spam (@pxref{NoCeM}).
14333
14334 @lisp
14335 (setq gnus-use-nocem t)
14336 @end lisp
14337
14338 @item
14339 Groups can be made permanently visible (@pxref{Listing Groups}).
14340
14341 @lisp
14342 (setq gnus-permanently-visible-groups "^nnml:")
14343 @end lisp
14344
14345 @item
14346 Many new hooks have been introduced to make customizing easier.
14347
14348 @item
14349 Gnus respects the @code{Mail-Copies-To} header.
14350
14351 @item
14352 Threads can be gathered by looking at the @code{References} header
14353 (@pxref{Customizing Threading}).
14354
14355 @lisp
14356 (setq gnus-summary-thread-gathering-function
14357 'gnus-gather-threads-by-references)
14358 @end lisp
14359
14360 @item
14361 Read articles can be stored in a special backlog buffer to avoid
14362 refetching (@pxref{Article Backlog}).
14363
14364 @lisp
14365 (setq gnus-keep-backlog 50)
14366 @end lisp
14367
14368 @item
14369 A clean copy of the current article is always stored in a separate
14370 buffer to allow easier treatment.
14371
14372 @item
14373 Gnus can suggest where to save articles (@pxref{Saving Articles}).
14374
14375 @item
14376 Gnus doesn't have to do as much prompting when saving (@pxref{Saving
14377 Articles}).
14378
14379 @lisp
14380 (setq gnus-prompt-before-saving t)
14381 @end lisp
14382
14383 @item
14384 @code{gnus-uu} can view decoded files asynchronously while fetching
14385 articles (@pxref{Other Decode Variables}).
14386
14387 @lisp
14388 (setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
14389 @end lisp
14390
14391 @item
14392 Filling in the article buffer now works properly on cited text
14393 (@pxref{Article Washing}).
14394
14395 @item
14396 Hiding cited text adds buttons to toggle hiding, and how much
14397 cited text to hide is now customizable (@pxref{Article Hiding}).
14398
14399 @lisp
14400 (setq gnus-cited-lines-visible 2)
14401 @end lisp
14402
14403 @item
14404 Boring headers can be hidden (@pxref{Article Hiding}).
14405
14406 @lisp
14407 (add-hook 'gnus-article-display-hook
14408 'gnus-article-hide-boring-headers t)
14409 @end lisp
14410
14411 @item
14412 Default scoring values can now be set from the menu bar.
14413
14414 @item
14415 Further syntax checking of outgoing articles have been added.
14416
14417 @end itemize
14418
14419
14420 @node Red Gnus
14421 @subsubsection Red Gnus
14422
14423 New features in Gnus 5.4/5.5:
14424
14425 @itemize @bullet
14426
14427 @item
14428 @file{nntp.el} has been totally rewritten in an asynchronous fashion.
14429
14430 @item
14431 Article prefetching functionality has been moved up into
14432 Gnus (@pxref{Asynchronous Fetching}).
14433
14434 @item
14435 Scoring can now be performed with logical operators like @code{and},
14436 @code{or}, @code{not}, and parent redirection (@pxref{Advanced
14437 Scoring}).
14438
14439 @item
14440 Article washing status can be displayed in the
14441 article mode line (@pxref{Misc Article}).
14442
14443 @item
14444 @file{gnus.el} has been split into many smaller files.
14445
14446 @item
14447 Suppression of duplicate articles based on Message-ID can be done
14448 (@pxref{Duplicate Suppression}).
14449
14450 @lisp
14451 (setq gnus-suppress-duplicates t)
14452 @end lisp
14453
14454 @item
14455 New variables for specifying what score and adapt files are to be
14456 considered home score and adapt files (@pxref{Home Score File}).
14457
14458 @item
14459 @code{nndoc} was rewritten to be easily extendable (@pxref{Document
14460 Server Internals}).
14461
14462 @item
14463 Groups can inherit group parameters from parent topics (@pxref{Topic
14464 Parameters}).
14465
14466 @item
14467 Article editing has been revamped and is now actually usable.
14468
14469 @item
14470 Signatures can be recognized in more intelligent fashions
14471 (@pxref{Article Signature}).
14472
14473 @item
14474 Summary pick mode has been made to look more @code{nn}-like. Line
14475 numbers are displayed and the @kbd{.} command can be used to pick
14476 articles (@code{Pick and Read}).
14477
14478 @item
14479 Commands for moving the @file{.newsrc.eld} from one server to
14480 another have been added (@pxref{Changing Servers}).
14481
14482 @item
14483 A way to specify that ``uninteresting'' fields be suppressed when
14484 generating lines in buffers (@pxref{Advanced Formatting}).
14485
14486 @item
14487 Several commands in the group buffer can be undone with @kbd{M-C-_}
14488 (@pxref{Undo}).
14489
14490 @item
14491 Scoring can be done on words using the new score type @code{w}
14492 (@pxref{Score File Format}).
14493
14494 @item
14495 Adaptive scoring can be done on a Subject word-by-word basis
14496 (@pxref{Adaptive Scoring}).
14497
14498 @lisp
14499 (setq gnus-use-adaptive-scoring '(word))
14500 @end lisp
14501
14502 @item
14503 Scores can be decayed (@pxref{Score Decays}).
14504
14505 @lisp
14506 (setq gnus-decay-scores t)
14507 @end lisp
14508
14509 @item
14510 Scoring can be performed using a regexp on the Date header. The Date is
14511 normalized to compact ISO 8601 format first (@pxref{Score File Format}).
14512
14513 @item
14514 A new command has been added to remove all data on articles from
14515 the native server (@pxref{Changing Servers}).
14516
14517 @item
14518 A new command for reading collections of documents
14519 (@code{nndoc} with @code{nnvirtual} on top) has been added---@kbd{M-C-d}
14520 (@pxref{Really Various Summary Commands}).
14521
14522 @item
14523 Process mark sets can be pushed and popped (@pxref{Setting Process
14524 Marks}).
14525
14526 @item
14527 A new mail-to-news backend makes it possible to post even when the NNTP
14528 server doesn't allow posting (@pxref{Mail-To-News Gateways}).
14529
14530 @item
14531 A new backend for reading searches from Web search engines
14532 (@dfn{DejaNews}, @dfn{Alta Vista}, @dfn{InReference}) has been added
14533 (@pxref{Web Searches}).
14534
14535 @item
14536 Groups inside topics can now be sorted using the standard sorting
14537 functions, and each topic can be sorted independently (@pxref{Topic
14538 Sorting}).
14539
14540 @item
14541 Subsets of the groups can be sorted independently (@code{Sorting
14542 Groups}).
14543
14544 @item
14545 Cached articles can be pulled into the groups (@pxref{Summary Generation
14546 Commands}).
14547
14548 @item
14549 Score files are now applied in a more reliable order (@pxref{Score
14550 Variables}).
14551
14552 @item
14553 Reports on where mail messages end up can be generated (@pxref{Splitting
14554 Mail}).
14555
14556 @item
14557 More hooks and functions have been added to remove junk from incoming
14558 mail before saving the mail (@pxref{Washing Mail}).
14559
14560 @item
14561 Emphasized text can be properly fontisized:
14562
14563 @lisp
14564 (add-hook 'gnus-article-display-hook 'gnus-article-emphasize)
14565 @end lisp
14566
14567 @end itemize
14568 11570
14569 11571
14570 @node Newest Features 11572 @node Newest Features
14571 @subsection Newest Features 11573 @subsection Newest Features
14572 @cindex todo 11574 @cindex todo
14578 11580
14579 @itemize @bullet 11581 @itemize @bullet
14580 @item 11582 @item
14581 Native @sc{mime} support is something that should be done. 11583 Native @sc{mime} support is something that should be done.
14582 @item 11584 @item
11585 A better and simpler method for specifying mail composing methods.
11586 @item
11587 Allow posting through mail-to-news gateways.
11588 @item
14583 Really do unbinhexing. 11589 Really do unbinhexing.
14584 @end itemize 11590 @end itemize
14585 11591
14586 And much, much, much more. There is more to come than has already been 11592 And much, much, much more. There is more to come than has already been
14587 implemented. (But that's always true, isn't it?) 11593 implemented. (But that's always true, isn't it?)
14588 11594
14589 @file{<URL:http://www.ifi.uio.no/~larsi/rgnus/todo>} is where the actual 11595 @code{<URL:http://www.ifi.uio.no/~larsi/sgnus/todo>} is where the actual
14590 up-to-the-second todo list is located, so if you're really curious, you 11596 up-to-the-second todo list is located, so if you're really curious, you
14591 could point your Web browser over that-a-way. 11597 could point your Web browser over that-a-way.
14592
14593 @iftex
14594
14595 @node The Manual
14596 @section The Manual
14597 @cindex colophon
14598 @cindex manual
14599
14600 This manual was generated from a TeXinfo file and then run through
14601 either @code{texi2dvi}
14602 @iflatex
14603 or my own home-brewed TeXinfo to \LaTeX\ transformer,
14604 and then run through @code{latex} and @code{dvips}
14605 @end iflatex
14606 to get what you hold in your hands now.
14607
14608 The following conventions have been used:
14609
14610 @enumerate
14611
14612 @item
14613 This is a @samp{string}
14614
14615 @item
14616 This is a @kbd{keystroke}
14617
14618 @item
14619 This is a @file{file}
14620
14621 @item
14622 This is a @code{symbol}
14623
14624 @end enumerate
14625
14626 So if I were to say ``set @code{flargnoze} to @samp{yes}'', that would
14627 mean:
14628
14629 @lisp
14630 (setq flargnoze "yes")
14631 @end lisp
14632
14633 If I say ``set @code{flumphel} to @code{yes}'', that would mean:
14634
14635 @lisp
14636 (setq flumphel 'yes)
14637 @end lisp
14638
14639 @samp{yes} and @code{yes} are two @emph{very} different things---don't
14640 ever get them confused.
14641
14642 @iflatex
14643 @c @head
14644 Of course, everything in this manual is of vital interest, so you should
14645 read it all. Several times. However, if you feel like skimming the
14646 manual, look for that gnu head you should see in the margin over
14647 there---it means that what's being discussed is of more importance than
14648 the rest of the stuff. (On the other hand, if everything is infinitely
14649 important, how can anything be more important than that? Just one more
14650 of the mysteries of this world, I guess.)
14651 @end iflatex
14652
14653 @end iftex
14654 11598
14655 11599
14656 @node Terminology 11600 @node Terminology
14657 @section Terminology 11601 @section Terminology
14658 11602
14704 Secondary backends are somewhere half-way between being native and being 11648 Secondary backends are somewhere half-way between being native and being
14705 foreign, but they mostly act like they are native. 11649 foreign, but they mostly act like they are native.
14706 11650
14707 @item article 11651 @item article
14708 @cindex article 11652 @cindex article
14709 A message that has been posted as news. 11653 A nessage that has been posted as news.
14710 11654
14711 @item mail message 11655 @item mail message
14712 @cindex mail message 11656 @cindex mail message
14713 A message that has been mailed. 11657 A message that has been mailed.
14714 11658
14767 is rather large, as you might surmise. 11711 is rather large, as you might surmise.
14768 11712
14769 @item bogus groups 11713 @item bogus groups
14770 @cindex bogus groups 11714 @cindex bogus groups
14771 A group that exists in the @file{.newsrc} file, but isn't known to the 11715 A group that exists in the @file{.newsrc} file, but isn't known to the
14772 server (i.e., it isn't in the active file), is a @emph{bogus group}. 11716 server (i. e., it isn't in the active file), is a @emph{bogus group}.
14773 This means that the group probably doesn't exist (any more). 11717 This means that the group probably doesn't exist (any more).
14774 11718
14775 @item server 11719 @item server
14776 @cindex server 11720 @cindex server
14777 A machine than one can connect to and get news (or mail) from. 11721 A machine than one can connect to and get news (or mail) from.
14782 server parameters. 11726 server parameters.
14783 11727
14784 @item virtual server 11728 @item virtual server
14785 @cindex virtual server 11729 @cindex virtual server
14786 A named select method. Since a select methods defines all there is to 11730 A named select method. Since a select methods defines all there is to
14787 know about connecting to a (physical) server, taking the things as a 11731 know about connecting to a (physical) server, taking the who things as a
14788 whole is a virtual server. 11732 whole is a virtual server.
14789
14790 @item washing
14791 @cindex washing
14792 Taking a buffer and running it through a filter of some sort. The
14793 result will (more often than not) be cleaner and more pleasing than the
14794 original.
14795
14796 @item ephemeral groups
14797 @cindex ephemeral groups
14798 Most groups store data on what articles you have read. @dfn{Ephemeral}
14799 groups are groups that will have no data stored---when you exit the
14800 group, it'll disappear into the aether.
14801
14802 @item solid groups
14803 @cindex solid groups
14804 This is the opposite of ephemeral groups. All groups listed in the
14805 group buffer are solid groups.
14806
14807 @item sparse articles
14808 @cindex sparse articles
14809 These are article placeholders shown in the summary buffer when
14810 @code{gnus-build-sparse-threads} has been switched on.
14811 11733
14812 @end table 11734 @end table
14813 11735
14814 11736
14815 @node Customization 11737 @node Customization
14838 @table @code 11760 @table @code
14839 11761
14840 @item gnus-read-active-file 11762 @item gnus-read-active-file
14841 Set this to @code{nil}, which will inhibit Gnus from requesting the 11763 Set this to @code{nil}, which will inhibit Gnus from requesting the
14842 entire active file from the server. This file is often v. large. You 11764 entire active file from the server. This file is often v. large. You
14843 also have to set @code{gnus-check-new-newsgroups} and 11765 also have to set @code{gnus-check-new-news} and
14844 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus 11766 @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
14845 doesn't suddenly decide to fetch the active file anyway. 11767 doesn't suddenly decide to fetch the active file anyway.
14846 11768
14847 @item gnus-nov-is-evil 11769 @item gnus-nov-is-evil
14848 This one has to be @code{nil}. If not, grabbing article headers from 11770 This one has to be @code{nil}. If not, grabbing article headers from
14964 flee}, you have some old @file{.el} files lying around. Delete these. 11886 flee}, you have some old @file{.el} files lying around. Delete these.
14965 11887
14966 @item 11888 @item
14967 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a 11889 Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
14968 how-to. 11890 how-to.
14969
14970 @item
14971 @vindex max-lisp-eval-depth
14972 Gnus works on many recursive structures, and in some extreme (and very
14973 rare) cases Gnus may recurse down ``too deeply'' and Emacs will beep at
14974 you. If this happens to you, set @code{max-lisp-eval-depth} to 500 or
14975 something like that.
14976 @end enumerate 11891 @end enumerate
14977 11892
14978 If all else fails, report the problem as a bug. 11893 If all else fails, report the problem as a bug.
14979 11894
14980 @cindex bugs 11895 @cindex bugs
15001 mail you and ask for more info, and everything takes more time. 11916 mail you and ask for more info, and everything takes more time.
15002 11917
15003 If the problem you're seeing is very visual, and you can't quite explain 11918 If the problem you're seeing is very visual, and you can't quite explain
15004 it, copy the Emacs window to a file (with @code{xwd}, for instance), put 11919 it, copy the Emacs window to a file (with @code{xwd}, for instance), put
15005 it somewhere it can be reached, and include the URL of the picture in 11920 it somewhere it can be reached, and include the URL of the picture in
15006 the bug report. 11921 the bug report.a
15007 11922
15008 If you just need help, you are better off asking on 11923 If you just need help, you are better off asking on
15009 @samp{gnu.emacs.gnus}. I'm not very helpful. 11924 @samp{gnu.emacs.gnus}. I'm not very helpful.
15010 11925
15011 @cindex gnu.emacs.gnus 11926 @cindex gnu.emacs.gnus
15013 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}. 11928 You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
15014 Write to @samp{ding-request@@ifi.uio.no} to subscribe. 11929 Write to @samp{ding-request@@ifi.uio.no} to subscribe.
15015 11930
15016 11931
15017 @node A Programmers Guide to Gnus 11932 @node A Programmers Guide to Gnus
15018 @section A Programmer@'s Guide to Gnus 11933 @section A Programmer's Guide to Gnus
15019 11934
15020 It is my hope that other people will figure out smart stuff that Gnus 11935 It is my hope that other people will figure out smart stuff that Gnus
15021 can do, and that other people will write those smart things as well. To 11936 can do, and that other people will write those smart things as well. To
15022 facilitate that I thought it would be a good idea to describe the inner 11937 facilitate that I thought it would be a good idea to describe the inner
15023 workings of Gnus. And some of the not-so-inner workings, while I'm at 11938 workings of Gnus. And some of the not-so-inner workings, while I'm at
15078 always check whether are present before attempting to call. 11993 always check whether are present before attempting to call.
15079 11994
15080 All these functions are expected to return data in the buffer 11995 All these functions are expected to return data in the buffer
15081 @code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat 11996 @code{nntp-server-buffer} (@samp{ *nntpd*}), which is somewhat
15082 unfortunately named, but we'll have to live with it. When I talk about 11997 unfortunately named, but we'll have to live with it. When I talk about
15083 @dfn{resulting data}, I always refer to the data in that buffer. When I 11998 ``resulting data'', I always refer to the data in that buffer. When I
15084 talk about @dfn{return value}, I talk about the function value returned by 11999 talk about ``return value'', I talk about the function value returned by
15085 the function call. Functions that fail should return @code{nil} as the 12000 the function call.
15086 return value.
15087 12001
15088 Some backends could be said to be @dfn{server-forming} backends, and 12002 Some backends could be said to be @dfn{server-forming} backends, and
15089 some might be said to not be. The latter are backends that generally 12003 some might be said to not be. The latter are backends that generally
15090 only operate on one group at a time, and have no concept of ``server'' 12004 only operate on one group at a time, and have no concept of ``server''
15091 -- they have a group, and they deliver info on that group and nothing 12005 -- they have a group, and they deliver info on that group and nothing
15097 @cindex @code{nnchoke} 12011 @cindex @code{nnchoke}
15098 12012
15099 @menu 12013 @menu
15100 * Required Backend Functions:: Functions that must be implemented. 12014 * Required Backend Functions:: Functions that must be implemented.
15101 * Optional Backend Functions:: Functions that need not be implemented. 12015 * Optional Backend Functions:: Functions that need not be implemented.
15102 * Error Messaging:: How to get messages and report errors.
15103 * Writing New Backends:: Extending old backends. 12016 * Writing New Backends:: Extending old backends.
15104 * Hooking New Backends Into Gnus:: What has to be done on the Gnus end.
15105 * Mail-like Backends:: Some tips on mail backends.
15106 @end menu 12017 @end menu
15107 12018
15108 12019
15109 @node Required Backend Functions 12020 @node Required Backend Functions
15110 @subsubsection Required Backend Functions 12021 @subsubsection Required Backend Functions
15244 group and article numbers are when fetching articles by 12155 group and article numbers are when fetching articles by
15245 @code{Message-ID}. If this isn't possible, @code{t} should be returned 12156 @code{Message-ID}. If this isn't possible, @code{t} should be returned
15246 on successful article retrievement. 12157 on successful article retrievement.
15247 12158
15248 12159
15249 @item (nnchoke-request-group GROUP &optional SERVER FAST) 12160 @item (nnchoke-open-group GROUP &optional SERVER)
12161
12162 Make @var{group} the current group.
12163
12164 There should be no data returned by this function.
12165
12166
12167 @item (nnchoke-request-group GROUP &optional SERVER)
15250 12168
15251 Get data on @var{group}. This function also has the side effect of 12169 Get data on @var{group}. This function also has the side effect of
15252 making @var{group} the current group. 12170 making @var{group} the current group.
15253
15254 If @var{FAST}, don't bother to return useful data, just make @var{group}
15255 the current group.
15256 12171
15257 Here's an example of some result data and a definition of the same: 12172 Here's an example of some result data and a definition of the same:
15258 12173
15259 @example 12174 @example
15260 211 56 1000 1059 ifi.discussion 12175 211 56 1000 1059 ifi.discussion
15261 @end example 12176 @end example
15262 12177
15263 The first number is the status, which should be 211. Next is the 12178 The first number is the status, which should be @code{211}. Next is the
15264 total number of articles in the group, the lowest article number, the 12179 total number of articles in the group, the lowest article number, the
15265 highest article number, and finally the group name. Note that the total 12180 highest article number, and finally the group name. Note that the total
15266 number of articles may be less than one might think while just 12181 number of articles may be less than one might think while just
15267 considering the highest and lowest article numbers, but some articles 12182 considering the highest and lowest article numbers, but some articles
15268 may have been canceled. Gnus just discards the total-number, so 12183 may have been canceled. Gnus just discards the total-number, so
15349 12264
15350 @item (nnchoke-request-update-info GROUP INFO &optional SERVER) 12265 @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
15351 12266
15352 A Gnus group info (@pxref{Group Info}) is handed to the backend for 12267 A Gnus group info (@pxref{Group Info}) is handed to the backend for
15353 alterations. This comes in handy if the backend really carries all the 12268 alterations. This comes in handy if the backend really carries all the
15354 information (as is the case with virtual and imap groups). This 12269 information (as is the case with virtual an imap groups). This function
15355 function should destructively alter the info to suit its needs, and 12270 may alter the info in any manner it sees fit, and should return the
15356 should return the (altered) group info. 12271 (altered) group info. This function may alter the group info
12272 destructively, so no copying is needed before boogeying.
15357 12273
15358 There should be no result data from this function. 12274 There should be no result data from this function.
15359 12275
15360 12276
15361 @item (nnchoke-request-type GROUP &optional ARTICLE) 12277 @item (nnchoke-request-type GROUP &optional ARTICLE)
15364 summary buffer, for instance), Gnus has to know whether the article the 12280 summary buffer, for instance), Gnus has to know whether the article the
15365 user is following up is news or mail. This function should return 12281 user is following up is news or mail. This function should return
15366 @code{news} if @var{article} in @var{group} is news, @code{mail} if it 12282 @code{news} if @var{article} in @var{group} is news, @code{mail} if it
15367 is mail and @code{unknown} if the type can't be decided. (The 12283 is mail and @code{unknown} if the type can't be decided. (The
15368 @var{article} parameter is necessary in @code{nnvirtual} groups which 12284 @var{article} parameter is necessary in @code{nnvirtual} groups which
15369 might very well combine mail groups and news groups.) Both @var{group} 12285 might very well combine mail groups and news groups.)
15370 and @var{article} may be @code{nil}.
15371 12286
15372 There should be no result data from this function. 12287 There should be no result data from this function.
15373 12288
15374 12289
15375 @item (nnchoke-request-update-mark GROUP ARTICLE MARK) 12290 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
15399 would be nice, however, to keep things local if that's practical. 12314 would be nice, however, to keep things local if that's practical.
15400 12315
15401 There should be no result data from this function. 12316 There should be no result data from this function.
15402 12317
15403 12318
12319 @item (nnchoke-request-asynchronous GROUP &optional SERVER ARTICLES)
12320
12321 This is a request to fetch articles asynchronously later.
12322 @var{articles} is an alist of @var{(article-number line-number)}. One
12323 would generally expect that if one later fetches article number 4, for
12324 instance, some sort of asynchronous fetching of the articles after 4
12325 (which might be 5, 6, 7 or 11, 3, 909 depending on the order in that
12326 alist) would be fetched asynchronously, but that is left up to the
12327 backend. Gnus doesn't care.
12328
12329 There should be no result data from this function.
12330
12331
15404 @item (nnchoke-request-group-description GROUP &optional SERVER) 12332 @item (nnchoke-request-group-description GROUP &optional SERVER)
15405 12333
15406 The result data from this function should be a description of 12334 The result data from this function should be a description of
15407 @var{group}. 12335 @var{group}.
15408 12336
15511 There should be no data returned. 12439 There should be no data returned.
15512 12440
15513 @end table 12441 @end table
15514 12442
15515 12443
15516 @node Error Messaging
15517 @subsubsection Error Messaging
15518
15519 @findex nnheader-report
15520 @findex nnheader-get-report
15521 The backends should use the function @code{nnheader-report} to report
15522 error conditions---they should not raise errors when they aren't able to
15523 perform a request. The first argument to this function is the backend
15524 symbol, and the rest are interpreted as arguments to @code{format} if
15525 there are many of them, or just a string if there is one of them.
15526 This function always returns @code{nil}.
15527
15528 @lisp
15529 (nnheader-report 'nnchoke "You did something totally bogus")
15530
15531 (nnheader-report 'nnchoke "Could not request group %s" group)
15532 @end lisp
15533
15534 Gnus, in turn, will call @code{nnheader-get-report} when it gets a
15535 @code{nil} back from a server, and this function returns the most
15536 recently reported message for the backend in question. This function
15537 takes one argument---the server symbol.
15538
15539 Internally, these function access @var{backend}@code{-status-string}, so
15540 the @code{nnchoke} backend will have its error message stored in
15541 @code{nnchoke-status-string}.
15542
15543
15544 @node Writing New Backends 12444 @node Writing New Backends
15545 @subsubsection Writing New Backends 12445 @subsubsection Writing New Backends
15546 12446
15547 Many backends are quite similar. @code{nnml} is just like 12447 The various backends share many similarities. @code{nnml} is just like
15548 @code{nnspool}, but it allows you to edit the articles on the server. 12448 @code{nnspool}, but it allows you to edit the articles on the server.
15549 @code{nnmh} is just like @code{nnml}, but it doesn't use an active file, 12449 @code{nnmh} is just like @code{nnml}, but it doesn't use an active file,
15550 and it doesn't maintain overview databases. @code{nndir} is just like 12450 and it doesn't maintain overview databases. @code{nndir} is just like
15551 @code{nnml}, but it has no concept of ``groups'', and it doesn't allow 12451 @code{nnml}, but it has no concept of ``groups'', and it doesn't allow
15552 editing articles. 12452 editing articles.
15680 12580
15681 (nnoo-define-basics nndir) 12581 (nnoo-define-basics nndir)
15682 12582
15683 (deffoo nndir-open-server (server &optional defs) 12583 (deffoo nndir-open-server (server &optional defs)
15684 (setq nndir-directory 12584 (setq nndir-directory
15685 (or (cadr (assq 'nndir-directory defs)) 12585 (or (cadr (assq 'nndir-directory defs))
15686 server)) 12586 server))
15687 (unless (assq 'nndir-directory defs) 12587 (unless (assq 'nndir-directory defs)
15688 (push `(nndir-directory ,server) defs)) 12588 (push `(nndir-directory ,server) defs))
15689 (push `(nndir-current-group 12589 (push `(nndir-current-group
15690 ,(file-name-nondirectory (directory-file-name nndir-directory))) 12590 ,(file-name-nondirectory (directory-file-name nndir-directory)))
15691 defs) 12591 defs)
15692 (push `(nndir-top-directory 12592 (push `(nndir-top-directory
15693 ,(file-name-directory (directory-file-name nndir-directory))) 12593 ,(file-name-directory (directory-file-name nndir-directory)))
15694 defs) 12594 defs)
15695 (nnoo-change-server 'nndir server defs)) 12595 (nnoo-change-server 'nndir server defs))
15696 12596
15697 (nnoo-map-functions nndir 12597 (nnoo-map-functions nndir
15698 (nnml-retrieve-headers 0 nndir-current-group 0 0) 12598 (nnml-retrieve-headers 0 nndir-current-group 0 0)
15699 (nnmh-request-article 0 nndir-current-group 0 0) 12599 (nnmh-request-article 0 nndir-current-group 0 0)
15707 nnmh-request-newgroups)) 12607 nnmh-request-newgroups))
15708 12608
15709 (provide 'nndir) 12609 (provide 'nndir)
15710 @end lisp 12610 @end lisp
15711 12611
15712
15713 @node Hooking New Backends Into Gnus
15714 @subsubsection Hooking New Backends Into Gnus
15715
15716 @vindex gnus-valid-select-methods
15717 Having Gnus start using your new backend is rather easy---you just
15718 declare it with the @code{gnus-declare-backend} functions. This will
15719 enter the backend into the @code{gnus-valid-select-methods} variable.
15720
15721 @code{gnus-declare-backend} takes two parameters---the backend name and
15722 an arbitrary number of @dfn{abilities}.
15723
15724 Here's an example:
15725
15726 @lisp
15727 (gnus-declare-backend "nnchoke" 'mail 'respool 'address)
15728 @end lisp
15729
15730 The abilities can be:
15731
15732 @table @code
15733 @item mail
15734 This is a mailish backend---followups should (probably) go via mail.
15735 @item post
15736 This is a newsish backend---followups should (probably) go via news.
15737 @item post-mail
15738 This backend supports both mail and news.
15739 @item none
15740 This is neither a post or mail backend---it's something completely
15741 different.
15742 @item respool
15743 It supports respooling---or rather, it is able to modify its source
15744 articles and groups.
15745 @item address
15746 The name of the server should be in the virtual server name. This is
15747 true for almost all backends.
15748 @item prompt-address
15749 The user should be prompted for an address when doing commands like
15750 @kbd{B} in the group buffer. This is true for backends like
15751 @code{nntp}, but not @code{nnmbox}, for instance.
15752 @end table
15753
15754
15755 @node Mail-like Backends
15756 @subsubsection Mail-like Backends
15757
15758 One of the things that separate the mail backends from the rest of the
15759 backends is the heavy dependence by the mail backends on common
15760 functions in @file{nnmail.el}. For instance, here's the definition of
15761 @code{nnml-request-scan}:
15762
15763 @lisp
15764 (deffoo nnml-request-scan (&optional group server)
15765 (setq nnml-article-file-alist nil)
15766 (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))
15767 @end lisp
15768
15769 It simply just calls @code{nnmail-get-new-mail} will a few parameters,
15770 and @code{nnmail} takes care of all the moving and splitting of the
15771 mail.
15772
15773 This function takes four parameters.
15774
15775 @table @var
15776 @item method
15777 This should be a symbol to designate which backend is responsible for
15778 the call.
15779
15780 @item exit-function
15781 This function should be called after the splitting has been performed.
15782
15783 @item temp-directory
15784 Where the temporary files should be stored.
15785
15786 @item group
15787 This optional argument should be a group name if the splitting is to be
15788 performed for one group only.
15789 @end table
15790
15791 @code{nnmail-get-new-mail} will call @var{backend}@code{-save-mail} to
15792 save each article. @var{backend}@code{-active-number} will be called to
15793 find the article number assigned to this article.
15794
15795 The function also uses the following variables:
15796 @var{backend}@code{-get-new-mail} (to see whether to get new mail for
15797 this backend); and @var{backend}@code{-group-alist} and
15798 @var{backend}@code{-active-file} to generate the new active file.
15799 @var{backend}@code{-group-alist} should be a group-active alist, like
15800 this:
15801
15802 @example
15803 (("a-group" (1 . 10))
15804 ("some-group" (34 . 39)))
15805 @end example
15806 12612
15807 12613
15808 @node Score File Syntax 12614 @node Score File Syntax
15809 @subsection Score File Syntax 12615 @subsection Score File Syntax
15810 12616
15888 corresponds to the @sc{nov} format in a mysterious fashion. One could 12694 corresponds to the @sc{nov} format in a mysterious fashion. One could
15889 almost suspect that the author looked at the @sc{nov} specification and 12695 almost suspect that the author looked at the @sc{nov} specification and
15890 just shamelessly @emph{stole} the entire thing, and one would be right. 12696 just shamelessly @emph{stole} the entire thing, and one would be right.
15891 12697
15892 @dfn{Header} is a severely overloaded term. ``Header'' is used in 12698 @dfn{Header} is a severely overloaded term. ``Header'' is used in
15893 RFC1036 to talk about lines in the head of an article (e.g., 12699 RFC1036 to talk about lines in the head of an article (eg.,
15894 @code{From}). It is used by many people as a synonym for 12700 @code{From}). It is used by many people as a synonym for
15895 ``head''---``the header and the body''. (That should be avoided, in my 12701 ``head''---``the header and the body''. (That should be avoided, in my
15896 opinion.) And Gnus uses a format internally that it calls ``header'', 12702 opinion.) And Gnus uses a format internally that it calls ``header'',
15897 which is what I'm talking about here. This is a 9-element vector, 12703 which is what I'm talking about here. This is a 9-element vector,
15898 basically, with each header (ouch) having one slot. 12704 basically, with each header (ouch) having one slot.
15913 @sc{gnus} introduced a concept that I found so useful that I've started 12719 @sc{gnus} introduced a concept that I found so useful that I've started
15914 using it a lot and have elaborated on it greatly. 12720 using it a lot and have elaborated on it greatly.
15915 12721
15916 The question is simple: If you have a large amount of objects that are 12722 The question is simple: If you have a large amount of objects that are
15917 identified by numbers (say, articles, to take a @emph{wild} example) 12723 identified by numbers (say, articles, to take a @emph{wild} example)
15918 that you want to qualify as being ``included'', a normal sequence isn't 12724 that you want to callify as being ``included'', a normal sequence isn't
15919 very useful. (A 200,000 length sequence is a bit long-winded.) 12725 very useful. (A 200,000 length sequence is a bit long-winded.)
15920 12726
15921 The solution is as simple as the question: You just collapse the 12727 The solution is as simple as the question: You just collapse the
15922 sequence. 12728 sequence.
15923 12729
16004 ((tick (15 . 19)) (replied 3 6 (19 . 3))) 12810 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
16005 (nnml "") 12811 (nnml "")
16006 (auto-expire (to-address "ding@@ifi.uio.no"))) 12812 (auto-expire (to-address "ding@@ifi.uio.no")))
16007 @end example 12813 @end example
16008 12814
16009 The first element is the @dfn{group name}---as Gnus knows the group, 12815 The first element is the group name as Gnus knows the group; the second
16010 anyway. The second element is the @dfn{subscription level}, which 12816 is the group level; the third is the read articles in range format; the
16011 normally is a small integer. The third element is a list of ranges of 12817 fourth is a list of article marks lists; the fifth is the select method;
16012 read articles. The fourth element is a list of lists of article marks 12818 and the sixth contains the group parameters.
16013 of various kinds. The fifth element is the select method (or virtual
16014 server, if you like). The sixth element is a list of @dfn{group
16015 parameters}, which is what this section is about.
16016
16017 Any of the last three elements may be missing if they are not required.
16018 In fact, the vast majority of groups will normally only have the first
16019 three elements, which saves quite a lot of cons cells.
16020 12819
16021 Here's a BNF definition of the group info format: 12820 Here's a BNF definition of the group info format:
16022 12821
16023 @example 12822 @example
16024 info = "(" group space level space read 12823 info = "(" group space level space read