Merge from gnus--devo--0
[bpt/emacs.git] / doc / misc / gnus.texi
CommitLineData
4009494e
GM
1\input texinfo
2
db78a8cb 3@setfilename ../../info/gnus
4009494e
GM
4@settitle Gnus Manual
5@syncodeindex fn cp
6@syncodeindex vr cp
7@syncodeindex pg cp
8
01c52d31
MB
9@documentencoding ISO-8859-1
10
4009494e
GM
11@copying
12Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
d82cf70b 132002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
4009494e
GM
14
15@quotation
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.2 or
18any later version published by the Free Software Foundation; with no
19Invariant Sections, with the Front-Cover texts being ``A GNU
20Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
21license is included in the section entitled ``GNU Free Documentation
22License'' in the Emacs manual.
23
24(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
25this GNU Manual, like GNU software. Copies published by the Free
26Software Foundation raise funds for GNU development.''
27
28This document is part of a collection distributed under the GNU Free
29Documentation License. If you want to distribute this document
30separately from the collection, you can do so by adding a copy of the
31license to the document, as described in section 6 of the license.
32@end quotation
33@end copying
34
35@iftex
36@iflatex
37\documentclass[twoside,a4paper,openright,11pt]{book}
38\usepackage[latin1]{inputenc}
39\usepackage{pagestyle}
40\usepackage{epsfig}
41\usepackage{pixidx}
42\input{gnusconfig.tex}
43
44\ifx\pdfoutput\undefined
45\else
46\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
47\usepackage{thumbpdf}
48\pdfcompresslevel=9
49\fi
50
51\makeindex
52\begin{document}
53
54% Adjust ../Makefile.in if you change the following line:
c7ff939a 55\newcommand{\gnusversionname}{Gnus v5.13}
4009494e
GM
56\newcommand{\gnuschaptername}{}
57\newcommand{\gnussectionname}{}
58
59\newcommand{\gnusbackslash}{/}
60
61\newcommand{\gnusref}[1]{``#1'' on page \pageref{#1}}
62\ifx\pdfoutput\undefined
63\newcommand{\gnusuref}[1]{\gnustt{#1}}
64\else
65\newcommand{\gnusuref}[1]{\href{#1}{\gnustt{#1}}}
66\fi
67\newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
68\newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
69
70\newcommand{\gnuskindex}[1]{\index{#1}}
71\newcommand{\gnusindex}[1]{\index{#1}}
72
73\newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
74\newcommand{\gnuscode}[1]{\gnustt{#1}}
75\newcommand{\gnusasis}[1]{\gnustt{#1}}
76\newcommand{\gnusurl}[1]{\gnustt{#1}}
77\newcommand{\gnuscommand}[1]{\gnustt{#1}}
78\newcommand{\gnusenv}[1]{\gnustt{#1}}
79\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''}
80\newcommand{\gnuslisp}[1]{\gnustt{#1}}
81\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
82\newcommand{\gnuskey}[1]{`\gnustt{#1}'}
83\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
84\newcommand{\gnusdfn}[1]{\textit{#1}}
85\newcommand{\gnusi}[1]{\textit{#1}}
86\newcommand{\gnusr}[1]{\textrm{#1}}
87\newcommand{\gnusstrong}[1]{\textbf{#1}}
88\newcommand{\gnusemph}[1]{\textit{#1}}
89\newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
90\newcommand{\gnussc}[1]{\textsc{#1}}
91\newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
92\newcommand{\gnusversion}[1]{{\small\textit{#1}}}
93\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
94\newcommand{\gnusresult}[1]{\gnustt{=> #1}}
95\newcommand{\gnusacronym}[1]{\textsc{#1}}
96\newcommand{\gnusemail}[1]{\textit{#1}}
97
98\newcommand{\gnusbullet}{{${\bullet}$}}
99\newcommand{\gnusdollar}{\$}
100\newcommand{\gnusampersand}{\&}
101\newcommand{\gnuspercent}{\%}
102\newcommand{\gnushash}{\#}
103\newcommand{\gnushat}{\symbol{"5E}}
104\newcommand{\gnusunderline}{\symbol{"5F}}
105\newcommand{\gnusnot}{$\neg$}
106\newcommand{\gnustilde}{\symbol{"7E}}
107\newcommand{\gnusless}{{$<$}}
108\newcommand{\gnusgreater}{{$>$}}
109\newcommand{\gnusbraceleft}{{$>$}}
110\newcommand{\gnusbraceright}{{$>$}}
111
112\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head,height=1cm}}}
113\newcommand{\gnusinteresting}{
114\marginpar[\mbox{}\hfill\gnushead]{\gnushead}
115}
116
117\newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi}
118
119\newcommand{\gnuspagechapter}[1]{
120{\mbox{}}
121}
122
123\newdimen{\gnusdimen}
124\gnusdimen 0pt
125
126\newcommand{\gnuschapter}[2]{
127\gnuscleardoublepage
128\ifdim \gnusdimen = 0pt\setcounter{page}{1}\pagestyle{gnus}\pagenumbering{arabic} \gnusdimen 1pt\fi
129\chapter{#2}
130\renewcommand{\gnussectionname}{}
131\renewcommand{\gnuschaptername}{#2}
132\thispagestyle{empty}
133\hspace*{-2cm}
134\begin{picture}(500,500)(0,0)
135\put(480,350){\makebox(0,0)[tr]{#1}}
136\put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
137\end{picture}
138\clearpage
139}
140
141\newcommand{\gnusfigure}[3]{
142\begin{figure}
143\mbox{}\ifodd\count0\hspace*{-0.8cm}\else\hspace*{-3cm}\fi\begin{picture}(440,#2)
144#3
145\end{picture}
146\caption{#1}
147\end{figure}
148}
149
150\newcommand{\gnusicon}[1]{
151\marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=ps/#1-up,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=ps/#1-up,height=1cm}}}
152}
153
154\newcommand{\gnuspicon}[1]{
155\margindex{\epsfig{figure=#1,width=2cm}}
156}
157
158\newcommand{\gnusxface}[2]{
159\margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
160}
161
162\newcommand{\gnussmiley}[2]{
163\margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
164}
165
166\newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
167
168\newcommand{\gnussection}[1]{
169\renewcommand{\gnussectionname}{#1}
170\section{#1}
171}
172
173\newenvironment{codelist}%
174{\begin{list}{}{
175}
176}{\end{list}}
177
178\newenvironment{asislist}%
179{\begin{list}{}{
180}
181}{\end{list}}
182
183\newenvironment{kbdlist}%
184{\begin{list}{}{
185\labelwidth=0cm
186}
187}{\end{list}}
188
189\newenvironment{dfnlist}%
190{\begin{list}{}{
191}
192}{\end{list}}
193
194\newenvironment{stronglist}%
195{\begin{list}{}{
196}
197}{\end{list}}
198
199\newenvironment{samplist}%
200{\begin{list}{}{
201}
202}{\end{list}}
203
204\newenvironment{varlist}%
205{\begin{list}{}{
206}
207}{\end{list}}
208
209\newenvironment{emphlist}%
210{\begin{list}{}{
211}
212}{\end{list}}
213
214\newlength\gnusheadtextwidth
215\setlength{\gnusheadtextwidth}{\headtextwidth}
216\addtolength{\gnusheadtextwidth}{1cm}
217
218\newpagestyle{gnuspreamble}%
219{
220{
221\ifodd\count0
222{
223\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\mbox{}}\textbf{\hfill\roman{page}}}
224}
225\else
226{
227\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\roman{page}\hfill\mbox{}}}
228}
229}
230\fi
231}
232}
233{
234\ifodd\count0
235\mbox{} \hfill
236\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
237\else
238\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
239\hfill \mbox{}
240\fi
241}
242
243\newpagestyle{gnusindex}%
244{
245{
246\ifodd\count0
247{
248\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\gnuschaptername\hfill\arabic{page}}}}
249}
250\else
251{
252\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
253}
254\fi
255}
256}
257{
258\ifodd\count0
259\mbox{} \hfill
260\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
261\else
262\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
263\hfill \mbox{}
264\fi
265}
266
267\newpagestyle{gnus}%
268{
269{
270\ifodd\count0
271{
272\makebox[12cm]{\hspace*{3.1cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}}
273}
274\else
275{
276\makebox[12cm]{\hspace*{-2.95cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}}
277}
278\fi
279}
280}
281{
282\ifodd\count0
283\mbox{} \hfill
284\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
285\else
286\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
287\hfill \mbox{}
288\fi
289}
290
291\pagenumbering{roman}
292\pagestyle{gnuspreamble}
293
294@end iflatex
295@end iftex
296
297@iftex
298@iflatex
299
300\begin{titlepage}
301{
302
303%\addtolength{\oddsidemargin}{-5cm}
304%\addtolength{\evensidemargin}{-5cm}
305\parindent=0cm
306\addtolength{\textheight}{2cm}
307
308\gnustitle{\gnustitlename}\hfill\gnusversion{\gnusversionname}\\
309\rule{15cm}{1mm}\\
310\vfill
311\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo,height=15cm}
312\vfill
313\rule{15cm}{1mm}\\
314\gnusauthor{by Lars Magne Ingebrigtsen}
315\newpage
316}
317
318\mbox{}
319\vfill
320
321\thispagestyle{empty}
322
323@c @insertcopying
324\newpage
325\end{titlepage}
326@end iflatex
327@end iftex
328
329@ifnottex
330@insertcopying
331@end ifnottex
332
333@dircategory Emacs
334@direntry
335* Gnus: (gnus). The newsreader Gnus.
336@end direntry
337@iftex
338@finalout
339@end iftex
340@setchapternewpage odd
341
342
343
344@titlepage
345@title Gnus Manual
346
347@author by Lars Magne Ingebrigtsen
348@page
349@vskip 0pt plus 1filll
350@insertcopying
351@end titlepage
352
353
354@node Top
355@top The Gnus Newsreader
356
357@ifinfo
358
359You can read news (and mail) from within Emacs by using Gnus. The news
360can be gotten by any nefarious means you can think of---@acronym{NNTP}, local
361spool or your mbox file. All at the same time, if you want to push your
362luck.
363
364@c Adjust ../Makefile.in if you change the following line:
c7ff939a 365This manual corresponds to Gnus v5.13
4009494e
GM
366
367@end ifinfo
368
369@iftex
370
371@iflatex
372\tableofcontents
373\gnuscleardoublepage
374@end iflatex
375
376Gnus is the advanced, self-documenting, customizable, extensible
377unreal-time newsreader for GNU Emacs.
378
379Oops. That sounds oddly familiar, so let's start over again to avoid
380being accused of plagiarism:
381
382Gnus is a message-reading laboratory. It will let you look at just
383about anything as if it were a newsgroup. You can read mail with it,
384you can browse directories with it, you can @code{ftp} with it---you
385can even read news with it!
386
387Gnus tries to empower people who read news the same way Emacs empowers
388people who edit text. Gnus sets no limits to what the user should be
389allowed to do. Users are encouraged to extend Gnus to make it behave
390like they want it to behave. A program should not control people;
391people should be empowered to do what they want by using (or abusing)
392the program.
393
9b3ebcb6 394@c Adjust ../Makefile.in if you change the following line:
2e4089ab 395This manual corresponds to Gnus v5.13
9b3ebcb6
MB
396
397@heading Other related manuals
398@itemize
399@item Message manual: Composing messages
400@item Emacs-MIME: Composing messages; @acronym{MIME}-specific parts.
401@item Sieve: Managing Sieve scripts in Emacs.
402@item PGG: @acronym{PGP/MIME} with Gnus.
2e4089ab 403@item SASL: @acronym{SASL} authentication in Emacs.
9b3ebcb6
MB
404@end itemize
405
4009494e
GM
406@end iftex
407
408@menu
409* Starting Up:: Finding news can be a pain.
410* Group Buffer:: Selecting, subscribing and killing groups.
411* Summary Buffer:: Reading, saving and posting articles.
412* Article Buffer:: Displaying and handling articles.
413* Composing Messages:: Information on sending mail and news.
414* Select Methods:: Gnus reads all messages from various select methods.
415* Scoring:: Assigning values to articles.
416* Various:: General purpose settings.
417* The End:: Farewell and goodbye.
418* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals.
419* GNU Free Documentation License:: The license for this documentation.
420* Index:: Variable, function and concept index.
421* Key Index:: Key Index.
422
423Other related manuals
424
425* Message:(message). Composing messages.
426* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts.
427* Sieve:(sieve). Managing Sieve scripts in Emacs.
428* PGG:(pgg). @acronym{PGP/MIME} with Gnus.
01c52d31 429* SASL:(sasl). @acronym{SASL} authentication in Emacs.
4009494e
GM
430
431@detailmenu
432 --- The Detailed Node Listing ---
433
434Starting Gnus
435
436* Finding the News:: Choosing a method for getting news.
437* The First Time:: What does Gnus do the first time you start it?
438* The Server is Down:: How can I read my mail then?
439* Slave Gnusae:: You can have more than one Gnus active at a time.
440* Fetching a Group:: Starting Gnus just to read a group.
441* New Groups:: What is Gnus supposed to do with new groups?
442* Changing Servers:: You may want to move from one server to another.
443* Startup Files:: Those pesky startup files---@file{.newsrc}.
444* Auto Save:: Recovering from a crash.
445* The Active File:: Reading the active file over a slow line Takes Time.
446* Startup Variables:: Other variables you might change.
447
448New Groups
449
450* Checking New Groups:: Determining what groups are new.
451* Subscription Methods:: What Gnus should do with new groups.
452* Filtering New Groups:: Making Gnus ignore certain new groups.
453
454Group Buffer
455
456* Group Buffer Format:: Information listed and how you can change it.
457* Group Maneuvering:: Commands for moving in the group buffer.
458* Selecting a Group:: Actually reading news.
459* Subscription Commands:: Unsubscribing, killing, subscribing.
460* Group Data:: Changing the info for a group.
461* Group Levels:: Levels? What are those, then?
462* Group Score:: A mechanism for finding out what groups you like.
463* Marking Groups:: You can mark groups for later processing.
464* Foreign Groups:: Creating and editing groups.
465* Group Parameters:: Each group may have different parameters set.
466* Listing Groups:: Gnus can list various subsets of the groups.
467* Sorting Groups:: Re-arrange the group order.
468* Group Maintenance:: Maintaining a tidy @file{.newsrc} file.
469* Browse Foreign Server:: You can browse a server. See what it has to offer.
470* Exiting Gnus:: Stop reading news and get some work done.
471* Group Topics:: A folding group mode divided into topics.
01c52d31 472* Non-ASCII Group Names:: Accessing groups of non-English names.
4009494e
GM
473* Misc Group Stuff:: Other stuff that you can to do.
474
475Group Buffer Format
476
477* Group Line Specification:: Deciding how the group buffer is to look.
478* Group Mode Line Specification:: The group buffer mode line.
479* Group Highlighting:: Having nice colors in the group buffer.
480
481Group Topics
482
483* Topic Commands:: Interactive E-Z commands.
484* Topic Variables:: How to customize the topics the Lisp Way.
485* Topic Sorting:: Sorting each topic individually.
486* Topic Topology:: A map of the world.
487* Topic Parameters:: Parameters that apply to all groups in a topic.
488
489Misc Group Stuff
490
491* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
492* Group Information:: Information and help on groups and Gnus.
493* Group Timestamp:: Making Gnus keep track of when you last read a group.
494* File Commands:: Reading and writing the Gnus files.
495* Sieve Commands:: Managing Sieve scripts.
496
497Summary Buffer
498
499* Summary Buffer Format:: Deciding how the summary buffer is to look.
500* Summary Maneuvering:: Moving around the summary buffer.
501* Choosing Articles:: Reading articles.
502* Paging the Article:: Scrolling the current article.
503* Reply Followup and Post:: Posting articles.
504* Delayed Articles:: Send articles at a later time.
505* Marking Articles:: Marking articles as read, expirable, etc.
506* Limiting:: You can limit the summary buffer.
507* Threading:: How threads are made.
508* Sorting the Summary Buffer:: How articles and threads are sorted.
509* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
510* Article Caching:: You may store articles in a cache.
511* Persistent Articles:: Making articles expiry-resistant.
01c52d31 512* Sticky Articles:: Article buffers that are not reused.
4009494e
GM
513* Article Backlog:: Having already read articles hang around.
514* Saving Articles:: Ways of customizing article saving.
515* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
516* Article Treatment:: The article buffer can be mangled at will.
517* MIME Commands:: Doing MIMEy things with the articles.
518* Charsets:: Character set issues.
519* Article Commands:: Doing various things with the article buffer.
520* Summary Sorting:: Sorting the summary buffer in various ways.
521* Finding the Parent:: No child support? Get the parent.
522* Alternative Approaches:: Reading using non-default summaries.
523* Tree Display:: A more visual display of threads.
524* Mail Group Commands:: Some commands can only be used in mail groups.
525* Various Summary Stuff:: What didn't fit anywhere else.
526* Exiting the Summary Buffer:: Returning to the Group buffer,
527 or reselecting the current group.
528* Crosspost Handling:: How crossposted articles are dealt with.
529* Duplicate Suppression:: An alternative when crosspost handling fails.
530* Security:: Decrypt and Verify.
531* Mailing List:: Mailing list minor mode.
532
533Summary Buffer Format
534
535* Summary Buffer Lines:: You can specify how summary lines should look.
536* To From Newsgroups:: How to not display your own name.
537* Summary Buffer Mode Line:: You can say how the mode line should look.
538* Summary Highlighting:: Making the summary buffer all pretty and nice.
539
540Choosing Articles
541
542* Choosing Commands:: Commands for choosing articles.
543* Choosing Variables:: Variables that influence these commands.
544
545Reply, Followup and Post
546
547* Summary Mail Commands:: Sending mail.
548* Summary Post Commands:: Sending news.
549* Summary Message Commands:: Other Message-related commands.
550* Canceling and Superseding::
551
552Marking Articles
553
554* Unread Articles:: Marks for unread articles.
555* Read Articles:: Marks for read articles.
556* Other Marks:: Marks that do not affect readedness.
557* Setting Marks:: How to set and remove marks.
558* Generic Marking Commands:: How to customize the marking.
559* Setting Process Marks:: How to mark articles for later processing.
560
561Threading
562
563* Customizing Threading:: Variables you can change to affect the threading.
564* Thread Commands:: Thread based commands in the summary buffer.
565
566Customizing Threading
567
568* Loose Threads:: How Gnus gathers loose threads into bigger threads.
569* Filling In Threads:: Making the threads displayed look fuller.
570* More Threading:: Even more variables for fiddling with threads.
571* Low-Level Threading:: You thought it was over@dots{} but you were wrong!
572
573Decoding Articles
574
575* Uuencoded Articles:: Uudecode articles.
576* Shell Archives:: Unshar articles.
577* PostScript Files:: Split PostScript.
578* Other Files:: Plain save and binhex.
579* Decoding Variables:: Variables for a happy decoding.
580* Viewing Files:: You want to look at the result of the decoding?
581
582Decoding Variables
583
584* Rule Variables:: Variables that say how a file is to be viewed.
585* Other Decode Variables:: Other decode variables.
586* Uuencoding and Posting:: Variables for customizing uuencoding.
587
588Article Treatment
589
590* Article Highlighting:: You want to make the article look like fruit salad.
591* Article Fontisizing:: Making emphasized text look nice.
592* Article Hiding:: You also want to make certain info go away.
593* Article Washing:: Lots of way-neat functions to make life better.
594* Article Header:: Doing various header transformations.
595* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
596* Article Button Levels:: Controlling appearance of buttons.
597* Article Date:: Grumble, UT!
598* Article Display:: Display various stuff---X-Face, Picons, Smileys
599* Article Signature:: What is a signature?
600* Article Miscellanea:: Various other stuff.
601
602Alternative Approaches
603
604* Pick and Read:: First mark articles and then read them.
605* Binary Groups:: Auto-decode all articles.
606
607Various Summary Stuff
608
609* Summary Group Information:: Information oriented commands.
610* Searching for Articles:: Multiple article commands.
611* Summary Generation Commands::
612* Really Various Summary Commands:: Those pesky non-conformant commands.
613
614Article Buffer
615
616* Hiding Headers:: Deciding what headers should be displayed.
617* Using MIME:: Pushing articles through @acronym{MIME} before reading them.
618* Customizing Articles:: Tailoring the look of the articles.
619* Article Keymap:: Keystrokes available in the article buffer.
620* Misc Article:: Other stuff.
621
622Composing Messages
623
624* Mail:: Mailing and replying.
625* Posting Server:: What server should you post and mail via?
626* POP before SMTP:: You cannot send a mail unless you read a mail.
627* Mail and Post:: Mailing and posting at the same time.
628* Archived Messages:: Where Gnus stores the messages you've sent.
629* Posting Styles:: An easier way to specify who you are.
630* Drafts:: Postponing messages and rejected messages.
631* Rejected Articles:: What happens if the server doesn't like your article?
632* Signing and encrypting:: How to compose secure messages.
633
634Select Methods
635
636* Server Buffer:: Making and editing virtual servers.
637* Getting News:: Reading USENET news with Gnus.
638* Getting Mail:: Reading your personal mail with Gnus.
639* Browsing the Web:: Getting messages from a plethora of Web sources.
640* IMAP:: Using Gnus as a @acronym{IMAP} client.
641* Other Sources:: Reading directories, files, SOUP packets.
642* Combined Groups:: Combining groups into one group.
643* Email Based Diary:: Using mails to manage diary events in Gnus.
644* Gnus Unplugged:: Reading news and mail offline.
645
646Server Buffer
647
648* Server Buffer Format:: You can customize the look of this buffer.
649* Server Commands:: Commands to manipulate servers.
650* Example Methods:: Examples server specifications.
651* Creating a Virtual Server:: An example session.
652* Server Variables:: Which variables to set.
653* Servers and Methods:: You can use server names as select methods.
654* Unavailable Servers:: Some servers you try to contact may be down.
655
656Getting News
657
658* NNTP:: Reading news from an @acronym{NNTP} server.
659* News Spool:: Reading news from the local spool.
660
661@acronym{NNTP}
662
663* Direct Functions:: Connecting directly to the server.
664* Indirect Functions:: Connecting indirectly to the server.
665* Common Variables:: Understood by several connection functions.
01c52d31 666* NNTP marks:: Storing marks for @acronym{NNTP} servers.
4009494e
GM
667
668Getting Mail
669
670* Mail in a Newsreader:: Important introductory notes.
671* Getting Started Reading Mail:: A simple cookbook example.
672* Splitting Mail:: How to create mail groups.
673* Mail Sources:: How to tell Gnus where to get mail from.
674* Mail Back End Variables:: Variables for customizing mail handling.
675* Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail.
676* Group Mail Splitting:: Use group customize to drive mail splitting.
677* Incorporating Old Mail:: What about the old mail you have?
678* Expiring Mail:: Getting rid of unwanted mail.
679* Washing Mail:: Removing cruft from the mail you get.
680* Duplicates:: Dealing with duplicated mail.
681* Not Reading Mail:: Using mail back ends for reading other files.
682* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
683
684Mail Sources
685
686* Mail Source Specifiers:: How to specify what a mail source is.
687* Mail Source Customization:: Some variables that influence things.
688* Fetching Mail:: Using the mail source specifiers.
689
690Choosing a Mail Back End
691
692* Unix Mail Box:: Using the (quite) standard Un*x mbox.
693* Rmail Babyl:: Emacs programs use the Rmail Babyl format.
694* Mail Spool:: Store your mail in a private spool?
695* MH Spool:: An mhspool-like back end.
696* Maildir:: Another one-file-per-message format.
697* Mail Folders:: Having one file for each group.
698* Comparing Mail Back Ends:: An in-depth looks at pros and cons.
699
700Browsing the Web
701
702* Archiving Mail::
703* Web Searches:: Creating groups from articles that match a string.
704* Slashdot:: Reading the Slashdot comments.
705* Ultimate:: The Ultimate Bulletin Board systems.
706* Web Archive:: Reading mailing list archived on web.
707* RSS:: Reading RDF site summary.
708* Customizing W3:: Doing stuff to Emacs/W3 from Gnus.
709
710@acronym{IMAP}
711
712* Splitting in IMAP:: Splitting mail with nnimap.
713* Expiring in IMAP:: Expiring mail with nnimap.
714* Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox.
715* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button.
716* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
717* Debugging IMAP:: What to do when things don't work.
718
719Other Sources
720
721* Directory Groups:: You can read a directory as if it was a newsgroup.
722* Anything Groups:: Dired? Who needs dired?
723* Document Groups:: Single files can be the basis of a group.
724* SOUP:: Reading @sc{soup} packets ``offline''.
725* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
726
727Document Groups
728
729* Document Server Internals:: How to add your own document types.
730
731SOUP
732
733* SOUP Commands:: Commands for creating and sending @sc{soup} packets
734* SOUP Groups:: A back end for reading @sc{soup} packets.
735* SOUP Replies:: How to enable @code{nnsoup} to take over mail and news.
736
737Combined Groups
738
739* Virtual Groups:: Combining articles from many groups.
740* Kibozed Groups:: Looking through parts of the newsfeed for articles.
741
742Email Based Diary
743
744* The NNDiary Back End:: Basic setup and usage.
745* The Gnus Diary Library:: Utility toolkit on top of nndiary.
746* Sending or Not Sending:: A final note on sending diary messages.
747
748The NNDiary Back End
749
750* Diary Messages:: What makes a message valid for nndiary.
751* Running NNDiary:: NNDiary has two modes of operation.
752* Customizing NNDiary:: Bells and whistles.
753
754The Gnus Diary Library
755
756* Diary Summary Line Format:: A nicer summary buffer line format.
757* Diary Articles Sorting:: A nicer way to sort messages.
758* Diary Headers Generation:: Not doing it manually.
759* Diary Group Parameters:: Not handling them manually.
760
761Gnus Unplugged
762
763* Agent Basics:: How it all is supposed to work.
764* Agent Categories:: How to tell the Gnus Agent what to download.
765* Agent Commands:: New commands for all the buffers.
766* Agent Visuals:: Ways that the agent may effect your summary buffer.
767* Agent as Cache:: The Agent is a big cache too.
768* Agent Expiry:: How to make old articles go away.
769* Agent Regeneration:: How to recover from lost connections and other accidents.
01c52d31 770* Agent and flags:: How the Agent maintains flags.
4009494e
GM
771* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
772* Outgoing Messages:: What happens when you post/mail something?
773* Agent Variables:: Customizing is fun.
774* Example Setup:: An example @file{~/.gnus.el} file for offline people.
775* Batching Agents:: How to fetch news from a @code{cron} job.
776* Agent Caveats:: What you think it'll do and what it does.
777
778Agent Categories
779
780* Category Syntax:: What a category looks like.
781* Category Buffer:: A buffer for maintaining categories.
782* Category Variables:: Customize'r'Us.
783
784Agent Commands
785
786* Group Agent Commands:: Configure groups and fetch their contents.
787* Summary Agent Commands:: Manually select then fetch specific articles.
788* Server Agent Commands:: Select the servers that are supported by the agent.
789
790Scoring
791
792* Summary Score Commands:: Adding score entries for the current group.
793* Group Score Commands:: General score commands.
794* Score Variables:: Customize your scoring. (My, what terminology).
795* Score File Format:: What a score file may contain.
796* Score File Editing:: You can edit score files by hand as well.
797* Adaptive Scoring:: Big Sister Gnus knows what you read.
798* Home Score File:: How to say where new score entries are to go.
799* Followups To Yourself:: Having Gnus notice when people answer you.
800* Scoring On Other Headers:: Scoring on non-standard headers.
801* Scoring Tips:: How to score effectively.
802* Reverse Scoring:: That problem child of old is not problem.
803* Global Score Files:: Earth-spanning, ear-splitting score files.
804* Kill Files:: They are still here, but they can be ignored.
805* Converting Kill Files:: Translating kill files to score files.
4009494e
GM
806* Advanced Scoring:: Using logical expressions to build score rules.
807* Score Decays:: It can be useful to let scores wither away.
808
4009494e
GM
809Advanced Scoring
810
811* Advanced Scoring Syntax:: A definition.
812* Advanced Scoring Examples:: What they look like.
813* Advanced Scoring Tips:: Getting the most out of it.
814
815Various
816
817* Process/Prefix:: A convention used by many treatment commands.
818* Interactive:: Making Gnus ask you many questions.
819* Symbolic Prefixes:: How to supply some Gnus functions with options.
820* Formatting Variables:: You can specify what buffers should look like.
821* Window Layout:: Configuring the Gnus buffer windows.
822* Faces and Fonts:: How to change how faces look.
823* Compilation:: How to speed Gnus up.
824* Mode Lines:: Displaying information in the mode lines.
825* Highlighting and Menus:: Making buffers look all nice and cozy.
826* Buttons:: Get tendinitis in ten easy steps!
827* Daemons:: Gnus can do things behind your back.
828* NoCeM:: How to avoid spam and other fatty foods.
829* Undo:: Some actions can be undone.
830* Predicate Specifiers:: Specifying predicates.
831* Moderation:: What to do if you're a moderator.
832* Image Enhancements:: Modern versions of Emacs/XEmacs can display images.
833* Fuzzy Matching:: What's the big fuzz?
834* Thwarting Email Spam:: Simple ways to avoid unsolicited commercial email.
835* Spam Package:: A package for filtering and processing spam.
836* Other modes:: Interaction with other modes.
837* Various Various:: Things that are really various.
838
839Formatting Variables
840
841* Formatting Basics:: A formatting variable is basically a format string.
842* Mode Line Formatting:: Some rules about mode line formatting variables.
843* Advanced Formatting:: Modifying output in various ways.
844* User-Defined Specs:: Having Gnus call your own functions.
845* Formatting Fonts:: Making the formatting look colorful and nice.
846* Positioning Point:: Moving point to a position after an operation.
847* Tabulation:: Tabulating your output.
848* Wide Characters:: Dealing with wide characters.
849
850Image Enhancements
851
852* X-Face:: Display a funky, teensy black-and-white image.
853* Face:: Display a funkier, teensier colored image.
854* Smileys:: Show all those happy faces the way they were
855 meant to be shown.
856* Picons:: How to display pictures of what you're reading.
857* XVarious:: Other XEmacsy Gnusey variables.
858
859Thwarting Email Spam
860
861* The problem of spam:: Some background, and some solutions
862* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
863* SpamAssassin:: How to use external anti-spam tools.
864* Hashcash:: Reduce spam by burning CPU time.
865
866Spam Package
867
868* Spam Package Introduction::
869* Filtering Incoming Mail::
870* Detecting Spam in Groups::
871* Spam and Ham Processors::
872* Spam Package Configuration Examples::
873* Spam Back Ends::
874* Extending the Spam package::
875* Spam Statistics Package::
876
877Spam Statistics Package
878
879* Creating a spam-stat dictionary::
880* Splitting mail using spam-stat::
881* Low-level interface to the spam-stat dictionary::
882
883Appendices
884
885* XEmacs:: Requirements for installing under XEmacs.
886* History:: How Gnus got where it is today.
887* On Writing Manuals:: Why this is not a beginner's guide.
888* Terminology:: We use really difficult, like, words here.
889* Customization:: Tailoring Gnus to your needs.
890* Troubleshooting:: What you might try if things do not work.
891* Gnus Reference Guide:: Rilly, rilly technical stuff.
892* Emacs for Heathens:: A short introduction to Emacsian terms.
893* Frequently Asked Questions:: The Gnus FAQ
894
895History
896
897* Gnus Versions:: What Gnus versions have been released.
898* Other Gnus Versions:: Other Gnus versions that also have been released.
899* Why?:: What's the point of Gnus?
900* Compatibility:: Just how compatible is Gnus with @sc{gnus}?
901* Conformity:: Gnus tries to conform to all standards.
902* Emacsen:: Gnus can be run on a few modern Emacsen.
903* Gnus Development:: How Gnus is developed.
904* Contributors:: Oodles of people.
905* New Features:: Pointers to some of the new stuff in Gnus.
906
907New Features
908
909* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
910* September Gnus:: The Thing Formally Known As Gnus 5.2/5.3.
911* Red Gnus:: Third time best---Gnus 5.4/5.5.
912* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
913* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
914* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
01c52d31 915* No Gnus:: Very punny.
4009494e
GM
916
917Customization
918
919* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
920* Slow Terminal Connection:: You run a remote Emacs.
921* Little Disk Space:: You feel that having large setup files is icky.
922* Slow Machine:: You feel like buying a faster machine.
923
924Gnus Reference Guide
925
926* Gnus Utility Functions:: Common functions and variable to use.
927* Back End Interface:: How Gnus communicates with the servers.
928* Score File Syntax:: A BNF definition of the score file standard.
929* Headers:: How Gnus stores headers internally.
930* Ranges:: A handy format for storing mucho numbers.
931* Group Info:: The group info format.
932* Extended Interactive:: Symbolic prefixes and stuff.
933* Emacs/XEmacs Code:: Gnus can be run under all modern Emacsen.
934* Various File Formats:: Formats of files that Gnus use.
935
936Back End Interface
937
938* Required Back End Functions:: Functions that must be implemented.
939* Optional Back End Functions:: Functions that need not be implemented.
940* Error Messaging:: How to get messages and report errors.
941* Writing New Back Ends:: Extending old back ends.
942* Hooking New Back Ends Into Gnus:: What has to be done on the Gnus end.
943* Mail-like Back Ends:: Some tips on mail back ends.
944
945Various File Formats
946
947* Active File Format:: Information on articles and groups available.
948* Newsgroups File Format:: Group descriptions.
949
950Emacs for Heathens
951
952* Keystrokes:: Entering text and executing commands.
953* Emacs Lisp:: The built-in Emacs programming language.
954
955@end detailmenu
956@end menu
957
958@node Starting Up
959@chapter Starting Gnus
960@cindex starting up
961
962If you haven't used Emacs much before using Gnus, read @ref{Emacs for
963Heathens} first.
964
965@kindex M-x gnus
966@findex gnus
967If your system administrator has set things up properly, starting Gnus
968and reading news is extremely easy---you just type @kbd{M-x gnus} in
969your Emacs. If not, you should customize the variable
970@code{gnus-select-method} as described in @ref{Finding the News}. For a
971minimal setup for posting should also customize the variables
972@code{user-full-name} and @code{user-mail-address}.
973
974@findex gnus-other-frame
975@kindex M-x gnus-other-frame
976If you want to start Gnus in a different frame, you can use the command
977@kbd{M-x gnus-other-frame} instead.
978
979If things do not go smoothly at startup, you have to twiddle some
980variables in your @file{~/.gnus.el} file. This file is similar to
981@file{~/.emacs}, but is read when Gnus starts.
982
983If you puzzle at any terms used in this manual, please refer to the
984terminology section (@pxref{Terminology}).
985
986@menu
987* Finding the News:: Choosing a method for getting news.
988* The First Time:: What does Gnus do the first time you start it?
989* The Server is Down:: How can I read my mail then?
990* Slave Gnusae:: You can have more than one Gnus active at a time.
991* New Groups:: What is Gnus supposed to do with new groups?
992* Changing Servers:: You may want to move from one server to another.
993* Startup Files:: Those pesky startup files---@file{.newsrc}.
994* Auto Save:: Recovering from a crash.
995* The Active File:: Reading the active file over a slow line Takes Time.
996* Startup Variables:: Other variables you might change.
997@end menu
998
999
1000@node Finding the News
1001@section Finding the News
1002@cindex finding news
1003
1004@vindex gnus-select-method
1005@c @head
1006The @code{gnus-select-method} variable says where Gnus should look for
1007news. This variable should be a list where the first element says
1008@dfn{how} and the second element says @dfn{where}. This method is your
1009native method. All groups not fetched with this method are
1010foreign groups.
1011
1012For instance, if the @samp{news.somewhere.edu} @acronym{NNTP} server is where
1013you want to get your daily dosage of news from, you'd say:
1014
1015@lisp
1016(setq gnus-select-method '(nntp "news.somewhere.edu"))
1017@end lisp
1018
1019If you want to read directly from the local spool, say:
1020
1021@lisp
1022(setq gnus-select-method '(nnspool ""))
1023@end lisp
1024
1025If you can use a local spool, you probably should, as it will almost
1026certainly be much faster. But do not use the local spool if your
1027server is running Leafnode (which is a simple, standalone private news
1028server); in this case, use @code{(nntp "localhost")}.
1029
1030@vindex gnus-nntpserver-file
1031@cindex NNTPSERVER
1032@cindex @acronym{NNTP} server
1033If this variable is not set, Gnus will take a look at the
1034@env{NNTPSERVER} environment variable. If that variable isn't set,
1035Gnus will see whether @code{gnus-nntpserver-file}
1036(@file{/etc/nntpserver} by default) has any opinions on the matter.
1037If that fails as well, Gnus will try to use the machine running Emacs
1038as an @acronym{NNTP} server. That's a long shot, though.
1039
1040@vindex gnus-nntp-server
1041If @code{gnus-nntp-server} is set, this variable will override
1042@code{gnus-select-method}. You should therefore set
1043@code{gnus-nntp-server} to @code{nil}, which is what it is by default.
1044
1045@vindex gnus-secondary-servers
1046@vindex gnus-nntp-server
1047You can also make Gnus prompt you interactively for the name of an
1048@acronym{NNTP} server. If you give a non-numerical prefix to @code{gnus}
1049(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
1050in the @code{gnus-secondary-servers} list (if any). You can also just
1051type in the name of any server you feel like visiting. (Note that this
1052will set @code{gnus-nntp-server}, which means that if you then @kbd{M-x
1053gnus} later in the same Emacs session, Gnus will contact the same
1054server.)
1055
1056@findex gnus-group-browse-foreign-server
1057@kindex B (Group)
1058However, if you use one @acronym{NNTP} server regularly and are just
1059interested in a couple of groups from a different server, you would be
1060better served by using the @kbd{B} command in the group buffer. It will
1061let you have a look at what groups are available, and you can subscribe
1062to any of the groups you want to. This also makes @file{.newsrc}
1063maintenance much tidier. @xref{Foreign Groups}.
1064
1065@vindex gnus-secondary-select-methods
1066@c @head
1067A slightly different approach to foreign groups is to set the
1068@code{gnus-secondary-select-methods} variable. The select methods
1069listed in this variable are in many ways just as native as the
1070@code{gnus-select-method} server. They will also be queried for active
1071files during startup (if that's required), and new newsgroups that
1072appear on these servers will be subscribed (or not) just as native
1073groups are.
1074
1075For instance, if you use the @code{nnmbox} back end to read your mail,
1076you would typically set this variable to
1077
1078@lisp
1079(setq gnus-secondary-select-methods '((nnmbox "")))
1080@end lisp
1081
01c52d31
MB
1082Note: the @acronym{NNTP} back end stores marks in marks files
1083(@pxref{NNTP marks}). This feature makes it easy to share marks between
1084several Gnus installations, but may slow down things a bit when fetching
1085new articles. @xref{NNTP marks}, for more information.
1086
4009494e
GM
1087
1088@node The First Time
1089@section The First Time
1090@cindex first time usage
1091
1092If no startup files exist (@pxref{Startup Files}), Gnus will try to
1093determine what groups should be subscribed by default.
1094
1095@vindex gnus-default-subscribed-newsgroups
1096If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
1097will subscribe you to just those groups in that list, leaving the rest
1098killed. Your system administrator should have set this variable to
1099something useful.
1100
1101Since she hasn't, Gnus will just subscribe you to a few arbitrarily
1102picked groups (i.e., @samp{*.newusers}). (@dfn{Arbitrary} is defined
1103here as @dfn{whatever Lars thinks you should read}.)
1104
1105You'll also be subscribed to the Gnus documentation group, which should
1106help you with most common problems.
1107
1108If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
1109use the normal functions for handling new groups, and not do anything
1110special.
1111
1112
1113@node The Server is Down
1114@section The Server is Down
1115@cindex server errors
1116
1117If the default server is down, Gnus will understandably have some
1118problems starting. However, if you have some mail groups in addition to
1119the news groups, you may want to start Gnus anyway.
1120
1121Gnus, being the trusting sort of program, will ask whether to proceed
1122without a native select method if that server can't be contacted. This
1123will happen whether the server doesn't actually exist (i.e., you have
1124given the wrong address) or the server has just momentarily taken ill
1125for some reason or other. If you decide to continue and have no foreign
1126groups, you'll find it difficult to actually do anything in the group
1127buffer. But, hey, that's your problem. Blllrph!
1128
1129@findex gnus-no-server
1130@kindex M-x gnus-no-server
1131@c @head
1132If you know that the server is definitely down, or you just want to read
1133your mail without bothering with the server at all, you can use the
1134@code{gnus-no-server} command to start Gnus. That might come in handy
1135if you're in a hurry as well. This command will not attempt to contact
1136your primary server---instead, it will just activate all groups on level
11371 and 2. (You should preferably keep no native groups on those two
1138levels.) Also @pxref{Group Levels}.
1139
1140
1141@node Slave Gnusae
1142@section Slave Gnusae
1143@cindex slave
1144
1145You might want to run more than one Emacs with more than one Gnus at the
1146same time. If you are using different @file{.newsrc} files (e.g., if you
1147are using the two different Gnusae to read from two different servers),
1148that is no problem whatsoever. You just do it.
1149
1150The problem appears when you want to run two Gnusae that use the same
1151@file{.newsrc} file.
1152
1153To work around that problem some, we here at the Think-Tank at the Gnus
1154Towers have come up with a new concept: @dfn{Masters} and
1155@dfn{slaves}. (We have applied for a patent on this concept, and have
1156taken out a copyright on those words. If you wish to use those words in
1157conjunction with each other, you have to send $1 per usage instance to
1158me. Usage of the patent (@dfn{Master/Slave Relationships In Computer
1159Applications}) will be much more expensive, of course.)
1160
1161@findex gnus-slave
1162Anyway, you start one Gnus up the normal way with @kbd{M-x gnus} (or
1163however you do it). Each subsequent slave Gnusae should be started with
1164@kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc}
1165files, but instead save @dfn{slave files} that contain information only
1166on what groups have been read in the slave session. When a master Gnus
1167starts, it will read (and delete) these slave files, incorporating all
1168information from them. (The slave files will be read in the sequence
1169they were created, so the latest changes will have precedence.)
1170
1171Information from the slave files has, of course, precedence over the
1172information in the normal (i.e., master) @file{.newsrc} file.
1173
1174If the @file{.newsrc*} files have not been saved in the master when the
1175slave starts, you may be prompted as to whether to read an auto-save
1176file. If you answer ``yes'', the unsaved changes to the master will be
1177incorporated into the slave. If you answer ``no'', the slave may see some
1178messages as unread that have been read in the master.
1179
1180
1181
1182@node New Groups
1183@section New Groups
1184@cindex new groups
1185@cindex subscription
1186
1187@vindex gnus-check-new-newsgroups
1188If you are satisfied that you really never want to see any new groups,
1189you can set @code{gnus-check-new-newsgroups} to @code{nil}. This will
1190also save you some time at startup. Even if this variable is
1191@code{nil}, you can always subscribe to the new groups just by pressing
1192@kbd{U} in the group buffer (@pxref{Group Maintenance}). This variable
1193is @code{ask-server} by default. If you set this variable to
1194@code{always}, then Gnus will query the back ends for new groups even
1195when you do the @kbd{g} command (@pxref{Scanning New Messages}).
1196
1197@menu
1198* Checking New Groups:: Determining what groups are new.
1199* Subscription Methods:: What Gnus should do with new groups.
1200* Filtering New Groups:: Making Gnus ignore certain new groups.
1201@end menu
1202
1203
1204@node Checking New Groups
1205@subsection Checking New Groups
1206
1207Gnus normally determines whether a group is new or not by comparing the
1208list of groups from the active file(s) with the lists of subscribed and
1209dead groups. This isn't a particularly fast method. If
1210@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
1211server for new groups since the last time. This is both faster and
1212cheaper. This also means that you can get rid of the list of killed
1213groups altogether, so you may set @code{gnus-save-killed-list} to
1214@code{nil}, which will save time both at startup, at exit, and all over.
1215Saves disk space, too. Why isn't this the default, then?
1216Unfortunately, not all servers support this command.
1217
1218I bet I know what you're thinking now: How do I find out whether my
1219server supports @code{ask-server}? No? Good, because I don't have a
1220fail-safe answer. I would suggest just setting this variable to
1221@code{ask-server} and see whether any new groups appear within the next
1222few days. If any do, then it works. If none do, then it doesn't
1223work. I could write a function to make Gnus guess whether the server
1224supports @code{ask-server}, but it would just be a guess. So I won't.
1225You could @code{telnet} to the server and say @code{HELP} and see
1226whether it lists @samp{NEWGROUPS} among the commands it understands. If
1227it does, then it might work. (But there are servers that lists
1228@samp{NEWGROUPS} without supporting the function properly.)
1229
1230This variable can also be a list of select methods. If so, Gnus will
1231issue an @code{ask-server} command to each of the select methods, and
1232subscribe them (or not) using the normal methods. This might be handy
1233if you are monitoring a few servers for new groups. A side effect is
1234that startup will take much longer, so you can meditate while waiting.
1235Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
1236
1237
1238@node Subscription Methods
1239@subsection Subscription Methods
1240
1241@vindex gnus-subscribe-newsgroup-method
1242What Gnus does when it encounters a new group is determined by the
1243@code{gnus-subscribe-newsgroup-method} variable.
1244
1245This variable should contain a function. This function will be called
1246with the name of the new group as the only parameter.
1247
1248Some handy pre-fab functions are:
1249
1250@table @code
1251
1252@item gnus-subscribe-zombies
1253@vindex gnus-subscribe-zombies
1254Make all new groups zombies. This is the default. You can browse the
1255zombies later (with @kbd{A z}) and either kill them all off properly
1256(with @kbd{S z}), or subscribe to them (with @kbd{u}).
1257
1258@item gnus-subscribe-randomly
1259@vindex gnus-subscribe-randomly
1260Subscribe all new groups in arbitrary order. This really means that all
1261new groups will be added at ``the top'' of the group buffer.
1262
1263@item gnus-subscribe-alphabetically
1264@vindex gnus-subscribe-alphabetically
1265Subscribe all new groups in alphabetical order.
1266
1267@item gnus-subscribe-hierarchically
1268@vindex gnus-subscribe-hierarchically
1269Subscribe all new groups hierarchically. The difference between this
1270function and @code{gnus-subscribe-alphabetically} is slight.
1271@code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
1272alphabetical fashion, while this function will enter groups into its
1273hierarchy. So if you want to have the @samp{rec} hierarchy before the
1274@samp{comp} hierarchy, this function will not mess that configuration
1275up. Or something like that.
1276
1277@item gnus-subscribe-interactively
1278@vindex gnus-subscribe-interactively
1279Subscribe new groups interactively. This means that Gnus will ask
1280you about @strong{all} new groups. The groups you choose to subscribe
1281to will be subscribed hierarchically.
1282
1283@item gnus-subscribe-killed
1284@vindex gnus-subscribe-killed
1285Kill all new groups.
1286
1287@item gnus-subscribe-topics
1288@vindex gnus-subscribe-topics
1289Put the groups into the topic that has a matching @code{subscribe} topic
1290parameter (@pxref{Topic Parameters}). For instance, a @code{subscribe}
1291topic parameter that looks like
1292
1293@example
1294"nnslashdot"
1295@end example
1296
1297will mean that all groups that match that regex will be subscribed under
1298that topic.
1299
1300If no topics match the groups, the groups will be subscribed in the
1301top-level topic.
1302
1303@end table
1304
1305@vindex gnus-subscribe-hierarchical-interactive
1306A closely related variable is
1307@code{gnus-subscribe-hierarchical-interactive}. (That's quite a
1308mouthful.) If this variable is non-@code{nil}, Gnus will ask you in a
1309hierarchical fashion whether to subscribe to new groups or not. Gnus
1310will ask you for each sub-hierarchy whether you want to descend the
1311hierarchy or not.
1312
1313One common mistake is to set the variable a few paragraphs above
1314(@code{gnus-subscribe-newsgroup-method}) to
1315@code{gnus-subscribe-hierarchical-interactive}. This is an error. This
1316will not work. This is ga-ga. So don't do it.
1317
1318
1319@node Filtering New Groups
1320@subsection Filtering New Groups
1321
1322A nice and portable way to control which new newsgroups should be
1323subscribed (or ignored) is to put an @dfn{options} line at the start of
1324the @file{.newsrc} file. Here's an example:
1325
1326@example
1327options -n !alt.all !rec.all sci.all
1328@end example
1329
1330@vindex gnus-subscribe-options-newsgroup-method
1331This line obviously belongs to a serious-minded intellectual scientific
1332person (or she may just be plain old boring), because it says that all
1333groups that have names beginning with @samp{alt} and @samp{rec} should
1334be ignored, and all groups with names beginning with @samp{sci} should
1335be subscribed. Gnus will not use the normal subscription method for
1336subscribing these groups.
1337@code{gnus-subscribe-options-newsgroup-method} is used instead. This
1338variable defaults to @code{gnus-subscribe-alphabetically}.
1339
1340@vindex gnus-options-not-subscribe
1341@vindex gnus-options-subscribe
1342If you don't want to mess with your @file{.newsrc} file, you can just
1343set the two variables @code{gnus-options-subscribe} and
1344@code{gnus-options-not-subscribe}. These two variables do exactly the
1345same as the @file{.newsrc} @samp{options -n} trick. Both are regexps,
1346and if the new group matches the former, it will be unconditionally
1347subscribed, and if it matches the latter, it will be ignored.
1348
1349@vindex gnus-auto-subscribed-groups
1350Yet another variable that meddles here is
1351@code{gnus-auto-subscribed-groups}. It works exactly like
1352@code{gnus-options-subscribe}, and is therefore really superfluous,
1353but I thought it would be nice to have two of these. This variable is
1354more meant for setting some ground rules, while the other variable is
1355used more for user fiddling. By default this variable makes all new
1356groups that come from mail back ends (@code{nnml}, @code{nnbabyl},
1357@code{nnfolder}, @code{nnmbox}, @code{nnmh}, and @code{nnmaildir})
1358subscribed. If you don't like that, just set this variable to
1359@code{nil}.
1360
1361New groups that match this regexp are subscribed using
1362@code{gnus-subscribe-options-newsgroup-method}.
1363
1364
1365@node Changing Servers
1366@section Changing Servers
1367@cindex changing servers
1368
1369Sometimes it is necessary to move from one @acronym{NNTP} server to another.
1370This happens very rarely, but perhaps you change jobs, or one server is
1371very flaky and you want to use another.
1372
1373Changing the server is pretty easy, right? You just change
1374@code{gnus-select-method} to point to the new server?
1375
1376@emph{Wrong!}
1377
1378Article numbers are not (in any way) kept synchronized between different
1379@acronym{NNTP} servers, and the only way Gnus keeps track of what articles
1380you have read is by keeping track of article numbers. So when you
1381change @code{gnus-select-method}, your @file{.newsrc} file becomes
1382worthless.
1383
1384Gnus provides a few functions to attempt to translate a @file{.newsrc}
1385file from one server to another. They all have one thing in
1386common---they take a looong time to run. You don't want to use these
1387functions more than absolutely necessary.
1388
1389@kindex M-x gnus-change-server
1390@findex gnus-change-server
1391If you have access to both servers, Gnus can request the headers for all
1392the articles you have read and compare @code{Message-ID}s and map the
1393article numbers of the read articles and article marks. The @kbd{M-x
1394gnus-change-server} command will do this for all your native groups. It
1395will prompt for the method you want to move to.
1396
1397@kindex M-x gnus-group-move-group-to-server
1398@findex gnus-group-move-group-to-server
1399You can also move individual groups with the @kbd{M-x
1400gnus-group-move-group-to-server} command. This is useful if you want to
1401move a (foreign) group from one server to another.
1402
1403@kindex M-x gnus-group-clear-data-on-native-groups
1404@findex gnus-group-clear-data-on-native-groups
1405If you don't have access to both the old and new server, all your marks
1406and read ranges have become worthless. You can use the @kbd{M-x
1407gnus-group-clear-data-on-native-groups} command to clear out all data
1408that you have on your native groups. Use with caution.
1409
1410@kindex M-x gnus-group-clear-data
1411@findex gnus-group-clear-data
1412Clear the data from the current group only---nix out marks and the
1413list of read articles (@code{gnus-group-clear-data}).
1414
1415After changing servers, you @strong{must} move the cache hierarchy away,
1416since the cached articles will have wrong article numbers, which will
1417affect which articles Gnus thinks are read.
1418@code{gnus-group-clear-data-on-native-groups} will ask you if you want
1419to have it done automatically; for @code{gnus-group-clear-data}, you
1420can use @kbd{M-x gnus-cache-move-cache} (but beware, it will move the
1421cache for all groups).
1422
1423
1424@node Startup Files
1425@section Startup Files
1426@cindex startup files
1427@cindex .newsrc
1428@cindex .newsrc.el
1429@cindex .newsrc.eld
1430
1431Most common Unix news readers use a shared startup file called
1432@file{.newsrc}. This file contains all the information about what
1433groups are subscribed, and which articles in these groups have been
1434read.
1435
1436Things got a bit more complicated with @sc{gnus}. In addition to
1437keeping the @file{.newsrc} file updated, it also used a file called
1438@file{.newsrc.el} for storing all the information that didn't fit into
1439the @file{.newsrc} file. (Actually, it also duplicated everything in
1440the @file{.newsrc} file.) @sc{gnus} would read whichever one of these
1441files was the most recently saved, which enabled people to swap between
1442@sc{gnus} and other newsreaders.
1443
1444That was kinda silly, so Gnus went one better: In addition to the
1445@file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
1446@file{.newsrc.eld}. It will read whichever of these files that are most
1447recent, but it will never write a @file{.newsrc.el} file. You should
1448never delete the @file{.newsrc.eld} file---it contains much information
1449not stored in the @file{.newsrc} file.
1450
1451@vindex gnus-save-newsrc-file
1452@vindex gnus-read-newsrc-file
1453You can turn off writing the @file{.newsrc} file by setting
1454@code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
1455the file and save some space, as well as exiting from Gnus faster.
1456However, this will make it impossible to use other newsreaders than
1457Gnus. But hey, who would want to, right? Similarly, setting
1458@code{gnus-read-newsrc-file} to @code{nil} makes Gnus ignore the
1459@file{.newsrc} file and any @file{.newsrc-SERVER} files, which can be
1460convenient if you use a different news reader occasionally, and you
1461want to read a different subset of the available groups with that
1462news reader.
1463
1464@vindex gnus-save-killed-list
1465If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
1466will not save the list of killed groups to the startup file. This will
1467save both time (when starting and quitting) and space (on disk). It
1468will also mean that Gnus has no record of what groups are new or old,
1469so the automatic new groups subscription methods become meaningless.
1470You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
1471@code{ask-server} if you set this variable to @code{nil} (@pxref{New
1472Groups}). This variable can also be a regular expression. If that's
1473the case, remove all groups that do not match this regexp before
1474saving. This can be useful in certain obscure situations that involve
1475several servers where not all servers support @code{ask-server}.
1476
1477@vindex gnus-startup-file
1478@vindex gnus-backup-startup-file
1479@vindex version-control
1480The @code{gnus-startup-file} variable says where the startup files are.
1481The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1482file being whatever that one is, with a @samp{.eld} appended.
1483If you want version control for this file, set
1484@code{gnus-backup-startup-file}. It respects the same values as the
1485@code{version-control} variable.
1486
1487@vindex gnus-save-newsrc-hook
1488@vindex gnus-save-quick-newsrc-hook
1489@vindex gnus-save-standard-newsrc-hook
1490@code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1491files, while @code{gnus-save-quick-newsrc-hook} is called just before
1492saving the @file{.newsrc.eld} file, and
1493@code{gnus-save-standard-newsrc-hook} is called just before saving the
1494@file{.newsrc} file. The latter two are commonly used to turn version
1495control on or off. Version control is on by default when saving the
1496startup files. If you want to turn backup creation off, say something like:
1497
1498@lisp
1499(defun turn-off-backup ()
1500 (set (make-local-variable 'backup-inhibited) t))
1501
1502(add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
1503(add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
1504@end lisp
1505
1506@vindex gnus-init-file
1507@vindex gnus-site-init-file
1508When Gnus starts, it will read the @code{gnus-site-init-file}
1509(@file{.../site-lisp/gnus-init} by default) and @code{gnus-init-file}
1510(@file{~/.gnus} by default) files. These are normal Emacs Lisp files
1511and can be used to avoid cluttering your @file{~/.emacs} and
1512@file{site-init} files with Gnus stuff. Gnus will also check for files
1513with the same names as these, but with @file{.elc} and @file{.el}
1514suffixes. In other words, if you have set @code{gnus-init-file} to
1515@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
1516and finally @file{~/.gnus} (in this order). If Emacs was invoked with
1517the @option{-q} or @option{--no-init-file} options (@pxref{Initial
1518Options, ,Initial Options, emacs, The Emacs Manual}), Gnus doesn't read
1519@code{gnus-init-file}.
1520
1521
1522@node Auto Save
1523@section Auto Save
1524@cindex dribble file
1525@cindex auto-save
1526
1527Whenever you do something that changes the Gnus data (reading articles,
1528catching up, killing/subscribing groups), the change is added to a
1529special @dfn{dribble buffer}. This buffer is auto-saved the normal
1530Emacs way. If your Emacs should crash before you have saved the
1531@file{.newsrc} files, all changes you have made can be recovered from
1532this file.
1533
1534If Gnus detects this file at startup, it will ask the user whether to
1535read it. The auto save file is deleted whenever the real startup file is
1536saved.
1537
1538@vindex gnus-use-dribble-file
1539If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1540maintain a dribble buffer. The default is @code{t}.
1541
1542@vindex gnus-dribble-directory
1543Gnus will put the dribble file(s) in @code{gnus-dribble-directory}. If
1544this variable is @code{nil}, which it is by default, Gnus will dribble
1545into the directory where the @file{.newsrc} file is located. (This is
1546normally the user's home directory.) The dribble file will get the same
1547file permissions as the @file{.newsrc} file.
1548
1549@vindex gnus-always-read-dribble-file
1550If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
1551read the dribble file on startup without querying the user.
1552
1553
1554@node The Active File
1555@section The Active File
1556@cindex active file
1557@cindex ignored groups
1558
1559When Gnus starts, or indeed whenever it tries to determine whether new
1560articles have arrived, it reads the active file. This is a very large
1561file that lists all the active groups and articles on the server.
1562
1563@vindex gnus-ignored-newsgroups
1564Before examining the active file, Gnus deletes all lines that match the
1565regexp @code{gnus-ignored-newsgroups}. This is done primarily to reject
1566any groups with bogus names, but you can use this variable to make Gnus
1567ignore hierarchies you aren't ever interested in. However, this is not
1568recommended. In fact, it's highly discouraged. Instead, @pxref{New
1569Groups} for an overview of other variables that can be used instead.
1570
1571@c This variable is
1572@c @code{nil} by default, and will slow down active file handling somewhat
1573@c if you set it to anything else.
1574
1575@vindex gnus-read-active-file
1576@c @head
1577The active file can be rather Huge, so if you have a slow network, you
1578can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1579reading the active file. This variable is @code{some} by default.
1580
1581Gnus will try to make do by getting information just on the groups that
1582you actually subscribe to.
1583
1584Note that if you subscribe to lots and lots of groups, setting this
1585variable to @code{nil} will probably make Gnus slower, not faster. At
1586present, having this variable @code{nil} will slow Gnus down
1587considerably, unless you read news over a 2400 baud modem.
1588
1589This variable can also have the value @code{some}. Gnus will then
1590attempt to read active info only on the subscribed groups. On some
1591servers this is quite fast (on sparkling, brand new INN servers that
1592support the @code{LIST ACTIVE group} command), on others this isn't fast
1593at all. In any case, @code{some} should be faster than @code{nil}, and
1594is certainly faster than @code{t} over slow lines.
1595
1596Some news servers (old versions of Leafnode and old versions of INN, for
1597instance) do not support the @code{LIST ACTIVE group}. For these
1598servers, @code{nil} is probably the most efficient value for this
1599variable.
1600
1601If this variable is @code{nil}, Gnus will ask for group info in total
1602lock-step, which isn't very fast. If it is @code{some} and you use an
1603@acronym{NNTP} server, Gnus will pump out commands as fast as it can, and
1604read all the replies in one swoop. This will normally result in better
1605performance, but if the server does not support the aforementioned
1606@code{LIST ACTIVE group} command, this isn't very nice to the server.
1607
1608If you think that starting up Gnus takes too long, try all the three
1609different values for this variable and see what works best for you.
1610
1611In any case, if you use @code{some} or @code{nil}, you should definitely
1612kill all groups that you aren't interested in to speed things up.
1613
1614Note that this variable also affects active file retrieval from
1615secondary select methods.
1616
1617
1618@node Startup Variables
1619@section Startup Variables
1620
1621@table @code
1622
1623@item gnus-load-hook
1624@vindex gnus-load-hook
1625A hook run while Gnus is being loaded. Note that this hook will
1626normally be run just once in each Emacs session, no matter how many
1627times you start Gnus.
1628
1629@item gnus-before-startup-hook
1630@vindex gnus-before-startup-hook
1631A hook run after starting up Gnus successfully.
1632
1633@item gnus-startup-hook
1634@vindex gnus-startup-hook
1635A hook run as the very last thing after starting up Gnus
1636
1637@item gnus-started-hook
1638@vindex gnus-started-hook
1639A hook that is run as the very last thing after starting up Gnus
1640successfully.
1641
1642@item gnus-setup-news-hook
1643@vindex gnus-setup-news-hook
1644A hook that is run after reading the @file{.newsrc} file(s), but before
1645generating the group buffer.
1646
1647@item gnus-check-bogus-newsgroups
1648@vindex gnus-check-bogus-newsgroups
1649If non-@code{nil}, Gnus will check for and delete all bogus groups at
1650startup. A @dfn{bogus group} is a group that you have in your
1651@file{.newsrc} file, but doesn't exist on the news server. Checking for
1652bogus groups can take quite a while, so to save time and resources it's
1653best to leave this option off, and do the checking for bogus groups once
1654in a while from the group buffer instead (@pxref{Group Maintenance}).
1655
1656@item gnus-inhibit-startup-message
1657@vindex gnus-inhibit-startup-message
1658If non-@code{nil}, the startup message won't be displayed. That way,
1659your boss might not notice as easily that you are reading news instead
1660of doing your job. Note that this variable is used before
1661@file{~/.gnus.el} is loaded, so it should be set in @file{.emacs} instead.
1662
1663@item gnus-no-groups-message
1664@vindex gnus-no-groups-message
1665Message displayed by Gnus when no groups are available.
1666
1667@item gnus-play-startup-jingle
1668@vindex gnus-play-startup-jingle
1669If non-@code{nil}, play the Gnus jingle at startup.
1670
1671@item gnus-startup-jingle
1672@vindex gnus-startup-jingle
1673Jingle to be played if the above variable is non-@code{nil}. The
1674default is @samp{Tuxedomoon.Jingle4.au}.
1675
1676@end table
1677
1678
1679@node Group Buffer
1680@chapter Group Buffer
1681@cindex group buffer
1682
1683@c Alex Schroeder suggests to rearrange this as follows:
1684@c
1685@c <kensanata> ok, just save it for reference. I'll go to bed in a minute.
1686@c 1. Selecting a Group, 2. (new) Finding a Group, 3. Group Levels,
1687@c 4. Subscription Commands, 5. Group Maneuvering, 6. Group Data,
1688@c 7. Group Score, 8. Group Buffer Format
1689@c <kensanata> Group Levels should have more information on levels 5 to 9. I
1690@c suggest to split the 4th paragraph ("Gnus considers groups...") as follows:
1691@c <kensanata> First, "Gnus considers groups... (default 9)."
1692@c <kensanata> New, a table summarizing what levels 1 to 9 mean.
1693@c <kensanata> Third, "Gnus treats subscribed ... reasons of efficiency"
1694@c <kensanata> Then expand the next paragraph or add some more to it.
1695@c This short one sentence explains levels 1 and 2, therefore I understand
1696@c that I should keep important news at 3 and boring news at 4.
1697@c Say so! Then go on to explain why I should bother with levels 6 to 9.
1698@c Maybe keep those that you don't want to read temporarily at 6,
1699@c those that you never want to read at 8, those that offend your
1700@c human rights at 9...
1701
1702
1703The @dfn{group buffer} lists all (or parts) of the available groups. It
1704is the first buffer shown when Gnus starts, and will never be killed as
1705long as Gnus is active.
1706
1707@iftex
1708@iflatex
1709\gnusfigure{The Group Buffer}{320}{
1710\put(75,50){\epsfig{figure=ps/group,height=9cm}}
1711\put(120,37){\makebox(0,0)[t]{Buffer name}}
1712\put(120,38){\vector(1,2){10}}
1713\put(40,60){\makebox(0,0)[r]{Mode line}}
1714\put(40,58){\vector(1,0){30}}
1715\put(200,28){\makebox(0,0)[t]{Native select method}}
1716\put(200,26){\vector(-1,2){15}}
1717}
1718@end iflatex
1719@end iftex
1720
1721@menu
1722* Group Buffer Format:: Information listed and how you can change it.
1723* Group Maneuvering:: Commands for moving in the group buffer.
1724* Selecting a Group:: Actually reading news.
1725* Subscription Commands:: Unsubscribing, killing, subscribing.
1726* Group Data:: Changing the info for a group.
1727* Group Levels:: Levels? What are those, then?
1728* Group Score:: A mechanism for finding out what groups you like.
1729* Marking Groups:: You can mark groups for later processing.
1730* Foreign Groups:: Creating and editing groups.
1731* Group Parameters:: Each group may have different parameters set.
1732* Listing Groups:: Gnus can list various subsets of the groups.
1733* Sorting Groups:: Re-arrange the group order.
1734* Group Maintenance:: Maintaining a tidy @file{.newsrc} file.
1735* Browse Foreign Server:: You can browse a server. See what it has to offer.
1736* Exiting Gnus:: Stop reading news and get some work done.
1737* Group Topics:: A folding group mode divided into topics.
01c52d31 1738* Non-ASCII Group Names:: Accessing groups of non-English names.
4009494e
GM
1739* Misc Group Stuff:: Other stuff that you can to do.
1740@end menu
1741
1742
1743@node Group Buffer Format
1744@section Group Buffer Format
1745
1746@menu
1747* Group Line Specification:: Deciding how the group buffer is to look.
1748* Group Mode Line Specification:: The group buffer mode line.
1749* Group Highlighting:: Having nice colors in the group buffer.
1750@end menu
1751
1752You can customize the Group Mode tool bar, see @kbd{M-x
1753customize-apropos RET gnus-group-tool-bar}. This feature is only
1754available in Emacs.
1755
1756The tool bar icons are now (de)activated correctly depending on the
1757cursor position. Therefore, moving around in the Group Buffer is
1758slower. You can disable this via the variable
1759@code{gnus-group-update-tool-bar}. Its default value depends on your
1760Emacs version.
1761
1762@node Group Line Specification
1763@subsection Group Line Specification
1764@cindex group buffer format
1765
1766The default format of the group buffer is nice and dull, but you can
1767make it as exciting and ugly as you feel like.
1768
1769Here's a couple of example group lines:
1770
1771@example
1772 25: news.announce.newusers
1773 * 0: alt.fan.andrea-dworkin
1774@end example
1775
1776Quite simple, huh?
1777
1778You can see that there are 25 unread articles in
1779@samp{news.announce.newusers}. There are no unread articles, but some
1780ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1781asterisk at the beginning of the line?).
1782
1783@vindex gnus-group-line-format
1784You can change that format to whatever you want by fiddling with the
1785@code{gnus-group-line-format} variable. This variable works along the
1786lines of a @code{format} specification, which is pretty much the same as
1787a @code{printf} specifications, for those of you who use (feh!) C.
1788@xref{Formatting Variables}.
1789
1790@samp{%M%S%5y:%B%(%g%)\n} is the value that produced those lines above.
1791
1792There should always be a colon on the line; the cursor always moves to
1793the colon after performing an operation. @xref{Positioning
1794Point}. Nothing else is required---not even the group name. All
1795displayed text is just window dressing, and is never examined by Gnus.
1796Gnus stores all real information it needs using text properties.
1797
1798(Note that if you make a really strange, wonderful, spreadsheet-like
1799layout, everybody will believe you are hard at work with the accounting
1800instead of wasting time reading news.)
1801
1802Here's a list of all available format characters:
1803
1804@table @samp
1805
1806@item M
1807An asterisk if the group only has marked articles.
1808
1809@item S
1810Whether the group is subscribed.
1811
1812@item L
1813Level of subscribedness.
1814
1815@item N
1816Number of unread articles.
1817
1818@item I
1819Number of dormant articles.
1820
1821@item T
1822Number of ticked articles.
1823
1824@item R
1825Number of read articles.
1826
1827@item U
1828Number of unseen articles.
1829
1830@item t
1831Estimated total number of articles. (This is really @var{max-number}
1832minus @var{min-number} plus 1.)
1833
1834Gnus uses this estimation because the @acronym{NNTP} protocol provides
1835efficient access to @var{max-number} and @var{min-number} but getting
1836the true unread message count is not possible efficiently. For
1837hysterical raisins, even the mail back ends, where the true number of
1838unread messages might be available efficiently, use the same limited
1839interface. To remove this restriction from Gnus means that the back
01c52d31
MB
1840end interface has to be changed, which is not an easy job.
1841
1842The nnml backend (@pxref{Mail Spool}) has a feature called ``group
1843compaction'' which circumvents this deficiency: the idea is to
1844renumber all articles from 1, removing all gaps between numbers, hence
1845getting a correct total count. Other backends may support this in the
1846future. In order to keep your total article count relatively up to
1847date, you might want to compact your groups (or even directly your
1848server) from time to time. @xref{Misc Group Stuff}, @xref{Server Commands}.
4009494e
GM
1849
1850@item y
1851Number of unread, unticked, non-dormant articles.
1852
1853@item i
1854Number of ticked and dormant articles.
1855
1856@item g
1857Full group name.
1858
1859@item G
1860Group name.
1861
1862@item C
1863Group comment (@pxref{Group Parameters}) or group name if there is no
1864comment element in the group parameters.
1865
1866@item D
1867Newsgroup description. You need to read the group descriptions
1868before these will appear, and to do that, you either have to set
1869@code{gnus-read-active-file} or use the group buffer @kbd{M-d}
1870command.
1871
1872@item o
1873@samp{m} if moderated.
1874
1875@item O
1876@samp{(m)} if moderated.
1877
1878@item s
1879Select method.
1880
1881@item B
1882If the summary buffer for the group is open or not.
1883
1884@item n
1885Select from where.
1886
1887@item z
1888A string that looks like @samp{<%s:%n>} if a foreign select method is
1889used.
1890
1891@item P
1892Indentation based on the level of the topic (@pxref{Group Topics}).
1893
1894@item c
1895@vindex gnus-group-uncollapsed-levels
1896Short (collapsed) group name. The @code{gnus-group-uncollapsed-levels}
1897variable says how many levels to leave at the end of the group name.
1898The default is 1---this will mean that group names like
1899@samp{gnu.emacs.gnus} will be shortened to @samp{g.e.gnus}.
1900
1901@item m
1902@vindex gnus-new-mail-mark
1903@cindex %
1904@samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
1905the group lately.
1906
1907@item p
1908@samp{#} (@code{gnus-process-mark}) if the group is process marked.
1909
1910@item d
1911A string that says when you last read the group (@pxref{Group
1912Timestamp}).
1913
01c52d31
MB
1914@item F
1915The disk space used by the articles fetched by both the cache and
1916agent. The value is automatically scaled to bytes(B), kilobytes(K),
1917megabytes(M), or gigabytes(G) to minimize the column width. A format
1918of %7F is sufficient for a fixed-width column.
1919
4009494e
GM
1920@item u
1921User defined specifier. The next character in the format string should
1922be a letter. Gnus will call the function
1923@code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1924following @samp{%u}. The function will be passed a single dummy
1925parameter as argument. The function should return a string, which will
1926be inserted into the buffer just like information from any other
1927specifier.
1928@end table
1929
1930@cindex *
1931All the ``number-of'' specs will be filled with an asterisk (@samp{*})
1932if no info is available---for instance, if it is a non-activated foreign
1933group, or a bogus native group.
1934
1935
1936@node Group Mode Line Specification
1937@subsection Group Mode Line Specification
1938@cindex group mode line
1939
1940@vindex gnus-group-mode-line-format
1941The mode line can be changed by setting
1942@code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}). It
1943doesn't understand that many format specifiers:
1944
1945@table @samp
1946@item S
1947The native news server.
1948@item M
1949The native select method.
1950@end table
1951
1952
1953@node Group Highlighting
1954@subsection Group Highlighting
1955@cindex highlighting
1956@cindex group highlighting
1957
1958@vindex gnus-group-highlight
1959Highlighting in the group buffer is controlled by the
1960@code{gnus-group-highlight} variable. This is an alist with elements
1961that look like @code{(@var{form} . @var{face})}. If @var{form} evaluates to
1962something non-@code{nil}, the @var{face} will be used on the line.
1963
1964Here's an example value for this variable that might look nice if the
1965background is dark:
1966
1967@lisp
1968(cond (window-system
1969 (setq custom-background-mode 'light)
1970 (defface my-group-face-1
1971 '((t (:foreground "Red" :bold t))) "First group face")
1972 (defface my-group-face-2
1973 '((t (:foreground "DarkSeaGreen4" :bold t)))
1974 "Second group face")
1975 (defface my-group-face-3
1976 '((t (:foreground "Green4" :bold t))) "Third group face")
1977 (defface my-group-face-4
1978 '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
1979 (defface my-group-face-5
1980 '((t (:foreground "Blue" :bold t))) "Fifth group face")))
1981
1982(setq gnus-group-highlight
1983 '(((> unread 200) . my-group-face-1)
1984 ((and (< level 3) (zerop unread)) . my-group-face-2)
1985 ((< level 3) . my-group-face-3)
1986 ((zerop unread) . my-group-face-4)
1987 (t . my-group-face-5)))
1988@end lisp
1989
1990Also @pxref{Faces and Fonts}.
1991
1992Variables that are dynamically bound when the forms are evaluated
1993include:
1994
1995@table @code
1996@item group
1997The group name.
1998@item unread
1999The number of unread articles in the group.
2000@item method
2001The select method.
2002@item mailp
2003Whether the group is a mail group.
2004@item level
2005The level of the group.
2006@item score
2007The score of the group.
2008@item ticked
2009The number of ticked articles in the group.
2010@item total
2011The total number of articles in the group. Or rather,
2012@var{max-number} minus @var{min-number} plus one.
2013@item topic
2014When using the topic minor mode, this variable is bound to the current
2015topic being inserted.
2016@end table
2017
2018When the forms are @code{eval}ed, point is at the beginning of the line
2019of the group in question, so you can use many of the normal Gnus
2020functions for snarfing info on the group.
2021
2022@vindex gnus-group-update-hook
2023@findex gnus-group-highlight-line
2024@code{gnus-group-update-hook} is called when a group line is changed.
2025It will not be called when @code{gnus-visual} is @code{nil}. This hook
2026calls @code{gnus-group-highlight-line} by default.
2027
2028
2029@node Group Maneuvering
2030@section Group Maneuvering
2031@cindex group movement
2032
2033All movement commands understand the numeric prefix and will behave as
2034expected, hopefully.
2035
2036@table @kbd
2037
2038@item n
2039@kindex n (Group)
2040@findex gnus-group-next-unread-group
2041Go to the next group that has unread articles
2042(@code{gnus-group-next-unread-group}).
2043
2044@item p
2045@itemx DEL
2046@kindex DEL (Group)
2047@kindex p (Group)
2048@findex gnus-group-prev-unread-group
2049Go to the previous group that has unread articles
2050(@code{gnus-group-prev-unread-group}).
2051
2052@item N
2053@kindex N (Group)
2054@findex gnus-group-next-group
2055Go to the next group (@code{gnus-group-next-group}).
2056
2057@item P
2058@kindex P (Group)
2059@findex gnus-group-prev-group
2060Go to the previous group (@code{gnus-group-prev-group}).
2061
2062@item M-n
2063@kindex M-n (Group)
2064@findex gnus-group-next-unread-group-same-level
2065Go to the next unread group on the same (or lower) level
2066(@code{gnus-group-next-unread-group-same-level}).
2067
2068@item M-p
2069@kindex M-p (Group)
2070@findex gnus-group-prev-unread-group-same-level
2071Go to the previous unread group on the same (or lower) level
2072(@code{gnus-group-prev-unread-group-same-level}).
2073@end table
2074
2075Three commands for jumping to groups:
2076
2077@table @kbd
2078
2079@item j
2080@kindex j (Group)
2081@findex gnus-group-jump-to-group
2082Jump to a group (and make it visible if it isn't already)
2083(@code{gnus-group-jump-to-group}). Killed groups can be jumped to, just
2084like living groups.
2085
2086@item ,
2087@kindex , (Group)
2088@findex gnus-group-best-unread-group
2089Jump to the unread group with the lowest level
2090(@code{gnus-group-best-unread-group}).
2091
2092@item .
2093@kindex . (Group)
2094@findex gnus-group-first-unread-group
2095Jump to the first group with unread articles
2096(@code{gnus-group-first-unread-group}).
2097@end table
2098
2099@vindex gnus-group-goto-unread
2100If @code{gnus-group-goto-unread} is @code{nil}, all the movement
2101commands will move to the next group, not the next unread group. Even
2102the commands that say they move to the next unread group. The default
2103is @code{t}.
2104
01c52d31
MB
2105@vindex gnus-summary-next-group-on-exit
2106If @code{gnus-summary-next-group-on-exit} is @code{t}, when a summary is
2107exited, the point in the group buffer is moved to the next unread group.
2108Otherwise, the point is set to the group just exited. The default is
2109@code{t}.
4009494e
GM
2110
2111@node Selecting a Group
2112@section Selecting a Group
2113@cindex group selection
2114
2115@table @kbd
2116
2117@item SPACE
2118@kindex SPACE (Group)
2119@findex gnus-group-read-group
2120Select the current group, switch to the summary buffer and display the
2121first unread article (@code{gnus-group-read-group}). If there are no
2122unread articles in the group, or if you give a non-numerical prefix to
2123this command, Gnus will offer to fetch all the old articles in this
2124group from the server. If you give a numerical prefix @var{n}, @var{n}
2125determines the number of articles Gnus will fetch. If @var{n} is
2126positive, Gnus fetches the @var{n} newest articles, if @var{n} is
2127negative, Gnus fetches the @code{abs(@var{n})} oldest articles.
2128
2129Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old
2130articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u
2131- 4 2 SPC} fetches the 42 oldest ones.
2132
2133When you are in the group (in the Summary buffer), you can type
2134@kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old
2135ones.
2136
2137@item RET
2138@kindex RET (Group)
2139@findex gnus-group-select-group
2140Select the current group and switch to the summary buffer
2141(@code{gnus-group-select-group}). Takes the same arguments as
2142@code{gnus-group-read-group}---the only difference is that this command
2143does not display the first unread article automatically upon group
2144entry.
2145
2146@item M-RET
2147@kindex M-RET (Group)
2148@findex gnus-group-quick-select-group
2149This does the same as the command above, but tries to do it with the
2150minimum amount of fuzz (@code{gnus-group-quick-select-group}). No
2151scoring/killing will be performed, there will be no highlights and no
2152expunging. This might be useful if you're in a real hurry and have to
2153enter some humongous group. If you give a 0 prefix to this command
2154(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
2155which is useful if you want to toggle threading before generating the
2156summary buffer (@pxref{Summary Generation Commands}).
2157
2158@item M-SPACE
2159@kindex M-SPACE (Group)
2160@findex gnus-group-visible-select-group
2161This is yet one more command that does the same as the @kbd{RET}
2162command, but this one does it without expunging and hiding dormants
2163(@code{gnus-group-visible-select-group}).
2164
2165@item C-M-RET
2166@kindex C-M-RET (Group)
2167@findex gnus-group-select-group-ephemerally
2168Finally, this command selects the current group ephemerally without
2169doing any processing of its contents
2170(@code{gnus-group-select-group-ephemerally}). Even threading has been
2171turned off. Everything you do in the group after selecting it in this
2172manner will have no permanent effects.
2173
2174@end table
2175
2176@vindex gnus-large-newsgroup
2177The @code{gnus-large-newsgroup} variable says what Gnus should
2178consider to be a big group. If it is @code{nil}, no groups are
2179considered big. The default value is 200. If the group has more
2180(unread and/or ticked) articles than this, Gnus will query the user
2181before entering the group. The user can then specify how many
2182articles should be fetched from the server. If the user specifies a
2183negative number (@var{-n}), the @var{n} oldest articles will be
2184fetched. If it is positive, the @var{n} articles that have arrived
2185most recently will be fetched.
2186
2187@vindex gnus-large-ephemeral-newsgroup
2188@code{gnus-large-ephemeral-newsgroup} is the same as
2189@code{gnus-large-newsgroup}, but is only used for ephemeral
2190newsgroups.
2191
4b70e299 2192@vindex gnus-newsgroup-maximum-articles
4009494e
GM
2193In groups in some news servers, there might be a big gap between a few
2194very old articles that will never be expired and the recent ones. In
2195such a case, the server will return the data like @code{(1 . 30000000)}
2196for the @code{LIST ACTIVE group} command, for example. Even if there
2197are actually only the articles 1-10 and 29999900-30000000, Gnus doesn't
2198know it at first and prepares for getting 30000000 articles. However,
2199it will consume hundreds megabytes of memories and might make Emacs get
2200stuck as the case may be. If you use such news servers, set the
4b70e299
MB
2201variable @code{gnus-newsgroup-maximum-articles} to a positive number.
2202The value means that Gnus ignores articles other than this number of the
2203latest ones in every group. For instance, the value 10000 makes Gnus
2204get only the articles 29990001-30000000 (if the latest article number is
220530000000 in a group). Note that setting this variable to a number might
2206prevent you from reading very old articles. The default value of the
2207variable @code{gnus-newsgroup-maximum-articles} is @code{nil}, which
2208means Gnus never ignores old articles.
4009494e
GM
2209
2210@vindex gnus-select-group-hook
2211@vindex gnus-auto-select-first
2212@vindex gnus-auto-select-subject
2213If @code{gnus-auto-select-first} is non-@code{nil}, select an article
2214automatically when entering a group with the @kbd{SPACE} command.
2215Which article this is is controlled by the
2216@code{gnus-auto-select-subject} variable. Valid values for this
2217variable are:
2218
2219@table @code
2220
2221@item unread
2222Place point on the subject line of the first unread article.
2223
2224@item first
2225Place point on the subject line of the first article.
2226
2227@item unseen
2228Place point on the subject line of the first unseen article.
2229
2230@item unseen-or-unread
2231Place point on the subject line of the first unseen article, and if
2232there is no such article, place point on the subject line of the first
2233unread article.
2234
2235@item best
2236Place point on the subject line of the highest-scored unread article.
2237
2238@end table
2239
2240This variable can also be a function. In that case, that function
2241will be called to place point on a subject line.
2242
2243If you want to prevent automatic selection in some group (say, in a
2244binary group with Huge articles) you can set the
2245@code{gnus-auto-select-first} variable to @code{nil} in
2246@code{gnus-select-group-hook}, which is called when a group is
2247selected.
2248
2249
2250@node Subscription Commands
2251@section Subscription Commands
2252@cindex subscription
2253
2254@table @kbd
2255
2256@item S t
2257@itemx u
2258@kindex S t (Group)
2259@kindex u (Group)
2260@findex gnus-group-unsubscribe-current-group
2261@c @icon{gnus-group-unsubscribe}
2262Toggle subscription to the current group
2263(@code{gnus-group-unsubscribe-current-group}).
2264
2265@item S s
2266@itemx U
2267@kindex S s (Group)
2268@kindex U (Group)
2269@findex gnus-group-unsubscribe-group
2270Prompt for a group to subscribe, and then subscribe it. If it was
2271subscribed already, unsubscribe it instead
2272(@code{gnus-group-unsubscribe-group}).
2273
2274@item S k
2275@itemx C-k
2276@kindex S k (Group)
2277@kindex C-k (Group)
2278@findex gnus-group-kill-group
2279@c @icon{gnus-group-kill-group}
2280Kill the current group (@code{gnus-group-kill-group}).
2281
2282@item S y
2283@itemx C-y
2284@kindex S y (Group)
2285@kindex C-y (Group)
2286@findex gnus-group-yank-group
2287Yank the last killed group (@code{gnus-group-yank-group}).
2288
2289@item C-x C-t
2290@kindex C-x C-t (Group)
2291@findex gnus-group-transpose-groups
2292Transpose two groups (@code{gnus-group-transpose-groups}). This isn't
2293really a subscription command, but you can use it instead of a
2294kill-and-yank sequence sometimes.
2295
2296@item S w
2297@itemx C-w
2298@kindex S w (Group)
2299@kindex C-w (Group)
2300@findex gnus-group-kill-region
2301Kill all groups in the region (@code{gnus-group-kill-region}).
2302
2303@item S z
2304@kindex S z (Group)
2305@findex gnus-group-kill-all-zombies
2306Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
2307
2308@item S C-k
2309@kindex S C-k (Group)
2310@findex gnus-group-kill-level
2311Kill all groups on a certain level (@code{gnus-group-kill-level}).
2312These groups can't be yanked back after killing, so this command should
2313be used with some caution. The only time where this command comes in
2314really handy is when you have a @file{.newsrc} with lots of unsubscribed
2315groups that you want to get rid off. @kbd{S C-k} on level 7 will
2316kill off all unsubscribed groups that do not have message numbers in the
2317@file{.newsrc} file.
2318
2319@end table
2320
2321Also @pxref{Group Levels}.
2322
2323
2324@node Group Data
2325@section Group Data
2326
2327@table @kbd
2328
2329@item c
2330@kindex c (Group)
2331@findex gnus-group-catchup-current
2332@vindex gnus-group-catchup-group-hook
2333@c @icon{gnus-group-catchup-current}
2334Mark all unticked articles in this group as read
2335(@code{gnus-group-catchup-current}).
2336@code{gnus-group-catchup-group-hook} is called when catching up a group from
2337the group buffer.
2338
2339@item C
2340@kindex C (Group)
2341@findex gnus-group-catchup-current-all
2342Mark all articles in this group, even the ticked ones, as read
2343(@code{gnus-group-catchup-current-all}).
2344
2345@item M-c
2346@kindex M-c (Group)
2347@findex gnus-group-clear-data
2348Clear the data from the current group---nix out marks and the list of
2349read articles (@code{gnus-group-clear-data}).
2350
2351@item M-x gnus-group-clear-data-on-native-groups
2352@kindex M-x gnus-group-clear-data-on-native-groups
2353@findex gnus-group-clear-data-on-native-groups
2354If you have switched from one @acronym{NNTP} server to another, all your marks
2355and read ranges have become worthless. You can use this command to
2356clear out all data that you have on your native groups. Use with
2357caution.
2358
2359@end table
2360
2361
2362@node Group Levels
2363@section Group Levels
2364@cindex group level
2365@cindex level
2366
2367All groups have a level of @dfn{subscribedness}. For instance, if a
2368group is on level 2, it is more subscribed than a group on level 5. You
2369can ask Gnus to just list groups on a given level or lower
2370(@pxref{Listing Groups}), or to just check for new articles in groups on
2371a given level or lower (@pxref{Scanning New Messages}).
2372
2373Remember: The higher the level of the group, the less important it is.
2374
2375@table @kbd
2376
2377@item S l
2378@kindex S l (Group)
2379@findex gnus-group-set-current-level
2380Set the level of the current group. If a numeric prefix is given, the
2381next @var{n} groups will have their levels set. The user will be
2382prompted for a level.
2383@end table
2384
2385@vindex gnus-level-killed
2386@vindex gnus-level-zombie
2387@vindex gnus-level-unsubscribed
2388@vindex gnus-level-subscribed
2389Gnus considers groups from levels 1 to
2390@code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
2391@code{gnus-level-subscribed} (exclusive) and
2392@code{gnus-level-unsubscribed} (inclusive) (default 7) to be
2393unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
2394(default 8) and @code{gnus-level-killed} to be killed (completely dead)
2395(default 9). Gnus treats subscribed and unsubscribed groups exactly the
2396same, but zombie and killed groups have no information on what articles
2397you have read, etc, stored. This distinction between dead and living
2398groups isn't done because it is nice or clever, it is done purely for
2399reasons of efficiency.
2400
2401It is recommended that you keep all your mail groups (if any) on quite
2402low levels (e.g. 1 or 2).
2403
2404Maybe the following description of the default behavior of Gnus helps to
2405understand what these levels are all about. By default, Gnus shows you
2406subscribed nonempty groups, but by hitting @kbd{L} you can have it show
2407empty subscribed groups and unsubscribed groups, too. Type @kbd{l} to
2408go back to showing nonempty subscribed groups again. Thus, unsubscribed
2409groups are hidden, in a way.
2410
2411Zombie and killed groups are similar to unsubscribed groups in that they
2412are hidden by default. But they are different from subscribed and
2413unsubscribed groups in that Gnus doesn't ask the news server for
2414information (number of messages, number of unread messages) on zombie
2415and killed groups. Normally, you use @kbd{C-k} to kill the groups you
2416aren't interested in. If most groups are killed, Gnus is faster.
2417
2418Why does Gnus distinguish between zombie and killed groups? Well, when
2419a new group arrives on the server, Gnus by default makes it a zombie
2420group. This means that you are normally not bothered with new groups,
2421but you can type @kbd{A z} to get a list of all new groups. Subscribe
2422the ones you like and kill the ones you don't want. (@kbd{A k} shows a
2423list of killed groups.)
2424
2425If you want to play with the level variables, you should show some care.
2426Set them once, and don't touch them ever again. Better yet, don't touch
2427them at all unless you know exactly what you're doing.
2428
2429@vindex gnus-level-default-unsubscribed
2430@vindex gnus-level-default-subscribed
2431Two closely related variables are @code{gnus-level-default-subscribed}
2432(default 3) and @code{gnus-level-default-unsubscribed} (default 6),
2433which are the levels that new groups will be put on if they are
2434(un)subscribed. These two variables should, of course, be inside the
2435relevant valid ranges.
2436
2437@vindex gnus-keep-same-level
2438If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
2439will only move to groups of the same level (or lower). In
2440particular, going from the last article in one group to the next group
2441will go to the next group of the same level (or lower). This might be
2442handy if you want to read the most important groups before you read the
2443rest.
2444
2445If this variable is @code{best}, Gnus will make the next newsgroup the
2446one with the best level.
2447
2448@vindex gnus-group-default-list-level
2449All groups with a level less than or equal to
2450@code{gnus-group-default-list-level} will be listed in the group buffer
2451by default.
2452
2453@vindex gnus-group-list-inactive-groups
2454If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
2455groups will be listed along with the unread groups. This variable is
2456@code{t} by default. If it is @code{nil}, inactive groups won't be
2457listed.
2458
2459@vindex gnus-group-use-permanent-levels
2460If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
2461give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
2462use this level as the ``work'' level.
2463
2464@vindex gnus-activate-level
2465Gnus will normally just activate (i. e., query the server about) groups
2466on level @code{gnus-activate-level} or less. If you don't want to
2467activate unsubscribed groups, for instance, you might set this variable
2468to 5. The default is 6.
2469
2470
2471@node Group Score
2472@section Group Score
2473@cindex group score
2474@cindex group rank
2475@cindex rank
2476
2477You would normally keep important groups on high levels, but that scheme
2478is somewhat restrictive. Don't you wish you could have Gnus sort the
2479group buffer according to how often you read groups, perhaps? Within
2480reason?
2481
2482This is what @dfn{group score} is for. You can have Gnus assign a score
2483to each group through the mechanism described below. You can then sort
2484the group buffer based on this score. Alternatively, you can sort on
2485score and then level. (Taken together, the level and the score is
2486called the @dfn{rank} of the group. A group that is on level 4 and has
2487a score of 1 has a higher rank than a group on level 5 that has a score
2488of 300. (The level is the most significant part and the score is the
2489least significant part.))
2490
2491@findex gnus-summary-bubble-group
2492If you want groups you read often to get higher scores than groups you
2493read seldom you can add the @code{gnus-summary-bubble-group} function to
2494the @code{gnus-summary-exit-hook} hook. This will result (after
2495sorting) in a bubbling sort of action. If you want to see that in
2496action after each summary exit, you can add
2497@code{gnus-group-sort-groups-by-rank} or
2498@code{gnus-group-sort-groups-by-score} to the same hook, but that will
2499slow things down somewhat.
2500
2501
2502@node Marking Groups
2503@section Marking Groups
2504@cindex marking groups
2505
2506If you want to perform some command on several groups, and they appear
2507subsequently in the group buffer, you would normally just give a
2508numerical prefix to the command. Most group commands will then do your
2509bidding on those groups.
2510
2511However, if the groups are not in sequential order, you can still
2512perform a command on several groups. You simply mark the groups first
2513with the process mark and then execute the command.
2514
2515@table @kbd
2516
2517@item #
2518@kindex # (Group)
2519@itemx M m
2520@kindex M m (Group)
2521@findex gnus-group-mark-group
2522Set the mark on the current group (@code{gnus-group-mark-group}).
2523
2524@item M-#
2525@kindex M-# (Group)
2526@itemx M u
2527@kindex M u (Group)
2528@findex gnus-group-unmark-group
2529Remove the mark from the current group
2530(@code{gnus-group-unmark-group}).
2531
2532@item M U
2533@kindex M U (Group)
2534@findex gnus-group-unmark-all-groups
2535Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
2536
2537@item M w
2538@kindex M w (Group)
2539@findex gnus-group-mark-region
2540Mark all groups between point and mark (@code{gnus-group-mark-region}).
2541
2542@item M b
2543@kindex M b (Group)
2544@findex gnus-group-mark-buffer
2545Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
2546
2547@item M r
2548@kindex M r (Group)
2549@findex gnus-group-mark-regexp
2550Mark all groups that match some regular expression
2551(@code{gnus-group-mark-regexp}).
2552@end table
2553
2554Also @pxref{Process/Prefix}.
2555
2556@findex gnus-group-universal-argument
2557If you want to execute some command on all groups that have been marked
2558with the process mark, you can use the @kbd{M-&}
2559(@code{gnus-group-universal-argument}) command. It will prompt you for
2560the command to be executed.
2561
2562
2563@node Foreign Groups
2564@section Foreign Groups
2565@cindex foreign groups
2566
2567Below are some group mode commands for making and editing general foreign
2568groups, as well as commands to ease the creation of a few
2569special-purpose groups. All these commands insert the newly created
2570groups under point---@code{gnus-subscribe-newsgroup-method} is not
2571consulted.
2572
2573Changes from the group editing commands are stored in
2574@file{~/.newsrc.eld} (@code{gnus-startup-file}). An alternative is the
2575variable @code{gnus-parameters}, @xref{Group Parameters}.
2576
2577@table @kbd
2578
2579@item G m
2580@kindex G m (Group)
2581@findex gnus-group-make-group
2582@cindex making groups
2583Make a new group (@code{gnus-group-make-group}). Gnus will prompt you
2584for a name, a method and possibly an @dfn{address}. For an easier way
2585to subscribe to @acronym{NNTP} groups (@pxref{Browse Foreign Server}).
2586
2587@item G M
2588@kindex G M (Group)
2589@findex gnus-group-read-ephemeral-group
2590Make an ephemeral group (@code{gnus-group-read-ephemeral-group}). Gnus
2591will prompt you for a name, a method and an @dfn{address}.
2592
2593@item G r
2594@kindex G r (Group)
2595@findex gnus-group-rename-group
2596@cindex renaming groups
2597Rename the current group to something else
2598(@code{gnus-group-rename-group}). This is valid only on some
2599groups---mail groups mostly. This command might very well be quite slow
2600on some back ends.
2601
2602@item G c
2603@kindex G c (Group)
2604@cindex customizing
2605@findex gnus-group-customize
2606Customize the group parameters (@code{gnus-group-customize}).
2607
2608@item G e
2609@kindex G e (Group)
2610@findex gnus-group-edit-group-method
2611@cindex renaming groups
2612Enter a buffer where you can edit the select method of the current
2613group (@code{gnus-group-edit-group-method}).
2614
2615@item G p
2616@kindex G p (Group)
2617@findex gnus-group-edit-group-parameters
2618Enter a buffer where you can edit the group parameters
2619(@code{gnus-group-edit-group-parameters}).
2620
2621@item G E
2622@kindex G E (Group)
2623@findex gnus-group-edit-group
2624Enter a buffer where you can edit the group info
2625(@code{gnus-group-edit-group}).
2626
2627@item G d
2628@kindex G d (Group)
2629@findex gnus-group-make-directory-group
2630@cindex nndir
2631Make a directory group (@pxref{Directory Groups}). You will be prompted
2632for a directory name (@code{gnus-group-make-directory-group}).
2633
2634@item G h
2635@kindex G h (Group)
2636@cindex help group
2637@findex gnus-group-make-help-group
2638Make the Gnus help group (@code{gnus-group-make-help-group}).
2639
2640@item G a
2641@kindex G a (Group)
2642@cindex (ding) archive
2643@cindex archive group
2644@findex gnus-group-make-archive-group
2645@vindex gnus-group-archive-directory
2646@vindex gnus-group-recent-archive-directory
2647Make a Gnus archive group (@code{gnus-group-make-archive-group}). By
2648default a group pointing to the most recent articles will be created
2649(@code{gnus-group-recent-archive-directory}), but given a prefix, a full
2650group will be created from @code{gnus-group-archive-directory}.
2651
2652@item G k
2653@kindex G k (Group)
2654@findex gnus-group-make-kiboze-group
2655@cindex nnkiboze
2656Make a kiboze group. You will be prompted for a name, for a regexp to
2657match groups to be ``included'' in the kiboze group, and a series of
2658strings to match on headers (@code{gnus-group-make-kiboze-group}).
2659@xref{Kibozed Groups}.
2660
2661@item G D
2662@kindex G D (Group)
2663@findex gnus-group-enter-directory
2664@cindex nneething
2665Read an arbitrary directory as if it were a newsgroup with the
2666@code{nneething} back end (@code{gnus-group-enter-directory}).
2667@xref{Anything Groups}.
2668
2669@item G f
2670@kindex G f (Group)
2671@findex gnus-group-make-doc-group
2672@cindex ClariNet Briefs
2673@cindex nndoc
2674Make a group based on some file or other
2675(@code{gnus-group-make-doc-group}). If you give a prefix to this
2676command, you will be prompted for a file name and a file type.
2677Currently supported types are @code{mbox}, @code{babyl},
2678@code{digest}, @code{news}, @code{rnews}, @code{mmdf}, @code{forward},
2679@code{rfc934}, @code{rfc822-forward}, @code{mime-parts},
2680@code{standard-digest}, @code{slack-digest}, @code{clari-briefs},
2681@code{nsmail}, @code{outlook}, @code{oe-dbx}, and @code{mailman}. If
2682you run this command without a prefix, Gnus will guess at the file
2683type. @xref{Document Groups}.
2684
2685@item G u
2686@kindex G u (Group)
2687@vindex gnus-useful-groups
2688@findex gnus-group-make-useful-group
2689Create one of the groups mentioned in @code{gnus-useful-groups}
2690(@code{gnus-group-make-useful-group}).
2691
2692@item G w
2693@kindex G w (Group)
2694@findex gnus-group-make-web-group
2695@cindex Google
2696@cindex nnweb
2697@cindex gmane
2698Make an ephemeral group based on a web search
2699(@code{gnus-group-make-web-group}). If you give a prefix to this
2700command, make a solid group instead. You will be prompted for the
2701search engine type and the search string. Valid search engine types
2702include @code{google}, @code{dejanews}, and @code{gmane}.
2703@xref{Web Searches}.
2704
2705If you use the @code{google} search engine, you can limit the search
2706to a particular group by using a match string like
2707@samp{shaving group:alt.sysadmin.recovery}.
2708
2709@item G R
2710@kindex G R (Group)
2711@findex gnus-group-make-rss-group
2712Make a group based on an @acronym{RSS} feed
2713(@code{gnus-group-make-rss-group}). You will be prompted for an URL.
2714@xref{RSS}.
2715
2716@item G DEL
2717@kindex G DEL (Group)
2718@findex gnus-group-delete-group
2719This function will delete the current group
2720(@code{gnus-group-delete-group}). If given a prefix, this function will
2721actually delete all the articles in the group, and forcibly remove the
2722group itself from the face of the Earth. Use a prefix only if you are
2723absolutely sure of what you are doing. This command can't be used on
2724read-only groups (like @code{nntp} groups), though.
2725
2726@item G V
2727@kindex G V (Group)
2728@findex gnus-group-make-empty-virtual
2729Make a new, fresh, empty @code{nnvirtual} group
2730(@code{gnus-group-make-empty-virtual}). @xref{Virtual Groups}.
2731
2732@item G v
2733@kindex G v (Group)
2734@findex gnus-group-add-to-virtual
2735Add the current group to an @code{nnvirtual} group
2736(@code{gnus-group-add-to-virtual}). Uses the process/prefix convention.
2737@end table
2738
2739@xref{Select Methods}, for more information on the various select
2740methods.
2741
2742@vindex gnus-activate-foreign-newsgroups
2743If @code{gnus-activate-foreign-newsgroups} is a positive number,
2744Gnus will check all foreign groups with this level or lower at startup.
2745This might take quite a while, especially if you subscribe to lots of
2746groups from different @acronym{NNTP} servers. Also @pxref{Group Levels};
2747@code{gnus-activate-level} also affects activation of foreign
2748newsgroups.
2749
2750
9b3ebcb6
MB
2751The following commands create ephemeral groups. They can be called not
2752only from the Group buffer, but in any Gnus buffer.
2753
2754@table @code
2755@item gnus-read-ephemeral-gmane-group
2756@findex gnus-read-ephemeral-gmane-group
2757@vindex gnus-gmane-group-download-format
2758Read an ephemeral group on Gmane.org. The articles are downloaded via
2759HTTP using the URL specified by @code{gnus-gmane-group-download-format}.
2760Gnus will prompt you for a group name, the start article number and an
2761the article range.
2762
2763@item gnus-read-ephemeral-gmane-group-url
2764@findex gnus-read-ephemeral-gmane-group-url
2765This command is similar to @code{gnus-read-ephemeral-gmane-group}, but
2766the group name and the article number and range are constructed from a
2767given @acronym{URL}. Supported @acronym{URL} formats include e.g.
2768@url{http://thread.gmane.org/gmane.foo.bar/12300/focus=12399},
2769@url{http://thread.gmane.org/gmane.foo.bar/12345/},
2770@url{http://article.gmane.org/gmane.foo.bar/12345/},
2771@url{http://permalink.gmane.org/gmane.foo.bar/12345/}, and
2772@url{http://news.gmane.org/group/gmane.foo.bar/thread=12345}.
2773
2774@item gnus-read-ephemeral-emacs-bug-group
2775@findex gnus-read-ephemeral-emacs-bug-group
2776Read an Emacs bug report in an ephemeral group. Gnus will prompt for a
2777bug number. The default is the number at point. The @acronym{URL} is
2778specified in @code{gnus-bug-group-download-format-alist}.
2779
2780@item gnus-read-ephemeral-debian-bug-group
2781@findex gnus-read-ephemeral-debian-bug-group
2782Read a Debian bug report in an ephemeral group. Analog to
2783@code{gnus-read-ephemeral-emacs-bug-group}.
2784@end table
2785
2786Some of these command are also useful for article buttons, @xref{Article
2787Buttons}.
2788
2789Here is an example:
2790@lisp
2791(require 'gnus-art)
2792(add-to-list
2793 'gnus-button-alist
2794 '("#\\([0-9]+\\)\\>" 1
2795 (string-match "\\<emacs\\>" (or gnus-newsgroup-name ""))
2796 gnus-read-ephemeral-emacs-bug-group 1))
2797@end lisp
2798
2799
4009494e
GM
2800@node Group Parameters
2801@section Group Parameters
2802@cindex group parameters
2803
2804The group parameters store information local to a particular group.
87035689
MB
2805
2806Use the @kbd{G p} or the @kbd{G c} command to edit group parameters of a
2807group. (@kbd{G p} presents you with a Lisp-based interface, @kbd{G c}
2808presents you with a Customize-like interface. The latter helps avoid
2809silly Lisp errors.) You might also be interested in reading about topic
2810parameters (@pxref{Topic Parameters}).
2811Additionally, you can set group parameters via the
2812@code{gnus-parameters} variable, see below.
2813
4009494e
GM
2814Here's an example group parameter list:
2815
2816@example
2817((to-address . "ding@@gnus.org")
2818 (auto-expire . t))
2819@end example
2820
2821We see that each element consists of a ``dotted pair''---the thing before
2822the dot is the key, while the thing after the dot is the value. All the
2823parameters have this form @emph{except} local variable specs, which are
2824not dotted pairs, but proper lists.
2825
2826Some parameters have correspondent customizable variables, each of which
2827is an alist of regexps and values.
2828
2829The following group parameters can be used:
2830
2831@table @code
2832@item to-address
2833@cindex to-address
2834Address used by when doing followups and new posts.
2835
2836@example
2837(to-address . "some@@where.com")
2838@end example
2839
2840This is primarily useful in mail groups that represent closed mailing
2841lists---mailing lists where it's expected that everybody that writes to
2842the mailing list is subscribed to it. Since using this parameter
2843ensures that the mail only goes to the mailing list itself, it means
2844that members won't receive two copies of your followups.
2845
2846Using @code{to-address} will actually work whether the group is foreign
2847or not. Let's say there's a group on the server that is called
2848@samp{fa.4ad-l}. This is a real newsgroup, but the server has gotten
2849the articles from a mail-to-news gateway. Posting directly to this
2850group is therefore impossible---you have to send mail to the mailing
2851list address instead.
2852
2853See also @code{gnus-parameter-to-address-alist}.
2854
2855@item to-list
2856@cindex to-list
2857Address used when doing @kbd{a} in that group.
2858
2859@example
2860(to-list . "some@@where.com")
2861@end example
2862
2863It is totally ignored
2864when doing a followup---except that if it is present in a news group,
2865you'll get mail group semantics when doing @kbd{f}.
2866
2867If you do an @kbd{a} command in a mail group and you have neither a
2868@code{to-list} group parameter nor a @code{to-address} group parameter,
2869then a @code{to-list} group parameter will be added automatically upon
2870sending the message if @code{gnus-add-to-list} is set to @code{t}.
2871@vindex gnus-add-to-list
2872
2873@findex gnus-mailing-list-mode
2874@cindex mail list groups
2875If this variable is set, @code{gnus-mailing-list-mode} is turned on when
2876entering summary buffer.
2877
2878See also @code{gnus-parameter-to-list-alist}.
2879
2880@anchor{subscribed}
2881@item subscribed
2882@cindex subscribed
2883@cindex Mail-Followup-To
2884@findex gnus-find-subscribed-addresses
2885If this parameter is set to @code{t}, Gnus will consider the
2886to-address and to-list parameters for this group as addresses of
2887mailing lists you are subscribed to. Giving Gnus this information is
2888(only) a first step in getting it to generate correct Mail-Followup-To
2889headers for your posts to these lists. The second step is to put the
2890following in your @file{.gnus.el}
2891
2892@lisp
2893(setq message-subscribed-address-functions
2894 '(gnus-find-subscribed-addresses))
2895@end lisp
2896
2897@xref{Mailing Lists, ,Mailing Lists, message, The Message Manual}, for
2898a complete treatment of available MFT support.
2899
2900@item visible
2901@cindex visible
2902If the group parameter list has the element @code{(visible . t)},
2903that group will always be visible in the Group buffer, regardless
2904of whether it has any unread articles.
2905
2906This parameter cannot be set via @code{gnus-parameters}. See
2907@code{gnus-permanently-visible-groups} as an alternative.
2908
2909@item broken-reply-to
2910@cindex broken-reply-to
2911Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
2912headers in this group are to be ignored, and for the header to be hidden
2913if @code{reply-to} is part of @code{gnus-boring-article-headers}. This
2914can be useful if you're reading a mailing list group where the listserv
2915has inserted @code{Reply-To} headers that point back to the listserv
2916itself. That is broken behavior. So there!
2917
2918@item to-group
2919@cindex to-group
2920Elements like @code{(to-group . "some.group.name")} means that all
2921posts in that group will be sent to @code{some.group.name}.
2922
2923@item newsgroup
2924@cindex newsgroup
2925If you have @code{(newsgroup . t)} in the group parameter list, Gnus
2926will treat all responses as if they were responses to news articles.
2927This can be useful if you have a mail group that's really a mirror of a
2928news group.
2929
2930@item gcc-self
2931@cindex gcc-self
2932If @code{(gcc-self . t)} is present in the group parameter list, newly
2933composed messages will be @code{Gcc}'d to the current group. If
2934@code{(gcc-self . none)} is present, no @code{Gcc:} header will be
2935generated, if @code{(gcc-self . "string")} is present, this string will
2936be inserted literally as a @code{gcc} header. This parameter takes
2937precedence over any default @code{Gcc} rules as described later
2938(@pxref{Archived Messages}).
2939
2940@strong{Caveat}: Adding @code{(gcc-self . t)} to the parameter list of
2941@code{nntp} groups (or the like) isn't valid. An @code{nntp} server
2942doesn't accept articles.
2943
2944@item auto-expire
2945@cindex auto-expire
2946@cindex expiring mail
2947If the group parameter has an element that looks like @code{(auto-expire
2948. t)}, all articles read will be marked as expirable. For an
2949alternative approach, @pxref{Expiring Mail}.
2950
2951See also @code{gnus-auto-expirable-newsgroups}.
2952
2953@item total-expire
2954@cindex total-expire
2955@cindex expiring mail
2956If the group parameter has an element that looks like
2957@code{(total-expire . t)}, all read articles will be put through the
2958expiry process, even if they are not marked as expirable. Use with
2959caution. Unread, ticked and dormant articles are not eligible for
2960expiry.
2961
2962See also @code{gnus-total-expirable-newsgroups}.
2963
2964@item expiry-wait
2965@cindex expiry-wait
2966@vindex nnmail-expiry-wait-function
2967If the group parameter has an element that looks like
2968@code{(expiry-wait . 10)}, this value will override any
2969@code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function}
2970(@pxref{Expiring Mail}) when expiring expirable messages. The value
2971can either be a number of days (not necessarily an integer) or the
2972symbols @code{never} or @code{immediate}.
2973
2974@item expiry-target
2975@cindex expiry-target
2976Where expired messages end up. This parameter overrides
2977@code{nnmail-expiry-target}.
2978
2979@item score-file
2980@cindex score file group parameter
2981Elements that look like @code{(score-file . "file")} will make
2982@file{file} into the current score file for the group in question. All
2983interactive score entries will be put into this file.
2984
2985@item adapt-file
2986@cindex adapt file group parameter
2987Elements that look like @code{(adapt-file . "file")} will make
2988@file{file} into the current adaptive file for the group in question.
2989All adaptive score entries will be put into this file.
2990
2991@item admin-address
2992@cindex admin-address
2993When unsubscribing from a mailing list you should never send the
2994unsubscription notice to the mailing list itself. Instead, you'd send
2995messages to the administrative address. This parameter allows you to
2996put the admin address somewhere convenient.
2997
2998@item display
2999@cindex display
3000Elements that look like @code{(display . MODE)} say which articles to
3001display on entering the group. Valid values are:
3002
3003@table @code
3004@item all
3005Display all articles, both read and unread.
3006
3007@item an integer
3008Display the last @var{integer} articles in the group. This is the same as
3009entering the group with @kbd{C-u @var{integer}}.
3010
3011@item default
3012Display the default visible articles, which normally includes unread and
3013ticked articles.
3014
3015@item an array
3016Display articles that satisfy a predicate.
3017
3018Here are some examples:
3019
3020@table @code
3021@item [unread]
3022Display only unread articles.
3023
3024@item [not expire]
3025Display everything except expirable articles.
3026
3027@item [and (not reply) (not expire)]
3028Display everything except expirable and articles you've already
3029responded to.
3030@end table
3031
3032The available operators are @code{not}, @code{and} and @code{or}.
3033Predicates include @code{tick}, @code{unsend}, @code{undownload},
3034@code{unread}, @code{dormant}, @code{expire}, @code{reply},
3035@code{killed}, @code{bookmark}, @code{score}, @code{save},
3036@code{cache}, @code{forward}, @code{unseen} and @code{recent}.
3037
3038@end table
3039
3040The @code{display} parameter works by limiting the summary buffer to
3041the subset specified. You can pop the limit by using the @kbd{/ w}
3042command (@pxref{Limiting}).
3043
3044@item comment
3045@cindex comment
3046Elements that look like @code{(comment . "This is a comment")} are
3047arbitrary comments on the group. You can display comments in the
3048group line (@pxref{Group Line Specification}).
3049
3050@item charset
3051@cindex charset
3052Elements that look like @code{(charset . iso-8859-1)} will make
3053@code{iso-8859-1} the default charset; that is, the charset that will be
3054used for all articles that do not specify a charset.
3055
3056See also @code{gnus-group-charset-alist}.
3057
3058@item ignored-charsets
3059@cindex ignored-charset
3060Elements that look like @code{(ignored-charsets x-unknown iso-8859-1)}
3061will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
3062default charset will be used for decoding articles.
3063
3064See also @code{gnus-group-ignored-charsets-alist}.
3065
3066@item posting-style
3067@cindex posting-style
3068You can store additional posting style information for this group
3069here (@pxref{Posting Styles}). The format is that of an entry in the
3070@code{gnus-posting-styles} alist, except that there's no regexp matching
3071the group name (of course). Style elements in this group parameter will
3072take precedence over the ones found in @code{gnus-posting-styles}.
3073
3074For instance, if you want a funky name and signature in this group only,
3075instead of hacking @code{gnus-posting-styles}, you could put something
3076like this in the group parameters:
3077
3078@example
3079(posting-style
3080 (name "Funky Name")
3081 ("X-My-Header" "Funky Value")
3082 (signature "Funky Signature"))
3083@end example
3084
01c52d31
MB
3085If you're using topics to organize your group buffer
3086(@pxref{Group Topics}), note that posting styles can also be set in
3087the topics parameters. Posting styles in topic parameters apply to all
3088groups in this topic. More precisely, the posting-style settings for a
3089group result from the hierarchical merging of all posting-style
3090entries in the parameters of this group and all the topics it belongs
3091to.
3092
3093
4009494e
GM
3094@item post-method
3095@cindex post-method
3096If it is set, the value is used as the method for posting message
3097instead of @code{gnus-post-method}.
3098
a1da1e37
MB
3099@item mail-source
3100@cindex mail-source
3101If it is set, and the setting of @code{mail-sources} includes a
3102@code{group} mail source (@pxref{Mail Sources}), the value is a
3103mail source for this group.
3104
4009494e
GM
3105@item banner
3106@cindex banner
3107An item like @code{(banner . @var{regexp})} causes any part of an article
3108that matches the regular expression @var{regexp} to be stripped. Instead of
3109@var{regexp}, you can also use the symbol @code{signature} which strips the
3110last signature or any of the elements of the alist
3111@code{gnus-article-banner-alist}.
3112
3113@item sieve
3114@cindex sieve
3115This parameter contains a Sieve test that should match incoming mail
3116that should be placed in this group. From this group parameter, a
3117Sieve @samp{IF} control structure is generated, having the test as the
3118condition and @samp{fileinto "group.name";} as the body.
3119
3120For example, if the @samp{INBOX.list.sieve} group has the @code{(sieve
3121address "sender" "sieve-admin@@extundo.com")} group parameter, when
3122translating the group parameter into a Sieve script (@pxref{Sieve
3123Commands}) the following Sieve code is generated:
3124
3125@example
01c52d31
MB
3126if address "sender" "sieve-admin@@extundo.com" @{
3127 fileinto "INBOX.list.sieve";
3128@}
3129@end example
3130
3131To generate tests for multiple email-addresses use a group parameter
3132like @code{(sieve address "sender" ("name@@one.org" else@@two.org"))}.
3133When generating a sieve script (@pxref{Sieve Commands}) Sieve code
3134like the following is generated:
3135
3136@example
3137if address "sender" ["name@@one.org", "else@@two.org"] @{
3138 fileinto "INBOX.list.sieve";
4009494e
GM
3139@}
3140@end example
3141
01c52d31
MB
3142See @pxref{Sieve Commands} for commands and variables that might be of
3143interest in relation to the sieve parameter.
3144
4009494e
GM
3145The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve,
3146Top, sieve, Emacs Sieve}.
3147
3148@item (agent parameters)
3149If the agent has been enabled, you can set any of the its parameters
3150to control the behavior of the agent in individual groups. See Agent
3151Parameters in @ref{Category Syntax}. Most users will choose to set
3152agent parameters in either an agent category or group topic to
3153minimize the configuration effort.
3154
3155@item (@var{variable} @var{form})
3156You can use the group parameters to set variables local to the group you
3157are entering. If you want to turn threading off in @samp{news.answers},
3158you could put @code{(gnus-show-threads nil)} in the group parameters of
3159that group. @code{gnus-show-threads} will be made into a local variable
3160in the summary buffer you enter, and the form @code{nil} will be
3161@code{eval}ed there.
3162
3163Note that this feature sets the variable locally to the summary buffer.
3164But some variables are evaluated in the article buffer, or in the
3165message buffer (of a reply or followup or otherwise newly created
3166message). As a workaround, it might help to add the variable in
3167question to @code{gnus-newsgroup-variables}. @xref{Various Summary
3168Stuff}. So if you want to set @code{message-from-style} via the group
3169parameters, then you may need the following statement elsewhere in your
3170@file{~/.gnus} file:
3171
3172@lisp
3173(add-to-list 'gnus-newsgroup-variables 'message-from-style)
3174@end lisp
3175
3176@vindex gnus-list-identifiers
3177A use for this feature is to remove a mailing list identifier tag in
3178the subject fields of articles. E.g. if the news group
3179
3180@example
3181nntp+news.gnus.org:gmane.text.docbook.apps
3182@end example
3183
3184has the tag @samp{DOC-BOOK-APPS:} in the subject of all articles, this
3185tag can be removed from the article subjects in the summary buffer for
3186the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")}
3187into the group parameters for the group.
3188
3189This can also be used as a group-specific hook function. If you want to
3190hear a beep when you enter a group, you could put something like
3191@code{(dummy-variable (ding))} in the parameters of that group.
3192@code{dummy-variable} will be set to the (meaningless) result of the
3193@code{(ding)} form.
3194
3195Alternatively, since the VARIABLE becomes local to the group, this
3196pattern can be used to temporarily change a hook. For example, if the
3197following is added to a group parameter
3198
3199@lisp
3200(gnus-summary-prepared-hook
3201 '(lambda nil (local-set-key "d" (local-key-binding "n"))))
3202@end lisp
3203
3204when the group is entered, the 'd' key will not mark the article as
3205expired.
3206
3207@end table
3208
4009494e
GM
3209@vindex gnus-parameters
3210Group parameters can be set via the @code{gnus-parameters} variable too.
3211But some variables, such as @code{visible}, have no effect (For this
3212case see @code{gnus-permanently-visible-groups} as an alternative.).
3213For example:
3214
3215@lisp
3216(setq gnus-parameters
3217 '(("mail\\..*"
3218 (gnus-show-threads nil)
3219 (gnus-use-scoring nil)
3220 (gnus-summary-line-format
3221 "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
3222 (gcc-self . t)
3223 (display . all))
3224
3225 ("^nnimap:\\(foo.bar\\)$"
3226 (to-group . "\\1"))
3227
3228 ("mail\\.me"
3229 (gnus-use-scoring t))
3230
3231 ("list\\..*"
3232 (total-expire . t)
3233 (broken-reply-to . t))))
3234@end lisp
3235
3236String value of parameters will be subjected to regexp substitution, as
3237the @code{to-group} example shows.
3238
3239@vindex gnus-parameters-case-fold-search
3240By default, whether comparing the group name and one of those regexps
3241specified in @code{gnus-parameters} is done in a case-sensitive manner
3242or a case-insensitive manner depends on the value of
3243@code{case-fold-search} at the time when the comparison is done. The
3244value of @code{case-fold-search} is typically @code{t}; it means, for
3245example, the element @code{("INBOX\\.FOO" (total-expire . t))} might be
3246applied to both the @samp{INBOX.FOO} group and the @samp{INBOX.foo}
3247group. If you want to make those regexps always case-sensitive, set the
3248value of the @code{gnus-parameters-case-fold-search} variable to
3249@code{nil}. Otherwise, set it to @code{t} if you want to compare them
3250always in a case-insensitive manner.
3251
01c52d31
MB
3252You can define different sorting to different groups via
3253@code{gnus-parameters}. Here is an example to sort an @acronym{NNTP}
3254group by reverse date to see the latest news at the top and an
3255@acronym{RSS} group by subject. In this example, the first group is the
3256Debian daily news group @code{gmane.linux.debian.user.news} from
3257news.gmane.org. The @acronym{RSS} group corresponds to the Debian
3258weekly news RSS feed
3259@url{http://packages.debian.org/unstable/newpkg_main.en.rdf},
3260@xref{RSS}.
3261
3262@lisp
3263(setq
3264 gnus-parameters
3265 '(("nntp.*gmane\\.debian\\.user\\.news"
3266 (gnus-show-threads nil)
3267 (gnus-article-sort-functions '((not gnus-article-sort-by-date)))
3268 (gnus-use-adaptive-scoring nil)
3269 (gnus-use-scoring nil))
3270 ("nnrss.*debian"
3271 (gnus-show-threads nil)
3272 (gnus-article-sort-functions 'gnus-article-sort-by-subject)
3273 (gnus-use-adaptive-scoring nil)
3274 (gnus-use-scoring t)
3275 (gnus-score-find-score-files-function 'gnus-score-find-single)
3276 (gnus-summary-line-format "%U%R%z%d %I%(%[ %s %]%)\n"))))
3277@end lisp
3278
4009494e
GM
3279
3280@node Listing Groups
3281@section Listing Groups
3282@cindex group listing
3283
3284These commands all list various slices of the groups available.
3285
3286@table @kbd
3287
3288@item l
3289@itemx A s
3290@kindex A s (Group)
3291@kindex l (Group)
3292@findex gnus-group-list-groups
3293List all groups that have unread articles
3294(@code{gnus-group-list-groups}). If the numeric prefix is used, this
3295command will list only groups of level ARG and lower. By default, it
3296only lists groups of level five (i.e.,
3297@code{gnus-group-default-list-level}) or lower (i.e., just subscribed
3298groups).
3299
3300@item L
3301@itemx A u
3302@kindex A u (Group)
3303@kindex L (Group)
3304@findex gnus-group-list-all-groups
3305List all groups, whether they have unread articles or not
3306(@code{gnus-group-list-all-groups}). If the numeric prefix is used,
3307this command will list only groups of level ARG and lower. By default,
3308it lists groups of level seven or lower (i.e., just subscribed and
3309unsubscribed groups).
3310
3311@item A l
3312@kindex A l (Group)
3313@findex gnus-group-list-level
3314List all unread groups on a specific level
3315(@code{gnus-group-list-level}). If given a prefix, also list the groups
3316with no unread articles.
3317
3318@item A k
3319@kindex A k (Group)
3320@findex gnus-group-list-killed
3321List all killed groups (@code{gnus-group-list-killed}). If given a
3322prefix argument, really list all groups that are available, but aren't
3323currently (un)subscribed. This could entail reading the active file
3324from the server.
3325
3326@item A z
3327@kindex A z (Group)
3328@findex gnus-group-list-zombies
3329List all zombie groups (@code{gnus-group-list-zombies}).
3330
3331@item A m
3332@kindex A m (Group)
3333@findex gnus-group-list-matching
3334List all unread, subscribed groups with names that match a regexp
3335(@code{gnus-group-list-matching}).
3336
3337@item A M
3338@kindex A M (Group)
3339@findex gnus-group-list-all-matching
3340List groups that match a regexp (@code{gnus-group-list-all-matching}).
3341
3342@item A A
3343@kindex A A (Group)
3344@findex gnus-group-list-active
3345List absolutely all groups in the active file(s) of the
3346server(s) you are connected to (@code{gnus-group-list-active}). This
3347might very well take quite a while. It might actually be a better idea
3348to do a @kbd{A M} to list all matching, and just give @samp{.} as the
3349thing to match on. Also note that this command may list groups that
3350don't exist (yet)---these will be listed as if they were killed groups.
3351Take the output with some grains of salt.
3352
3353@item A a
3354@kindex A a (Group)
3355@findex gnus-group-apropos
3356List all groups that have names that match a regexp
3357(@code{gnus-group-apropos}).
3358
3359@item A d
3360@kindex A d (Group)
3361@findex gnus-group-description-apropos
3362List all groups that have names or descriptions that match a regexp
3363(@code{gnus-group-description-apropos}).
3364
3365@item A c
3366@kindex A c (Group)
3367@findex gnus-group-list-cached
3368List all groups with cached articles (@code{gnus-group-list-cached}).
3369
3370@item A ?
3371@kindex A ? (Group)
3372@findex gnus-group-list-dormant
3373List all groups with dormant articles (@code{gnus-group-list-dormant}).
3374
3375@item A /
3376@kindex A / (Group)
3377@findex gnus-group-list-limit
3378List groups limited within the current selection
3379(@code{gnus-group-list-limit}).
3380
3381@item A f
3382@kindex A f (Group)
3383@findex gnus-group-list-flush
3384Flush groups from the current selection (@code{gnus-group-list-flush}).
3385
3386@item A p
3387@kindex A p (Group)
3388@findex gnus-group-list-plus
3389List groups plus the current selection (@code{gnus-group-list-plus}).
3390
3391@end table
3392
3393@vindex gnus-permanently-visible-groups
3394@cindex visible group parameter
3395Groups that match the @code{gnus-permanently-visible-groups} regexp will
3396always be shown, whether they have unread articles or not. You can also
3397add the @code{visible} element to the group parameters in question to
3398get the same effect.
3399
3400@vindex gnus-list-groups-with-ticked-articles
3401Groups that have just ticked articles in it are normally listed in the
3402group buffer. If @code{gnus-list-groups-with-ticked-articles} is
3403@code{nil}, these groups will be treated just like totally empty
3404groups. It is @code{t} by default.
3405
3406
3407@node Sorting Groups
3408@section Sorting Groups
3409@cindex sorting groups
3410
3411@kindex C-c C-s (Group)
3412@findex gnus-group-sort-groups
3413@vindex gnus-group-sort-function
3414The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
3415group buffer according to the function(s) given by the
3416@code{gnus-group-sort-function} variable. Available sorting functions
3417include:
3418
3419@table @code
3420
3421@item gnus-group-sort-by-alphabet
3422@findex gnus-group-sort-by-alphabet
3423Sort the group names alphabetically. This is the default.
3424
3425@item gnus-group-sort-by-real-name
3426@findex gnus-group-sort-by-real-name
3427Sort the group alphabetically on the real (unprefixed) group names.
3428
3429@item gnus-group-sort-by-level
3430@findex gnus-group-sort-by-level
3431Sort by group level.
3432
3433@item gnus-group-sort-by-score
3434@findex gnus-group-sort-by-score
3435Sort by group score. @xref{Group Score}.
3436
3437@item gnus-group-sort-by-rank
3438@findex gnus-group-sort-by-rank
3439Sort by group score and then the group level. The level and the score
3440are, when taken together, the group's @dfn{rank}. @xref{Group Score}.
3441
3442@item gnus-group-sort-by-unread
3443@findex gnus-group-sort-by-unread
3444Sort by number of unread articles.
3445
3446@item gnus-group-sort-by-method
3447@findex gnus-group-sort-by-method
3448Sort alphabetically on the select method.
3449
3450@item gnus-group-sort-by-server
3451@findex gnus-group-sort-by-server
3452Sort alphabetically on the Gnus server name.
3453
3454
3455@end table
3456
3457@code{gnus-group-sort-function} can also be a list of sorting
3458functions. In that case, the most significant sort key function must be
3459the last one.
3460
3461
3462There are also a number of commands for sorting directly according to
3463some sorting criteria:
3464
3465@table @kbd
3466@item G S a
3467@kindex G S a (Group)
3468@findex gnus-group-sort-groups-by-alphabet
3469Sort the group buffer alphabetically by group name
3470(@code{gnus-group-sort-groups-by-alphabet}).
3471
3472@item G S u
3473@kindex G S u (Group)
3474@findex gnus-group-sort-groups-by-unread
3475Sort the group buffer by the number of unread articles
3476(@code{gnus-group-sort-groups-by-unread}).
3477
3478@item G S l
3479@kindex G S l (Group)
3480@findex gnus-group-sort-groups-by-level
3481Sort the group buffer by group level
3482(@code{gnus-group-sort-groups-by-level}).
3483
3484@item G S v
3485@kindex G S v (Group)
3486@findex gnus-group-sort-groups-by-score
3487Sort the group buffer by group score
3488(@code{gnus-group-sort-groups-by-score}). @xref{Group Score}.
3489
3490@item G S r
3491@kindex G S r (Group)
3492@findex gnus-group-sort-groups-by-rank
3493Sort the group buffer by group rank
3494(@code{gnus-group-sort-groups-by-rank}). @xref{Group Score}.
3495
3496@item G S m
3497@kindex G S m (Group)
3498@findex gnus-group-sort-groups-by-method
3499Sort the group buffer alphabetically by back end name@*
3500(@code{gnus-group-sort-groups-by-method}).
3501
3502@item G S n
3503@kindex G S n (Group)
3504@findex gnus-group-sort-groups-by-real-name
3505Sort the group buffer alphabetically by real (unprefixed) group name
3506(@code{gnus-group-sort-groups-by-real-name}).
3507
3508@end table
3509
3510All the commands below obey the process/prefix convention
3511(@pxref{Process/Prefix}).
3512
3513When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
3514commands will sort in reverse order.
3515
3516You can also sort a subset of the groups:
3517
3518@table @kbd
3519@item G P a
3520@kindex G P a (Group)
3521@findex gnus-group-sort-selected-groups-by-alphabet
3522Sort the groups alphabetically by group name
3523(@code{gnus-group-sort-selected-groups-by-alphabet}).
3524
3525@item G P u
3526@kindex G P u (Group)
3527@findex gnus-group-sort-selected-groups-by-unread
3528Sort the groups by the number of unread articles
3529(@code{gnus-group-sort-selected-groups-by-unread}).
3530
3531@item G P l
3532@kindex G P l (Group)
3533@findex gnus-group-sort-selected-groups-by-level
3534Sort the groups by group level
3535(@code{gnus-group-sort-selected-groups-by-level}).
3536
3537@item G P v
3538@kindex G P v (Group)
3539@findex gnus-group-sort-selected-groups-by-score
3540Sort the groups by group score
3541(@code{gnus-group-sort-selected-groups-by-score}). @xref{Group Score}.
3542
3543@item G P r
3544@kindex G P r (Group)
3545@findex gnus-group-sort-selected-groups-by-rank
3546Sort the groups by group rank
3547(@code{gnus-group-sort-selected-groups-by-rank}). @xref{Group Score}.
3548
3549@item G P m
3550@kindex G P m (Group)
3551@findex gnus-group-sort-selected-groups-by-method
3552Sort the groups alphabetically by back end name@*
3553(@code{gnus-group-sort-selected-groups-by-method}).
3554
3555@item G P n
3556@kindex G P n (Group)
3557@findex gnus-group-sort-selected-groups-by-real-name
3558Sort the groups alphabetically by real (unprefixed) group name
3559(@code{gnus-group-sort-selected-groups-by-real-name}).
3560
3561@item G P s
3562@kindex G P s (Group)
3563@findex gnus-group-sort-selected-groups
3564Sort the groups according to @code{gnus-group-sort-function}.
3565
3566@end table
3567
3568And finally, note that you can use @kbd{C-k} and @kbd{C-y} to manually
3569move groups around.
3570
3571
3572@node Group Maintenance
3573@section Group Maintenance
3574@cindex bogus groups
3575
3576@table @kbd
3577@item b
3578@kindex b (Group)
3579@findex gnus-group-check-bogus-groups
3580Find bogus groups and delete them
3581(@code{gnus-group-check-bogus-groups}).
3582
3583@item F
3584@kindex F (Group)
3585@findex gnus-group-find-new-groups
3586Find new groups and process them (@code{gnus-group-find-new-groups}).
3587With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
3588for new groups. With 2 @kbd{C-u}'s, use most complete method possible
3589to query the server for new groups, and subscribe the new groups as
3590zombies.
3591
3592@item C-c C-x
3593@kindex C-c C-x (Group)
3594@findex gnus-group-expire-articles
3595@cindex expiring mail
3596Run all expirable articles in the current group through the expiry
3597process (if any) (@code{gnus-group-expire-articles}). That is, delete
3598all expirable articles in the group that have been around for a while.
3599(@pxref{Expiring Mail}).
3600
3601@item C-c C-M-x
3602@kindex C-c C-M-x (Group)
3603@findex gnus-group-expire-all-groups
3604@cindex expiring mail
3605Run all expirable articles in all groups through the expiry process
3606(@code{gnus-group-expire-all-groups}).
3607
3608@end table
3609
3610
3611@node Browse Foreign Server
3612@section Browse Foreign Server
3613@cindex foreign servers
3614@cindex browsing servers
3615
3616@table @kbd
3617@item B
3618@kindex B (Group)
3619@findex gnus-group-browse-foreign-server
3620You will be queried for a select method and a server name. Gnus will
3621then attempt to contact this server and let you browse the groups there
3622(@code{gnus-group-browse-foreign-server}).
3623@end table
3624
3625@findex gnus-browse-mode
3626A new buffer with a list of available groups will appear. This buffer
3627will use the @code{gnus-browse-mode}. This buffer looks a bit (well,
3628a lot) like a normal group buffer.
3629
3630Here's a list of keystrokes available in the browse mode:
3631
3632@table @kbd
3633@item n
3634@kindex n (Browse)
3635@findex gnus-group-next-group
3636Go to the next group (@code{gnus-group-next-group}).
3637
3638@item p
3639@kindex p (Browse)
3640@findex gnus-group-prev-group
3641Go to the previous group (@code{gnus-group-prev-group}).
3642
3643@item SPACE
3644@kindex SPACE (Browse)
3645@findex gnus-browse-read-group
3646Enter the current group and display the first article
3647(@code{gnus-browse-read-group}).
3648
3649@item RET
3650@kindex RET (Browse)
3651@findex gnus-browse-select-group
3652Enter the current group (@code{gnus-browse-select-group}).
3653
3654@item u
3655@kindex u (Browse)
3656@findex gnus-browse-unsubscribe-current-group
3657Unsubscribe to the current group, or, as will be the case here,
3658subscribe to it (@code{gnus-browse-unsubscribe-current-group}).
3659
3660@item l
3661@itemx q
3662@kindex q (Browse)
3663@kindex l (Browse)
3664@findex gnus-browse-exit
3665Exit browse mode (@code{gnus-browse-exit}).
3666
3667@item d
3668@kindex d (Browse)
3669@findex gnus-browse-describe-group
3670Describe the current group (@code{gnus-browse-describe-group}).
3671
3672@item ?
3673@kindex ? (Browse)
3674@findex gnus-browse-describe-briefly
3675Describe browse mode briefly (well, there's not much to describe, is
3676there) (@code{gnus-browse-describe-briefly}).
3677@end table
3678
3679
3680@node Exiting Gnus
3681@section Exiting Gnus
3682@cindex exiting Gnus
3683
3684Yes, Gnus is ex(c)iting.
3685
3686@table @kbd
3687@item z
3688@kindex z (Group)
3689@findex gnus-group-suspend
3690Suspend Gnus (@code{gnus-group-suspend}). This doesn't really exit Gnus,
3691but it kills all buffers except the Group buffer. I'm not sure why this
3692is a gain, but then who am I to judge?
3693
3694@item q
3695@kindex q (Group)
3696@findex gnus-group-exit
3697@c @icon{gnus-group-exit}
3698Quit Gnus (@code{gnus-group-exit}).
3699
3700@item Q
3701@kindex Q (Group)
3702@findex gnus-group-quit
3703Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
3704The dribble file will be saved, though (@pxref{Auto Save}).
3705@end table
3706
3707@vindex gnus-exit-gnus-hook
3708@vindex gnus-suspend-gnus-hook
3709@vindex gnus-after-exiting-gnus-hook
3710@code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3711@code{gnus-exit-gnus-hook} is called when you quit Gnus, while
3712@code{gnus-after-exiting-gnus-hook} is called as the final item when
3713exiting Gnus.
3714
3715Note:
3716
3717@quotation
3718Miss Lisa Cannifax, while sitting in English class, felt her feet go
3719numbly heavy and herself fall into a hazy trance as the boy sitting
3720behind her drew repeated lines with his pencil across the back of her
3721plastic chair.
3722@end quotation
3723
3724
3725@node Group Topics
3726@section Group Topics
3727@cindex topics
3728
3729If you read lots and lots of groups, it might be convenient to group
3730them hierarchically according to topics. You put your Emacs groups over
3731here, your sex groups over there, and the rest (what, two groups or so?)
3732you put in some misc section that you never bother with anyway. You can
3733even group the Emacs sex groups as a sub-topic to either the Emacs
3734groups or the sex groups---or both! Go wild!
3735
3736@iftex
3737@iflatex
3738\gnusfigure{Group Topics}{400}{
3739\put(75,50){\epsfig{figure=ps/group-topic,height=9cm}}
3740}
3741@end iflatex
3742@end iftex
3743
3744Here's an example:
3745
3746@example
3747Gnus
3748 Emacs -- I wuw it!
3749 3: comp.emacs
3750 2: alt.religion.emacs
3751 Naughty Emacs
3752 452: alt.sex.emacs
3753 0: comp.talk.emacs.recovery
3754 Misc
3755 8: comp.binaries.fractals
3756 13: comp.sources.unix
3757@end example
3758
3759@findex gnus-topic-mode
3760@kindex t (Group)
3761To get this @emph{fab} functionality you simply turn on (ooh!) the
3762@code{gnus-topic} minor mode---type @kbd{t} in the group buffer. (This
3763is a toggling command.)
3764
3765Go ahead, just try it. I'll still be here when you get back. La de
3766dum@dots{} Nice tune, that@dots{} la la la@dots{} What, you're back?
3767Yes, and now press @kbd{l}. There. All your groups are now listed
3768under @samp{misc}. Doesn't that make you feel all warm and fuzzy?
3769Hot and bothered?
3770
3771If you want this permanently enabled, you should add that minor mode to
3772the hook for the group mode. Put the following line in your
3773@file{~/.gnus.el} file:
3774
3775@lisp
3776(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3777@end lisp
3778
3779@menu
3780* Topic Commands:: Interactive E-Z commands.
3781* Topic Variables:: How to customize the topics the Lisp Way.
3782* Topic Sorting:: Sorting each topic individually.
3783* Topic Topology:: A map of the world.
3784* Topic Parameters:: Parameters that apply to all groups in a topic.
3785@end menu
3786
3787
3788@node Topic Commands
3789@subsection Topic Commands
3790@cindex topic commands
3791
3792When the topic minor mode is turned on, a new @kbd{T} submap will be
3793available. In addition, a few of the standard keys change their
3794definitions slightly.
3795
3796In general, the following kinds of operations are possible on topics.
3797First of all, you want to create topics. Secondly, you want to put
3798groups in topics and to move them around until you have an order you
3799like. The third kind of operation is to show/hide parts of the whole
3800shebang. You might want to hide a topic including its subtopics and
3801groups, to get a better overview of the other groups.
3802
3803Here is a list of the basic keys that you might need to set up topics
3804the way you like.
3805
3806@table @kbd
3807
3808@item T n
3809@kindex T n (Topic)
3810@findex gnus-topic-create-topic
3811Prompt for a new topic name and create it
3812(@code{gnus-topic-create-topic}).
3813
3814@item T TAB
3815@itemx TAB
3816@kindex T TAB (Topic)
3817@kindex TAB (Topic)
3818@findex gnus-topic-indent
3819``Indent'' the current topic so that it becomes a sub-topic of the
3820previous topic (@code{gnus-topic-indent}). If given a prefix,
3821``un-indent'' the topic instead.
3822
3823@item M-TAB
3824@kindex M-TAB (Topic)
3825@findex gnus-topic-unindent
3826``Un-indent'' the current topic so that it becomes a sub-topic of the
3827parent of its current parent (@code{gnus-topic-unindent}).
3828
3829@end table
3830
3831The following two keys can be used to move groups and topics around.
3832They work like the well-known cut and paste. @kbd{C-k} is like cut and
3833@kbd{C-y} is like paste. Of course, this being Emacs, we use the terms
3834kill and yank rather than cut and paste.
3835
3836@table @kbd
3837
3838@item C-k
3839@kindex C-k (Topic)
3840@findex gnus-topic-kill-group
3841Kill a group or topic (@code{gnus-topic-kill-group}). All groups in the
3842topic will be removed along with the topic.
3843
3844@item C-y
3845@kindex C-y (Topic)
3846@findex gnus-topic-yank-group
3847Yank the previously killed group or topic
3848(@code{gnus-topic-yank-group}). Note that all topics will be yanked
3849before all groups.
3850
3851So, to move a topic to the beginning of the list of topics, just hit
3852@kbd{C-k} on it. This is like the ``cut'' part of cut and paste. Then,
3853move the cursor to the beginning of the buffer (just below the ``Gnus''
3854topic) and hit @kbd{C-y}. This is like the ``paste'' part of cut and
3855paste. Like I said -- E-Z.
3856
3857You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics. So
3858you can move topics around as well as groups.
3859
3860@end table
3861
3862After setting up the topics the way you like them, you might wish to
3863hide a topic, or to show it again. That's why we have the following
3864key.
3865
3866@table @kbd
3867
3868@item RET
3869@kindex RET (Topic)
3870@findex gnus-topic-select-group
3871@itemx SPACE
3872Either select a group or fold a topic (@code{gnus-topic-select-group}).
3873When you perform this command on a group, you'll enter the group, as
3874usual. When done on a topic line, the topic will be folded (if it was
3875visible) or unfolded (if it was folded already). So it's basically a
3876toggling command on topics. In addition, if you give a numerical
3877prefix, group on that level (and lower) will be displayed.
3878
3879@end table
3880
3881Now for a list of other commands, in no particular order.
3882
3883@table @kbd
3884
3885@item T m
3886@kindex T m (Topic)
3887@findex gnus-topic-move-group
3888Move the current group to some other topic
3889(@code{gnus-topic-move-group}). This command uses the process/prefix
3890convention (@pxref{Process/Prefix}).
3891
3892@item T j
3893@kindex T j (Topic)
3894@findex gnus-topic-jump-to-topic
3895Go to a topic (@code{gnus-topic-jump-to-topic}).
3896
3897@item T c
3898@kindex T c (Topic)
3899@findex gnus-topic-copy-group
3900Copy the current group to some other topic
3901(@code{gnus-topic-copy-group}). This command uses the process/prefix
3902convention (@pxref{Process/Prefix}).
3903
3904@item T h
3905@kindex T h (Topic)
3906@findex gnus-topic-hide-topic
3907Hide the current topic (@code{gnus-topic-hide-topic}). If given
3908a prefix, hide the topic permanently.
3909
3910@item T s
3911@kindex T s (Topic)
3912@findex gnus-topic-show-topic
3913Show the current topic (@code{gnus-topic-show-topic}). If given
3914a prefix, show the topic permanently.
3915
3916@item T D
3917@kindex T D (Topic)
3918@findex gnus-topic-remove-group
3919Remove a group from the current topic (@code{gnus-topic-remove-group}).
3920This command is mainly useful if you have the same group in several
3921topics and wish to remove it from one of the topics. You may also
3922remove a group from all topics, but in that case, Gnus will add it to
3923the root topic the next time you start Gnus. In fact, all new groups
3924(which, naturally, don't belong to any topic) will show up in the root
3925topic.
3926
3927This command uses the process/prefix convention
3928(@pxref{Process/Prefix}).
3929
3930@item T M
3931@kindex T M (Topic)
3932@findex gnus-topic-move-matching
3933Move all groups that match some regular expression to a topic
3934(@code{gnus-topic-move-matching}).
3935
3936@item T C
3937@kindex T C (Topic)
3938@findex gnus-topic-copy-matching
3939Copy all groups that match some regular expression to a topic
3940(@code{gnus-topic-copy-matching}).
3941
3942@item T H
3943@kindex T H (Topic)
3944@findex gnus-topic-toggle-display-empty-topics
3945Toggle hiding empty topics
3946(@code{gnus-topic-toggle-display-empty-topics}).
3947
3948@item T #
3949@kindex T # (Topic)
3950@findex gnus-topic-mark-topic
3951Mark all groups in the current topic with the process mark
3952(@code{gnus-topic-mark-topic}). This command works recursively on
3953sub-topics unless given a prefix.
3954
3955@item T M-#
3956@kindex T M-# (Topic)
3957@findex gnus-topic-unmark-topic
3958Remove the process mark from all groups in the current topic
3959(@code{gnus-topic-unmark-topic}). This command works recursively on
3960sub-topics unless given a prefix.
3961
3962@item C-c C-x
3963@kindex C-c C-x (Topic)
3964@findex gnus-topic-expire-articles
3965@cindex expiring mail
3966Run all expirable articles in the current group or topic through the
3967expiry process (if any)
3968(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
3969
3970@item T r
3971@kindex T r (Topic)
3972@findex gnus-topic-rename
3973Rename a topic (@code{gnus-topic-rename}).
3974
3975@item T DEL
3976@kindex T DEL (Topic)
3977@findex gnus-topic-delete
3978Delete an empty topic (@code{gnus-topic-delete}).
3979
3980@item A T
3981@kindex A T (Topic)
3982@findex gnus-topic-list-active
3983List all groups that Gnus knows about in a topics-ified way
3984(@code{gnus-topic-list-active}).
3985
3986@item T M-n
3987@kindex T M-n (Topic)
3988@findex gnus-topic-goto-next-topic
3989Go to the next topic (@code{gnus-topic-goto-next-topic}).
3990
3991@item T M-p
3992@kindex T M-p (Topic)
3993@findex gnus-topic-goto-previous-topic
01c52d31 3994Go to the previous topic (@code{gnus-topic-goto-previous-topic}).
4009494e
GM
3995
3996@item G p
3997@kindex G p (Topic)
3998@findex gnus-topic-edit-parameters
3999@cindex group parameters
4000@cindex topic parameters
4001@cindex parameters
4002Edit the topic parameters (@code{gnus-topic-edit-parameters}).
4003@xref{Topic Parameters}.
4004
4005@end table
4006
4007
4008@node Topic Variables
4009@subsection Topic Variables
4010@cindex topic variables
4011
4012The previous section told you how to tell Gnus which topics to display.
4013This section explains how to tell Gnus what to display about each topic.
4014
4015@vindex gnus-topic-line-format
4016The topic lines themselves are created according to the
4017@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
4018Valid elements are:
4019
4020@table @samp
4021@item i
4022Indentation.
4023@item n
4024Topic name.
4025@item v
4026Visibility.
4027@item l
4028Level.
4029@item g
4030Number of groups in the topic.
4031@item a
4032Number of unread articles in the topic.
4033@item A
4034Number of unread articles in the topic and all its subtopics.
4035@end table
4036
4037@vindex gnus-topic-indent-level
4038Each sub-topic (and the groups in the sub-topics) will be indented with
4039@code{gnus-topic-indent-level} times the topic level number of spaces.
4040The default is 2.
4041
4042@vindex gnus-topic-mode-hook
4043@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
4044
4045@vindex gnus-topic-display-empty-topics
4046The @code{gnus-topic-display-empty-topics} says whether to display even
4047topics that have no unread articles in them. The default is @code{t}.
4048
4049
4050@node Topic Sorting
4051@subsection Topic Sorting
4052@cindex topic sorting
4053
4054You can sort the groups in each topic individually with the following
4055commands:
4056
4057
4058@table @kbd
4059@item T S a
4060@kindex T S a (Topic)
4061@findex gnus-topic-sort-groups-by-alphabet
4062Sort the current topic alphabetically by group name
4063(@code{gnus-topic-sort-groups-by-alphabet}).
4064
4065@item T S u
4066@kindex T S u (Topic)
4067@findex gnus-topic-sort-groups-by-unread
4068Sort the current topic by the number of unread articles
4069(@code{gnus-topic-sort-groups-by-unread}).
4070
4071@item T S l
4072@kindex T S l (Topic)
4073@findex gnus-topic-sort-groups-by-level
4074Sort the current topic by group level
4075(@code{gnus-topic-sort-groups-by-level}).
4076
4077@item T S v
4078@kindex T S v (Topic)
4079@findex gnus-topic-sort-groups-by-score
4080Sort the current topic by group score
4081(@code{gnus-topic-sort-groups-by-score}). @xref{Group Score}.
4082
4083@item T S r
4084@kindex T S r (Topic)
4085@findex gnus-topic-sort-groups-by-rank
4086Sort the current topic by group rank
4087(@code{gnus-topic-sort-groups-by-rank}). @xref{Group Score}.
4088
4089@item T S m
4090@kindex T S m (Topic)
4091@findex gnus-topic-sort-groups-by-method
4092Sort the current topic alphabetically by back end name
4093(@code{gnus-topic-sort-groups-by-method}).
4094
4095@item T S e
4096@kindex T S e (Topic)
4097@findex gnus-topic-sort-groups-by-server
4098Sort the current topic alphabetically by server name
4099(@code{gnus-topic-sort-groups-by-server}).
4100
4101@item T S s
4102@kindex T S s (Topic)
4103@findex gnus-topic-sort-groups
4104Sort the current topic according to the function(s) given by the
4105@code{gnus-group-sort-function} variable
4106(@code{gnus-topic-sort-groups}).
4107
4108@end table
4109
4110When given a prefix argument, all these commands will sort in reverse
4111order. @xref{Sorting Groups}, for more information about group
4112sorting.
4113
4114
4115@node Topic Topology
4116@subsection Topic Topology
4117@cindex topic topology
4118@cindex topology
4119
4120So, let's have a look at an example group buffer:
4121
4122@example
4123@group
4124Gnus
4125 Emacs -- I wuw it!
4126 3: comp.emacs
4127 2: alt.religion.emacs
4128 Naughty Emacs
4129 452: alt.sex.emacs
4130 0: comp.talk.emacs.recovery
4131 Misc
4132 8: comp.binaries.fractals
4133 13: comp.sources.unix
4134@end group
4135@end example
4136
4137So, here we have one top-level topic (@samp{Gnus}), two topics under
4138that, and one sub-topic under one of the sub-topics. (There is always
4139just one (1) top-level topic). This topology can be expressed as
4140follows:
4141
4142@lisp
4143(("Gnus" visible)
4144 (("Emacs -- I wuw it!" visible)
4145 (("Naughty Emacs" visible)))
4146 (("Misc" visible)))
4147@end lisp
4148
4149@vindex gnus-topic-topology
4150This is in fact how the variable @code{gnus-topic-topology} would look
4151for the display above. That variable is saved in the @file{.newsrc.eld}
4152file, and shouldn't be messed with manually---unless you really want
4153to. Since this variable is read from the @file{.newsrc.eld} file,
4154setting it in any other startup files will have no effect.
4155
4156This topology shows what topics are sub-topics of what topics (right),
4157and which topics are visible. Two settings are currently
4158allowed---@code{visible} and @code{invisible}.
4159
4160
4161@node Topic Parameters
4162@subsection Topic Parameters
4163@cindex topic parameters
4164
4165All groups in a topic will inherit group parameters from the parent
4166(and ancestor) topic parameters. All valid group parameters are valid
4167topic parameters (@pxref{Group Parameters}). When the agent is
4168enabled, all agent parameters (See Agent Parameters in @ref{Category
4169Syntax}) are also valid topic parameters.
4170
4171In addition, the following parameters are only valid as topic
4172parameters:
4173
4174@table @code
4175@item subscribe
4176When subscribing new groups by topic (@pxref{Subscription Methods}), the
4177@code{subscribe} topic parameter says what groups go in what topic. Its
4178value should be a regexp to match the groups that should go in that
4179topic.
4180
4181@item subscribe-level
4182When subscribing new groups by topic (see the @code{subscribe} parameter),
4183the group will be subscribed with the level specified in the
4184@code{subscribe-level} instead of @code{gnus-level-default-subscribed}.
4185
4186@end table
4187
4188Group parameters (of course) override topic parameters, and topic
4189parameters in sub-topics override topic parameters in super-topics. You
4190know. Normal inheritance rules. (@dfn{Rules} is here a noun, not a
4191verb, although you may feel free to disagree with me here.)
4192
4193@example
4194@group
4195Gnus
4196 Emacs
4197 3: comp.emacs
4198 2: alt.religion.emacs
4199 452: alt.sex.emacs
4200 Relief
4201 452: alt.sex.emacs
4202 0: comp.talk.emacs.recovery
4203 Misc
4204 8: comp.binaries.fractals
4205 13: comp.sources.unix
4206 452: alt.sex.emacs
4207@end group
4208@end example
4209
4210The @samp{Emacs} topic has the topic parameter @code{(score-file
4211. "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
4212@code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
4213topic parameter @code{(score-file . "emacs.SCORE")}. In addition,
4214@* @samp{alt.religion.emacs} has the group parameter @code{(score-file
4215. "religion.SCORE")}.
4216
4217Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
4218will get the @file{relief.SCORE} home score file. If you enter the same
4219group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
4220score file. If you enter the group @samp{alt.religion.emacs}, you'll
4221get the @file{religion.SCORE} home score file.
4222
4223This seems rather simple and self-evident, doesn't it? Well, yes. But
4224there are some problems, especially with the @code{total-expiry}
4225parameter. Say you have a mail group in two topics; one with
4226@code{total-expiry} and one without. What happens when you do @kbd{M-x
4227gnus-expire-all-expirable-groups}? Gnus has no way of telling which one
4228of these topics you mean to expire articles from, so anything may
4229happen. In fact, I hereby declare that it is @dfn{undefined} what
4230happens. You just have to be careful if you do stuff like that.
4231
4232
01c52d31
MB
4233@node Non-ASCII Group Names
4234@section Accessing groups of non-English names
4235@cindex non-ascii group names
4236
4237There are some news servers that provide groups of which the names are
4238expressed with their native languages in the world. For instance, in a
4239certain news server there are some newsgroups of which the names are
4240spelled in Chinese, where people are talking in Chinese. You can, of
4241course, subscribe to such news groups using Gnus. Currently Gnus
4242supports non-@acronym{ASCII} group names not only with the @code{nntp}
4243back end but also with the @code{nnml} back end and the @code{nnrss}
4244back end.
4245
4246Every such group name is encoded by a certain charset in the server
4247side (in an @acronym{NNTP} server its administrator determines the
4248charset, but for groups in the other back ends it is determined by you).
4249Gnus has to display the decoded ones for you in the group buffer and the
4250article buffer, and needs to use the encoded ones when communicating
4251with servers. However, Gnus doesn't know what charset is used for each
4252non-@acronym{ASCII} group name. The following two variables are just
4253the ones for telling Gnus what charset should be used for each group:
4254
4255@table @code
4256@item gnus-group-name-charset-method-alist
4257@vindex gnus-group-name-charset-method-alist
4258An alist of select methods and charsets. The default value is
4259@code{nil}. The names of groups in the server specified by that select
4260method are all supposed to use the corresponding charset. For example:
4261
4262@lisp
4263(setq gnus-group-name-charset-method-alist
4264 '(((nntp "news.com.cn") . cn-gb-2312)))
4265@end lisp
4266
4267Charsets specified for groups with this variable are preferred to the
4268ones specified for the same groups with the
4269@code{gnus-group-name-charset-group-alist} variable (see below).
4270
4271A select method can be very long, like:
4272
4273@lisp
4274(nntp "gmane"
4275 (nntp-address "news.gmane.org")
4276 (nntp-end-of-line "\n")
4277 (nntp-open-connection-function
4278 nntp-open-via-rlogin-and-telnet)
4279 (nntp-via-rlogin-command "ssh")
4280 (nntp-via-rlogin-command-switches
4281 ("-C" "-t" "-e" "none"))
4282 (nntp-via-address @dots{}))
4283@end lisp
4284
4285In that case, you can truncate it into @code{(nntp "gmane")} in this
4286variable. That is, it is enough to contain only the back end name and
4287the server name.
4288
4289@item gnus-group-name-charset-group-alist
4290@cindex UTF-8 group names
4291@vindex gnus-group-name-charset-group-alist
4292An alist of regexp of group name and the charset for group names.
4293@code{((".*" . utf-8))} is the default value if UTF-8 is supported,
4294otherwise the default is @code{nil}. For example:
4295
4296@lisp
4297(setq gnus-group-name-charset-group-alist
4298 '(("\\.com\\.cn:" . cn-gb-2312)
4299 (".*" . utf-8)))
4300@end lisp
4301
4302Note that this variable is ignored if the match is made with
4303@code{gnus-group-name-charset-method-alist}.
4304@end table
4305
4306Those two variables are used also to determine the charset for encoding
4307and decoding non-@acronym{ASCII} group names that are in the back ends
4308other than @code{nntp}. It means that it is you who determine it. If
4309you do nothing, the charset used for group names in those back ends will
4310all be @code{utf-8} because of the last element of
4311@code{gnus-group-name-charset-group-alist}.
4312
4313There is one more important variable for non-@acronym{ASCII} group
4314names. @emph{XEmacs users must set this}. Emacs users necessarily need
4315not do:
4316
4317@table @code
4318@item nnmail-pathname-coding-system
4319The value of this variable should be a coding system or @code{nil}
4320(which is the default). The @code{nnml} back end, the @code{nnrss} back
4321end, the @acronym{NNTP} marks feature (@pxref{NNTP marks}), the agent,
4322and the cache use non-@acronym{ASCII} group names in those files and
4323directories. This variable overrides the value of
4324@code{file-name-coding-system} which specifies the coding system used
4325when encoding and decoding those file names and directory names.
4326
4327In XEmacs (with the @code{mule} feature), @code{file-name-coding-system}
4328is the only means to specify the coding system used to encode and decode
4329file names. Therefore, @emph{you, XEmacs users, have to set it} to the
4330coding system that is suitable to encode and decode non-@acronym{ASCII}
4331group names. On the other hand, Emacs uses the value of
4332@code{default-file-name-coding-system} if @code{file-name-coding-system}
4333is @code{nil}. Normally the value of
4334@code{default-file-name-coding-system} is initialized according to the
4335locale, so you will need to do nothing if the value is suitable to
4336encode and decode non-@acronym{ASCII} group names.
4337
4338The value of this variable (or @code{default-file-name-coding-system})
4339does not necessarily need to be the same value that is determined by
4340@code{gnus-group-name-charset-method-alist} and
4341@code{gnus-group-name-charset-group-alist}.
4342
4343If you want to subscribe to the groups spelled in Chinese but
4344@code{default-file-name-coding-system} is initialized by default to
4345@code{iso-latin-1} for example, that is the most typical case where you
4346have to set @code{nnmail-pathname-coding-system} even if you are an
4347Emacs user. The @code{utf-8} coding system is a good candidate for it.
4348Otherwise, you may change the locale in your system so that
4349@code{default-file-name-coding-system} may be initialized to an
4350appropriate value, instead of specifying this variable.
4351@end table
4352
4353Note that when you copy or move articles from a non-@acronym{ASCII}
4354group to another group, the charset used to encode and decode group
4355names should be the same in both groups. Otherwise the Newsgroups
4356header will be displayed incorrectly in the article buffer.
4357
4358
4009494e
GM
4359@node Misc Group Stuff
4360@section Misc Group Stuff
4361
4362@menu
4363* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
4364* Group Information:: Information and help on groups and Gnus.
4365* Group Timestamp:: Making Gnus keep track of when you last read a group.
4366* File Commands:: Reading and writing the Gnus files.
4367* Sieve Commands:: Managing Sieve scripts.
4368@end menu
4369
4370@table @kbd
4371
4372@item v
4373@kindex v (Group)
4374@cindex keys, reserved for users (Group)
4375The key @kbd{v} is reserved for users. You can bind it to some
4376command or better use it as a prefix key. For example:
4377
4378@lisp
4379(define-key gnus-group-mode-map (kbd "v j d")
4380 (lambda ()
4381 (interactive)
4382 (gnus-group-jump-to-group "nndraft:drafts")))
4383@end lisp
4384
4385On keys reserved for users in Emacs and on keybindings in general
4386@xref{Keymaps, Keymaps, , emacs, The Emacs Editor}.
4387
4388@item ^
4389@kindex ^ (Group)
4390@findex gnus-group-enter-server-mode
4391Enter the server buffer (@code{gnus-group-enter-server-mode}).
4392@xref{Server Buffer}.
4393
4394@item a
4395@kindex a (Group)
4396@findex gnus-group-post-news
4397Start composing a message (a news by default)
4398(@code{gnus-group-post-news}). If given a prefix, post to the group
4399under the point. If the prefix is 1, prompt for a group to post to.
4400Contrary to what the name of this function suggests, the prepared
4401article might be a mail instead of a news, if a mail group is specified
4402with the prefix argument. @xref{Composing Messages}.
4403
4404@item m
4405@kindex m (Group)
4406@findex gnus-group-mail
4407Mail a message somewhere (@code{gnus-group-mail}). If given a prefix,
4408use the posting style of the group under the point. If the prefix is 1,
4409prompt for a group name to find the posting style.
4410@xref{Composing Messages}.
4411
4412@item i
4413@kindex i (Group)
4414@findex gnus-group-news
4415Start composing a news (@code{gnus-group-news}). If given a prefix,
4416post to the group under the point. If the prefix is 1, prompt
4417for group to post to. @xref{Composing Messages}.
4418
4419This function actually prepares a news even when using mail groups.
4420This is useful for ``posting'' messages to mail groups without actually
4421sending them over the network: they're just saved directly to the group
4422in question. The corresponding back end must have a request-post method
4423for this to work though.
4424
01c52d31
MB
4425@item G z
4426@kindex G z (Group)
4427@findex gnus-group-compact-group
4428
4429Compact the group under point (@code{gnus-group-compact-group}).
4430Currently implemented only in nnml (@pxref{Mail Spool}). This removes
4431gaps between article numbers, hence getting a correct total article
4432count.
4433
4009494e
GM
4434@end table
4435
4436Variables for the group buffer:
4437
4438@table @code
4439
4440@item gnus-group-mode-hook
4441@vindex gnus-group-mode-hook
4442is called after the group buffer has been
4443created.
4444
4445@item gnus-group-prepare-hook
4446@vindex gnus-group-prepare-hook
4447is called after the group buffer is
4448generated. It may be used to modify the buffer in some strange,
4449unnatural way.
4450
4451@item gnus-group-prepared-hook
4452@vindex gnus-group-prepare-hook
4453is called as the very last thing after the group buffer has been
4454generated. It may be used to move point around, for instance.
4455
4456@item gnus-permanently-visible-groups
4457@vindex gnus-permanently-visible-groups
4458Groups matching this regexp will always be listed in the group buffer,
4459whether they are empty or not.
4460
4009494e
GM
4461@end table
4462
4463@node Scanning New Messages
4464@subsection Scanning New Messages
4465@cindex new messages
4466@cindex scanning new news
4467
4468@table @kbd
4469
4470@item g
4471@kindex g (Group)
4472@findex gnus-group-get-new-news
4473@c @icon{gnus-group-get-new-news}
4474Check the server(s) for new articles. If the numerical prefix is used,
4475this command will check only groups of level @var{arg} and lower
4476(@code{gnus-group-get-new-news}). If given a non-numerical prefix, this
4477command will force a total re-reading of the active file(s) from the
4478back end(s).
4479
4480@item M-g
4481@kindex M-g (Group)
4482@findex gnus-group-get-new-news-this-group
4483@vindex gnus-goto-next-group-when-activating
4484@c @icon{gnus-group-get-new-news-this-group}
4485Check whether new articles have arrived in the current group
4486(@code{gnus-group-get-new-news-this-group}).
4487@code{gnus-goto-next-group-when-activating} says whether this command is
4488to move point to the next group or not. It is @code{t} by default.
4489
4490@findex gnus-activate-all-groups
4491@cindex activating groups
4492@item C-c M-g
4493@kindex C-c M-g (Group)
4494Activate absolutely all groups (@code{gnus-activate-all-groups}).
4495
4496@item R
4497@kindex R (Group)
4498@cindex restarting
4499@findex gnus-group-restart
4500Restart Gnus (@code{gnus-group-restart}). This saves the @file{.newsrc}
4501file(s), closes the connection to all servers, clears up all run-time
4502Gnus variables, and then starts Gnus all over again.
4503
4504@end table
4505
4506@vindex gnus-get-new-news-hook
4507@code{gnus-get-new-news-hook} is run just before checking for new news.
4508
4509@vindex gnus-after-getting-new-news-hook
4510@code{gnus-after-getting-new-news-hook} is run after checking for new
4511news.
4512
4513
4514@node Group Information
4515@subsection Group Information
4516@cindex group information
4517@cindex information on groups
4518
4519@table @kbd
4520
4521
4522@item H f
4523@kindex H f (Group)
4524@findex gnus-group-fetch-faq
4525@vindex gnus-group-faq-directory
4526@cindex FAQ
4527@cindex ange-ftp
4528Try to fetch the @acronym{FAQ} for the current group
4529(@code{gnus-group-fetch-faq}). Gnus will try to get the @acronym{FAQ}
4530from @code{gnus-group-faq-directory}, which is usually a directory on
4531a remote machine. This variable can also be a list of directories.
4532In that case, giving a prefix to this command will allow you to choose
4533between the various sites. @code{ange-ftp} (or @code{efs}) will be
4534used for fetching the file.
4535
4536If fetching from the first site is unsuccessful, Gnus will attempt to go
4537through @code{gnus-group-faq-directory} and try to open them one by one.
4538
4539@item H c
4540@kindex H c (Group)
4541@findex gnus-group-fetch-charter
4542@vindex gnus-group-charter-alist
4543@cindex charter
4544Try to open the charter for the current group in a web browser
4545(@code{gnus-group-fetch-charter}). Query for a group if given a
4546prefix argument.
4547
4548Gnus will use @code{gnus-group-charter-alist} to find the location of
4549the charter. If no location is known, Gnus will fetch the control
4550messages for the group, which in some cases includes the charter.
4551
4552@item H C
4553@kindex H C (Group)
4554@findex gnus-group-fetch-control
4555@vindex gnus-group-fetch-control-use-browse-url
4556@cindex control message
4557Fetch the control messages for the group from the archive at
4558@code{ftp.isc.org} (@code{gnus-group-fetch-control}). Query for a
4559group if given a prefix argument.
4560
4561If @code{gnus-group-fetch-control-use-browse-url} is non-@code{nil},
4562Gnus will open the control messages in a browser using
4563@code{browse-url}. Otherwise they are fetched using @code{ange-ftp}
4564and displayed in an ephemeral group.
4565
4566Note that the control messages are compressed. To use this command
4567you need to turn on @code{auto-compression-mode} (@pxref{Compressed
4568Files, ,Compressed Files, emacs, The Emacs Manual}).
4569
4570@item H d
4571@itemx C-c C-d
4572@c @icon{gnus-group-describe-group}
4573@kindex H d (Group)
4574@kindex C-c C-d (Group)
4575@cindex describing groups
4576@cindex group description
4577@findex gnus-group-describe-group
4578Describe the current group (@code{gnus-group-describe-group}). If given
4579a prefix, force Gnus to re-read the description from the server.
4580
4581@item M-d
4582@kindex M-d (Group)
4583@findex gnus-group-describe-all-groups
4584Describe all groups (@code{gnus-group-describe-all-groups}). If given a
4585prefix, force Gnus to re-read the description file from the server.
4586
4587@item H v
4588@itemx V
4589@kindex V (Group)
4590@kindex H v (Group)
4591@cindex version
4592@findex gnus-version
4593Display current Gnus version numbers (@code{gnus-version}).
4594
4595@item ?
4596@kindex ? (Group)
4597@findex gnus-group-describe-briefly
4598Give a very short help message (@code{gnus-group-describe-briefly}).
4599
4600@item C-c C-i
4601@kindex C-c C-i (Group)
4602@cindex info
4603@cindex manual
4604@findex gnus-info-find-node
4605Go to the Gnus info node (@code{gnus-info-find-node}).
4606@end table
4607
4608
4609@node Group Timestamp
4610@subsection Group Timestamp
4611@cindex timestamps
4612@cindex group timestamps
4613
4614It can be convenient to let Gnus keep track of when you last read a
4615group. To set the ball rolling, you should add
4616@code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
4617
4618@lisp
4619(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
4620@end lisp
4621
4622After doing this, each time you enter a group, it'll be recorded.
4623
4624This information can be displayed in various ways---the easiest is to
4625use the @samp{%d} spec in the group line format:
4626
4627@lisp
4628(setq gnus-group-line-format
4629 "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
4630@end lisp
4631
4632This will result in lines looking like:
4633
4634@example
4635* 0: mail.ding 19961002T012943
4636 0: custom 19961002T012713
4637@end example
4638
4639As you can see, the date is displayed in compact ISO 8601 format. This
4640may be a bit too much, so to just display the date, you could say
4641something like:
4642
4643@lisp
4644(setq gnus-group-line-format
4645 "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
4646@end lisp
4647
4648If you would like greater control of the time format, you can use a
4649user-defined format spec. Something like the following should do the
4650trick:
4651
4652@lisp
4653(setq gnus-group-line-format
4654 "%M\%S\%p\%P\%5y: %(%-40,40g%) %ud\n")
4655(defun gnus-user-format-function-d (headers)
4656 (let ((time (gnus-group-timestamp gnus-tmp-group)))
4657 (if time
4658 (format-time-string "%b %d %H:%M" time)
4659 "")))
4660@end lisp
4661
4662
4663@node File Commands
4664@subsection File Commands
4665@cindex file commands
4666
4667@table @kbd
4668
4669@item r
4670@kindex r (Group)
4671@findex gnus-group-read-init-file
4672@vindex gnus-init-file
4673@cindex reading init file
4674Re-read the init file (@code{gnus-init-file}, which defaults to
4675@file{~/.gnus.el}) (@code{gnus-group-read-init-file}).
4676
4677@item s
4678@kindex s (Group)
4679@findex gnus-group-save-newsrc
4680@cindex saving .newsrc
4681Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
4682(@code{gnus-group-save-newsrc}). If given a prefix, force saving the
4683file(s) whether Gnus thinks it is necessary or not.
4684
4685@c @item Z
4686@c @kindex Z (Group)
4687@c @findex gnus-group-clear-dribble
4688@c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
4689
4690@end table
4691
4692
4693@node Sieve Commands
4694@subsection Sieve Commands
4695@cindex group sieve commands
4696
4697Sieve is a server-side mail filtering language. In Gnus you can use
4698the @code{sieve} group parameter (@pxref{Group Parameters}) to specify
4699sieve rules that should apply to each group. Gnus provides two
4700commands to translate all these group parameters into a proper Sieve
4701script that can be transfered to the server somehow.
4702
4703@vindex gnus-sieve-file
4704@vindex gnus-sieve-region-start
4705@vindex gnus-sieve-region-end
4706The generated Sieve script is placed in @code{gnus-sieve-file} (by
4707default @file{~/.sieve}). The Sieve code that Gnus generate is placed
4708between two delimiters, @code{gnus-sieve-region-start} and
4709@code{gnus-sieve-region-end}, so you may write additional Sieve code
4710outside these delimiters that will not be removed the next time you
4711regenerate the Sieve script.
4712
4713@vindex gnus-sieve-crosspost
4714The variable @code{gnus-sieve-crosspost} controls how the Sieve script
4715is generated. If it is non-@code{nil} (the default) articles is
4716placed in all groups that have matching rules, otherwise the article
4717is only placed in the group with the first matching rule. For
4718example, the group parameter @samp{(sieve address "sender"
4719"owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
4720code if @code{gnus-sieve-crosspost} is @code{nil}. (When
4721@code{gnus-sieve-crosspost} is non-@code{nil}, it looks the same
4722except that the line containing the call to @code{stop} is removed.)
4723
4724@example
4725if address "sender" "owner-ding@@hpc.uh.edu" @{
4726 fileinto "INBOX.ding";
4727 stop;
4728@}
4729@end example
4730
4731@xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}.
4732
4733@table @kbd
4734
4735@item D g
4736@kindex D g (Group)
4737@findex gnus-sieve-generate
4738@vindex gnus-sieve-file
4739@cindex generating sieve script
4740Regenerate a Sieve script from the @code{sieve} group parameters and
4741put you into the @code{gnus-sieve-file} without saving it.
4742
4743@item D u
4744@kindex D u (Group)
4745@findex gnus-sieve-update
4746@vindex gnus-sieve-file
4747@cindex updating sieve script
4748Regenerates the Gnus managed part of @code{gnus-sieve-file} using the
4749@code{sieve} group parameters, save the file and upload it to the
4750server using the @code{sieveshell} program.
4751
4752@end table
4753
4754
4755@node Summary Buffer
4756@chapter Summary Buffer
4757@cindex summary buffer
4758
4759A line for each article is displayed in the summary buffer. You can
4760move around, read articles, post articles and reply to articles.
4761
4762The most common way to a summary buffer is to select a group from the
4763group buffer (@pxref{Selecting a Group}).
4764
4765You can have as many summary buffers open as you wish.
4766
4767You can customize the Summary Mode tool bar, see @kbd{M-x
4768customize-apropos RET gnus-summary-tool-bar}. This feature is only
4769available in Emacs.
4770
4771@kindex v (Summary)
4772@cindex keys, reserved for users (Summary)
4773The key @kbd{v} is reserved for users. You can bind it to some
4774command or better use it as a prefix key. For example:
4775@lisp
4776(define-key gnus-summary-mode-map (kbd "v -") "LrS") ;; lower subthread
4777@end lisp
4778
4779@menu
4780* Summary Buffer Format:: Deciding how the summary buffer is to look.
4781* Summary Maneuvering:: Moving around the summary buffer.
4782* Choosing Articles:: Reading articles.
4783* Paging the Article:: Scrolling the current article.
4784* Reply Followup and Post:: Posting articles.
4785* Delayed Articles:: Send articles at a later time.
4786* Marking Articles:: Marking articles as read, expirable, etc.
4787* Limiting:: You can limit the summary buffer.
4788* Threading:: How threads are made.
4789* Sorting the Summary Buffer:: How articles and threads are sorted.
4790* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
4791* Article Caching:: You may store articles in a cache.
4792* Persistent Articles:: Making articles expiry-resistant.
01c52d31 4793* Sticky Articles:: Article buffers that are not reused.
4009494e
GM
4794* Article Backlog:: Having already read articles hang around.
4795* Saving Articles:: Ways of customizing article saving.
4796* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
4797* Article Treatment:: The article buffer can be mangled at will.
4798* MIME Commands:: Doing MIMEy things with the articles.
4799* Charsets:: Character set issues.
4800* Article Commands:: Doing various things with the article buffer.
4801* Summary Sorting:: Sorting the summary buffer in various ways.
4802* Finding the Parent:: No child support? Get the parent.
4803* Alternative Approaches:: Reading using non-default summaries.
4804* Tree Display:: A more visual display of threads.
4805* Mail Group Commands:: Some commands can only be used in mail groups.
4806* Various Summary Stuff:: What didn't fit anywhere else.
4807* Exiting the Summary Buffer:: Returning to the Group buffer,
4808 or reselecting the current group.
4809* Crosspost Handling:: How crossposted articles are dealt with.
4810* Duplicate Suppression:: An alternative when crosspost handling fails.
4811* Security:: Decrypt and Verify.
4812* Mailing List:: Mailing list minor mode.
4813@end menu
4814
4815
4816@node Summary Buffer Format
4817@section Summary Buffer Format
4818@cindex summary buffer format
4819
4820@iftex
4821@iflatex
4822\gnusfigure{The Summary Buffer}{180}{
4823\put(0,0){\epsfig{figure=ps/summary,width=7.5cm}}
4824\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-article,width=7.5cm}}}
4825}
4826@end iflatex
4827@end iftex
4828
4829@menu
4830* Summary Buffer Lines:: You can specify how summary lines should look.
4831* To From Newsgroups:: How to not display your own name.
4832* Summary Buffer Mode Line:: You can say how the mode line should look.
4833* Summary Highlighting:: Making the summary buffer all pretty and nice.
4834@end menu
4835
4836@findex mail-extract-address-components
4837@findex gnus-extract-address-components
4838@vindex gnus-extract-address-components
4839Gnus will use the value of the @code{gnus-extract-address-components}
4840variable as a function for getting the name and address parts of a
4841@code{From} header. Two pre-defined functions exist:
4842@code{gnus-extract-address-components}, which is the default, quite
4843fast, and too simplistic solution; and
4844@code{mail-extract-address-components}, which works very nicely, but is
4845slower. The default function will return the wrong answer in 5% of the
4846cases. If this is unacceptable to you, use the other function instead:
4847
4848@lisp
4849(setq gnus-extract-address-components
4850 'mail-extract-address-components)
4851@end lisp
4852
4853@vindex gnus-summary-same-subject
4854@code{gnus-summary-same-subject} is a string indicating that the current
4855article has the same subject as the previous. This string will be used
4856with those specs that require it. The default is @code{""}.
4857
4858
4859@node Summary Buffer Lines
4860@subsection Summary Buffer Lines
4861
4862@vindex gnus-summary-line-format
4863You can change the format of the lines in the summary buffer by changing
4864the @code{gnus-summary-line-format} variable. It works along the same
4865lines as a normal @code{format} string, with some extensions
4866(@pxref{Formatting Variables}).
4867
4868There should always be a colon or a point position marker on the line;
4869the cursor always moves to the point position marker or the colon after
4870performing an operation. (Of course, Gnus wouldn't be Gnus if it wasn't
4871possible to change this. Just write a new function
4872@code{gnus-goto-colon} which does whatever you like with the cursor.)
4873@xref{Positioning Point}.
4874
4875The default string is @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n}.
4876
4877The following format specification characters and extended format
4878specification(s) are understood:
4879
4880@table @samp
4881@item N
4882Article number.
4883@item S
4884Subject string. List identifiers stripped,
4885@code{gnus-list-identifiers}. @xref{Article Hiding}.
4886@item s
4887Subject if the article is the root of the thread or the previous article
4888had a different subject, @code{gnus-summary-same-subject} otherwise.
4889(@code{gnus-summary-same-subject} defaults to @code{""}.)
4890@item F
4891Full @code{From} header.
4892@item n
4893The name (from the @code{From} header).
4894@item f
4895The name, @code{To} header or the @code{Newsgroups} header (@pxref{To
4896From Newsgroups}).
4897@item a
4898The name (from the @code{From} header). This differs from the @code{n}
4899spec in that it uses the function designated by the
4900@code{gnus-extract-address-components} variable, which is slower, but
4901may be more thorough.
4902@item A
4903The address (from the @code{From} header). This works the same way as
4904the @code{a} spec.
4905@item L
4906Number of lines in the article.
4907@item c
4908Number of characters in the article. This specifier is not supported
4909in some methods (like nnfolder).
4910@item k
4911Pretty-printed version of the number of characters in the article;
4912for example, @samp{1.2k} or @samp{0.4M}.
4913@item I
4914Indentation based on thread level (@pxref{Customizing Threading}).
4915@item B
4916A complex trn-style thread tree, showing response-connecting trace
4917lines. A thread could be drawn like this:
4918
4919@example
4920>
4921+->
4922| +->
4923| | \->
4924| | \->
4925| \->
4926+->
4927\->
4928@end example
4929
4930You can customize the appearance with the following options. Note
4931that it is possible to make the thread display look really neat by
4932replacing the default @acronym{ASCII} characters with graphic
4933line-drawing glyphs.
4934@table @code
4935@item gnus-sum-thread-tree-root
4936@vindex gnus-sum-thread-tree-root
4937Used for the root of a thread. If @code{nil}, use subject
4938instead. The default is @samp{> }.
4939
4940@item gnus-sum-thread-tree-false-root
4941@vindex gnus-sum-thread-tree-false-root
4942Used for the false root of a thread (@pxref{Loose Threads}). If
4943@code{nil}, use subject instead. The default is @samp{> }.
4944
4945@item gnus-sum-thread-tree-single-indent
4946@vindex gnus-sum-thread-tree-single-indent
4947Used for a thread with just one message. If @code{nil}, use subject
4948instead. The default is @samp{}.
4949
4950@item gnus-sum-thread-tree-vertical
4951@vindex gnus-sum-thread-tree-vertical
4952Used for drawing a vertical line. The default is @samp{| }.
4953
4954@item gnus-sum-thread-tree-indent
4955@vindex gnus-sum-thread-tree-indent
4956Used for indenting. The default is @samp{ }.
4957
4958@item gnus-sum-thread-tree-leaf-with-other
4959@vindex gnus-sum-thread-tree-leaf-with-other
4960Used for a leaf with brothers. The default is @samp{+-> }.
4961
4962@item gnus-sum-thread-tree-single-leaf
4963@vindex gnus-sum-thread-tree-single-leaf
4964Used for a leaf without brothers. The default is @samp{\-> }
4965
4966@end table
4967
4968@item T
4969Nothing if the article is a root and lots of spaces if it isn't (it
4970pushes everything after it off the screen).
4971@item [
4972Opening bracket, which is normally @samp{[}, but can also be @samp{<}
4973for adopted articles (@pxref{Customizing Threading}).
4974@item ]
4975Closing bracket, which is normally @samp{]}, but can also be @samp{>}
4976for adopted articles.
4977@item >
4978One space for each thread level.
4979@item <
4980Twenty minus thread level spaces.
4981@item U
4982Unread. @xref{Read Articles}.
4983
4984@item R
4985This misleadingly named specifier is the @dfn{secondary mark}. This
4986mark will say whether the article has been replied to, has been cached,
4987or has been saved. @xref{Other Marks}.
4988
4989@item i
4990Score as a number (@pxref{Scoring}).
4991@item z
4992@vindex gnus-summary-zcore-fuzz
4993Zcore, @samp{+} if above the default level and @samp{-} if below the
4994default level. If the difference between
4995@code{gnus-summary-default-score} and the score is less than
4996@code{gnus-summary-zcore-fuzz}, this spec will not be used.
4997@item V
4998Total thread score.
4999@item x
5000@code{Xref}.
5001@item D
5002@code{Date}.
5003@item d
5004The @code{Date} in @code{DD-MMM} format.
5005@item o
5006The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
5007@item M
5008@code{Message-ID}.
5009@item r
5010@code{References}.
5011@item t
5012Number of articles in the current sub-thread. Using this spec will slow
5013down summary buffer generation somewhat.
5014@item e
5015An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
5016article has any children.
5017@item P
5018The line number.
5019@item O
5020Download mark.
5021@item *
5022Desired cursor position (instead of after first colon).
5023@item &user-date;
5024Age sensitive date format. Various date format is defined in
5025@code{gnus-user-date-format-alist}.
5026@item u
5027User defined specifier. The next character in the format string should
5028be a letter. Gnus will call the function
5029@code{gnus-user-format-function-@var{x}}, where @var{x} is the letter
5030following @samp{%u}. The function will be passed the current header as
5031argument. The function should return a string, which will be inserted
5032into the summary just like information from any other summary specifier.
5033@end table
5034
5035Text between @samp{%(} and @samp{%)} will be highlighted with
5036@code{gnus-mouse-face} when the mouse point is placed inside the area.
5037There can only be one such area.
5038
5039The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
5040have to be handled with care. For reasons of efficiency, Gnus will
5041compute what column these characters will end up in, and ``hard-code''
5042that. This means that it is invalid to have these specs after a
5043variable-length spec. Well, you might not be arrested, but your summary
5044buffer will look strange, which is bad enough.
5045
5046The smart choice is to have these specs as far to the left as possible.
5047(Isn't that the case with everything, though? But I digress.)
5048
5049This restriction may disappear in later versions of Gnus.
5050
5051
5052@node To From Newsgroups
5053@subsection To From Newsgroups
5054@cindex To
5055@cindex Newsgroups
5056
5057In some groups (particularly in archive groups), the @code{From} header
5058isn't very interesting, since all the articles there are written by
5059you. To display the information in the @code{To} or @code{Newsgroups}
5060headers instead, you need to decide three things: What information to
5061gather; where to display it; and when to display it.
5062
5063@enumerate
5064@item
5065@vindex gnus-extra-headers
5066The reading of extra header information is controlled by the
5067@code{gnus-extra-headers}. This is a list of header symbols. For
5068instance:
5069
5070@lisp
5071(setq gnus-extra-headers
5072 '(To Newsgroups X-Newsreader))
5073@end lisp
5074
5075This will result in Gnus trying to obtain these three headers, and
5076storing it in header structures for later easy retrieval.
5077
5078@item
5079@findex gnus-extra-header
5080The value of these extra headers can be accessed via the
5081@code{gnus-extra-header} function. Here's a format line spec that will
5082access the @code{X-Newsreader} header:
5083
5084@example
5085"%~(form (gnus-extra-header 'X-Newsreader))@@"
5086@end example
5087
5088@item
5089@vindex gnus-ignored-from-addresses
5090The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
5091summary line spec returns the @code{To}, @code{Newsreader} or
5092@code{From} header. If this regexp matches the contents of the
5093@code{From} header, the value of the @code{To} or @code{Newsreader}
5094headers are used instead.
5095
01c52d31
MB
5096To distinguish regular articles from those where the @code{From} field
5097has been swapped, a string is prefixed to the @code{To} or
5098@code{Newsgroups} header in the summary line. By default the string is
5099@samp{-> } for @code{To} and @samp{=> } for @code{Newsgroups}, you can
5100customize these strings with @code{gnus-summary-to-prefix} and
5101@code{gnus-summary-newsgroup-prefix}.
5102
4009494e
GM
5103@end enumerate
5104
5105@vindex nnmail-extra-headers
5106A related variable is @code{nnmail-extra-headers}, which controls when
5107to include extra headers when generating overview (@acronym{NOV}) files.
5108If you have old overview files, you should regenerate them after
5109changing this variable, by entering the server buffer using @kbd{^},
5110and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause
5111regeneration.
5112
5113@vindex gnus-summary-line-format
5114You also have to instruct Gnus to display the data by changing the
5115@code{%n} spec to the @code{%f} spec in the
5116@code{gnus-summary-line-format} variable.
5117
5118In summary, you'd typically put something like the following in
5119@file{~/.gnus.el}:
5120
5121@lisp
5122(setq gnus-extra-headers
5123 '(To Newsgroups))
5124(setq nnmail-extra-headers gnus-extra-headers)
5125(setq gnus-summary-line-format
5126 "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n")
5127(setq gnus-ignored-from-addresses
5128 "Your Name Here")
5129@end lisp
5130
5131(The values listed above are the default values in Gnus. Alter them
5132to fit your needs.)
5133
5134A note for news server administrators, or for users who wish to try to
5135convince their news server administrator to provide some additional
5136support:
5137
5138The above is mostly useful for mail groups, where you have control over
5139the @acronym{NOV} files that are created. However, if you can persuade your
5140nntp admin to add (in the usual implementation, notably INN):
5141
5142@example
5143Newsgroups:full
5144@end example
5145
5146to the end of her @file{overview.fmt} file, then you can use that just
5147as you would the extra headers from the mail groups.
5148
5149
5150@node Summary Buffer Mode Line
5151@subsection Summary Buffer Mode Line
5152
5153@vindex gnus-summary-mode-line-format
5154You can also change the format of the summary mode bar (@pxref{Mode Line
5155Formatting}). Set @code{gnus-summary-mode-line-format} to whatever you
5156like. The default is @samp{Gnus: %%b [%A] %Z}.
5157
5158Here are the elements you can play with:
5159
5160@table @samp
5161@item G
5162Group name.
5163@item p
5164Unprefixed group name.
5165@item A
5166Current article number.
5167@item z
5168Current article score.
5169@item V
5170Gnus version.
5171@item U
5172Number of unread articles in this group.
5173@item e
5174Number of unread articles in this group that aren't displayed in the
5175summary buffer.
5176@item Z
5177A string with the number of unread and unselected articles represented
5178either as @samp{<%U(+%e) more>} if there are both unread and unselected
5179articles, and just as @samp{<%U more>} if there are just unread articles
5180and no unselected ones.
5181@item g
5182Shortish group name. For instance, @samp{rec.arts.anime} will be
5183shortened to @samp{r.a.anime}.
5184@item S
5185Subject of the current article.
5186@item u
5187User-defined spec (@pxref{User-Defined Specs}).
5188@item s
5189Name of the current score file (@pxref{Scoring}).
5190@item d
5191Number of dormant articles (@pxref{Unread Articles}).
5192@item t
5193Number of ticked articles (@pxref{Unread Articles}).
5194@item r
5195Number of articles that have been marked as read in this session.
5196@item E
5197Number of articles expunged by the score files.
5198@end table
5199
5200
5201@node Summary Highlighting
5202@subsection Summary Highlighting
5203
5204@table @code
5205
5206@item gnus-visual-mark-article-hook
5207@vindex gnus-visual-mark-article-hook
5208This hook is run after selecting an article. It is meant to be used for
5209highlighting the article in some way. It is not run if
5210@code{gnus-visual} is @code{nil}.
5211
5212@item gnus-summary-update-hook
5213@vindex gnus-summary-update-hook
5214This hook is called when a summary line is changed. It is not run if
5215@code{gnus-visual} is @code{nil}.
5216
5217@item gnus-summary-selected-face
5218@vindex gnus-summary-selected-face
5219This is the face (or @dfn{font} as some people call it) used to
5220highlight the current article in the summary buffer.
5221
5222@item gnus-summary-highlight
5223@vindex gnus-summary-highlight
5224Summary lines are highlighted according to this variable, which is a
5225list where the elements are of the format @code{(@var{form}
5226. @var{face})}. If you would, for instance, like ticked articles to be
5227italic and high-scored articles to be bold, you could set this variable
5228to something like
5229@lisp
5230(((eq mark gnus-ticked-mark) . italic)
5231 ((> score default) . bold))
5232@end lisp
5233As you may have guessed, if @var{form} returns a non-@code{nil} value,
5234@var{face} will be applied to the line.
5235@end table
5236
5237
5238@node Summary Maneuvering
5239@section Summary Maneuvering
5240@cindex summary movement
5241
5242All the straight movement commands understand the numeric prefix and
5243behave pretty much as you'd expect.
5244
5245None of these commands select articles.
5246
5247@table @kbd
5248@item G M-n
5249@itemx M-n
5250@kindex M-n (Summary)
5251@kindex G M-n (Summary)
5252@findex gnus-summary-next-unread-subject
5253Go to the next summary line of an unread article
5254(@code{gnus-summary-next-unread-subject}).
5255
5256@item G M-p
5257@itemx M-p
5258@kindex M-p (Summary)
5259@kindex G M-p (Summary)
5260@findex gnus-summary-prev-unread-subject
5261Go to the previous summary line of an unread article
5262(@code{gnus-summary-prev-unread-subject}).
5263
5264@item G g
5265@kindex G g (Summary)
5266@findex gnus-summary-goto-subject
5267Ask for an article number and then go to the summary line of that article
5268without displaying the article (@code{gnus-summary-goto-subject}).
5269@end table
5270
5271If Gnus asks you to press a key to confirm going to the next group, you
5272can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
5273buffer, searching for the next group to read without actually returning
5274to the group buffer.
5275
5276Variables related to summary movement:
5277
5278@table @code
5279
5280@vindex gnus-auto-select-next
5281@item gnus-auto-select-next
5282If you issue one of the movement commands (like @kbd{n}) and there are
5283no more unread articles after the current one, Gnus will offer to go to
5284the next group. If this variable is @code{t} and the next group is
5285empty, Gnus will exit summary mode and return to the group buffer. If
5286this variable is neither @code{t} nor @code{nil}, Gnus will select the
5287next group with unread articles. As a special case, if this variable
5288is @code{quietly}, Gnus will select the next group without asking for
5289confirmation. If this variable is @code{almost-quietly}, the same
5290will happen only if you are located on the last article in the group.
5291Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
5292command will go to the next group without confirmation. Also
5293@pxref{Group Levels}.
5294
5295@item gnus-auto-select-same
5296@vindex gnus-auto-select-same
5297If non-@code{nil}, all the movement commands will try to go to the next
5298article with the same subject as the current. (@dfn{Same} here might
5299mean @dfn{roughly equal}. See @code{gnus-summary-gather-subject-limit}
5300for details (@pxref{Customizing Threading}).) If there are no more
5301articles with the same subject, go to the first unread article.
5302
5303This variable is not particularly useful if you use a threaded display.
5304
5305@item gnus-summary-check-current
5306@vindex gnus-summary-check-current
5307If non-@code{nil}, all the ``unread'' movement commands will not proceed
5308to the next (or previous) article if the current article is unread.
5309Instead, they will choose the current article.
5310
5311@item gnus-auto-center-summary
5312@vindex gnus-auto-center-summary
5313If non-@code{nil}, Gnus will keep the point in the summary buffer
5314centered at all times. This makes things quite tidy, but if you have a
5315slow network connection, or simply do not like this un-Emacsism, you can
5316set this variable to @code{nil} to get the normal Emacs scrolling
5317action. This will also inhibit horizontal re-centering of the summary
5318buffer, which might make it more inconvenient to read extremely long
5319threads.
5320
5321This variable can also be a number. In that case, center the window at
5322the given number of lines from the top.
5323
5324@end table
5325
5326
5327@node Choosing Articles
5328@section Choosing Articles
5329@cindex selecting articles
5330
5331@menu
5332* Choosing Commands:: Commands for choosing articles.
5333* Choosing Variables:: Variables that influence these commands.
5334@end menu
5335
5336
5337@node Choosing Commands
5338@subsection Choosing Commands
5339
5340None of the following movement commands understand the numeric prefix,
5341and they all select and display an article.
5342
5343If you want to fetch new articles or redisplay the group, see
5344@ref{Exiting the Summary Buffer}.
5345
5346@table @kbd
5347@item SPACE
5348@kindex SPACE (Summary)
5349@findex gnus-summary-next-page
5350Select the current article, or, if that one's read already, the next
5351unread article (@code{gnus-summary-next-page}).
5352
5353If you have an article window open already and you press @kbd{SPACE}
5354again, the article will be scrolled. This lets you conveniently
5355@kbd{SPACE} through an entire newsgroup. @xref{Paging the Article}.
5356
5357@item G n
5358@itemx n
5359@kindex n (Summary)
5360@kindex G n (Summary)
5361@findex gnus-summary-next-unread-article
5362@c @icon{gnus-summary-next-unread}
5363Go to next unread article (@code{gnus-summary-next-unread-article}).
5364
5365@item G p
5366@itemx p
5367@kindex p (Summary)
5368@findex gnus-summary-prev-unread-article
5369@c @icon{gnus-summary-prev-unread}
5370Go to previous unread article (@code{gnus-summary-prev-unread-article}).
5371
5372@item G N
5373@itemx N
5374@kindex N (Summary)
5375@kindex G N (Summary)
5376@findex gnus-summary-next-article
5377Go to the next article (@code{gnus-summary-next-article}).
5378
5379@item G P
5380@itemx P
5381@kindex P (Summary)
5382@kindex G P (Summary)
5383@findex gnus-summary-prev-article
5384Go to the previous article (@code{gnus-summary-prev-article}).
5385
5386@item G C-n
5387@kindex G C-n (Summary)
5388@findex gnus-summary-next-same-subject
5389Go to the next article with the same subject
5390(@code{gnus-summary-next-same-subject}).
5391
5392@item G C-p
5393@kindex G C-p (Summary)
5394@findex gnus-summary-prev-same-subject
5395Go to the previous article with the same subject
5396(@code{gnus-summary-prev-same-subject}).
5397
5398@item G f
5399@itemx .
5400@kindex G f (Summary)
5401@kindex . (Summary)
5402@findex gnus-summary-first-unread-article
5403Go to the first unread article
5404(@code{gnus-summary-first-unread-article}).
5405
5406@item G b
5407@itemx ,
5408@kindex G b (Summary)
5409@kindex , (Summary)
5410@findex gnus-summary-best-unread-article
5411Go to the unread article with the highest score
5412(@code{gnus-summary-best-unread-article}). If given a prefix argument,
5413go to the first unread article that has a score over the default score.
5414
5415@item G l
5416@itemx l
5417@kindex l (Summary)
5418@kindex G l (Summary)
5419@findex gnus-summary-goto-last-article
5420Go to the previous article read (@code{gnus-summary-goto-last-article}).
5421
5422@item G o
5423@kindex G o (Summary)
5424@findex gnus-summary-pop-article
5425@cindex history
5426@cindex article history
5427Pop an article off the summary history and go to this article
5428(@code{gnus-summary-pop-article}). This command differs from the
5429command above in that you can pop as many previous articles off the
5430history as you like, while @kbd{l} toggles the two last read articles.
5431For a somewhat related issue (if you use these commands a lot),
5432@pxref{Article Backlog}.
5433
5434@item G j
5435@itemx j
5436@kindex j (Summary)
5437@kindex G j (Summary)
5438@findex gnus-summary-goto-article
5439Ask for an article number or @code{Message-ID}, and then go to that
5440article (@code{gnus-summary-goto-article}).
5441
5442@end table
5443
5444
5445@node Choosing Variables
5446@subsection Choosing Variables
5447
5448Some variables relevant for moving and selecting articles:
5449
5450@table @code
5451@item gnus-auto-extend-newsgroup
5452@vindex gnus-auto-extend-newsgroup
5453All the movement commands will try to go to the previous (or next)
5454article, even if that article isn't displayed in the Summary buffer if
5455this variable is non-@code{nil}. Gnus will then fetch the article from
5456the server and display it in the article buffer.
5457
5458@item gnus-select-article-hook
5459@vindex gnus-select-article-hook
5460This hook is called whenever an article is selected. The default is
5461@code{nil}. If you would like each article to be saved in the Agent as
5462you read it, putting @code{gnus-agent-fetch-selected-article} on this
5463hook will do so.
5464
5465@item gnus-mark-article-hook
5466@vindex gnus-mark-article-hook
5467@findex gnus-summary-mark-unread-as-read
5468@findex gnus-summary-mark-read-and-unread-as-read
5469@findex gnus-unread-mark
5470This hook is called whenever an article is selected. It is intended to
5471be used for marking articles as read. The default value is
5472@code{gnus-summary-mark-read-and-unread-as-read}, and will change the
5473mark of almost any article you read to @code{gnus-read-mark}. The only
5474articles not affected by this function are ticked, dormant, and
5475expirable articles. If you'd instead like to just have unread articles
5476marked as read, you can use @code{gnus-summary-mark-unread-as-read}
5477instead. It will leave marks like @code{gnus-low-score-mark},
5478@code{gnus-del-mark} (and so on) alone.
5479
5480@end table
5481
5482
5483@node Paging the Article
5484@section Scrolling the Article
5485@cindex article scrolling
5486
5487@table @kbd
5488
5489@item SPACE
5490@kindex SPACE (Summary)
5491@findex gnus-summary-next-page
5492Pressing @kbd{SPACE} will scroll the current article forward one page,
5493or, if you have come to the end of the current article, will choose the
5494next article (@code{gnus-summary-next-page}).
5495
5496@vindex gnus-article-boring-faces
5497@vindex gnus-article-skip-boring
5498If @code{gnus-article-skip-boring} is non-@code{nil} and the rest of
5499the article consists only of citations and signature, then it will be
5500skipped; the next article will be shown instead. You can customize
5501what is considered uninteresting with
5502@code{gnus-article-boring-faces}. You can manually view the article's
5503pages, no matter how boring, using @kbd{C-M-v}.
5504
5505@item DEL
5506@kindex DEL (Summary)
5507@findex gnus-summary-prev-page
5508Scroll the current article back one page (@code{gnus-summary-prev-page}).
5509
5510@item RET
5511@kindex RET (Summary)
5512@findex gnus-summary-scroll-up
5513Scroll the current article one line forward
5514(@code{gnus-summary-scroll-up}).
5515
5516@item M-RET
5517@kindex M-RET (Summary)
5518@findex gnus-summary-scroll-down
5519Scroll the current article one line backward
5520(@code{gnus-summary-scroll-down}).
5521
5522@item A g
5523@itemx g
5524@kindex A g (Summary)
5525@kindex g (Summary)
5526@findex gnus-summary-show-article
5527@vindex gnus-summary-show-article-charset-alist
5528(Re)fetch the current article (@code{gnus-summary-show-article}). If
5529given a prefix, fetch the current article, but don't run any of the
5530article treatment functions. This will give you a ``raw'' article, just
5531the way it came from the server.
5532
5533If given a numerical prefix, you can do semi-manual charset stuff.
5534@kbd{C-u 0 g cn-gb-2312 RET} will decode the message as if it were
5535encoded in the @code{cn-gb-2312} charset. If you have
5536
5537@lisp
5538(setq gnus-summary-show-article-charset-alist
5539 '((1 . cn-gb-2312)
5540 (2 . big5)))
5541@end lisp
5542
5543then you can say @kbd{C-u 1 g} to get the same effect.
5544
5545@item A <
5546@itemx <
5547@kindex < (Summary)
5548@kindex A < (Summary)
5549@findex gnus-summary-beginning-of-article
5550Scroll to the beginning of the article
5551(@code{gnus-summary-beginning-of-article}).
5552
5553@item A >
5554@itemx >
5555@kindex > (Summary)
5556@kindex A > (Summary)
5557@findex gnus-summary-end-of-article
5558Scroll to the end of the article (@code{gnus-summary-end-of-article}).
5559
5560@item A s
5561@itemx s
5562@kindex A s (Summary)
5563@kindex s (Summary)
5564@findex gnus-summary-isearch-article
5565Perform an isearch in the article buffer
5566(@code{gnus-summary-isearch-article}).
5567
5568@item h
5569@kindex h (Summary)
5570@findex gnus-summary-select-article-buffer
5571Select the article buffer (@code{gnus-summary-select-article-buffer}).
5572
5573@end table
5574
5575
5576@node Reply Followup and Post
5577@section Reply, Followup and Post
5578
5579@menu
5580* Summary Mail Commands:: Sending mail.
5581* Summary Post Commands:: Sending news.
5582* Summary Message Commands:: Other Message-related commands.
5583* Canceling and Superseding::
5584@end menu
5585
5586
5587@node Summary Mail Commands
5588@subsection Summary Mail Commands
5589@cindex mail
5590@cindex composing mail
5591
5592Commands for composing a mail message:
5593
5594@table @kbd
5595
5596@item S r
5597@itemx r
5598@kindex S r (Summary)
5599@kindex r (Summary)
5600@findex gnus-summary-reply
5601@c @icon{gnus-summary-mail-reply}
5602@c @icon{gnus-summary-reply}
5603Mail a reply to the author of the current article
5604(@code{gnus-summary-reply}).
5605
5606@item S R
5607@itemx R
5608@kindex R (Summary)
5609@kindex S R (Summary)
5610@findex gnus-summary-reply-with-original
5611@c @icon{gnus-summary-reply-with-original}
5612Mail a reply to the author of the current article and include the
5613original message (@code{gnus-summary-reply-with-original}). This
5614command uses the process/prefix convention.
5615
5616@item S w
5617@kindex S w (Summary)
5618@findex gnus-summary-wide-reply
5619Mail a wide reply to the author of the current article
5620(@code{gnus-summary-wide-reply}). A @dfn{wide reply} is a reply that
5621goes out to all people listed in the @code{To}, @code{From} (or
5622@code{Reply-to}) and @code{Cc} headers. If @code{Mail-Followup-To} is
5623present, that's used instead.
5624
5625@item S W
5626@kindex S W (Summary)
5627@findex gnus-summary-wide-reply-with-original
5628Mail a wide reply to the current article and include the original
5629message (@code{gnus-summary-wide-reply-with-original}). This command uses
5630the process/prefix convention.
5631
5632@item S v
5633@kindex S v (Summary)
5634@findex gnus-summary-very-wide-reply
5635Mail a very wide reply to the author of the current article
5636(@code{gnus-summary-wide-reply}). A @dfn{very wide reply} is a reply
5637that goes out to all people listed in the @code{To}, @code{From} (or
5638@code{Reply-to}) and @code{Cc} headers in all the process/prefixed
5639articles. This command uses the process/prefix convention.
5640
5641@item S V
5642@kindex S V (Summary)
5643@findex gnus-summary-very-wide-reply-with-original
5644Mail a very wide reply to the author of the current article and include the
5645original message (@code{gnus-summary-very-wide-reply-with-original}). This
5646command uses the process/prefix convention.
5647
5648@item S B r
5649@kindex S B r (Summary)
5650@findex gnus-summary-reply-broken-reply-to
5651Mail a reply to the author of the current article but ignore the
5652@code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}).
5653If you need this because a mailing list incorrectly sets a
5654@code{Reply-To} header pointing to the list, you probably want to set
5655the @code{broken-reply-to} group parameter instead, so things will work
5656correctly. @xref{Group Parameters}.
5657
5658@item S B R
5659@kindex S B R (Summary)
5660@findex gnus-summary-reply-broken-reply-to-with-original
5661Mail a reply to the author of the current article and include the
5662original message but ignore the @code{Reply-To} field
5663(@code{gnus-summary-reply-broken-reply-to-with-original}).
5664
5665@item S o m
5666@itemx C-c C-f
5667@kindex S o m (Summary)
5668@kindex C-c C-f (Summary)
5669@findex gnus-summary-mail-forward
5670@c @icon{gnus-summary-mail-forward}
5671Forward the current article to some other person
5672(@code{gnus-summary-mail-forward}). If no prefix is given, the message
5673is forwarded according to the value of (@code{message-forward-as-mime})
5674and (@code{message-forward-show-mml}); if the prefix is 1, decode the
5675message and forward directly inline; if the prefix is 2, forward message
5676as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
5677forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
5678directly inline; otherwise, the message is forwarded as no prefix given
5679but use the flipped value of (@code{message-forward-as-mime}). By
5680default, the message is decoded and forwarded as an rfc822 @acronym{MIME}
5681section.
5682
5683@item S m
5684@itemx m
5685@kindex m (Summary)
5686@kindex S m (Summary)
5687@findex gnus-summary-mail-other-window
5688@c @icon{gnus-summary-mail-originate}
5689Prepare a mail (@code{gnus-summary-mail-other-window}). By default, use
5690the posting style of the current group. If given a prefix, disable that.
5691If the prefix is 1, prompt for a group name to find the posting style.
5692
5693@item S i
5694@itemx i
5695@kindex i (Summary)
5696@kindex S i (Summary)
5697@findex gnus-summary-news-other-window
5698Prepare a news (@code{gnus-summary-news-other-window}). By default,
5699post to the current group. If given a prefix, disable that. If the
5700prefix is 1, prompt for a group to post to.
5701
5702This function actually prepares a news even when using mail groups.
5703This is useful for ``posting'' messages to mail groups without actually
5704sending them over the network: they're just saved directly to the group
5705in question. The corresponding back end must have a request-post method
5706for this to work though.
5707
5708@item S D b
5709@kindex S D b (Summary)
5710@findex gnus-summary-resend-bounced-mail
5711@cindex bouncing mail
5712If you have sent a mail, but the mail was bounced back to you for some
5713reason (wrong address, transient failure), you can use this command to
5714resend that bounced mail (@code{gnus-summary-resend-bounced-mail}). You
5715will be popped into a mail buffer where you can edit the headers before
5716sending the mail off again. If you give a prefix to this command, and
5717the bounced mail is a reply to some other mail, Gnus will try to fetch
5718that mail and display it for easy perusal of its headers. This might
5719very well fail, though.
5720
5721@item S D r
5722@kindex S D r (Summary)
5723@findex gnus-summary-resend-message
5724Not to be confused with the previous command,
5725@code{gnus-summary-resend-message} will prompt you for an address to
5726send the current message off to, and then send it to that place. The
5727headers of the message won't be altered---but lots of headers that say
5728@code{Resent-To}, @code{Resent-From} and so on will be added. This
5729means that you actually send a mail to someone that has a @code{To}
5730header that (probably) points to yourself. This will confuse people.
5731So, natcherly you'll only do that if you're really eVIl.
5732
5733This command is mainly used if you have several accounts and want to
5734ship a mail to a different account of yours. (If you're both
5735@code{root} and @code{postmaster} and get a mail for @code{postmaster}
5736to the @code{root} account, you may want to resend it to
5737@code{postmaster}. Ordnung muss sein!
5738
5739This command understands the process/prefix convention
5740(@pxref{Process/Prefix}).
5741
5742@item S D e
5743@kindex S D e (Summary)
5744@findex gnus-summary-resend-message-edit
5745
5746Like the previous command, but will allow you to edit the message as
5747if it were a new message before resending.
5748
5749@item S O m
5750@kindex S O m (Summary)
5751@findex gnus-uu-digest-mail-forward
5752Digest the current series (@pxref{Decoding Articles}) and forward the
5753result using mail (@code{gnus-uu-digest-mail-forward}). This command
5754uses the process/prefix convention (@pxref{Process/Prefix}).
5755
5756@item S M-c
5757@kindex S M-c (Summary)
5758@findex gnus-summary-mail-crosspost-complaint
5759@cindex crossposting
5760@cindex excessive crossposting
5761Send a complaint about excessive crossposting to the author of the
5762current article (@code{gnus-summary-mail-crosspost-complaint}).
5763
5764@findex gnus-crosspost-complaint
5765This command is provided as a way to fight back against the current
5766crossposting pandemic that's sweeping Usenet. It will compose a reply
5767using the @code{gnus-crosspost-complaint} variable as a preamble. This
5768command understands the process/prefix convention
5769(@pxref{Process/Prefix}) and will prompt you before sending each mail.
5770
5771@end table
5772
5773Also @xref{Header Commands, ,Header Commands, message, The Message
5774Manual}, for more information.
5775
5776
5777@node Summary Post Commands
5778@subsection Summary Post Commands
5779@cindex post
5780@cindex composing news
5781
5782Commands for posting a news article:
5783
5784@table @kbd
5785@item S p
5786@itemx a
5787@kindex a (Summary)
5788@kindex S p (Summary)
5789@findex gnus-summary-post-news
5790@c @icon{gnus-summary-post-news}
5791Prepare for posting an article (@code{gnus-summary-post-news}). By
5792default, post to the current group. If given a prefix, disable that.
5793If the prefix is 1, prompt for another group instead.
5794
5795@item S f
5796@itemx f
5797@kindex f (Summary)
5798@kindex S f (Summary)
5799@findex gnus-summary-followup
5800@c @icon{gnus-summary-followup}
5801Post a followup to the current article (@code{gnus-summary-followup}).
5802
5803@item S F
5804@itemx F
5805@kindex S F (Summary)
5806@kindex F (Summary)
5807@c @icon{gnus-summary-followup-with-original}
5808@findex gnus-summary-followup-with-original
5809Post a followup to the current article and include the original message
5810(@code{gnus-summary-followup-with-original}). This command uses the
5811process/prefix convention.
5812
5813@item S n
5814@kindex S n (Summary)
5815@findex gnus-summary-followup-to-mail
5816Post a followup to the current article via news, even if you got the
5817message through mail (@code{gnus-summary-followup-to-mail}).
5818
5819@item S N
5820@kindex S N (Summary)
5821@findex gnus-summary-followup-to-mail-with-original
5822Post a followup to the current article via news, even if you got the
5823message through mail and include the original message
5824(@code{gnus-summary-followup-to-mail-with-original}). This command uses
5825the process/prefix convention.
5826
5827@item S o p
5828@kindex S o p (Summary)
5829@findex gnus-summary-post-forward
5830Forward the current article to a newsgroup
5831(@code{gnus-summary-post-forward}).
5832 If no prefix is given, the message is forwarded according to the value
5833of (@code{message-forward-as-mime}) and
5834(@code{message-forward-show-mml}); if the prefix is 1, decode the
5835message and forward directly inline; if the prefix is 2, forward message
5836as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
5837forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
5838directly inline; otherwise, the message is forwarded as no prefix given
5839but use the flipped value of (@code{message-forward-as-mime}). By
5840default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section.
5841
5842@item S O p
5843@kindex S O p (Summary)
5844@findex gnus-uu-digest-post-forward
5845@cindex digests
5846@cindex making digests
5847Digest the current series and forward the result to a newsgroup
5848(@code{gnus-uu-digest-post-forward}). This command uses the
5849process/prefix convention.
5850
5851@item S u
5852@kindex S u (Summary)
5853@findex gnus-uu-post-news
5854@c @icon{gnus-uu-post-news}
5855Uuencode a file, split it into parts, and post it as a series
5856(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
5857@end table
5858
5859Also @xref{Header Commands, ,Header Commands, message, The Message
5860Manual}, for more information.
5861
5862
5863@node Summary Message Commands
5864@subsection Summary Message Commands
5865
5866@table @kbd
5867@item S y
5868@kindex S y (Summary)
5869@findex gnus-summary-yank-message
5870Yank the current article into an already existing Message composition
5871buffer (@code{gnus-summary-yank-message}). This command prompts for
5872what message buffer you want to yank into, and understands the
5873process/prefix convention (@pxref{Process/Prefix}).
5874
5875@end table
5876
5877
5878@node Canceling and Superseding
5879@subsection Canceling Articles
5880@cindex canceling articles
5881@cindex superseding articles
5882
5883Have you ever written something, and then decided that you really,
5884really, really wish you hadn't posted that?
5885
5886Well, you can't cancel mail, but you can cancel posts.
5887
5888@findex gnus-summary-cancel-article
5889@kindex C (Summary)
5890@c @icon{gnus-summary-cancel-article}
5891Find the article you wish to cancel (you can only cancel your own
5892articles, so don't try any funny stuff). Then press @kbd{C} or @kbd{S
5893c} (@code{gnus-summary-cancel-article}). Your article will be
5894canceled---machines all over the world will be deleting your article.
5895This command uses the process/prefix convention (@pxref{Process/Prefix}).
5896
5897Be aware, however, that not all sites honor cancels, so your article may
5898live on here and there, while most sites will delete the article in
5899question.
5900
5901Gnus will use the ``current'' select method when canceling. If you
5902want to use the standard posting method, use the @samp{a} symbolic
5903prefix (@pxref{Symbolic Prefixes}).
5904
5905Gnus ensures that only you can cancel your own messages using a
5906@code{Cancel-Lock} header (@pxref{Canceling News, Canceling News, ,
5907message, Message Manual}).
5908
5909If you discover that you have made some mistakes and want to do some
5910corrections, you can post a @dfn{superseding} article that will replace
5911your original article.
5912
5913@findex gnus-summary-supersede-article
5914@kindex S (Summary)
5915Go to the original article and press @kbd{S s}
5916(@code{gnus-summary-supersede-article}). You will be put in a buffer
5917where you can edit the article all you want before sending it off the
5918usual way.
5919
5920The same goes for superseding as for canceling, only more so: Some
5921sites do not honor superseding. On those sites, it will appear that you
5922have posted almost the same article twice.
5923
5924If you have just posted the article, and change your mind right away,
5925there is a trick you can use to cancel/supersede the article without
5926waiting for the article to appear on your site first. You simply return
5927to the post buffer (which is called @code{*sent ...*}). There you will
5928find the article you just posted, with all the headers intact. Change
5929the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
5930header by substituting one of those words for the word
5931@code{Message-ID}. Then just press @kbd{C-c C-c} to send the article as
5932you would do normally. The previous article will be
5933canceled/superseded.
5934
5935Just remember, kids: There is no 'c' in 'supersede'.
5936
5937@node Delayed Articles
5938@section Delayed Articles
5939@cindex delayed sending
5940@cindex send delayed
5941
5942Sometimes, you might wish to delay the sending of a message. For
5943example, you might wish to arrange for a message to turn up just in time
5944to remind your about the birthday of your Significant Other. For this,
5945there is the @code{gnus-delay} package. Setup is simple:
5946
5947@lisp
5948(gnus-delay-initialize)
5949@end lisp
5950
5951@findex gnus-delay-article
5952Normally, to send a message you use the @kbd{C-c C-c} command from
5953Message mode. To delay a message, use @kbd{C-c C-j}
5954(@code{gnus-delay-article}) instead. This will ask you for how long the
5955message should be delayed. Possible answers are:
5956
5957@itemize @bullet
5958@item
5959A time span. Consists of an integer and a letter. For example,
5960@code{42d} means to delay for 42 days. Available letters are @code{m}
5961(minutes), @code{h} (hours), @code{d} (days), @code{w} (weeks), @code{M}
5962(months) and @code{Y} (years).
5963
5964@item
5965A specific date. Looks like @code{YYYY-MM-DD}. The message will be
5966delayed until that day, at a specific time (eight o'clock by default).
5967See also @code{gnus-delay-default-hour}.
5968
5969@item
5970A specific time of day. Given in @code{hh:mm} format, 24h, no am/pm
5971stuff. The deadline will be at that time today, except if that time has
5972already passed, then it's at the given time tomorrow. So if it's ten
5973o'clock in the morning and you specify @code{11:15}, then the deadline
5974is one hour and fifteen minutes hence. But if you specify @code{9:20},
5975that means a time tomorrow.
5976@end itemize
5977
5978The action of the @code{gnus-delay-article} command is influenced by a
5979couple of variables:
5980
5981@table @code
5982@item gnus-delay-default-hour
5983@vindex gnus-delay-default-hour
5984When you specify a specific date, the message will be due on that hour
5985on the given date. Possible values are integers 0 through 23.
5986
5987@item gnus-delay-default-delay
5988@vindex gnus-delay-default-delay
5989This is a string and gives the default delay. It can be of any of the
5990formats described above.
5991
5992@item gnus-delay-group
5993@vindex gnus-delay-group
5994Delayed articles will be kept in this group on the drafts server until
5995they are due. You probably don't need to change this. The default
5996value is @code{"delayed"}.
5997
5998@item gnus-delay-header
5999@vindex gnus-delay-header
6000The deadline for each article will be stored in a header. This variable
6001is a string and gives the header name. You probably don't need to
6002change this. The default value is @code{"X-Gnus-Delayed"}.
6003@end table
6004
6005The way delaying works is like this: when you use the
6006@code{gnus-delay-article} command, you give a certain delay. Gnus
6007calculates the deadline of the message and stores it in the
6008@code{X-Gnus-Delayed} header and puts the message in the
6009@code{nndraft:delayed} group.
6010
6011@findex gnus-delay-send-queue
6012And whenever you get new news, Gnus looks through the group for articles
6013which are due and sends them. It uses the @code{gnus-delay-send-queue}
6014function for this. By default, this function is added to the hook
6015@code{gnus-get-new-news-hook}. But of course, you can change this.
6016Maybe you want to use the demon to send drafts? Just tell the demon to
6017execute the @code{gnus-delay-send-queue} function.
6018
6019@table @code
6020@item gnus-delay-initialize
6021@findex gnus-delay-initialize
6022By default, this function installs @code{gnus-delay-send-queue} in
6023@code{gnus-get-new-news-hook}. But it accepts the optional second
6024argument @code{no-check}. If it is non-@code{nil},
6025@code{gnus-get-new-news-hook} is not changed. The optional first
6026argument is ignored.
6027
6028For example, @code{(gnus-delay-initialize nil t)} means to do nothing.
6029Presumably, you want to use the demon for sending due delayed articles.
6030Just don't forget to set that up :-)
6031@end table
6032
6033
6034@node Marking Articles
6035@section Marking Articles
6036@cindex article marking
6037@cindex article ticking
6038@cindex marks
6039
6040There are several marks you can set on an article.
6041
6042You have marks that decide the @dfn{readedness} (whoo, neato-keano
6043neologism ohoy!) of the article. Alphabetic marks generally mean
6044@dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
6045
6046In addition, you also have marks that do not affect readedness.
6047
6048@ifinfo
6049There's a plethora of commands for manipulating these marks.
6050@end ifinfo
6051
6052@menu
6053* Unread Articles:: Marks for unread articles.
6054* Read Articles:: Marks for read articles.
6055* Other Marks:: Marks that do not affect readedness.
6056* Setting Marks:: How to set and remove marks.
6057* Generic Marking Commands:: How to customize the marking.
6058* Setting Process Marks:: How to mark articles for later processing.
6059@end menu
6060
6061
6062@node Unread Articles
6063@subsection Unread Articles
6064
6065The following marks mark articles as (kinda) unread, in one form or
6066other.
6067
6068@table @samp
6069@item !
6070@vindex gnus-ticked-mark
6071Marked as ticked (@code{gnus-ticked-mark}).
6072
6073@dfn{Ticked articles} are articles that will remain visible always. If
6074you see an article that you find interesting, or you want to put off
6075reading it, or replying to it, until sometime later, you'd typically
6076tick it. However, articles can be expired (from news servers by the
6077news server software, Gnus itself never expires ticked messages), so if
6078you want to keep an article forever, you'll have to make it persistent
6079(@pxref{Persistent Articles}).
6080
6081@item ?
6082@vindex gnus-dormant-mark
6083Marked as dormant (@code{gnus-dormant-mark}).
6084
6085@dfn{Dormant articles} will only appear in the summary buffer if there
6086are followups to it. If you want to see them even if they don't have
6087followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
6088Otherwise (except for the visibility issue), they are just like ticked
6089messages.
6090
6091@item SPACE
6092@vindex gnus-unread-mark
6093Marked as unread (@code{gnus-unread-mark}).
6094
6095@dfn{Unread articles} are articles that haven't been read at all yet.
6096@end table
6097
6098
6099@node Read Articles
6100@subsection Read Articles
6101@cindex expirable mark
6102
6103All the following marks mark articles as read.
6104
6105@table @samp
6106
6107@item r
6108@vindex gnus-del-mark
6109These are articles that the user has marked as read with the @kbd{d}
6110command manually, more or less (@code{gnus-del-mark}).
6111
6112@item R
6113@vindex gnus-read-mark
6114Articles that have actually been read (@code{gnus-read-mark}).
6115
6116@item O
6117@vindex gnus-ancient-mark
6118Articles that were marked as read in previous sessions and are now
6119@dfn{old} (@code{gnus-ancient-mark}).
6120
6121@item K
6122@vindex gnus-killed-mark
6123Marked as killed (@code{gnus-killed-mark}).
6124
6125@item X
6126@vindex gnus-kill-file-mark
6127Marked as killed by kill files (@code{gnus-kill-file-mark}).
6128
6129@item Y
6130@vindex gnus-low-score-mark
6131Marked as read by having too low a score (@code{gnus-low-score-mark}).
6132
6133@item C
6134@vindex gnus-catchup-mark
6135Marked as read by a catchup (@code{gnus-catchup-mark}).
6136
6137@item G
6138@vindex gnus-canceled-mark
6139Canceled article (@code{gnus-canceled-mark})
6140
6141@item F
6142@vindex gnus-souped-mark
6143@sc{soup}ed article (@code{gnus-souped-mark}). @xref{SOUP}.
6144
6145@item Q
6146@vindex gnus-sparse-mark
6147Sparsely reffed article (@code{gnus-sparse-mark}). @xref{Customizing
6148Threading}.
6149
6150@item M
6151@vindex gnus-duplicate-mark
6152Article marked as read by duplicate suppression
6153(@code{gnus-duplicate-mark}). @xref{Duplicate Suppression}.
6154
6155@end table
6156
6157All these marks just mean that the article is marked as read, really.
6158They are interpreted differently when doing adaptive scoring, though.
6159
6160One more special mark, though:
6161
6162@table @samp
6163@item E
6164@vindex gnus-expirable-mark
6165Marked as expirable (@code{gnus-expirable-mark}).
6166
6167Marking articles as @dfn{expirable} (or have them marked as such
6168automatically) doesn't make much sense in normal groups---a user doesn't
6169control expiring of news articles, but in mail groups, for instance,
6170articles marked as @dfn{expirable} can be deleted by Gnus at
6171any time.
6172@end table
6173
6174
6175@node Other Marks
6176@subsection Other Marks
6177@cindex process mark
6178@cindex bookmarks
6179
6180There are some marks that have nothing to do with whether the article is
6181read or not.
6182
6183@itemize @bullet
6184
6185@item
6186You can set a bookmark in the current article. Say you are reading a
6187long thesis on cats' urinary tracts, and have to go home for dinner
6188before you've finished reading the thesis. You can then set a bookmark
6189in the article, and Gnus will jump to this bookmark the next time it
6190encounters the article. @xref{Setting Marks}.
6191
6192@item
6193@vindex gnus-replied-mark
6194All articles that you have replied to or made a followup to (i.e., have
6195answered) will be marked with an @samp{A} in the second column
6196(@code{gnus-replied-mark}).
6197
6198@item
6199@vindex gnus-forwarded-mark
6200All articles that you have forwarded will be marked with an @samp{F} in
6201the second column (@code{gnus-forwarded-mark}).
6202
6203@item
6204@vindex gnus-cached-mark
6205Articles stored in the article cache will be marked with an @samp{*} in
6206the second column (@code{gnus-cached-mark}). @xref{Article Caching}.
6207
6208@item
6209@vindex gnus-saved-mark
6210Articles ``saved'' (in some manner or other; not necessarily
6211religiously) are marked with an @samp{S} in the second column
6212(@code{gnus-saved-mark}).
6213
6214@item
6215@vindex gnus-recent-mark
6216Articles that according to the server haven't been shown to the user
6217before are marked with a @samp{N} in the second column
6218(@code{gnus-recent-mark}). Note that not all servers support this
6219mark, in which case it simply never appears. Compare with
6220@code{gnus-unseen-mark}.
6221
6222@item
6223@vindex gnus-unseen-mark
6224Articles that haven't been seen before in Gnus by the user are marked
6225with a @samp{.} in the second column (@code{gnus-unseen-mark}).
6226Compare with @code{gnus-recent-mark}.
6227
6228@item
6229@vindex gnus-downloaded-mark
6230When using the Gnus agent (@pxref{Agent Basics}), articles may be
6231downloaded for unplugged (offline) viewing. If you are using the
6232@samp{%O} spec, these articles get the @samp{+} mark in that spec.
6233(The variable @code{gnus-downloaded-mark} controls which character to
6234use.)
6235
6236@item
6237@vindex gnus-undownloaded-mark
6238When using the Gnus agent (@pxref{Agent Basics}), some articles might
6239not have been downloaded. Such articles cannot be viewed while you
6240are unplugged (offline). If you are using the @samp{%O} spec, these
6241articles get the @samp{-} mark in that spec. (The variable
6242@code{gnus-undownloaded-mark} controls which character to use.)
6243
6244@item
6245@vindex gnus-downloadable-mark
6246The Gnus agent (@pxref{Agent Basics}) downloads some articles
6247automatically, but it is also possible to explicitly mark articles for
6248download, even if they would not be downloaded automatically. Such
6249explicitly-marked articles get the @samp{%} mark in the first column.
6250(The variable @code{gnus-downloadable-mark} controls which character to
6251use.)
6252
6253@item
6254@vindex gnus-not-empty-thread-mark
6255@vindex gnus-empty-thread-mark
6256If the @samp{%e} spec is used, the presence of threads or not will be
6257marked with @code{gnus-not-empty-thread-mark} and
6258@code{gnus-empty-thread-mark} in the third column, respectively.
6259
6260@item
6261@vindex gnus-process-mark
6262Finally we have the @dfn{process mark} (@code{gnus-process-mark}). A
6263variety of commands react to the presence of the process mark. For
6264instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
6265all articles that have been marked with the process mark. Articles
6266marked with the process mark have a @samp{#} in the second column.
6267
6268@end itemize
6269
6270You might have noticed that most of these ``non-readedness'' marks
6271appear in the second column by default. So if you have a cached, saved,
6272replied article that you have process-marked, what will that look like?
6273
6274Nothing much. The precedence rules go as follows: process -> cache ->
6275replied -> saved. So if the article is in the cache and is replied,
6276you'll only see the cache mark and not the replied mark.
6277
6278
6279@node Setting Marks
6280@subsection Setting Marks
6281@cindex setting marks
6282
6283All the marking commands understand the numeric prefix.
6284
6285@table @kbd
6286@item M c
6287@itemx M-u
6288@kindex M c (Summary)
6289@kindex M-u (Summary)
6290@findex gnus-summary-clear-mark-forward
6291@cindex mark as unread
6292Clear all readedness-marks from the current article
6293(@code{gnus-summary-clear-mark-forward}). In other words, mark the
6294article as unread.
6295
6296@item M t
6297@itemx !
6298@kindex ! (Summary)
6299@kindex M t (Summary)
6300@findex gnus-summary-tick-article-forward
6301Tick the current article (@code{gnus-summary-tick-article-forward}).
6302@xref{Article Caching}.
6303
6304@item M ?
6305@itemx ?
6306@kindex ? (Summary)
6307@kindex M ? (Summary)
6308@findex gnus-summary-mark-as-dormant
6309Mark the current article as dormant
6310(@code{gnus-summary-mark-as-dormant}). @xref{Article Caching}.
6311
6312@item M d
6313@itemx d
6314@kindex M d (Summary)
6315@kindex d (Summary)
6316@findex gnus-summary-mark-as-read-forward
6317Mark the current article as read
6318(@code{gnus-summary-mark-as-read-forward}).
6319
6320@item D
6321@kindex D (Summary)
6322@findex gnus-summary-mark-as-read-backward
6323Mark the current article as read and move point to the previous line
6324(@code{gnus-summary-mark-as-read-backward}).
6325
6326@item M k
6327@itemx k
6328@kindex k (Summary)
6329@kindex M k (Summary)
6330@findex gnus-summary-kill-same-subject-and-select
6331Mark all articles that have the same subject as the current one as read,
6332and then select the next unread article
6333(@code{gnus-summary-kill-same-subject-and-select}).
6334
6335@item M K
6336@itemx C-k
6337@kindex M K (Summary)
6338@kindex C-k (Summary)
6339@findex gnus-summary-kill-same-subject
6340Mark all articles that have the same subject as the current one as read
6341(@code{gnus-summary-kill-same-subject}).
6342
6343@item M C
6344@kindex M C (Summary)
6345@findex gnus-summary-catchup
6346@c @icon{gnus-summary-catchup}
6347Mark all unread articles as read (@code{gnus-summary-catchup}).
6348
6349@item M C-c
6350@kindex M C-c (Summary)
6351@findex gnus-summary-catchup-all
6352Mark all articles in the group as read---even the ticked and dormant
6353articles (@code{gnus-summary-catchup-all}).
6354
6355@item M H
6356@kindex M H (Summary)
6357@findex gnus-summary-catchup-to-here
6358Catchup the current group to point (before the point)
6359(@code{gnus-summary-catchup-to-here}).
6360
6361@item M h
6362@kindex M h (Summary)
6363@findex gnus-summary-catchup-from-here
6364Catchup the current group from point (after the point)
6365(@code{gnus-summary-catchup-from-here}).
6366
6367@item C-w
6368@kindex C-w (Summary)
6369@findex gnus-summary-mark-region-as-read
6370Mark all articles between point and mark as read
6371(@code{gnus-summary-mark-region-as-read}).
6372
6373@item M V k
6374@kindex M V k (Summary)
6375@findex gnus-summary-kill-below
6376Kill all articles with scores below the default score (or below the
6377numeric prefix) (@code{gnus-summary-kill-below}).
6378
6379@item M e
6380@itemx E
6381@kindex M e (Summary)
6382@kindex E (Summary)
6383@findex gnus-summary-mark-as-expirable
6384Mark the current article as expirable
6385(@code{gnus-summary-mark-as-expirable}).
6386
6387@item M b
6388@kindex M b (Summary)
6389@findex gnus-summary-set-bookmark
6390Set a bookmark in the current article
6391(@code{gnus-summary-set-bookmark}).
6392
6393@item M B
6394@kindex M B (Summary)
6395@findex gnus-summary-remove-bookmark
6396Remove the bookmark from the current article
6397(@code{gnus-summary-remove-bookmark}).
6398
6399@item M V c
6400@kindex M V c (Summary)
6401@findex gnus-summary-clear-above
6402Clear all marks from articles with scores over the default score (or
6403over the numeric prefix) (@code{gnus-summary-clear-above}).
6404
6405@item M V u
6406@kindex M V u (Summary)
6407@findex gnus-summary-tick-above
6408Tick all articles with scores over the default score (or over the
6409numeric prefix) (@code{gnus-summary-tick-above}).
6410
6411@item M V m
6412@kindex M V m (Summary)
6413@findex gnus-summary-mark-above
6414Prompt for a mark, and mark all articles with scores over the default
6415score (or over the numeric prefix) with this mark
6416(@code{gnus-summary-clear-above}).
6417@end table
6418
6419@vindex gnus-summary-goto-unread
6420The @code{gnus-summary-goto-unread} variable controls what action should
6421be taken after setting a mark. If non-@code{nil}, point will move to
6422the next/previous unread article. If @code{nil}, point will just move
6423one line up or down. As a special case, if this variable is
6424@code{never}, all the marking commands as well as other commands (like
6425@kbd{SPACE}) will move to the next article, whether it is unread or not.
6426The default is @code{t}.
6427
6428
6429@node Generic Marking Commands
6430@subsection Generic Marking Commands
6431
6432Some people would like the command that ticks an article (@kbd{!}) go to
6433the next article. Others would like it to go to the next unread
6434article. Yet others would like it to stay on the current article. And
6435even though I haven't heard of anybody wanting it to go to the
6436previous (unread) article, I'm sure there are people that want that as
6437well.
6438
6439Multiply these five behaviors with five different marking commands, and
6440you get a potentially complex set of variable to control what each
6441command should do.
6442
6443To sidestep that mess, Gnus provides commands that do all these
6444different things. They can be found on the @kbd{M M} map in the summary
6445buffer. Type @kbd{M M C-h} to see them all---there are too many of them
6446to list in this manual.
6447
6448While you can use these commands directly, most users would prefer
6449altering the summary mode keymap. For instance, if you would like the
6450@kbd{!} command to go to the next article instead of the next unread
6451article, you could say something like:
6452
6453@lisp
6454@group
6455(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
6456(defun my-alter-summary-map ()
6457 (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
6458@end group
6459@end lisp
6460
6461@noindent
6462or
6463
6464@lisp
6465(defun my-alter-summary-map ()
6466 (local-set-key "!" "MM!n"))
6467@end lisp
6468
6469
6470@node Setting Process Marks
6471@subsection Setting Process Marks
6472@cindex setting process marks
6473
6474Process marks are displayed as @code{#} in the summary buffer, and are
6475used for marking articles in such a way that other commands will
6476process these articles. For instance, if you process mark four
6477articles and then use the @kbd{*} command, Gnus will enter these four
6478articles into the cache. For more information,
6479@pxref{Process/Prefix}.
6480
6481@table @kbd
6482
6483@item M P p
6484@itemx #
6485@kindex # (Summary)
6486@kindex M P p (Summary)
6487@findex gnus-summary-mark-as-processable
6488Mark the current article with the process mark
6489(@code{gnus-summary-mark-as-processable}).
6490@findex gnus-summary-unmark-as-processable
6491
6492@item M P u
6493@itemx M-#
6494@kindex M P u (Summary)
6495@kindex M-# (Summary)
6496Remove the process mark, if any, from the current article
6497(@code{gnus-summary-unmark-as-processable}).
6498
6499@item M P U
6500@kindex M P U (Summary)
6501@findex gnus-summary-unmark-all-processable
6502Remove the process mark from all articles
6503(@code{gnus-summary-unmark-all-processable}).
6504
6505@item M P i
6506@kindex M P i (Summary)
6507@findex gnus-uu-invert-processable
6508Invert the list of process marked articles
6509(@code{gnus-uu-invert-processable}).
6510
6511@item M P R
6512@kindex M P R (Summary)
6513@findex gnus-uu-mark-by-regexp
6514Mark articles that have a @code{Subject} header that matches a regular
6515expression (@code{gnus-uu-mark-by-regexp}).
6516
6517@item M P G
6518@kindex M P G (Summary)
6519@findex gnus-uu-unmark-by-regexp
6520Unmark articles that have a @code{Subject} header that matches a regular
6521expression (@code{gnus-uu-unmark-by-regexp}).
6522
6523@item M P r
6524@kindex M P r (Summary)
6525@findex gnus-uu-mark-region
6526Mark articles in region (@code{gnus-uu-mark-region}).
6527
6528@item M P g
6529@kindex M P g (Summary)
6530@findex gnus-uu-unmark-region
6531Unmark articles in region (@code{gnus-uu-unmark-region}).
6532
6533@item M P t
6534@kindex M P t (Summary)
6535@findex gnus-uu-mark-thread
6536Mark all articles in the current (sub)thread
6537(@code{gnus-uu-mark-thread}).
6538
6539@item M P T
6540@kindex M P T (Summary)
6541@findex gnus-uu-unmark-thread
6542Unmark all articles in the current (sub)thread
6543(@code{gnus-uu-unmark-thread}).
6544
6545@item M P v
6546@kindex M P v (Summary)
6547@findex gnus-uu-mark-over
6548Mark all articles that have a score above the prefix argument
6549(@code{gnus-uu-mark-over}).
6550
6551@item M P s
6552@kindex M P s (Summary)
6553@findex gnus-uu-mark-series
6554Mark all articles in the current series (@code{gnus-uu-mark-series}).
6555
6556@item M P S
6557@kindex M P S (Summary)
6558@findex gnus-uu-mark-sparse
6559Mark all series that have already had some articles marked
6560(@code{gnus-uu-mark-sparse}).
6561
6562@item M P a
6563@kindex M P a (Summary)
6564@findex gnus-uu-mark-all
6565Mark all articles in series order (@code{gnus-uu-mark-all}).
6566
6567@item M P b
6568@kindex M P b (Summary)
6569@findex gnus-uu-mark-buffer
6570Mark all articles in the buffer in the order they appear
6571(@code{gnus-uu-mark-buffer}).
6572
6573@item M P k
6574@kindex M P k (Summary)
6575@findex gnus-summary-kill-process-mark
6576Push the current process mark set onto the stack and unmark all articles
6577(@code{gnus-summary-kill-process-mark}).
6578
6579@item M P y
6580@kindex M P y (Summary)
6581@findex gnus-summary-yank-process-mark
6582Pop the previous process mark set from the stack and restore it
6583(@code{gnus-summary-yank-process-mark}).
6584
6585@item M P w
6586@kindex M P w (Summary)
6587@findex gnus-summary-save-process-mark
6588Push the current process mark set onto the stack
6589(@code{gnus-summary-save-process-mark}).
6590
6591@end table
6592
6593Also see the @kbd{&} command in @ref{Searching for Articles}, for how to
6594set process marks based on article body contents.
6595
6596
6597@node Limiting
6598@section Limiting
6599@cindex limiting
6600
6601It can be convenient to limit the summary buffer to just show some
6602subset of the articles currently in the group. The effect most limit
6603commands have is to remove a few (or many) articles from the summary
6604buffer.
6605
6606All limiting commands work on subsets of the articles already fetched
6607from the servers. None of these commands query the server for
6608additional articles.
6609
6610@table @kbd
6611
6612@item / /
6613@itemx / s
6614@kindex / / (Summary)
6615@findex gnus-summary-limit-to-subject
6616Limit the summary buffer to articles that match some subject
6617(@code{gnus-summary-limit-to-subject}). If given a prefix, exclude
6618matching articles.
6619
6620@item / a
6621@kindex / a (Summary)
6622@findex gnus-summary-limit-to-author
6623Limit the summary buffer to articles that match some author
6624(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
6625matching articles.
6626
01c52d31
MB
6627@item / R
6628@kindex / R (Summary)
6629@findex gnus-summary-limit-to-recipient
6630Limit the summary buffer to articles that match some recipient
6631(@code{gnus-summary-limit-to-recipient}). If given a prefix, exclude
6632matching articles.
6633
6634@item / A
6635@kindex / A (Summary)
6636@findex gnus-summary-limit-to-address
6637Limit the summary buffer to articles in which contents of From, To or Cc
6638header match a given address (@code{gnus-summary-limit-to-address}). If
6639given a prefix, exclude matching articles.
6640
6641@item / S
6642@kindex / S (Summary)
6643@findex gnus-summary-limit-to-singletons
6644Limit the summary buffer to articles that aren't part of any displayed
6645threads (@code{gnus-summary-limit-to-singletons}). If given a prefix,
6646limit to articles that are part of displayed threads.
6647
4009494e
GM
6648@item / x
6649@kindex / x (Summary)
6650@findex gnus-summary-limit-to-extra
6651Limit the summary buffer to articles that match one of the ``extra''
6652headers (@pxref{To From Newsgroups})
6653(@code{gnus-summary-limit-to-extra}). If given a prefix, exclude
6654matching articles.
6655
6656@item / u
6657@itemx x
6658@kindex / u (Summary)
6659@kindex x (Summary)
6660@findex gnus-summary-limit-to-unread
6661Limit the summary buffer to articles not marked as read
6662(@code{gnus-summary-limit-to-unread}). If given a prefix, limit the
6663buffer to articles strictly unread. This means that ticked and
6664dormant articles will also be excluded.
6665
6666@item / m
6667@kindex / m (Summary)
6668@findex gnus-summary-limit-to-marks
6669Ask for a mark and then limit to all articles that have been marked
6670with that mark (@code{gnus-summary-limit-to-marks}).
6671
6672@item / t
6673@kindex / t (Summary)
6674@findex gnus-summary-limit-to-age
6675Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
6676(@code{gnus-summary-limit-to-age}). If given a prefix, limit to
6677articles younger than that number of days.
6678
6679@item / n
6680@kindex / n (Summary)
6681@findex gnus-summary-limit-to-articles
6682With prefix @samp{n}, limit the summary buffer to the next @samp{n}
6683articles. If not given a prefix, use the process marked articles
6684instead. (@code{gnus-summary-limit-to-articles}).
6685
6686@item / w
6687@kindex / w (Summary)
6688@findex gnus-summary-pop-limit
6689Pop the previous limit off the stack and restore it
6690(@code{gnus-summary-pop-limit}). If given a prefix, pop all limits off
6691the stack.
6692
6693@item / .
6694@kindex / . (Summary)
6695@findex gnus-summary-limit-to-unseen
6696Limit the summary buffer to the unseen articles
6697(@code{gnus-summary-limit-to-unseen}).
6698
6699@item / v
6700@kindex / v (Summary)
6701@findex gnus-summary-limit-to-score
6702Limit the summary buffer to articles that have a score at or above some
6703score (@code{gnus-summary-limit-to-score}).
6704
6705@item / p
6706@kindex / p (Summary)
6707@findex gnus-summary-limit-to-display-predicate
6708Limit the summary buffer to articles that satisfy the @code{display}
6709group parameter predicate
6710(@code{gnus-summary-limit-to-display-predicate}). @xref{Group
6711Parameters}, for more on this predicate.
6712
01c52d31
MB
6713@item / r
6714@kindex / r (Summary)
6715@findex gnus-summary-limit-to-replied
6716Limit the summary buffer to replied articles
6717(@code{gnus-summary-limit-to-replied}). If given a prefix, exclude
6718replied articles.
6719
4009494e
GM
6720@item / E
6721@itemx M S
6722@kindex M S (Summary)
6723@kindex / E (Summary)
6724@findex gnus-summary-limit-include-expunged
6725Include all expunged articles in the limit
6726(@code{gnus-summary-limit-include-expunged}).
6727
6728@item / D
6729@kindex / D (Summary)
6730@findex gnus-summary-limit-include-dormant
6731Include all dormant articles in the limit
6732(@code{gnus-summary-limit-include-dormant}).
6733
6734@item / *
6735@kindex / * (Summary)
6736@findex gnus-summary-limit-include-cached
6737Include all cached articles in the limit
6738(@code{gnus-summary-limit-include-cached}).
6739
6740@item / d
6741@kindex / d (Summary)
6742@findex gnus-summary-limit-exclude-dormant
6743Exclude all dormant articles from the limit
6744(@code{gnus-summary-limit-exclude-dormant}).
6745
6746@item / M
6747@kindex / M (Summary)
6748@findex gnus-summary-limit-exclude-marks
6749Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
6750
6751@item / T
6752@kindex / T (Summary)
6753@findex gnus-summary-limit-include-thread
6754Include all the articles in the current thread in the limit.
6755
6756@item / c
6757@kindex / c (Summary)
6758@findex gnus-summary-limit-exclude-childless-dormant
6759Exclude all dormant articles that have no children from the limit@*
6760(@code{gnus-summary-limit-exclude-childless-dormant}).
6761
6762@item / C
6763@kindex / C (Summary)
6764@findex gnus-summary-limit-mark-excluded-as-read
6765Mark all excluded unread articles as read
6766(@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix,
6767also mark excluded ticked and dormant articles as read.
6768
6769@item / N
6770@kindex / N (Summary)
6771@findex gnus-summary-insert-new-articles
6772Insert all new articles in the summary buffer. It scans for new emails
6773if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
6774
6775@item / o
6776@kindex / o (Summary)
6777@findex gnus-summary-insert-old-articles
6778Insert all old articles in the summary buffer. If given a numbered
6779prefix, fetch this number of articles.
6780
01c52d31
MB
6781@item / b
6782@kindex / b (Summary)
6783@findex gnus-summary-limit-to-bodies
6784Limit the summary buffer to articles that have bodies that match a
6785certain regexp (@code{gnus-summary-limit-to-bodies}). If given a
6786prefix, reverse the limit. This command is quite slow since it
6787requires selecting each article to find the matches.
6788
6789@item / h
6790@kindex / h (Summary)
6791@findex gnus-summary-limit-to-headers
6792Like the previous command, only limit to headers instead
6793(@code{gnus-summary-limit-to-headers}).
6794
4009494e
GM
6795@end table
6796
6797
6798@node Threading
6799@section Threading
6800@cindex threading
6801@cindex article threading
6802
6803Gnus threads articles by default. @dfn{To thread} is to put responses
6804to articles directly after the articles they respond to---in a
6805hierarchical fashion.
6806
6807Threading is done by looking at the @code{References} headers of the
6808articles. In a perfect world, this would be enough to build pretty
6809trees, but unfortunately, the @code{References} header is often broken
6810or simply missing. Weird news propagation exacerbates the problem,
6811so one has to employ other heuristics to get pleasing results. A
6812plethora of approaches exists, as detailed in horrible detail in
6813@ref{Customizing Threading}.
6814
6815First, a quick overview of the concepts:
6816
6817@table @dfn
6818@item root
6819The top-most article in a thread; the first article in the thread.
6820
6821@item thread
6822A tree-like article structure.
6823
6824@item sub-thread
6825A small(er) section of this tree-like structure.
6826
6827@item loose threads
6828Threads often lose their roots due to article expiry, or due to the root
6829already having been read in a previous session, and not displayed in the
6830summary buffer. We then typically have many sub-threads that really
6831belong to one thread, but are without connecting roots. These are
6832called loose threads.
6833
6834@item thread gathering
6835An attempt to gather loose threads into bigger threads.
6836
6837@item sparse threads
6838A thread where the missing articles have been ``guessed'' at, and are
6839displayed as empty lines in the summary buffer.
6840
6841@end table
6842
6843
6844@menu
6845* Customizing Threading:: Variables you can change to affect the threading.
6846* Thread Commands:: Thread based commands in the summary buffer.
6847@end menu
6848
6849
6850@node Customizing Threading
6851@subsection Customizing Threading
6852@cindex customizing threading
6853
6854@menu
6855* Loose Threads:: How Gnus gathers loose threads into bigger threads.
6856* Filling In Threads:: Making the threads displayed look fuller.
6857* More Threading:: Even more variables for fiddling with threads.
6858* Low-Level Threading:: You thought it was over@dots{} but you were wrong!
6859@end menu
6860
6861
6862@node Loose Threads
6863@subsubsection Loose Threads
6864@cindex <
6865@cindex >
6866@cindex loose threads
6867
6868@table @code
6869@item gnus-summary-make-false-root
6870@vindex gnus-summary-make-false-root
6871If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
6872and create a dummy root at the top. (Wait a minute. Root at the top?
6873Yup.) Loose subtrees occur when the real root has expired, or you've
6874read or killed the root in a previous session.
6875
6876When there is no real root of a thread, Gnus will have to fudge
6877something. This variable says what fudging method Gnus should use.
6878There are four possible values:
6879
6880@iftex
6881@iflatex
6882\gnusfigure{The Summary Buffer}{390}{
6883\put(0,0){\epsfig{figure=ps/summary-adopt,width=7.5cm}}
6884\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-empty,width=7.5cm}}}
6885\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=ps/summary-none,width=7.5cm}}}
6886\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=ps/summary-dummy,width=7.5cm}}}
6887}
6888@end iflatex
6889@end iftex
6890
6891@cindex adopting articles
6892
6893@table @code
6894
6895@item adopt
6896Gnus will make the first of the orphaned articles the parent. This
6897parent will adopt all the other articles. The adopted articles will be
6898marked as such by pointy brackets (@samp{<>}) instead of the standard
6899square brackets (@samp{[]}). This is the default method.
6900
6901@item dummy
6902@vindex gnus-summary-dummy-line-format
6903@vindex gnus-summary-make-false-root-always
6904Gnus will create a dummy summary line that will pretend to be the
6905parent. This dummy line does not correspond to any real article, so
6906selecting it will just select the first real article after the dummy
6907article. @code{gnus-summary-dummy-line-format} is used to specify the
6908format of the dummy roots. It accepts only one format spec: @samp{S},
6909which is the subject of the article. @xref{Formatting Variables}.
6910If you want all threads to have a dummy root, even the non-gathered
6911ones, set @code{gnus-summary-make-false-root-always} to @code{t}.
6912
6913@item empty
6914Gnus won't actually make any article the parent, but simply leave the
6915subject field of all orphans except the first empty. (Actually, it will
6916use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
6917Buffer Format}).)
6918
6919@item none
6920Don't make any article parent at all. Just gather the threads and
6921display them after one another.
6922
6923@item nil
6924Don't gather loose threads.
6925@end table
6926
6927@item gnus-summary-gather-subject-limit
6928@vindex gnus-summary-gather-subject-limit
6929Loose threads are gathered by comparing subjects of articles. If this
6930variable is @code{nil}, Gnus requires an exact match between the
6931subjects of the loose threads before gathering them into one big
6932super-thread. This might be too strict a requirement, what with the
6933presence of stupid newsreaders that chop off long subject lines. If
6934you think so, set this variable to, say, 20 to require that only the
6935first 20 characters of the subjects have to match. If you set this
6936variable to a really low number, you'll find that Gnus will gather
6937everything in sight into one thread, which isn't very helpful.
6938
6939@cindex fuzzy article gathering
6940If you set this variable to the special value @code{fuzzy}, Gnus will
6941use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
6942Matching}).
6943
6944@item gnus-simplify-subject-fuzzy-regexp
6945@vindex gnus-simplify-subject-fuzzy-regexp
6946This can either be a regular expression or list of regular expressions
6947that match strings that will be removed from subjects if fuzzy subject
6948simplification is used.
6949
6950@item gnus-simplify-ignored-prefixes
6951@vindex gnus-simplify-ignored-prefixes
6952If you set @code{gnus-summary-gather-subject-limit} to something as low
6953as 10, you might consider setting this variable to something sensible:
6954
6955@c Written by Michael Ernst <mernst@cs.rice.edu>
6956@lisp
6957(setq gnus-simplify-ignored-prefixes
6958 (concat
6959 "\\`\\[?\\("
6960 (mapconcat
6961 'identity
6962 '("looking"
6963 "wanted" "followup" "summary\\( of\\)?"
6964 "help" "query" "problem" "question"
6965 "answer" "reference" "announce"
6966 "How can I" "How to" "Comparison of"
6967 ;; ...
6968 )
6969 "\\|")
6970 "\\)\\s *\\("
6971 (mapconcat 'identity
6972 '("for" "for reference" "with" "about")
6973 "\\|")
6974 "\\)?\\]?:?[ \t]*"))
6975@end lisp
6976
6977All words that match this regexp will be removed before comparing two
6978subjects.
6979
6980@item gnus-simplify-subject-functions
6981@vindex gnus-simplify-subject-functions
6982If non-@code{nil}, this variable overrides
6983@code{gnus-summary-gather-subject-limit}. This variable should be a
6984list of functions to apply to the @code{Subject} string iteratively to
6985arrive at the simplified version of the string.
6986
6987Useful functions to put in this list include:
6988
6989@table @code
6990@item gnus-simplify-subject-re
6991@findex gnus-simplify-subject-re
6992Strip the leading @samp{Re:}.
6993
6994@item gnus-simplify-subject-fuzzy
6995@findex gnus-simplify-subject-fuzzy
6996Simplify fuzzily.
6997
6998@item gnus-simplify-whitespace
6999@findex gnus-simplify-whitespace
7000Remove excessive whitespace.
7001
7002@item gnus-simplify-all-whitespace
7003@findex gnus-simplify-all-whitespace
7004Remove all whitespace.
7005@end table
7006
7007You may also write your own functions, of course.
7008
7009
7010@item gnus-summary-gather-exclude-subject
7011@vindex gnus-summary-gather-exclude-subject
7012Since loose thread gathering is done on subjects only, that might lead
7013to many false hits, especially with certain common subjects like
7014@samp{} and @samp{(none)}. To make the situation slightly better,
7015you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
7016what subjects should be excluded from the gathering process.@*
7017The default is @samp{^ *$\\|^(none)$}.
7018
7019@item gnus-summary-thread-gathering-function
7020@vindex gnus-summary-thread-gathering-function
7021Gnus gathers threads by looking at @code{Subject} headers. This means
7022that totally unrelated articles may end up in the same ``thread'', which
7023is confusing. An alternate approach is to look at all the
7024@code{Message-ID}s in all the @code{References} headers to find matches.
7025This will ensure that no gathered threads ever include unrelated
7026articles, but it also means that people who have posted with broken
7027newsreaders won't be gathered properly. The choice is yours---plague or
7028cholera:
7029
7030@table @code
7031@item gnus-gather-threads-by-subject
7032@findex gnus-gather-threads-by-subject
7033This function is the default gathering function and looks at
7034@code{Subject}s exclusively.
7035
7036@item gnus-gather-threads-by-references
7037@findex gnus-gather-threads-by-references
7038This function looks at @code{References} headers exclusively.
7039@end table
7040
7041If you want to test gathering by @code{References}, you could say
7042something like:
7043
7044@lisp
7045(setq gnus-summary-thread-gathering-function
7046 'gnus-gather-threads-by-references)
7047@end lisp
7048
7049@end table
7050
7051
7052@node Filling In Threads
7053@subsubsection Filling In Threads
7054
7055@table @code
7056@item gnus-fetch-old-headers
7057@vindex gnus-fetch-old-headers
7058If non-@code{nil}, Gnus will attempt to build old threads by fetching
7059more old headers---headers to articles marked as read. If you would
7060like to display as few summary lines as possible, but still connect as
7061many loose threads as possible, you should set this variable to
7062@code{some} or a number. If you set it to a number, no more than that
7063number of extra old headers will be fetched. In either case, fetching
7064old headers only works if the back end you are using carries overview
7065files---this would normally be @code{nntp}, @code{nnspool},
7066@code{nnml}, and @code{nnmaildir}. Also remember that if the root of
7067the thread has been expired by the server, there's not much Gnus can
7068do about that.
7069
7070This variable can also be set to @code{invisible}. This won't have any
7071visible effects, but is useful if you use the @kbd{A T} command a lot
7072(@pxref{Finding the Parent}).
7073
7074@item gnus-fetch-old-ephemeral-headers
7075@vindex gnus-fetch-old-ephemeral-headers
7076Same as @code{gnus-fetch-old-headers}, but only used for ephemeral
7077newsgroups.
7078
7079@item gnus-build-sparse-threads
7080@vindex gnus-build-sparse-threads
7081Fetching old headers can be slow. A low-rent similar effect can be
7082gotten by setting this variable to @code{some}. Gnus will then look at
7083the complete @code{References} headers of all articles and try to string
7084together articles that belong in the same thread. This will leave
7085@dfn{gaps} in the threading display where Gnus guesses that an article
7086is missing from the thread. (These gaps appear like normal summary
7087lines. If you select a gap, Gnus will try to fetch the article in
7088question.) If this variable is @code{t}, Gnus will display all these
7089``gaps'' without regard for whether they are useful for completing the
7090thread or not. Finally, if this variable is @code{more}, Gnus won't cut
7091off sparse leaf nodes that don't lead anywhere. This variable is
7092@code{nil} by default.
7093
7094@item gnus-read-all-available-headers
7095@vindex gnus-read-all-available-headers
7096This is a rather obscure variable that few will find useful. It's
7097intended for those non-news newsgroups where the back end has to fetch
7098quite a lot to present the summary buffer, and where it's impossible to
7099go back to parents of articles. This is mostly the case in the
7100web-based groups, like the @code{nnultimate} groups.
7101
7102If you don't use those, then it's safe to leave this as the default
7103@code{nil}. If you want to use this variable, it should be a regexp
7104that matches the group name, or @code{t} for all groups.
7105
7106@end table
7107
7108
7109@node More Threading
7110@subsubsection More Threading
7111
7112@table @code
7113@item gnus-show-threads
7114@vindex gnus-show-threads
7115If this variable is @code{nil}, no threading will be done, and all of
7116the rest of the variables here will have no effect. Turning threading
7117off will speed group selection up a bit, but it is sure to make reading
7118slower and more awkward.
7119
7120@item gnus-thread-hide-subtree
7121@vindex gnus-thread-hide-subtree
7122If non-@code{nil}, all threads will be hidden when the summary buffer is
7123generated.
7124
7125This can also be a predicate specifier (@pxref{Predicate Specifiers}).
7126Available predicates are @code{gnus-article-unread-p} and
7127@code{gnus-article-unseen-p}.
7128
7129Here's an example:
7130
7131@lisp
7132(setq gnus-thread-hide-subtree
7133 '(or gnus-article-unread-p
7134 gnus-article-unseen-p))
7135@end lisp
7136
7137(It's a pretty nonsensical example, since all unseen articles are also
7138unread, but you get my drift.)
7139
7140
7141@item gnus-thread-expunge-below
7142@vindex gnus-thread-expunge-below
7143All threads that have a total score (as defined by
7144@code{gnus-thread-score-function}) less than this number will be
7145expunged. This variable is @code{nil} by default, which means that no
7146threads are expunged.
7147
7148@item gnus-thread-hide-killed
7149@vindex gnus-thread-hide-killed
7150if you kill a thread and this variable is non-@code{nil}, the subtree
7151will be hidden.
7152
7153@item gnus-thread-ignore-subject
7154@vindex gnus-thread-ignore-subject
7155Sometimes somebody changes the subject in the middle of a thread. If
7156this variable is non-@code{nil}, which is the default, the subject
7157change is ignored. If it is @code{nil}, a change in the subject will
7158result in a new thread.
7159
7160@item gnus-thread-indent-level
7161@vindex gnus-thread-indent-level
7162This is a number that says how much each sub-thread should be indented.
7163The default is 4.
7164
7165@item gnus-sort-gathered-threads-function
7166@vindex gnus-sort-gathered-threads-function
7167Sometimes, particularly with mailing lists, the order in which mails
7168arrive locally is not necessarily the same as the order in which they
7169arrived on the mailing list. Consequently, when sorting sub-threads
7170using the default @code{gnus-thread-sort-by-number}, responses can end
7171up appearing before the article to which they are responding to.
7172Setting this variable to an alternate value
7173(e.g. @code{gnus-thread-sort-by-date}), in a group's parameters or in an
7174appropriate hook (e.g. @code{gnus-summary-generate-hook}) can produce a
7175more logical sub-thread ordering in such instances.
7176
7177@end table
7178
7179
7180@node Low-Level Threading
7181@subsubsection Low-Level Threading
7182
7183@table @code
7184
7185@item gnus-parse-headers-hook
7186@vindex gnus-parse-headers-hook
7187Hook run before parsing any headers.
7188
7189@item gnus-alter-header-function
7190@vindex gnus-alter-header-function
7191If non-@code{nil}, this function will be called to allow alteration of
7192article header structures. The function is called with one parameter,
7193the article header vector, which it may alter in any way. For instance,
7194if you have a mail-to-news gateway which alters the @code{Message-ID}s
7195in systematic ways (by adding prefixes and such), you can use this
7196variable to un-scramble the @code{Message-ID}s so that they are more
7197meaningful. Here's one example:
7198
7199@lisp
7200(setq gnus-alter-header-function 'my-alter-message-id)
7201
7202(defun my-alter-message-id (header)
7203 (let ((id (mail-header-id header)))
7204 (when (string-match
7205 "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
7206 (mail-header-set-id
7207 (concat (match-string 1 id) "@@" (match-string 2 id))
7208 header))))
7209@end lisp
7210
7211@end table
7212
7213
7214@node Thread Commands
7215@subsection Thread Commands
7216@cindex thread commands
7217
7218@table @kbd
7219
7220@item T k
7221@itemx C-M-k
7222@kindex T k (Summary)
7223@kindex C-M-k (Summary)
7224@findex gnus-summary-kill-thread
7225Mark all articles in the current (sub-)thread as read
7226(@code{gnus-summary-kill-thread}). If the prefix argument is positive,
7227remove all marks instead. If the prefix argument is negative, tick
7228articles instead.
7229
7230@item T l
7231@itemx C-M-l
7232@kindex T l (Summary)
7233@kindex C-M-l (Summary)
7234@findex gnus-summary-lower-thread
7235Lower the score of the current (sub-)thread
7236(@code{gnus-summary-lower-thread}).
7237
7238@item T i
7239@kindex T i (Summary)
7240@findex gnus-summary-raise-thread
7241Increase the score of the current (sub-)thread
7242(@code{gnus-summary-raise-thread}).
7243
7244@item T #
7245@kindex T # (Summary)
7246@findex gnus-uu-mark-thread
7247Set the process mark on the current (sub-)thread
7248(@code{gnus-uu-mark-thread}).
7249
7250@item T M-#
7251@kindex T M-# (Summary)
7252@findex gnus-uu-unmark-thread
7253Remove the process mark from the current (sub-)thread
7254(@code{gnus-uu-unmark-thread}).
7255
7256@item T T
7257@kindex T T (Summary)
7258@findex gnus-summary-toggle-threads
7259Toggle threading (@code{gnus-summary-toggle-threads}).
7260
7261@item T s
7262@kindex T s (Summary)
7263@findex gnus-summary-show-thread
7264Expose the (sub-)thread hidden under the current article, if any@*
7265(@code{gnus-summary-show-thread}).
7266
7267@item T h
7268@kindex T h (Summary)
7269@findex gnus-summary-hide-thread
7270Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
7271
7272@item T S
7273@kindex T S (Summary)
7274@findex gnus-summary-show-all-threads
7275Expose all hidden threads (@code{gnus-summary-show-all-threads}).
7276
7277@item T H
7278@kindex T H (Summary)
7279@findex gnus-summary-hide-all-threads
7280Hide all threads (@code{gnus-summary-hide-all-threads}).
7281
7282@item T t
7283@kindex T t (Summary)
7284@findex gnus-summary-rethread-current
7285Re-thread the current article's thread
7286(@code{gnus-summary-rethread-current}). This works even when the
7287summary buffer is otherwise unthreaded.
7288
7289@item T ^
7290@kindex T ^ (Summary)
7291@findex gnus-summary-reparent-thread
7292Make the current article the child of the marked (or previous) article
7293(@code{gnus-summary-reparent-thread}).
7294
01c52d31
MB
7295@item T M-^
7296@kindex T M-^ (Summary)
7297@findex gnus-summary-reparent-children
7298Make the current article the parent of the marked articles
7299(@code{gnus-summary-reparent-children}).
7300
4009494e
GM
7301@end table
7302
7303The following commands are thread movement commands. They all
7304understand the numeric prefix.
7305
7306@table @kbd
7307
7308@item T n
7309@kindex T n (Summary)
7310@itemx C-M-f
7311@kindex C-M-n (Summary)
7312@itemx M-down
7313@kindex M-down (Summary)
7314@findex gnus-summary-next-thread
7315Go to the next thread (@code{gnus-summary-next-thread}).
7316
7317@item T p
7318@kindex T p (Summary)
7319@itemx C-M-b
7320@kindex C-M-p (Summary)
7321@itemx M-up
7322@kindex M-up (Summary)
7323@findex gnus-summary-prev-thread
7324Go to the previous thread (@code{gnus-summary-prev-thread}).
7325
7326@item T d
7327@kindex T d (Summary)
7328@findex gnus-summary-down-thread
7329Descend the thread (@code{gnus-summary-down-thread}).
7330
7331@item T u
7332@kindex T u (Summary)
7333@findex gnus-summary-up-thread
7334Ascend the thread (@code{gnus-summary-up-thread}).
7335
7336@item T o
7337@kindex T o (Summary)
7338@findex gnus-summary-top-thread
7339Go to the top of the thread (@code{gnus-summary-top-thread}).
7340@end table
7341
7342@vindex gnus-thread-operation-ignore-subject
7343If you ignore subject while threading, you'll naturally end up with
7344threads that have several different subjects in them. If you then issue
7345a command like @kbd{T k} (@code{gnus-summary-kill-thread}) you might not
7346wish to kill the entire thread, but just those parts of the thread that
7347have the same subject as the current article. If you like this idea,
7348you can fiddle with @code{gnus-thread-operation-ignore-subject}. If it
7349is non-@code{nil} (which it is by default), subjects will be ignored
7350when doing thread commands. If this variable is @code{nil}, articles in
7351the same thread with different subjects will not be included in the
7352operation in question. If this variable is @code{fuzzy}, only articles
7353that have subjects fuzzily equal will be included (@pxref{Fuzzy
7354Matching}).
7355
7356
7357@node Sorting the Summary Buffer
7358@section Sorting the Summary Buffer
7359
7360@findex gnus-thread-sort-by-total-score
7361@findex gnus-thread-sort-by-date
7362@findex gnus-thread-sort-by-score
7363@findex gnus-thread-sort-by-subject
7364@findex gnus-thread-sort-by-author
01c52d31 7365@findex gnus-thread-sort-by-recipient
4009494e
GM
7366@findex gnus-thread-sort-by-number
7367@findex gnus-thread-sort-by-random
7368@vindex gnus-thread-sort-functions
7369@findex gnus-thread-sort-by-most-recent-number
7370@findex gnus-thread-sort-by-most-recent-date
7371If you are using a threaded summary display, you can sort the threads by
7372setting @code{gnus-thread-sort-functions}, which can be either a single
7373function, a list of functions, or a list containing functions and
7374@code{(not some-function)} elements.
7375
7376By default, sorting is done on article numbers. Ready-made sorting
7377predicate functions include @code{gnus-thread-sort-by-number},
01c52d31
MB
7378@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-recipient},
7379@code{gnus-thread-sort-by-subject},
7380@code{gnus-thread-sort-by-date},
7381@code{gnus-thread-sort-by-score},
4009494e
GM
7382@code{gnus-thread-sort-by-most-recent-number},
7383@code{gnus-thread-sort-by-most-recent-date},
7384@code{gnus-thread-sort-by-random} and
7385@code{gnus-thread-sort-by-total-score}.
7386
7387Each function takes two threads and returns non-@code{nil} if the first
7388thread should be sorted before the other. Note that sorting really is
7389normally done by looking only at the roots of each thread.
7390
7391If you use more than one function, the primary sort key should be the
7392last function in the list. You should probably always include
7393@code{gnus-thread-sort-by-number} in the list of sorting
7394functions---preferably first. This will ensure that threads that are
7395equal with respect to the other sort criteria will be displayed in
7396ascending article order.
7397
7398If you would like to sort by reverse score, then by subject, and finally
7399by number, you could do something like:
7400
7401@lisp
7402(setq gnus-thread-sort-functions
7403 '(gnus-thread-sort-by-number
7404 gnus-thread-sort-by-subject
7405 (not gnus-thread-sort-by-total-score)))
7406@end lisp
7407
7408The threads that have highest score will be displayed first in the
7409summary buffer. When threads have the same score, they will be sorted
7410alphabetically. The threads that have the same score and the same
7411subject will be sorted by number, which is (normally) the sequence in
7412which the articles arrived.
7413
7414If you want to sort by score and then reverse arrival order, you could
7415say something like:
7416
7417@lisp
7418(setq gnus-thread-sort-functions
01c52d31 7419 '((not gnus-thread-sort-by-number)
4009494e
GM
7420 gnus-thread-sort-by-score))
7421@end lisp
7422
7423@vindex gnus-thread-score-function
7424The function in the @code{gnus-thread-score-function} variable (default
7425@code{+}) is used for calculating the total score of a thread. Useful
7426functions might be @code{max}, @code{min}, or squared means, or whatever
7427tickles your fancy.
7428
7429@findex gnus-article-sort-functions
7430@findex gnus-article-sort-by-date
7431@findex gnus-article-sort-by-score
7432@findex gnus-article-sort-by-subject
7433@findex gnus-article-sort-by-author
7434@findex gnus-article-sort-by-random
7435@findex gnus-article-sort-by-number
7436If you are using an unthreaded display for some strange reason or
7437other, you have to fiddle with the @code{gnus-article-sort-functions}
7438variable. It is very similar to the
7439@code{gnus-thread-sort-functions}, except that it uses slightly
7440different functions for article comparison. Available sorting
7441predicate functions are @code{gnus-article-sort-by-number},
7442@code{gnus-article-sort-by-author},
7443@code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date},
7444@code{gnus-article-sort-by-random}, and
7445@code{gnus-article-sort-by-score}.
7446
7447If you want to sort an unthreaded summary display by subject, you could
7448say something like:
7449
7450@lisp
7451(setq gnus-article-sort-functions
7452 '(gnus-article-sort-by-number
7453 gnus-article-sort-by-subject))
7454@end lisp
7455
01c52d31
MB
7456You can define group specific sorting via @code{gnus-parameters},
7457@xref{Group Parameters}.
4009494e
GM
7458
7459
7460@node Asynchronous Fetching
7461@section Asynchronous Article Fetching
7462@cindex asynchronous article fetching
7463@cindex article pre-fetch
7464@cindex pre-fetch
7465
7466If you read your news from an @acronym{NNTP} server that's far away, the
7467network latencies may make reading articles a chore. You have to wait
7468for a while after pressing @kbd{n} to go to the next article before the
7469article appears. Why can't Gnus just go ahead and fetch the article
7470while you are reading the previous one? Why not, indeed.
7471
7472First, some caveats. There are some pitfalls to using asynchronous
7473article fetching, especially the way Gnus does it.
7474
7475Let's say you are reading article 1, which is short, and article 2 is
7476quite long, and you are not interested in reading that. Gnus does not
7477know this, so it goes ahead and fetches article 2. You decide to read
7478article 3, but since Gnus is in the process of fetching article 2, the
7479connection is blocked.
7480
7481To avoid these situations, Gnus will open two (count 'em two)
7482connections to the server. Some people may think this isn't a very nice
7483thing to do, but I don't see any real alternatives. Setting up that
7484extra connection takes some time, so Gnus startup will be slower.
7485
7486Gnus will fetch more articles than you will read. This will mean that
7487the link between your machine and the @acronym{NNTP} server will become more
7488loaded than if you didn't use article pre-fetch. The server itself will
7489also become more loaded---both with the extra article requests, and the
7490extra connection.
7491
7492Ok, so now you know that you shouldn't really use this thing@dots{} unless
7493you really want to.
7494
7495@vindex gnus-asynchronous
7496Here's how: Set @code{gnus-asynchronous} to @code{t}. The rest should
7497happen automatically.
7498
7499@vindex gnus-use-article-prefetch
7500You can control how many articles are to be pre-fetched by setting
7501@code{gnus-use-article-prefetch}. This is 30 by default, which means
7502that when you read an article in the group, the back end will pre-fetch
7503the next 30 articles. If this variable is @code{t}, the back end will
7504pre-fetch all the articles it can without bound. If it is
7505@code{nil}, no pre-fetching will be done.
7506
7507@vindex gnus-async-prefetch-article-p
7508@findex gnus-async-unread-p
7509There are probably some articles that you don't want to pre-fetch---read
7510articles, for instance. The @code{gnus-async-prefetch-article-p}
7511variable controls whether an article is to be pre-fetched. This
7512function should return non-@code{nil} when the article in question is
7513to be pre-fetched. The default is @code{gnus-async-unread-p}, which
7514returns @code{nil} on read articles. The function is called with an
7515article data structure as the only parameter.
7516
7517If, for instance, you wish to pre-fetch only unread articles shorter
7518than 100 lines, you could say something like:
7519
7520@lisp
7521(defun my-async-short-unread-p (data)
7522 "Return non-nil for short, unread articles."
7523 (and (gnus-data-unread-p data)
7524 (< (mail-header-lines (gnus-data-header data))
7525 100)))
7526
7527(setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
7528@end lisp
7529
7530These functions will be called many, many times, so they should
7531preferably be short and sweet to avoid slowing down Gnus too much.
7532It's probably a good idea to byte-compile things like this.
7533
7534@vindex gnus-prefetched-article-deletion-strategy
7535Articles have to be removed from the asynch buffer sooner or later. The
7536@code{gnus-prefetched-article-deletion-strategy} says when to remove
7537articles. This is a list that may contain the following elements:
7538
7539@table @code
7540@item read
7541Remove articles when they are read.
7542
7543@item exit
7544Remove articles when exiting the group.
7545@end table
7546
7547The default value is @code{(read exit)}.
7548
7549@c @vindex gnus-use-header-prefetch
7550@c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
7551@c from the next group.
7552
7553
7554@node Article Caching
7555@section Article Caching
7556@cindex article caching
7557@cindex caching
7558
7559If you have an @emph{extremely} slow @acronym{NNTP} connection, you may
7560consider turning article caching on. Each article will then be stored
7561locally under your home directory. As you may surmise, this could
7562potentially use @emph{huge} amounts of disk space, as well as eat up all
7563your inodes so fast it will make your head swim. In vodka.
7564
7565Used carefully, though, it could be just an easier way to save articles.
7566
7567@vindex gnus-use-long-file-name
7568@vindex gnus-cache-directory
7569@vindex gnus-use-cache
7570To turn caching on, set @code{gnus-use-cache} to @code{t}. By default,
7571all articles ticked or marked as dormant will then be copied
7572over to your local cache (@code{gnus-cache-directory}). Whether this
7573cache is flat or hierarchical is controlled by the
7574@code{gnus-use-long-file-name} variable, as usual.
7575
7576When re-selecting a ticked or dormant article, it will be fetched from the
7577cache instead of from the server. As articles in your cache will never
7578expire, this might serve as a method of saving articles while still
7579keeping them where they belong. Just mark all articles you want to save
7580as dormant, and don't worry.
7581
7582When an article is marked as read, is it removed from the cache.
7583
7584@vindex gnus-cache-remove-articles
7585@vindex gnus-cache-enter-articles
7586The entering/removal of articles from the cache is controlled by the
7587@code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
7588variables. Both are lists of symbols. The first is @code{(ticked
7589dormant)} by default, meaning that ticked and dormant articles will be
7590put in the cache. The latter is @code{(read)} by default, meaning that
7591articles marked as read are removed from the cache. Possibly
7592symbols in these two lists are @code{ticked}, @code{dormant},
7593@code{unread} and @code{read}.
7594
7595@findex gnus-jog-cache
7596So where does the massive article-fetching and storing come into the
7597picture? The @code{gnus-jog-cache} command will go through all
7598subscribed newsgroups, request all unread articles, score them, and
7599store them in the cache. You should only ever, ever ever ever, use this
7600command if 1) your connection to the @acronym{NNTP} server is really, really,
7601really slow and 2) you have a really, really, really huge disk.
7602Seriously. One way to cut down on the number of articles downloaded is
7603to score unwanted articles down and have them marked as read. They will
7604not then be downloaded by this command.
7605
7606@vindex gnus-uncacheable-groups
7607@vindex gnus-cacheable-groups
7608It is likely that you do not want caching on all groups. For instance,
7609if your @code{nnml} mail is located under your home directory, it makes no
7610sense to cache it somewhere else under your home directory. Unless you
7611feel that it's neat to use twice as much space.
7612
7613To limit the caching, you could set @code{gnus-cacheable-groups} to a
7614regexp of groups to cache, @samp{^nntp} for instance, or set the
7615@code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
7616Both variables are @code{nil} by default. If a group matches both
7617variables, the group is not cached.
7618
7619@findex gnus-cache-generate-nov-databases
7620@findex gnus-cache-generate-active
7621@vindex gnus-cache-active-file
7622The cache stores information on what articles it contains in its active
7623file (@code{gnus-cache-active-file}). If this file (or any other parts
7624of the cache) becomes all messed up for some reason or other, Gnus
7625offers two functions that will try to set things right. @kbd{M-x
7626gnus-cache-generate-nov-databases} will (re)build all the @acronym{NOV}
7627files, and @kbd{gnus-cache-generate-active} will (re)generate the active
7628file.
7629
7630@findex gnus-cache-move-cache
7631@code{gnus-cache-move-cache} will move your whole
7632@code{gnus-cache-directory} to some other location. You get asked to
7633where, isn't that cool?
7634
7635@node Persistent Articles
7636@section Persistent Articles
7637@cindex persistent articles
7638
7639Closely related to article caching, we have @dfn{persistent articles}.
7640In fact, it's just a different way of looking at caching, and much more
7641useful in my opinion.
7642
7643Say you're reading a newsgroup, and you happen on to some valuable gem
7644that you want to keep and treasure forever. You'd normally just save it
7645(using one of the many saving commands) in some file. The problem with
7646that is that it's just, well, yucky. Ideally you'd prefer just having
7647the article remain in the group where you found it forever; untouched by
7648the expiry going on at the news server.
7649
7650This is what a @dfn{persistent article} is---an article that just won't
7651be deleted. It's implemented using the normal cache functions, but
7652you use two explicit commands for managing persistent articles:
7653
7654@table @kbd
7655
7656@item *
7657@kindex * (Summary)
7658@findex gnus-cache-enter-article
7659Make the current article persistent (@code{gnus-cache-enter-article}).
7660
7661@item M-*
7662@kindex M-* (Summary)
7663@findex gnus-cache-remove-article
7664Remove the current article from the persistent articles
7665(@code{gnus-cache-remove-article}). This will normally delete the
7666article.
7667@end table
7668
7669Both these commands understand the process/prefix convention.
7670
7671To avoid having all ticked articles (and stuff) entered into the cache,
7672you should set @code{gnus-use-cache} to @code{passive} if you're just
7673interested in persistent articles:
7674
7675@lisp
7676(setq gnus-use-cache 'passive)
7677@end lisp
7678
01c52d31
MB
7679@node Sticky Articles
7680@section Sticky Articles
7681@cindex sticky articles
7682
7683When you select an article the current article buffer will be reused
7684according to the value of the variable
7685@code{gnus-single-article-buffer}. If its value is non-@code{nil} (the
7686default) all articles reuse the same article buffer. Else each group
7687has its own article buffer.
7688
7689This implies that it's not possible to have more than one article buffer
7690in a group at a time. But sometimes you might want to display all the
7691latest emails from your mother, your father, your aunt, your uncle and
7692your 17 cousins to coordinate the next christmas party.
7693
7694That's where sticky articles come in handy. A sticky article buffer
7695basically is a normal article buffer, but it won't be reused when you
7696select another article. You can make an article sticky with:
7697
7698@table @kbd
7699@item A S
7700@kindex A S (Summary)
7701@findex gnus-sticky-article
7702Make the current article sticky. If a prefix arg is given, ask for a
7703name for this sticky article buffer.
7704@end table
7705
7706To close a sticky article buffer you can use these commands:
7707
7708@table @kbd
7709@item q
7710@kindex q (Article)
7711@findex bury-buffer
7712Puts this sticky article buffer at the end of the list of all buffers.
7713
7714@item k
7715@kindex k (Article)
7716@findex gnus-kill-sticky-article-buffer
7717Kills this sticky article buffer.
7718@end table
7719
7720To kill all sticky article buffers you can use:
7721
7722@defun gnus-kill-sticky-article-buffers ARG
7723Kill all sticky article buffers.
7724If a prefix ARG is given, ask for confirmation.
7725@end defun
4009494e
GM
7726
7727@node Article Backlog
7728@section Article Backlog
7729@cindex backlog
7730@cindex article backlog
7731
7732If you have a slow connection, but the idea of using caching seems
7733unappealing to you (and it is, really), you can help the situation some
7734by switching on the @dfn{backlog}. This is where Gnus will buffer
7735already read articles so that it doesn't have to re-fetch articles
7736you've already read. This only helps if you are in the habit of
7737re-selecting articles you've recently read, of course. If you never do
7738that, turning the backlog on will slow Gnus down a little bit, and
7739increase memory usage some.
7740
7741@vindex gnus-keep-backlog
7742If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
7743at most @var{n} old articles in a buffer for later re-fetching. If this
7744variable is non-@code{nil} and is not a number, Gnus will store
7745@emph{all} read articles, which means that your Emacs will grow without
7746bound before exploding and taking your machine down with you. I put
7747that in there just to keep y'all on your toes.
7748
7749The default value is 20.
7750
7751
7752@node Saving Articles
7753@section Saving Articles
7754@cindex saving articles
7755
7756Gnus can save articles in a number of ways. Below is the documentation
7757for saving articles in a fairly straight-forward fashion (i.e., little
7758processing of the article is done before it is saved). For a different
7759approach (uudecoding, unsharing) you should use @code{gnus-uu}
7760(@pxref{Decoding Articles}).
7761
7762For the commands listed here, the target is a file. If you want to
7763save to a group, see the @kbd{B c} (@code{gnus-summary-copy-article})
7764command (@pxref{Mail Group Commands}).
7765
7766@vindex gnus-save-all-headers
7767If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
7768unwanted headers before saving the article.
7769
7770@vindex gnus-saved-headers
7771If the preceding variable is @code{nil}, all headers that match the
7772@code{gnus-saved-headers} regexp will be kept, while the rest will be
7773deleted before saving.
7774
7775@table @kbd
7776
7777@item O o
7778@itemx o
7779@kindex O o (Summary)
7780@kindex o (Summary)
7781@findex gnus-summary-save-article
7782@c @icon{gnus-summary-save-article}
7783Save the current article using the default article saver
7784(@code{gnus-summary-save-article}).
7785
7786@item O m
7787@kindex O m (Summary)
7788@findex gnus-summary-save-article-mail
7789Save the current article in a Unix mail box (mbox) file
7790(@code{gnus-summary-save-article-mail}).
7791
7792@item O r
7793@kindex O r (Summary)
7794@findex gnus-summary-save-article-rmail
7795Save the current article in Rmail format
7796(@code{gnus-summary-save-article-rmail}).
7797
7798@item O f
7799@kindex O f (Summary)
7800@findex gnus-summary-save-article-file
7801@c @icon{gnus-summary-save-article-file}
7802Save the current article in plain file format
7803(@code{gnus-summary-save-article-file}).
7804
7805@item O F
7806@kindex O F (Summary)
7807@findex gnus-summary-write-article-file
7808Write the current article in plain file format, overwriting any previous
7809file contents (@code{gnus-summary-write-article-file}).
7810
7811@item O b
7812@kindex O b (Summary)
7813@findex gnus-summary-save-article-body-file
7814Save the current article body in plain file format
7815(@code{gnus-summary-save-article-body-file}).
7816
7817@item O h
7818@kindex O h (Summary)
7819@findex gnus-summary-save-article-folder
7820Save the current article in mh folder format
7821(@code{gnus-summary-save-article-folder}).
7822
7823@item O v
7824@kindex O v (Summary)
7825@findex gnus-summary-save-article-vm
7826Save the current article in a VM folder
7827(@code{gnus-summary-save-article-vm}).
7828
7829@item O p
7830@itemx |
7831@kindex O p (Summary)
7832@kindex | (Summary)
7833@findex gnus-summary-pipe-output
7834Save the current article in a pipe. Uhm, like, what I mean is---Pipe
7835the current article to a process (@code{gnus-summary-pipe-output}).
7836If given a symbolic prefix (@pxref{Symbolic Prefixes}), include the
7837complete headers in the piped output.
7838
7839@item O P
7840@kindex O P (Summary)
7841@findex gnus-summary-muttprint
7842@vindex gnus-summary-muttprint-program
7843Save the current article into muttprint. That is, print it using the
7844external program @uref{http://muttprint.sourceforge.net/,
7845Muttprint}. The program name and options to use is controlled by the
7846variable @code{gnus-summary-muttprint-program}.
7847(@code{gnus-summary-muttprint}).
7848
7849@end table
7850
7851@vindex gnus-prompt-before-saving
7852All these commands use the process/prefix convention
7853(@pxref{Process/Prefix}). If you save bunches of articles using these
7854functions, you might get tired of being prompted for files to save each
7855and every article in. The prompting action is controlled by
7856the @code{gnus-prompt-before-saving} variable, which is @code{always} by
7857default, giving you that excessive prompting action you know and
7858loathe. If you set this variable to @code{t} instead, you'll be prompted
7859just once for each series of articles you save. If you like to really
7860have Gnus do all your thinking for you, you can even set this variable
7861to @code{nil}, which means that you will never be prompted for files to
7862save articles in. Gnus will simply save all the articles in the default
7863files.
7864
7865
7866@vindex gnus-default-article-saver
7867You can customize the @code{gnus-default-article-saver} variable to make
7868Gnus do what you want it to. You can use any of the eight ready-made
7869functions below, or you can create your own.
7870
7871@table @code
7872
7873@item gnus-summary-save-in-rmail
7874@findex gnus-summary-save-in-rmail
7875@vindex gnus-rmail-save-name
7876@findex gnus-plain-save-name
7877This is the default format, @dfn{Babyl}. Uses the function in the
7878@code{gnus-rmail-save-name} variable to get a file name to save the
7879article in. The default is @code{gnus-plain-save-name}.
7880
7881@item gnus-summary-save-in-mail
7882@findex gnus-summary-save-in-mail
7883@vindex gnus-mail-save-name
7884Save in a Unix mail (mbox) file. Uses the function in the
7885@code{gnus-mail-save-name} variable to get a file name to save the
7886article in. The default is @code{gnus-plain-save-name}.
7887
7888@item gnus-summary-save-in-file
7889@findex gnus-summary-save-in-file
7890@vindex gnus-file-save-name
7891@findex gnus-numeric-save-name
7892Append the article straight to an ordinary file. Uses the function in
7893the @code{gnus-file-save-name} variable to get a file name to save the
7894article in. The default is @code{gnus-numeric-save-name}.
7895
7896@item gnus-summary-write-to-file
7897@findex gnus-summary-write-to-file
7898Write the article straight to an ordinary file. The file is
7899overwritten if it exists. Uses the function in the
7900@code{gnus-file-save-name} variable to get a file name to save the
7901article in. The default is @code{gnus-numeric-save-name}.
7902
7903@item gnus-summary-save-body-in-file
7904@findex gnus-summary-save-body-in-file
7905Append the article body to an ordinary file. Uses the function in the
7906@code{gnus-file-save-name} variable to get a file name to save the
7907article in. The default is @code{gnus-numeric-save-name}.
7908
7909@item gnus-summary-write-body-to-file
7910@findex gnus-summary-write-body-to-file
7911Write the article body straight to an ordinary file. The file is
7912overwritten if it exists. Uses the function in the
7913@code{gnus-file-save-name} variable to get a file name to save the
7914article in. The default is @code{gnus-numeric-save-name}.
7915
7916@item gnus-summary-save-in-folder
7917@findex gnus-summary-save-in-folder
7918@findex gnus-folder-save-name
7919@findex gnus-Folder-save-name
7920@vindex gnus-folder-save-name
7921@cindex rcvstore
7922@cindex MH folders
7923Save the article to an MH folder using @code{rcvstore} from the MH
7924library. Uses the function in the @code{gnus-folder-save-name} variable
7925to get a file name to save the article in. The default is
7926@code{gnus-folder-save-name}, but you can also use
7927@code{gnus-Folder-save-name}, which creates capitalized names.
7928
7929@item gnus-summary-save-in-vm
7930@findex gnus-summary-save-in-vm
7931Save the article in a VM folder. You have to have the VM mail
7932reader to use this setting.
7933@end table
7934
7935The symbol of each function may have the following properties:
7936
7937@table @code
7938@item :decode
7939The value non-@code{nil} means save decoded articles. This is
7940meaningful only with @code{gnus-summary-save-in-file},
7941@code{gnus-summary-save-body-in-file},
7942@code{gnus-summary-write-to-file}, and
7943@code{gnus-summary-write-body-to-file}.
7944
7945@item :function
7946The value specifies an alternative function which appends, not
7947overwrites, articles to a file. This implies that when saving many
7948articles at a time, @code{gnus-prompt-before-saving} is bound to
7949@code{t} and all articles are saved in a single file. This is
7950meaningful only with @code{gnus-summary-write-to-file} and
7951@code{gnus-summary-write-body-to-file}.
7952
7953@item :headers
7954The value specifies the symbol of a variable of which the value
7955specifies headers to be saved. If it is omitted,
7956@code{gnus-save-all-headers} and @code{gnus-saved-headers} control what
7957headers should be saved.
7958@end table
7959
7960@vindex gnus-article-save-directory
7961All of these functions, except for the last one, will save the article
7962in the @code{gnus-article-save-directory}, which is initialized from the
7963@env{SAVEDIR} environment variable. This is @file{~/News/} by
7964default.
7965
7966As you can see above, the functions use different functions to find a
7967suitable name of a file to save the article in. Below is a list of
7968available functions that generate names:
7969
7970@table @code
7971
7972@item gnus-Numeric-save-name
7973@findex gnus-Numeric-save-name
7974File names like @file{~/News/Alt.andrea-dworkin/45}.
7975
7976@item gnus-numeric-save-name
7977@findex gnus-numeric-save-name
7978File names like @file{~/News/alt.andrea-dworkin/45}.
7979
7980@item gnus-Plain-save-name
7981@findex gnus-Plain-save-name
7982File names like @file{~/News/Alt.andrea-dworkin}.
7983
7984@item gnus-plain-save-name
7985@findex gnus-plain-save-name
7986File names like @file{~/News/alt.andrea-dworkin}.
7987
7988@item gnus-sender-save-name
7989@findex gnus-sender-save-name
7990File names like @file{~/News/larsi}.
7991@end table
7992
7993@vindex gnus-split-methods
7994You can have Gnus suggest where to save articles by plonking a regexp into
7995the @code{gnus-split-methods} alist. For instance, if you would like to
7996save articles related to Gnus in the file @file{gnus-stuff}, and articles
7997related to VM in @file{vm-stuff}, you could set this variable to something
7998like:
7999
8000@lisp
8001(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
8002 ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
8003 (my-choosing-function "../other-dir/my-stuff")
8004 ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
8005@end lisp
8006
8007We see that this is a list where each element is a list that has two
8008elements---the @dfn{match} and the @dfn{file}. The match can either be
8009a string (in which case it is used as a regexp to match on the article
8010head); it can be a symbol (which will be called as a function with the
8011group name as a parameter); or it can be a list (which will be
8012@code{eval}ed). If any of these actions have a non-@code{nil} result,
8013the @dfn{file} will be used as a default prompt. In addition, the
8014result of the operation itself will be used if the function or form
8015called returns a string or a list of strings.
8016
8017You basically end up with a list of file names that might be used when
8018saving the current article. (All ``matches'' will be used.) You will
8019then be prompted for what you really want to use as a name, with file
8020name completion over the results from applying this variable.
8021
8022This variable is @code{((gnus-article-archive-name))} by default, which
8023means that Gnus will look at the articles it saves for an
8024@code{Archive-name} line and use that as a suggestion for the file
8025name.
8026
8027Here's an example function to clean up file names somewhat. If you have
8028lots of mail groups called things like
8029@samp{nnml:mail.whatever}, you may want to chop off the beginning of
8030these group names before creating the file name to save to. The
8031following will do just that:
8032
8033@lisp
8034(defun my-save-name (group)
8035 (when (string-match "^nnml:mail." group)
8036 (substring group (match-end 0))))
8037
8038(setq gnus-split-methods
8039 '((gnus-article-archive-name)
8040 (my-save-name)))
8041@end lisp
8042
8043
8044@vindex gnus-use-long-file-name
8045Finally, you have the @code{gnus-use-long-file-name} variable. If it is
8046@code{nil}, all the preceding functions will replace all periods
8047(@samp{.}) in the group names with slashes (@samp{/})---which means that
8048the functions will generate hierarchies of directories instead of having
8049all the files in the top level directory
8050(@file{~/News/alt/andrea-dworkin} instead of
8051@file{~/News/alt.andrea-dworkin}.) This variable is @code{t} by default
8052on most systems. However, for historical reasons, this is @code{nil} on
8053Xenix and usg-unix-v machines by default.
8054
8055This function also affects kill and score file names. If this variable
8056is a list, and the list contains the element @code{not-score}, long file
8057names will not be used for score files, if it contains the element
8058@code{not-save}, long file names will not be used for saving, and if it
8059contains the element @code{not-kill}, long file names will not be used
8060for kill files.
8061
8062If you'd like to save articles in a hierarchy that looks something like
8063a spool, you could
8064
8065@lisp
8066(setq gnus-use-long-file-name '(not-save)) ; @r{to get a hierarchy}
8067(setq gnus-default-article-saver
8068 'gnus-summary-save-in-file) ; @r{no encoding}
8069@end lisp
8070
8071Then just save with @kbd{o}. You'd then read this hierarchy with
8072ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
8073the top level directory as the argument (@file{~/News/}). Then just walk
8074around to the groups/directories with @code{nneething}.
8075
8076
8077@node Decoding Articles
8078@section Decoding Articles
8079@cindex decoding articles
8080
8081Sometime users post articles (or series of articles) that have been
8082encoded in some way or other. Gnus can decode them for you.
8083
8084@menu
8085* Uuencoded Articles:: Uudecode articles.
8086* Shell Archives:: Unshar articles.
8087* PostScript Files:: Split PostScript.
8088* Other Files:: Plain save and binhex.
8089* Decoding Variables:: Variables for a happy decoding.
8090* Viewing Files:: You want to look at the result of the decoding?
8091@end menu
8092
8093@cindex series
8094@cindex article series
8095All these functions use the process/prefix convention
8096(@pxref{Process/Prefix}) for finding out what articles to work on, with
8097the extension that a ``single article'' means ``a single series''. Gnus
8098can find out by itself what articles belong to a series, decode all the
8099articles and unpack/view/save the resulting file(s).
8100
8101Gnus guesses what articles are in the series according to the following
8102simplish rule: The subjects must be (nearly) identical, except for the
8103last two numbers of the line. (Spaces are largely ignored, however.)
8104
8105For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
8106will find all the articles that match the regexp @samp{^cat.gif
8107([0-9]+/[0-9]+).*$}.
8108
8109Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
8110series}, will not be properly recognized by any of the automatic viewing
8111commands, and you have to mark the articles manually with @kbd{#}.
8112
8113
8114@node Uuencoded Articles
8115@subsection Uuencoded Articles
8116@cindex uudecode
8117@cindex uuencoded articles
8118
8119@table @kbd
8120
8121@item X u
8122@kindex X u (Summary)
8123@findex gnus-uu-decode-uu
8124@c @icon{gnus-uu-decode-uu}
8125Uudecodes the current series (@code{gnus-uu-decode-uu}).
8126
8127@item X U
8128@kindex X U (Summary)
8129@findex gnus-uu-decode-uu-and-save
8130Uudecodes and saves the current series
8131(@code{gnus-uu-decode-uu-and-save}).
8132
8133@item X v u
8134@kindex X v u (Summary)
8135@findex gnus-uu-decode-uu-view
8136Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
8137
8138@item X v U
8139@kindex X v U (Summary)
8140@findex gnus-uu-decode-uu-and-save-view
8141Uudecodes, views and saves the current series
8142(@code{gnus-uu-decode-uu-and-save-view}).
8143
8144@end table
8145
8146Remember that these all react to the presence of articles marked with
8147the process mark. If, for instance, you'd like to decode and save an
8148entire newsgroup, you'd typically do @kbd{M P a}
8149(@code{gnus-uu-mark-all}) and then @kbd{X U}
8150(@code{gnus-uu-decode-uu-and-save}).
8151
8152All this is very much different from how @code{gnus-uu} worked with
8153@sc{gnus 4.1}, where you had explicit keystrokes for everything under
8154the sun. This version of @code{gnus-uu} generally assumes that you mark
8155articles in some way (@pxref{Setting Process Marks}) and then press
8156@kbd{X u}.
8157
8158@vindex gnus-uu-notify-files
8159Note: When trying to decode articles that have names matching
8160@code{gnus-uu-notify-files}, which is hard-coded to
8161@samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
8162automatically post an article on @samp{comp.unix.wizards} saying that
8163you have just viewed the file in question. This feature can't be turned
8164off.
8165
8166
8167@node Shell Archives
8168@subsection Shell Archives
8169@cindex unshar
8170@cindex shell archives
8171@cindex shared articles
8172
8173Shell archives (``shar files'') used to be a popular way to distribute
8174sources, but it isn't used all that much today. In any case, we have
8175some commands to deal with these:
8176
8177@table @kbd
8178
8179@item X s
8180@kindex X s (Summary)
8181@findex gnus-uu-decode-unshar
8182Unshars the current series (@code{gnus-uu-decode-unshar}).
8183
8184@item X S
8185@kindex X S (Summary)
8186@findex gnus-uu-decode-unshar-and-save
8187Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
8188
8189@item X v s
8190@kindex X v s (Summary)
8191@findex gnus-uu-decode-unshar-view
8192Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
8193
8194@item X v S
8195@kindex X v S (Summary)
8196@findex gnus-uu-decode-unshar-and-save-view
8197Unshars, views and saves the current series
8198(@code{gnus-uu-decode-unshar-and-save-view}).
8199@end table
8200
8201
8202@node PostScript Files
8203@subsection PostScript Files
8204@cindex PostScript
8205
8206@table @kbd
8207
8208@item X p
8209@kindex X p (Summary)
8210@findex gnus-uu-decode-postscript
8211Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
8212
8213@item X P
8214@kindex X P (Summary)
8215@findex gnus-uu-decode-postscript-and-save
8216Unpack and save the current PostScript series
8217(@code{gnus-uu-decode-postscript-and-save}).
8218
8219@item X v p
8220@kindex X v p (Summary)
8221@findex gnus-uu-decode-postscript-view
8222View the current PostScript series
8223(@code{gnus-uu-decode-postscript-view}).
8224
8225@item X v P
8226@kindex X v P (Summary)
8227@findex gnus-uu-decode-postscript-and-save-view
8228View and save the current PostScript series
8229(@code{gnus-uu-decode-postscript-and-save-view}).
8230@end table
8231
8232
8233@node Other Files
8234@subsection Other Files
8235
8236@table @kbd
8237@item X o
8238@kindex X o (Summary)
8239@findex gnus-uu-decode-save
8240Save the current series
8241(@code{gnus-uu-decode-save}).
8242
8243@item X b
8244@kindex X b (Summary)
8245@findex gnus-uu-decode-binhex
8246Unbinhex the current series (@code{gnus-uu-decode-binhex}). This
8247doesn't really work yet.
b890d447
MB
8248
8249@item X Y
8250@kindex X Y (Summary)
8251@findex gnus-uu-decode-yenc
8252yEnc-decode the current series and save it (@code{gnus-uu-decode-yenc}).
4009494e
GM
8253@end table
8254
8255
8256@node Decoding Variables
8257@subsection Decoding Variables
8258
8259Adjective, not verb.
8260
8261@menu
8262* Rule Variables:: Variables that say how a file is to be viewed.
8263* Other Decode Variables:: Other decode variables.
8264* Uuencoding and Posting:: Variables for customizing uuencoding.
8265@end menu
8266
8267
8268@node Rule Variables
8269@subsubsection Rule Variables
8270@cindex rule variables
8271
8272Gnus uses @dfn{rule variables} to decide how to view a file. All these
8273variables are of the form
8274
8275@lisp
8276 (list '(regexp1 command2)
8277 '(regexp2 command2)
8278 ...)
8279@end lisp
8280
8281@table @code
8282
8283@item gnus-uu-user-view-rules
8284@vindex gnus-uu-user-view-rules
8285@cindex sox
8286This variable is consulted first when viewing files. If you wish to use,
8287for instance, @code{sox} to convert an @file{.au} sound file, you could
8288say something like:
8289@lisp
8290(setq gnus-uu-user-view-rules
8291 (list '("\\\\.au$" "sox %s -t .aiff > /dev/audio")))
8292@end lisp
8293
8294@item gnus-uu-user-view-rules-end
8295@vindex gnus-uu-user-view-rules-end
8296This variable is consulted if Gnus couldn't make any matches from the
8297user and default view rules.
8298
8299@item gnus-uu-user-archive-rules
8300@vindex gnus-uu-user-archive-rules
8301This variable can be used to say what commands should be used to unpack
8302archives.
8303@end table
8304
8305
8306@node Other Decode Variables
8307@subsubsection Other Decode Variables
8308
8309@table @code
8310@vindex gnus-uu-grabbed-file-functions
8311
8312@item gnus-uu-grabbed-file-functions
8313All functions in this list will be called right after each file has been
8314successfully decoded---so that you can move or view files right away,
8315and don't have to wait for all files to be decoded before you can do
8316anything. Ready-made functions you can put in this list are:
8317
8318@table @code
8319
8320@item gnus-uu-grab-view
8321@findex gnus-uu-grab-view
8322View the file.
8323
8324@item gnus-uu-grab-move
8325@findex gnus-uu-grab-move
8326Move the file (if you're using a saving function.)
8327@end table
8328
8329@item gnus-uu-be-dangerous
8330@vindex gnus-uu-be-dangerous
8331Specifies what to do if unusual situations arise during decoding. If
8332@code{nil}, be as conservative as possible. If @code{t}, ignore things
8333that didn't work, and overwrite existing files. Otherwise, ask each
8334time.
8335
8336@item gnus-uu-ignore-files-by-name
8337@vindex gnus-uu-ignore-files-by-name
8338Files with name matching this regular expression won't be viewed.
8339
8340@item gnus-uu-ignore-files-by-type
8341@vindex gnus-uu-ignore-files-by-type
8342Files with a @acronym{MIME} type matching this variable won't be viewed.
8343Note that Gnus tries to guess what type the file is based on the name.
8344@code{gnus-uu} is not a @acronym{MIME} package (yet), so this is slightly
8345kludgey.
8346
8347@item gnus-uu-tmp-dir
8348@vindex gnus-uu-tmp-dir
8349Where @code{gnus-uu} does its work.
8350
8351@item gnus-uu-do-not-unpack-archives
8352@vindex gnus-uu-do-not-unpack-archives
8353Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
8354looking for files to display.
8355
8356@item gnus-uu-view-and-save
8357@vindex gnus-uu-view-and-save
8358Non-@code{nil} means that the user will always be asked to save a file
8359after viewing it.
8360
8361@item gnus-uu-ignore-default-view-rules
8362@vindex gnus-uu-ignore-default-view-rules
8363Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
8364rules.
8365
8366@item gnus-uu-ignore-default-archive-rules
8367@vindex gnus-uu-ignore-default-archive-rules
8368Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
8369unpacking commands.
8370
8371@item gnus-uu-kill-carriage-return
8372@vindex gnus-uu-kill-carriage-return
8373Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
8374from articles.
8375
8376@item gnus-uu-unmark-articles-not-decoded
8377@vindex gnus-uu-unmark-articles-not-decoded
8378Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
8379decoded articles as unread.
8380
8381@item gnus-uu-correct-stripped-uucode
8382@vindex gnus-uu-correct-stripped-uucode
8383Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
8384uuencoded files that have had trailing spaces deleted.
8385
8386@item gnus-uu-pre-uudecode-hook
8387@vindex gnus-uu-pre-uudecode-hook
8388Hook run before sending a message to @code{uudecode}.
8389
8390@item gnus-uu-view-with-metamail
8391@vindex gnus-uu-view-with-metamail
8392@cindex metamail
8393Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
8394commands defined by the rule variables and just fudge a @acronym{MIME}
8395content type based on the file name. The result will be fed to
8396@code{metamail} for viewing.
8397
8398@item gnus-uu-save-in-digest
8399@vindex gnus-uu-save-in-digest
8400Non-@code{nil} means that @code{gnus-uu}, when asked to save without
8401decoding, will save in digests. If this variable is @code{nil},
8402@code{gnus-uu} will just save everything in a file without any
8403embellishments. The digesting almost conforms to RFC 1153---no easy way
8404to specify any meaningful volume and issue numbers were found, so I
8405simply dropped them.
8406
8407@end table
8408
8409
8410@node Uuencoding and Posting
8411@subsubsection Uuencoding and Posting
8412
8413@table @code
8414
8415@item gnus-uu-post-include-before-composing
8416@vindex gnus-uu-post-include-before-composing
8417Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
8418before you compose the article. If this variable is @code{t}, you can
8419either include an encoded file with @kbd{C-c C-i} or have one included
8420for you when you post the article.
8421
8422@item gnus-uu-post-length
8423@vindex gnus-uu-post-length
8424Maximum length of an article. The encoded file will be split into how
8425many articles it takes to post the entire file.
8426
8427@item gnus-uu-post-threaded
8428@vindex gnus-uu-post-threaded
8429Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
8430thread. This may not be smart, as no other decoder I have seen is able
8431to follow threads when collecting uuencoded articles. (Well, I have
8432seen one package that does that---@code{gnus-uu}, but somehow, I don't
8433think that counts@dots{}) Default is @code{nil}.
8434
8435@item gnus-uu-post-separate-description
8436@vindex gnus-uu-post-separate-description
8437Non-@code{nil} means that the description will be posted in a separate
8438article. The first article will typically be numbered (0/x). If this
8439variable is @code{nil}, the description the user enters will be included
8440at the beginning of the first article, which will be numbered (1/x).
8441Default is @code{t}.
8442
8443@end table
8444
8445
8446@node Viewing Files
8447@subsection Viewing Files
8448@cindex viewing files
8449@cindex pseudo-articles
8450
8451After decoding, if the file is some sort of archive, Gnus will attempt
8452to unpack the archive and see if any of the files in the archive can be
8453viewed. For instance, if you have a gzipped tar file @file{pics.tar.gz}
8454containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
8455uncompress and de-tar the main file, and then view the two pictures.
8456This unpacking process is recursive, so if the archive contains archives
8457of archives, it'll all be unpacked.
8458
8459Finally, Gnus will normally insert a @dfn{pseudo-article} for each
8460extracted file into the summary buffer. If you go to these
8461``articles'', you will be prompted for a command to run (usually Gnus
8462will make a suggestion), and then the command will be run.
8463
8464@vindex gnus-view-pseudo-asynchronously
8465If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
8466until the viewing is done before proceeding.
8467
8468@vindex gnus-view-pseudos
8469If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
8470the pseudo-articles into the summary buffer, but view them
8471immediately. If this variable is @code{not-confirm}, the user won't even
8472be asked for a confirmation before viewing is done.
8473
8474@vindex gnus-view-pseudos-separately
8475If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
8476pseudo-article will be created for each file to be viewed. If
8477@code{nil}, all files that use the same viewing command will be given as
8478a list of parameters to that command.
8479
8480@vindex gnus-insert-pseudo-articles
8481If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
8482pseudo-articles when decoding. It is @code{t} by default.
8483
8484So; there you are, reading your @emph{pseudo-articles} in your
8485@emph{virtual newsgroup} from the @emph{virtual server}; and you think:
8486Why isn't anything real anymore? How did we get here?
8487
8488
8489@node Article Treatment
8490@section Article Treatment
8491
8492Reading through this huge manual, you may have quite forgotten that the
8493object of newsreaders is to actually, like, read what people have
8494written. Reading articles. Unfortunately, people are quite bad at
8495writing, so there are tons of functions and variables to make reading
8496these articles easier.
8497
8498@menu
8499* Article Highlighting:: You want to make the article look like fruit salad.
8500* Article Fontisizing:: Making emphasized text look nice.
8501* Article Hiding:: You also want to make certain info go away.
8502* Article Washing:: Lots of way-neat functions to make life better.
8503* Article Header:: Doing various header transformations.
8504* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
8505* Article Button Levels:: Controlling appearance of buttons.
8506* Article Date:: Grumble, UT!
8507* Article Display:: Display various stuff---X-Face, Picons, Smileys
8508* Article Signature:: What is a signature?
8509* Article Miscellanea:: Various other stuff.
8510@end menu
8511
8512
8513@node Article Highlighting
8514@subsection Article Highlighting
8515@cindex highlighting
8516
8517Not only do you want your article buffer to look like fruit salad, but
8518you want it to look like technicolor fruit salad.
8519
8520@table @kbd
8521
8522@item W H a
8523@kindex W H a (Summary)
8524@findex gnus-article-highlight
8525@findex gnus-article-maybe-highlight
8526Do much highlighting of the current article
8527(@code{gnus-article-highlight}). This function highlights header, cited
8528text, the signature, and adds buttons to the body and the head.
8529
8530@item W H h
8531@kindex W H h (Summary)
8532@findex gnus-article-highlight-headers
8533@vindex gnus-header-face-alist
8534Highlight the headers (@code{gnus-article-highlight-headers}). The
8535highlighting will be done according to the @code{gnus-header-face-alist}
8536variable, which is a list where each element has the form
8537@code{(@var{regexp} @var{name} @var{content})}.
8538@var{regexp} is a regular expression for matching the
8539header, @var{name} is the face used for highlighting the header name
8540(@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
8541the header value. The first match made will be used. Note that
8542@var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
8543
8544@item W H c
8545@kindex W H c (Summary)
8546@findex gnus-article-highlight-citation
8547Highlight cited text (@code{gnus-article-highlight-citation}).
8548
8549Some variables to customize the citation highlights:
8550
8551@table @code
8552@vindex gnus-cite-parse-max-size
8553
8554@item gnus-cite-parse-max-size
8555If the article size in bytes is bigger than this variable (which is
855625000 by default), no citation highlighting will be performed.
8557
8558@item gnus-cite-max-prefix
8559@vindex gnus-cite-max-prefix
8560Maximum possible length for a citation prefix (default 20).
8561
8562@item gnus-cite-face-list
8563@vindex gnus-cite-face-list
8564List of faces used for highlighting citations (@pxref{Faces and Fonts}).
8565When there are citations from multiple articles in the same message,
8566Gnus will try to give each citation from each article its own face.
8567This should make it easier to see who wrote what.
8568
8569@item gnus-supercite-regexp
8570@vindex gnus-supercite-regexp
8571Regexp matching normal Supercite attribution lines.
8572
8573@item gnus-supercite-secondary-regexp
8574@vindex gnus-supercite-secondary-regexp
8575Regexp matching mangled Supercite attribution lines.
8576
8577@item gnus-cite-minimum-match-count
8578@vindex gnus-cite-minimum-match-count
8579Minimum number of identical prefixes we have to see before we believe
8580that it's a citation.
8581
8582@item gnus-cite-attribution-prefix
8583@vindex gnus-cite-attribution-prefix
8584Regexp matching the beginning of an attribution line.
8585
8586@item gnus-cite-attribution-suffix
8587@vindex gnus-cite-attribution-suffix
8588Regexp matching the end of an attribution line.
8589
8590@item gnus-cite-attribution-face
8591@vindex gnus-cite-attribution-face
8592Face used for attribution lines. It is merged with the face for the
8593cited text belonging to the attribution.
8594
8595@item gnus-cite-ignore-quoted-from
8596@vindex gnus-cite-ignore-quoted-from
8597If non-@code{nil}, no citation highlighting will be performed on lines
8598beginning with @samp{>From }. Those lines may have been quoted by MTAs
8599in order not to mix up with the envelope From line. The default value
8600is @code{t}.
8601
8602@end table
8603
8604
8605@item W H s
8606@kindex W H s (Summary)
8607@vindex gnus-signature-separator
8608@vindex gnus-signature-face
8609@findex gnus-article-highlight-signature
8610Highlight the signature (@code{gnus-article-highlight-signature}).
8611Everything after @code{gnus-signature-separator} (@pxref{Article
8612Signature}) in an article will be considered a signature and will be
8613highlighted with @code{gnus-signature-face}, which is @code{italic} by
8614default.
8615
8616@end table
8617
8618@xref{Customizing Articles}, for how to highlight articles automatically.
8619
8620
8621@node Article Fontisizing
8622@subsection Article Fontisizing
8623@cindex emphasis
8624@cindex article emphasis
8625
8626@findex gnus-article-emphasize
8627@kindex W e (Summary)
8628People commonly add emphasis to words in news articles by writing things
8629like @samp{_this_} or @samp{*this*} or @samp{/this/}. Gnus can make
8630this look nicer by running the article through the @kbd{W e}
8631(@code{gnus-article-emphasize}) command.
8632
8633@vindex gnus-emphasis-alist
8634How the emphasis is computed is controlled by the
8635@code{gnus-emphasis-alist} variable. This is an alist where the first
8636element is a regular expression to be matched. The second is a number
8637that says what regular expression grouping is used to find the entire
8638emphasized word. The third is a number that says what regexp grouping
8639should be displayed and highlighted. (The text between these two
8640groupings will be hidden.) The fourth is the face used for
8641highlighting.
8642
8643@lisp
8644(setq gnus-emphasis-alist
8645 '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
8646 ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
8647@end lisp
8648
8649@cindex slash
8650@cindex asterisk
8651@cindex underline
8652@cindex /
8653@cindex *
8654
8655@vindex gnus-emphasis-underline
8656@vindex gnus-emphasis-bold
8657@vindex gnus-emphasis-italic
8658@vindex gnus-emphasis-underline-bold
8659@vindex gnus-emphasis-underline-italic
8660@vindex gnus-emphasis-bold-italic
8661@vindex gnus-emphasis-underline-bold-italic
8662By default, there are seven rules, and they use the following faces:
8663@code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
8664@code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
8665@code{gnus-emphasis-underline-italic},
8666@code{gnus-emphasis-underline-bold}, and
8667@code{gnus-emphasis-underline-bold-italic}.
8668
8669If you want to change these faces, you can either use @kbd{M-x
8670customize}, or you can use @code{copy-face}. For instance, if you want
8671to make @code{gnus-emphasis-italic} use a red face instead, you could
8672say something like:
8673
8674@lisp
8675(copy-face 'red 'gnus-emphasis-italic)
8676@end lisp
8677
8678@vindex gnus-group-highlight-words-alist
8679
8680If you want to highlight arbitrary words, you can use the
8681@code{gnus-group-highlight-words-alist} variable, which uses the same
8682syntax as @code{gnus-emphasis-alist}. The @code{highlight-words} group
8683parameter (@pxref{Group Parameters}) can also be used.
8684
8685@xref{Customizing Articles}, for how to fontize articles automatically.
8686
8687
8688@node Article Hiding
8689@subsection Article Hiding
8690@cindex article hiding
8691
8692Or rather, hiding certain things in each article. There usually is much
8693too much cruft in most articles.
8694
8695@table @kbd
8696
8697@item W W a
8698@kindex W W a (Summary)
8699@findex gnus-article-hide
8700Do quite a lot of hiding on the article buffer
8701(@kbd{gnus-article-hide}). In particular, this function will hide
8702headers, @acronym{PGP}, cited text and the signature.
8703
8704@item W W h
8705@kindex W W h (Summary)
8706@findex gnus-article-hide-headers
8707Hide headers (@code{gnus-article-hide-headers}). @xref{Hiding
8708Headers}.
8709
8710@item W W b
8711@kindex W W b (Summary)
8712@findex gnus-article-hide-boring-headers
8713Hide headers that aren't particularly interesting
8714(@code{gnus-article-hide-boring-headers}). @xref{Hiding Headers}.
8715
8716@item W W s
8717@kindex W W s (Summary)
8718@findex gnus-article-hide-signature
8719Hide signature (@code{gnus-article-hide-signature}). @xref{Article
8720Signature}.
8721
8722@item W W l
8723@kindex W W l (Summary)
8724@findex gnus-article-hide-list-identifiers
8725@vindex gnus-list-identifiers
8726Strip list identifiers specified in @code{gnus-list-identifiers}. These
8727are strings some mailing list servers add to the beginning of all
8728@code{Subject} headers---for example, @samp{[zebra 4711]}. Any leading
8729@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
8730may not contain @code{\\(..\\)}.
8731
8732@table @code
8733
8734@item gnus-list-identifiers
8735@vindex gnus-list-identifiers
8736A regular expression that matches list identifiers to be removed from
8737subject. This can also be a list of regular expressions.
8738
8739@end table
8740
8741@item W W P
8742@kindex W W P (Summary)
8743@findex gnus-article-hide-pem
8744Hide @acronym{PEM} (privacy enhanced messages) cruft
8745(@code{gnus-article-hide-pem}).
8746
8747@item W W B
8748@kindex W W B (Summary)
8749@findex gnus-article-strip-banner
8750@vindex gnus-article-banner-alist
8751@vindex gnus-article-address-banner-alist
8752@cindex banner
8753@cindex OneList
8754@cindex stripping advertisements
8755@cindex advertisements
8756Strip the banner specified by the @code{banner} group parameter
8757(@code{gnus-article-strip-banner}). This is mainly used to hide those
8758annoying banners and/or signatures that some mailing lists and moderated
8759groups adds to all the messages. The way to use this function is to add
8760the @code{banner} group parameter (@pxref{Group Parameters}) to the
8761group you want banners stripped from. The parameter either be a string,
8762which will be interpreted as a regular expression matching text to be
8763removed, or the symbol @code{signature}, meaning that the (last)
8764signature should be removed, or other symbol, meaning that the
8765corresponding regular expression in @code{gnus-article-banner-alist} is
8766used.
8767
8768Regardless of a group, you can hide things like advertisements only when
8769the sender of an article has a certain mail address specified in
8770@code{gnus-article-address-banner-alist}.
8771
8772@table @code
8773
8774@item gnus-article-address-banner-alist
8775@vindex gnus-article-address-banner-alist
8776Alist of mail addresses and banners. Each element has the form
8777@code{(@var{address} . @var{banner})}, where @var{address} is a regexp
8778matching a mail address in the From header, @var{banner} is one of a
8779symbol @code{signature}, an item in @code{gnus-article-banner-alist},
8780a regexp and @code{nil}. If @var{address} matches author's mail
8781address, it will remove things like advertisements. For example, if a
8782sender has the mail address @samp{hail@@yoo-hoo.co.jp} and there is a
8783banner something like @samp{Do You Yoo-hoo!?} in all articles he
8784sends, you can use the following element to remove them:
8785
8786@lisp
8787("@@yoo-hoo\\.co\\.jp\\'" .
8788 "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
8789@end lisp
8790
8791@end table
8792
8793@item W W c
8794@kindex W W c (Summary)
8795@findex gnus-article-hide-citation
8796Hide citation (@code{gnus-article-hide-citation}). Some variables for
8797customizing the hiding:
8798
8799@table @code
8800
8801@item gnus-cited-opened-text-button-line-format
8802@itemx gnus-cited-closed-text-button-line-format
8803@vindex gnus-cited-closed-text-button-line-format
8804@vindex gnus-cited-opened-text-button-line-format
8805Gnus adds buttons to show where the cited text has been hidden, and to
8806allow toggle hiding the text. The format of the variable is specified
8807by these format-like variable (@pxref{Formatting Variables}). These
8808specs are valid:
8809
8810@table @samp
8811@item b
8812Starting point of the hidden text.
8813@item e
8814Ending point of the hidden text.
8815@item l
8816Number of characters in the hidden region.
8817@item n
8818Number of lines of hidden text.
8819@end table
8820
8821@item gnus-cited-lines-visible
8822@vindex gnus-cited-lines-visible
8823The number of lines at the beginning of the cited text to leave
8824shown. This can also be a cons cell with the number of lines at the top
8825and bottom of the text, respectively, to remain visible.
8826
8827@end table
8828
8829@item W W C-c
8830@kindex W W C-c (Summary)
8831@findex gnus-article-hide-citation-maybe
8832
8833Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
8834following two variables:
8835
8836@table @code
8837@item gnus-cite-hide-percentage
8838@vindex gnus-cite-hide-percentage
8839If the cited text is of a bigger percentage than this variable (default
884050), hide the cited text.
8841
8842@item gnus-cite-hide-absolute
8843@vindex gnus-cite-hide-absolute
8844The cited text must have at least this length (default 10) before it
8845is hidden.
8846@end table
8847
8848@item W W C
8849@kindex W W C (Summary)
8850@findex gnus-article-hide-citation-in-followups
8851Hide cited text in articles that aren't roots
8852(@code{gnus-article-hide-citation-in-followups}). This isn't very
8853useful as an interactive command, but might be a handy function to stick
8854have happen automatically (@pxref{Customizing Articles}).
8855
8856@end table
8857
8858All these ``hiding'' commands are toggles, but if you give a negative
8859prefix to these commands, they will show what they have previously
8860hidden. If you give a positive prefix, they will always hide.
8861
8862Also @pxref{Article Highlighting} for further variables for
8863citation customization.
8864
8865@xref{Customizing Articles}, for how to hide article elements
8866automatically.
8867
8868
8869@node Article Washing
8870@subsection Article Washing
8871@cindex washing
8872@cindex article washing
8873
8874We call this ``article washing'' for a really good reason. Namely, the
8875@kbd{A} key was taken, so we had to use the @kbd{W} key instead.
8876
8877@dfn{Washing} is defined by us as ``changing something from something to
8878something else'', but normally results in something looking better.
8879Cleaner, perhaps.
8880
8881@xref{Customizing Articles}, if you want to change how Gnus displays
8882articles by default.
8883
8884@table @kbd
8885
8886@item C-u g
8887This is not really washing, it's sort of the opposite of washing. If
8888you type this, you see the article exactly as it exists on disk or on
8889the server.
8890
8891@item g
8892Force redisplaying of the current article
8893(@code{gnus-summary-show-article}). This is also not really washing.
8894If you type this, you see the article without any previously applied
8895interactive Washing functions but with all default treatments
8896(@pxref{Customizing Articles}).
8897
8898@item W l
8899@kindex W l (Summary)
8900@findex gnus-summary-stop-page-breaking
8901Remove page breaks from the current article
8902(@code{gnus-summary-stop-page-breaking}). @xref{Misc Article}, for page
8903delimiters.
8904
8905@item W r
8906@kindex W r (Summary)
8907@findex gnus-summary-caesar-message
8908@c @icon{gnus-summary-caesar-message}
8909Do a Caesar rotate (rot13) on the article buffer
8910(@code{gnus-summary-caesar-message}).
8911Unreadable articles that tell you to read them with Caesar rotate or rot13.
8912(Typically offensive jokes and such.)
8913
8914It's commonly called ``rot13'' because each letter is rotated 13
8915positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
8916#15). It is sometimes referred to as ``Caesar rotate'' because Caesar
8917is rumored to have employed this form of, uh, somewhat weak encryption.
8918
8919@item W m
8920@kindex W m (Summary)
8921@findex gnus-summary-morse-message
8922Morse decode the article buffer (@code{gnus-summary-morse-message}).
8923
01c52d31
MB
8924@item W i
8925@kindex W i (Summary)
8926@findex gnus-summary-idna-message
8927Decode IDNA encoded domain names in the current articles. IDNA
8928encoded domain names looks like @samp{xn--bar}. If a string remain
8929unencoded after running invoking this, it is likely an invalid IDNA
8930string (@samp{xn--bar} is invalid). You must have GNU Libidn
8931(@url{http://www.gnu.org/software/libidn/}) installed for this command
8932to work.
8933
4009494e
GM
8934@item W t
8935@item t
8936@kindex W t (Summary)
8937@kindex t (Summary)
8938@findex gnus-summary-toggle-header
8939Toggle whether to display all headers in the article buffer
8940(@code{gnus-summary-toggle-header}).
8941
8942@item W v
8943@kindex W v (Summary)
8944@findex gnus-summary-verbose-headers
8945Toggle whether to display all headers in the article buffer permanently
8946(@code{gnus-summary-verbose-headers}).
8947
8948@item W o
8949@kindex W o (Summary)
8950@findex gnus-article-treat-overstrike
8951Treat overstrike (@code{gnus-article-treat-overstrike}).
8952
8953@item W d
8954@kindex W d (Summary)
8955@findex gnus-article-treat-dumbquotes
8956@vindex gnus-article-dumbquotes-map
8957@cindex Smartquotes
8958@cindex M****s*** sm*rtq**t*s
8959@cindex Latin 1
8960Treat M****s*** sm*rtq**t*s according to
8961@code{gnus-article-dumbquotes-map}
8962(@code{gnus-article-treat-dumbquotes}). Note that this function guesses
8963whether a character is a sm*rtq**t* or not, so it should only be used
8964interactively.
8965
8966Sm*rtq**t*s are M****s***'s unilateral extension to the character map in
8967an attempt to provide more quoting characters. If you see something
8968like @code{\222} or @code{\264} where you're expecting some kind of
8969apostrophe or quotation mark, then try this wash.
8970
8971@item W Y f
8972@kindex W Y f (Summary)
8973@findex gnus-article-outlook-deuglify-article
8974@cindex Outlook Express
8975Full deuglify of broken Outlook (Express) articles: Treat dumbquotes,
8976unwrap lines, repair attribution and rearrange citation.
8977(@code{gnus-article-outlook-deuglify-article}).
8978
8979@item W Y u
8980@kindex W Y u (Summary)
8981@findex gnus-article-outlook-unwrap-lines
8982@vindex gnus-outlook-deuglify-unwrap-min
8983@vindex gnus-outlook-deuglify-unwrap-max
8984Unwrap lines that appear to be wrapped citation lines. You can control
8985what lines will be unwrapped by frobbing
8986@code{gnus-outlook-deuglify-unwrap-min} and
8987@code{gnus-outlook-deuglify-unwrap-max}, indicating the minimum and
8988maximum length of an unwrapped citation line.
8989(@code{gnus-article-outlook-unwrap-lines}).
8990
8991@item W Y a
8992@kindex W Y a (Summary)
8993@findex gnus-article-outlook-repair-attribution
8994Repair a broken attribution line.@*
8995(@code{gnus-article-outlook-repair-attribution}).
8996
8997@item W Y c
8998@kindex W Y c (Summary)
8999@findex gnus-article-outlook-rearrange-citation
9000Repair broken citations by rearranging the text.
9001(@code{gnus-article-outlook-rearrange-citation}).
9002
9003@item W w
9004@kindex W w (Summary)
9005@findex gnus-article-fill-cited-article
9006Do word wrap (@code{gnus-article-fill-cited-article}).
9007
9008You can give the command a numerical prefix to specify the width to use
9009when filling.
9010
9011@item W Q
9012@kindex W Q (Summary)
9013@findex gnus-article-fill-long-lines
9014Fill long lines (@code{gnus-article-fill-long-lines}).
9015
9016@item W C
9017@kindex W C (Summary)
9018@findex gnus-article-capitalize-sentences
9019Capitalize the first word in each sentence
9020(@code{gnus-article-capitalize-sentences}).
9021
9022@item W c
9023@kindex W c (Summary)
9024@findex gnus-article-remove-cr
9025Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
9026(this takes care of DOS line endings), and then translate any remaining
9027CRs into LF (this takes care of Mac line endings)
9028(@code{gnus-article-remove-cr}).
9029
9030@item W q
9031@kindex W q (Summary)
9032@findex gnus-article-de-quoted-unreadable
9033Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
9034Quoted-Printable is one common @acronym{MIME} encoding employed when
9035sending non-@acronym{ASCII} (i.e., 8-bit) articles. It typically
01c52d31
MB
9036makes strings like @samp{d@'ej@`a vu} look like @samp{d=E9j=E0 vu},
9037which doesn't look very readable to me. Note that this is usually
9038done automatically by Gnus if the message in question has a
4009494e
GM
9039@code{Content-Transfer-Encoding} header that says that this encoding
9040has been done. If a prefix is given, a charset will be asked for.
9041
9042@item W 6
9043@kindex W 6 (Summary)
9044@findex gnus-article-de-base64-unreadable
9045Treat base64 (@code{gnus-article-de-base64-unreadable}). Base64 is
9046one common @acronym{MIME} encoding employed when sending
9047non-@acronym{ASCII} (i.e., 8-bit) articles. Note that this is
9048usually done automatically by Gnus if the message in question has a
9049@code{Content-Transfer-Encoding} header that says that this encoding
9050has been done. If a prefix is given, a charset will be asked for.
9051
9052@item W Z
9053@kindex W Z (Summary)
9054@findex gnus-article-decode-HZ
9055Treat HZ or HZP (@code{gnus-article-decode-HZ}). HZ (or HZP) is one
9056common encoding employed when sending Chinese articles. It typically
9057makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
9058
01c52d31
MB
9059@item W A
9060@kindex W A (Summary)
9061@findex gnus-article-treat-ansi-sequences
9062@cindex @acronym{ANSI} control sequences
9063Translate @acronym{ANSI} SGR control sequences into overlays or
9064extents (@code{gnus-article-treat-ansi-sequences}). @acronym{ANSI}
9065sequences are used in some Chinese hierarchies for highlighting.
9066
4009494e
GM
9067@item W u
9068@kindex W u (Summary)
9069@findex gnus-article-unsplit-urls
9070Remove newlines from within URLs. Some mailers insert newlines into
9071outgoing email messages to keep lines short. This reformatting can
9072split long URLs onto multiple lines. Repair those URLs by removing
9073the newlines (@code{gnus-article-unsplit-urls}).
9074
9075@item W h
9076@kindex W h (Summary)
9077@findex gnus-article-wash-html
9078Treat @acronym{HTML} (@code{gnus-article-wash-html}). Note that this is
9079usually done automatically by Gnus if the message in question has a
9080@code{Content-Type} header that says that the message is @acronym{HTML}.
9081
9082If a prefix is given, a charset will be asked for. If it is a number,
9083the charset defined in @code{gnus-summary-show-article-charset-alist}
9084(@pxref{Paging the Article}) will be used.
9085
9086@vindex gnus-article-wash-function
9087The default is to use the function specified by
9088@code{mm-text-html-renderer} (@pxref{Display Customization, ,Display
9089Customization, emacs-mime, The Emacs MIME Manual}) to convert the
9090@acronym{HTML}, but this is controlled by the
9091@code{gnus-article-wash-function} variable. Pre-defined functions you
9092can use include:
9093
9094@table @code
9095@item w3
9096Use Emacs/W3.
9097
9098@item w3m
9099Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}.
9100
9101@item w3m-standalone
9102Use @uref{http://w3m.sourceforge.net/, w3m}.
9103
9104@item links
9105Use @uref{http://links.sf.net/, Links}.
9106
9107@item lynx
9108Use @uref{http://lynx.isc.org/, Lynx}.
9109
9110@item html2text
9111Use html2text---a simple @acronym{HTML} converter included with Gnus.
9112
9113@end table
9114
9115@item W b
9116@kindex W b (Summary)
9117@findex gnus-article-add-buttons
9118Add clickable buttons to the article (@code{gnus-article-add-buttons}).
9119@xref{Article Buttons}.
9120
9121@item W B
9122@kindex W B (Summary)
9123@findex gnus-article-add-buttons-to-head
9124Add clickable buttons to the article headers
9125(@code{gnus-article-add-buttons-to-head}).
9126
9127@item W p
9128@kindex W p (Summary)
9129@findex gnus-article-verify-x-pgp-sig
9130Verify a signed control message
9131(@code{gnus-article-verify-x-pgp-sig}). Control messages such as
9132@code{newgroup} and @code{checkgroups} are usually signed by the
9133hierarchy maintainer. You need to add the @acronym{PGP} public key of
9134the maintainer to your keyring to verify the
9135message.@footnote{@acronym{PGP} keys for many hierarchies are
9136available at @uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}}
9137
9138@item W s
9139@kindex W s (Summary)
9140@findex gnus-summary-force-verify-and-decrypt
9141Verify a signed (@acronym{PGP}, @acronym{PGP/MIME} or
9142@acronym{S/MIME}) message
9143(@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
9144
9145@item W a
9146@kindex W a (Summary)
9147@findex gnus-article-strip-headers-in-body
9148Strip headers like the @code{X-No-Archive} header from the beginning of
9149article bodies (@code{gnus-article-strip-headers-in-body}).
9150
9151@item W E l
9152@kindex W E l (Summary)
9153@findex gnus-article-strip-leading-blank-lines
9154Remove all blank lines from the beginning of the article
9155(@code{gnus-article-strip-leading-blank-lines}).
9156
9157@item W E m
9158@kindex W E m (Summary)
9159@findex gnus-article-strip-multiple-blank-lines
9160Replace all blank lines with empty lines and then all multiple empty
9161lines with a single empty line.
9162(@code{gnus-article-strip-multiple-blank-lines}).
9163
9164@item W E t
9165@kindex W E t (Summary)
9166@findex gnus-article-remove-trailing-blank-lines
9167Remove all blank lines at the end of the article
9168(@code{gnus-article-remove-trailing-blank-lines}).
9169
9170@item W E a
9171@kindex W E a (Summary)
9172@findex gnus-article-strip-blank-lines
9173Do all the three commands above
9174(@code{gnus-article-strip-blank-lines}).
9175
9176@item W E A
9177@kindex W E A (Summary)
9178@findex gnus-article-strip-all-blank-lines
9179Remove all blank lines
9180(@code{gnus-article-strip-all-blank-lines}).
9181
9182@item W E s
9183@kindex W E s (Summary)
9184@findex gnus-article-strip-leading-space
9185Remove all white space from the beginning of all lines of the article
9186body (@code{gnus-article-strip-leading-space}).
9187
9188@item W E e
9189@kindex W E e (Summary)
9190@findex gnus-article-strip-trailing-space
9191Remove all white space from the end of all lines of the article
9192body (@code{gnus-article-strip-trailing-space}).
9193
9194@end table
9195
9196@xref{Customizing Articles}, for how to wash articles automatically.
9197
9198
9199@node Article Header
9200@subsection Article Header
9201
9202These commands perform various transformations of article header.
9203
9204@table @kbd
9205
9206@item W G u
9207@kindex W G u (Summary)
9208@findex gnus-article-treat-unfold-headers
9209Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
9210
9211@item W G n
9212@kindex W G n (Summary)
9213@findex gnus-article-treat-fold-newsgroups
9214Fold the @code{Newsgroups} and @code{Followup-To} headers
9215(@code{gnus-article-treat-fold-newsgroups}).
9216
9217@item W G f
9218@kindex W G f (Summary)
9219@findex gnus-article-treat-fold-headers
9220Fold all the message headers
9221(@code{gnus-article-treat-fold-headers}).
9222
9223@item W E w
9224@kindex W E w (Summary)
9225@findex gnus-article-remove-leading-whitespace
9226Remove excessive whitespace from all headers
9227(@code{gnus-article-remove-leading-whitespace}).
9228
9229@end table
9230
9231
9232@node Article Buttons
9233@subsection Article Buttons
9234@cindex buttons
9235
9236People often include references to other stuff in articles, and it would
9237be nice if Gnus could just fetch whatever it is that people talk about
9238with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
9239button on these references.
9240
9241@vindex gnus-button-man-handler
9242Gnus adds @dfn{buttons} to certain standard references by default:
9243Well-formed URLs, mail addresses, Message-IDs, Info links, man pages and
9244Emacs or Gnus related references. This is controlled by two variables,
9245one that handles article bodies and one that handles article heads:
9246
9247@table @code
9248
9249@item gnus-button-alist
9250@vindex gnus-button-alist
9251This is an alist where each entry has this form:
9252
9253@lisp
9254(@var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
9255@end lisp
9256
9257@table @var
9258
9259@item regexp
9260All text that match this regular expression (case insensitive) will be
9261considered an external reference. Here's a typical regexp that matches
9262embedded URLs: @samp{<URL:\\([^\n\r>]*\\)>}. This can also be a
9263variable containing a regexp, useful variables to use include
9264@code{gnus-button-url-regexp} and @code{gnus-button-mid-or-mail-regexp}.
9265
9266@item button-par
9267Gnus has to know which parts of the matches is to be highlighted. This
9268is a number that says what sub-expression of the regexp is to be
9269highlighted. If you want it all highlighted, you use 0 here.
9270
9271@item use-p
9272This form will be @code{eval}ed, and if the result is non-@code{nil},
9273this is considered a match. This is useful if you want extra sifting to
9274avoid false matches. Often variables named
9275@code{gnus-button-@var{*}-level} are used here, @xref{Article Button
9276Levels}, but any other form may be used too.
9277
9278@c @code{use-p} is @code{eval}ed only if @code{regexp} matches.
9279
9280@item function
9281This function will be called when you click on this button.
9282
9283@item data-par
9284As with @var{button-par}, this is a sub-expression number, but this one
9285says which part of the match is to be sent as data to @var{function}.
9286
9287@end table
9288
9289So the full entry for buttonizing URLs is then
9290
9291@lisp
9292("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
9293@end lisp
9294
9295@item gnus-header-button-alist
9296@vindex gnus-header-button-alist
9297This is just like the other alist, except that it is applied to the
9298article head only, and that each entry has an additional element that is
9299used to say what headers to apply the buttonize coding to:
9300
9301@lisp
9302(@var{header} @var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
9303@end lisp
9304
9305@var{header} is a regular expression.
9306@end table
9307
9308@subsubsection Related variables and functions
9309
9310@table @code
9311@item gnus-button-@var{*}-level
9312@xref{Article Button Levels}.
9313
9314@c Stuff related to gnus-button-browse-level
9315
9316@item gnus-button-url-regexp
9317@vindex gnus-button-url-regexp
9318A regular expression that matches embedded URLs. It is used in the
9319default values of the variables above.
9320
9321@c Stuff related to gnus-button-man-level
9322
9323@item gnus-button-man-handler
9324@vindex gnus-button-man-handler
9325The function to use for displaying man pages. It must take at least one
9326argument with a string naming the man page.
9327
9328@c Stuff related to gnus-button-message-level
9329
9330@item gnus-button-mid-or-mail-regexp
9331@vindex gnus-button-mid-or-mail-regexp
9332Regular expression that matches a message ID or a mail address.
9333
9334@item gnus-button-prefer-mid-or-mail
9335@vindex gnus-button-prefer-mid-or-mail
9336This variable determines what to do when the button on a string as
9337@samp{foo123@@bar.invalid} is pushed. Strings like this can be either a
9338message ID or a mail address. If it is one of the symbols @code{mid} or
9339@code{mail}, Gnus will always assume that the string is a message ID or
9340a mail address, respectively. If this variable is set to the symbol
9341@code{ask}, always query the user what to do. If it is a function, this
9342function will be called with the string as its only argument. The
9343function must return @code{mid}, @code{mail}, @code{invalid} or
9344@code{ask}. The default value is the function
9345@code{gnus-button-mid-or-mail-heuristic}.
9346
9347@item gnus-button-mid-or-mail-heuristic
9348@findex gnus-button-mid-or-mail-heuristic
9349Function that guesses whether its argument is a message ID or a mail
9350address. Returns @code{mid} if it's a message IDs, @code{mail} if
9351it's a mail address, @code{ask} if unsure and @code{invalid} if the
9352string is invalid.
9353
9354@item gnus-button-mid-or-mail-heuristic-alist
9355@vindex gnus-button-mid-or-mail-heuristic-alist
9356An alist of @code{(RATE . REGEXP)} pairs used by the function
9357@code{gnus-button-mid-or-mail-heuristic}.
9358
9359@c Stuff related to gnus-button-tex-level
9360
9361@item gnus-button-ctan-handler
9362@findex gnus-button-ctan-handler
9363The function to use for displaying CTAN links. It must take one
9364argument, the string naming the URL.
9365
9366@item gnus-ctan-url
9367@vindex gnus-ctan-url
9368Top directory of a CTAN (Comprehensive TeX Archive Network) archive used
9369by @code{gnus-button-ctan-handler}.
9370
9371@c Misc stuff
9372
9373@item gnus-article-button-face
9374@vindex gnus-article-button-face
9375Face used on buttons.
9376
9377@item gnus-article-mouse-face
9378@vindex gnus-article-mouse-face
9379Face used when the mouse cursor is over a button.
9380
9381@end table
9382
9383@xref{Customizing Articles}, for how to buttonize articles automatically.
9384
9385
9386@node Article Button Levels
9387@subsection Article button levels
9388@cindex button levels
9389The higher the value of the variables @code{gnus-button-@var{*}-level},
9390the more buttons will appear. If the level is zero, no corresponding
9391buttons are displayed. With the default value (which is 5) you should
9392already see quite a lot of buttons. With higher levels, you will see
9393more buttons, but you may also get more false positives. To avoid them,
9394you can set the variables @code{gnus-button-@var{*}-level} local to
9395specific groups (@pxref{Group Parameters}). Here's an example for the
9396variable @code{gnus-parameters}:
9397
9398@lisp
9399;; @r{increase @code{gnus-button-*-level} in some groups:}
9400(setq gnus-parameters
9401 '(("\\<\\(emacs\\|gnus\\)\\>" (gnus-button-emacs-level 10))
9402 ("\\<unix\\>" (gnus-button-man-level 10))
9403 ("\\<tex\\>" (gnus-button-tex-level 10))))
9404@end lisp
9405
9406@table @code
9407
9408@item gnus-button-browse-level
9409@vindex gnus-button-browse-level
9410Controls the display of references to message IDs, mail addresses and
9411news URLs. Related variables and functions include
9412@code{gnus-button-url-regexp}, @code{browse-url}, and
9413@code{browse-url-browser-function}.
9414
9415@item gnus-button-emacs-level
9416@vindex gnus-button-emacs-level
9417Controls the display of Emacs or Gnus references. Related functions are
9418@code{gnus-button-handle-custom},
9419@code{gnus-button-handle-describe-function},
9420@code{gnus-button-handle-describe-variable},
9421@code{gnus-button-handle-symbol},
9422@code{gnus-button-handle-describe-key},
9423@code{gnus-button-handle-apropos},
9424@code{gnus-button-handle-apropos-command},
9425@code{gnus-button-handle-apropos-variable},
9426@code{gnus-button-handle-apropos-documentation}, and
9427@code{gnus-button-handle-library}.
9428
9429@item gnus-button-man-level
9430@vindex gnus-button-man-level
9431Controls the display of references to (Unix) man pages.
9432See @code{gnus-button-man-handler}.
9433
9434@item gnus-button-message-level
9435@vindex gnus-button-message-level
9436Controls the display of message IDs, mail addresses and news URLs.
9437Related variables and functions include
9438@code{gnus-button-mid-or-mail-regexp},
9439@code{gnus-button-prefer-mid-or-mail},
9440@code{gnus-button-mid-or-mail-heuristic}, and
9441@code{gnus-button-mid-or-mail-heuristic-alist}.
9442
9443@item gnus-button-tex-level
9444@vindex gnus-button-tex-level
9445Controls the display of references to @TeX{} or LaTeX stuff, e.g. for CTAN
9446URLs. See the variables @code{gnus-ctan-url},
9447@code{gnus-button-ctan-handler},
9448@code{gnus-button-ctan-directory-regexp}, and
9449@code{gnus-button-handle-ctan-bogus-regexp}.
9450
9451@end table
9452
9453
9454@node Article Date
9455@subsection Article Date
9456
9457The date is most likely generated in some obscure timezone you've never
9458heard of, so it's quite nice to be able to find out what the time was
9459when the article was sent.
9460
9461@table @kbd
9462
9463@item W T u
9464@kindex W T u (Summary)
9465@findex gnus-article-date-ut
9466Display the date in UT (aka. GMT, aka ZULU)
9467(@code{gnus-article-date-ut}).
9468
9469@item W T i
9470@kindex W T i (Summary)
9471@findex gnus-article-date-iso8601
9472@cindex ISO 8601
9473Display the date in international format, aka. ISO 8601
9474(@code{gnus-article-date-iso8601}).
9475
9476@item W T l
9477@kindex W T l (Summary)
9478@findex gnus-article-date-local
9479Display the date in the local timezone (@code{gnus-article-date-local}).
9480
9481@item W T p
9482@kindex W T p (Summary)
9483@findex gnus-article-date-english
9484Display the date in a format that's easily pronounceable in English
9485(@code{gnus-article-date-english}).
9486
9487@item W T s
9488@kindex W T s (Summary)
9489@vindex gnus-article-time-format
9490@findex gnus-article-date-user
9491@findex format-time-string
9492Display the date using a user-defined format
9493(@code{gnus-article-date-user}). The format is specified by the
9494@code{gnus-article-time-format} variable, and is a string that's passed
9495to @code{format-time-string}. See the documentation of that variable
9496for a list of possible format specs.
9497
9498@item W T e
9499@kindex W T e (Summary)
9500@findex gnus-article-date-lapsed
9501@findex gnus-start-date-timer
9502@findex gnus-stop-date-timer
9503Say how much time has elapsed between the article was posted and now
9504(@code{gnus-article-date-lapsed}). It looks something like:
9505
9506@example
9507X-Sent: 6 weeks, 4 days, 1 hour, 3 minutes, 8 seconds ago
9508@end example
9509
9510@vindex gnus-article-date-lapsed-new-header
9511The value of @code{gnus-article-date-lapsed-new-header} determines
9512whether this header will just be added below the old Date one, or will
9513replace it.
9514
9515An advantage of using Gnus to read mail is that it converts simple bugs
9516into wonderful absurdities.
9517
9518If you want to have this line updated continually, you can put
9519
9520@lisp
9521(gnus-start-date-timer)
9522@end lisp
9523
9524in your @file{~/.gnus.el} file, or you can run it off of some hook. If
9525you want to stop the timer, you can use the @code{gnus-stop-date-timer}
9526command.
9527
9528@item W T o
9529@kindex W T o (Summary)
9530@findex gnus-article-date-original
9531Display the original date (@code{gnus-article-date-original}). This can
9532be useful if you normally use some other conversion function and are
9533worried that it might be doing something totally wrong. Say, claiming
9534that the article was posted in 1854. Although something like that is
9535@emph{totally} impossible. Don't you trust me? *titter*
9536
9537@end table
9538
9539@xref{Customizing Articles}, for how to display the date in your
9540preferred format automatically.
9541
9542
9543@node Article Display
9544@subsection Article Display
9545@cindex picons
9546@cindex x-face
9547@cindex smileys
9548
9549These commands add various frivolous display gimmicks to the article
9550buffer in Emacs versions that support them.
9551
9552@code{X-Face} headers are small black-and-white images supplied by the
9553message headers (@pxref{X-Face}).
9554
9555@code{Face} headers are small colored images supplied by the message
9556headers (@pxref{Face}).
9557
9558Smileys are those little @samp{:-)} symbols that people like to litter
9559their messages with (@pxref{Smileys}).
9560
9561Picons, on the other hand, reside on your own system, and Gnus will
9562try to match the headers to what you have (@pxref{Picons}).
9563
9564All these functions are toggles---if the elements already exist,
9565they'll be removed.
9566
9567@table @kbd
9568@item W D x
9569@kindex W D x (Summary)
9570@findex gnus-article-display-x-face
9571Display an @code{X-Face} in the @code{From} header.
9572(@code{gnus-article-display-x-face}).
9573
9574@item W D d
9575@kindex W D d (Summary)
9576@findex gnus-article-display-face
9577Display a @code{Face} in the @code{From} header.
9578(@code{gnus-article-display-face}).
9579
9580@item W D s
9581@kindex W D s (Summary)
9582@findex gnus-treat-smiley
9583Display smileys (@code{gnus-treat-smiley}).
9584
9585@item W D f
9586@kindex W D f (Summary)
9587@findex gnus-treat-from-picon
9588Piconify the @code{From} header (@code{gnus-treat-from-picon}).
9589
9590@item W D m
9591@kindex W D m (Summary)
9592@findex gnus-treat-mail-picon
9593Piconify all mail headers (i. e., @code{Cc}, @code{To})
9594(@code{gnus-treat-mail-picon}).
9595
9596@item W D n
9597@kindex W D n (Summary)
9598@findex gnus-treat-newsgroups-picon
9599Piconify all news headers (i. e., @code{Newsgroups} and
9600@code{Followup-To}) (@code{gnus-treat-newsgroups-picon}).
9601
9602@item W D D
9603@kindex W D D (Summary)
9604@findex gnus-article-remove-images
9605Remove all images from the article buffer
9606(@code{gnus-article-remove-images}).
9607
9608@end table
9609
9610
9611
9612@node Article Signature
9613@subsection Article Signature
9614@cindex signatures
9615@cindex article signature
9616
9617@vindex gnus-signature-separator
9618Each article is divided into two parts---the head and the body. The
9619body can be divided into a signature part and a text part. The variable
9620that says what is to be considered a signature is
9621@code{gnus-signature-separator}. This is normally the standard
9622@samp{^-- $} as mandated by son-of-RFC 1036. However, many people use
9623non-standard signature separators, so this variable can also be a list
9624of regular expressions to be tested, one by one. (Searches are done
9625from the end of the body towards the beginning.) One likely value is:
9626
9627@lisp
9628(setq gnus-signature-separator
9629 '("^-- $" ; @r{The standard}
9630 "^-- *$" ; @r{A common mangling}
9631 "^-------*$" ; @r{Many people just use a looong}
9632 ; @r{line of dashes. Shame!}
9633 "^ *--------*$" ; @r{Double-shame!}
9634 "^________*$" ; @r{Underscores are also popular}
9635 "^========*$")) ; @r{Pervert!}
9636@end lisp
9637
9638The more permissive you are, the more likely it is that you'll get false
9639positives.
9640
9641@vindex gnus-signature-limit
9642@code{gnus-signature-limit} provides a limit to what is considered a
9643signature when displaying articles.
9644
9645@enumerate
9646@item
9647If it is an integer, no signature may be longer (in characters) than
9648that integer.
9649@item
9650If it is a floating point number, no signature may be longer (in lines)
9651than that number.
9652@item
9653If it is a function, the function will be called without any parameters,
9654and if it returns @code{nil}, there is no signature in the buffer.
9655@item
9656If it is a string, it will be used as a regexp. If it matches, the text
9657in question is not a signature.
9658@end enumerate
9659
9660This variable can also be a list where the elements may be of the types
9661listed above. Here's an example:
9662
9663@lisp
9664(setq gnus-signature-limit
9665 '(200.0 "^---*Forwarded article"))
9666@end lisp
9667
9668This means that if there are more than 200 lines after the signature
9669separator, or the text after the signature separator is matched by
9670the regular expression @samp{^---*Forwarded article}, then it isn't a
9671signature after all.
9672
9673
9674@node Article Miscellanea
9675@subsection Article Miscellanea
9676
9677@table @kbd
9678@item A t
9679@kindex A t (Summary)
9680@findex gnus-article-babel
9681Translate the article from one language to another
9682(@code{gnus-article-babel}).
9683
9684@end table
9685
9686
9687@node MIME Commands
9688@section MIME Commands
9689@cindex MIME decoding
9690@cindex attachments
9691@cindex viewing attachments
9692
9693The following commands all understand the numerical prefix. For
01c52d31 9694instance, @kbd{3 K v} means ``view the third @acronym{MIME} part''.
4009494e
GM
9695
9696@table @kbd
9697@item b
9698@itemx K v
9699@kindex b (Summary)
9700@kindex K v (Summary)
9701View the @acronym{MIME} part.
9702
9703@item K o
9704@kindex K o (Summary)
9705Save the @acronym{MIME} part.
9706
01c52d31
MB
9707@item K O
9708@kindex K O (Summary)
9709Prompt for a file name, then save the @acronym{MIME} part and strip it
9710from the article. The stripped @acronym{MIME} object will be referred
9711via the message/external-body @acronym{MIME} type.
9712
9713@item K r
9714@kindex K r (Summary)
9715Replace the @acronym{MIME} part with an external body.
9716
9717@item K d
9718@kindex K d (Summary)
9719Delete the @acronym{MIME} part and add some information about the
9720removed part.
9721
4009494e
GM
9722@item K c
9723@kindex K c (Summary)
9724Copy the @acronym{MIME} part.
9725
9726@item K e
9727@kindex K e (Summary)
9728View the @acronym{MIME} part externally.
9729
9730@item K i
9731@kindex K i (Summary)
9732View the @acronym{MIME} part internally.
9733
9734@item K |
9735@kindex K | (Summary)
9736Pipe the @acronym{MIME} part to an external command.
9737@end table
9738
9739The rest of these @acronym{MIME} commands do not use the numerical prefix in
9740the same manner:
9741
9742@table @kbd
9b3ebcb6
MB
9743@item K H
9744@kindex K H (Summary)
9745@findex gnus-article-browse-html-article
9746View @samp{text/html} parts of the current article with a WWW browser.
9747The message header is added to the beginning of every html part unless
9748the prefix argument is given.
9749
9750Warning: Spammers use links to images in HTML articles to verify whether
9751you have read the message. As this command passes the @acronym{HTML}
9752content to the browser without eliminating these ``web bugs'' you should
9753only use it for mails from trusted senders.
9754
9755If you always want to display @acronym{HTML} parts in the browser, set
9756@code{mm-text-html-renderer} to @code{nil}.
9757
4009494e
GM
9758@item K b
9759@kindex K b (Summary)
9760Make all the @acronym{MIME} parts have buttons in front of them. This is
9761mostly useful if you wish to save (or perform other actions) on inlined
9762parts.
9763
9764@item K m
9765@kindex K m (Summary)
9766@findex gnus-summary-repair-multipart
9767Some multipart messages are transmitted with missing or faulty headers.
9768This command will attempt to ``repair'' these messages so that they can
9769be viewed in a more pleasant manner
9770(@code{gnus-summary-repair-multipart}).
9771
9772@item X m
9773@kindex X m (Summary)
9774@findex gnus-summary-save-parts
9775Save all parts matching a @acronym{MIME} type to a directory
9776(@code{gnus-summary-save-parts}). Understands the process/prefix
9777convention (@pxref{Process/Prefix}).
9778
9779@item M-t
9780@kindex M-t (Summary)
9781@findex gnus-summary-toggle-display-buttonized
9782Toggle the buttonized display of the article buffer
9783(@code{gnus-summary-toggle-display-buttonized}).
9784
9785@item W M w
9786@kindex W M w (Summary)
9787@findex gnus-article-decode-mime-words
9788Decode RFC 2047-encoded words in the article headers
9789(@code{gnus-article-decode-mime-words}).
9790
9791@item W M c
9792@kindex W M c (Summary)
9793@findex gnus-article-decode-charset
9794Decode encoded article bodies as well as charsets
9795(@code{gnus-article-decode-charset}).
9796
9797This command looks in the @code{Content-Type} header to determine the
9798charset. If there is no such header in the article, you can give it a
9799prefix, which will prompt for the charset to decode as. In regional
9800groups where people post using some common encoding (but do not
9801include @acronym{MIME} headers), you can set the @code{charset} group/topic
9802parameter to the required charset (@pxref{Group Parameters}).
9803
9804@item W M v
9805@kindex W M v (Summary)
9806@findex gnus-mime-view-all-parts
9807View all the @acronym{MIME} parts in the current article
9808(@code{gnus-mime-view-all-parts}).
9809
9810@end table
9811
9812Relevant variables:
9813
9814@table @code
9815@item gnus-ignored-mime-types
9816@vindex gnus-ignored-mime-types
9817This is a list of regexps. @acronym{MIME} types that match a regexp from
9818this list will be completely ignored by Gnus. The default value is
9819@code{nil}.
9820
9821To have all Vcards be ignored, you'd say something like this:
9822
9823@lisp
9824(setq gnus-ignored-mime-types
9825 '("text/x-vcard"))
9826@end lisp
9827
9828@item gnus-article-loose-mime
9829@vindex gnus-article-loose-mime
9830If non-@code{nil}, Gnus won't require the @samp{MIME-Version} header
9831before interpreting the message as a @acronym{MIME} message. This helps
9832when reading messages from certain broken mail user agents. The
b890d447 9833default is @code{t}.
4009494e
GM
9834
9835@item gnus-article-emulate-mime
9836@vindex gnus-article-emulate-mime
9837@cindex uuencode
9838@cindex yEnc
9839There are other, non-@acronym{MIME} encoding methods used. The most common
9840is @samp{uuencode}, but yEncode is also getting to be popular. If
9841this variable is non-@code{nil}, Gnus will look in message bodies to
9842see if it finds these encodings, and if so, it'll run them through the
9843Gnus @acronym{MIME} machinery. The default is @code{t}. Only
9844single-part yEnc encoded attachments can be decoded. There's no support
9845for encoding in Gnus.
9846
9847@item gnus-unbuttonized-mime-types
9848@vindex gnus-unbuttonized-mime-types
9849This is a list of regexps. @acronym{MIME} types that match a regexp from
9850this list won't have @acronym{MIME} buttons inserted unless they aren't
9851displayed or this variable is overridden by
9852@code{gnus-buttonized-mime-types}. The default value is
9853@code{(".*/.*")}. This variable is only used when
9854@code{gnus-inhibit-mime-unbuttonizing} is @code{nil}.
9855
9856@item gnus-buttonized-mime-types
9857@vindex gnus-buttonized-mime-types
9858This is a list of regexps. @acronym{MIME} types that match a regexp from
9859this list will have @acronym{MIME} buttons inserted unless they aren't
9860displayed. This variable overrides
9861@code{gnus-unbuttonized-mime-types}. The default value is @code{nil}.
9862This variable is only used when @code{gnus-inhibit-mime-unbuttonizing}
9863is @code{nil}.
9864
9865To see e.g. security buttons but no other buttons, you could set this
9866variable to @code{("multipart/signed")} and leave
9867@code{gnus-unbuttonized-mime-types} at the default value.
9868
9869You could also add @code{"multipart/alternative"} to this list to
9870display radio buttons that allow you to choose one of two media types
9871those mails include. See also @code{mm-discouraged-alternatives}
9872(@pxref{Display Customization, ,Display Customization, emacs-mime, The
9873Emacs MIME Manual}).
9874
9875@item gnus-inhibit-mime-unbuttonizing
9876@vindex gnus-inhibit-mime-unbuttonizing
9877If this is non-@code{nil}, then all @acronym{MIME} parts get buttons. The
9878default value is @code{nil}.
9879
9880@item gnus-article-mime-part-function
9881@vindex gnus-article-mime-part-function
9882For each @acronym{MIME} part, this function will be called with the @acronym{MIME}
9883handle as the parameter. The function is meant to be used to allow
9884users to gather information from the article (e. g., add Vcard info to
9885the bbdb database) or to do actions based on parts (e. g., automatically
9886save all jpegs into some directory).
9887
9888Here's an example function the does the latter:
9889
9890@lisp
9891(defun my-save-all-jpeg-parts (handle)
9892 (when (equal (car (mm-handle-type handle)) "image/jpeg")
9893 (with-temp-buffer
9894 (insert (mm-get-part handle))
9895 (write-region (point-min) (point-max)
9896 (read-file-name "Save jpeg to: ")))))
9897(setq gnus-article-mime-part-function
9898 'my-save-all-jpeg-parts)
9899@end lisp
9900
9901@vindex gnus-mime-multipart-functions
9902@item gnus-mime-multipart-functions
9903Alist of @acronym{MIME} multipart types and functions to handle them.
9904
9905@vindex gnus-mime-display-multipart-alternative-as-mixed
9906@item gnus-mime-display-multipart-alternative-as-mixed
9907Display "multipart/alternative" parts as "multipart/mixed".
9908
9909@vindex gnus-mime-display-multipart-related-as-mixed
9910@item gnus-mime-display-multipart-related-as-mixed
9911Display "multipart/related" parts as "multipart/mixed".
9912
9b3ebcb6 9913If displaying @samp{text/html} is discouraged, see
4009494e
GM
9914@code{mm-discouraged-alternatives}, images or other material inside a
9915"multipart/related" part might be overlooked when this variable is
9916@code{nil}. @ref{Display Customization, Display Customization, ,
9917emacs-mime, Emacs-Mime Manual}.
9918
9919@vindex gnus-mime-display-multipart-as-mixed
9920@item gnus-mime-display-multipart-as-mixed
9921Display "multipart" parts as "multipart/mixed". If @code{t}, it
9922overrides @code{nil} values of
9923@code{gnus-mime-display-multipart-alternative-as-mixed} and
9924@code{gnus-mime-display-multipart-related-as-mixed}.
9925
9926@vindex mm-file-name-rewrite-functions
9927@item mm-file-name-rewrite-functions
9928List of functions used for rewriting file names of @acronym{MIME} parts.
9929Each function takes a file name as input and returns a file name.
9930
9931Ready-made functions include@*
9932@code{mm-file-name-delete-whitespace},
9933@code{mm-file-name-trim-whitespace},
9934@code{mm-file-name-collapse-whitespace}, and
9935@code{mm-file-name-replace-whitespace}. The later uses the value of
9936the variable @code{mm-file-name-replace-whitespace} to replace each
9937whitespace character in a file name with that string; default value
9938is @code{"_"} (a single underscore).
9939@findex mm-file-name-delete-whitespace
9940@findex mm-file-name-trim-whitespace
9941@findex mm-file-name-collapse-whitespace
9942@findex mm-file-name-replace-whitespace
9943@vindex mm-file-name-replace-whitespace
9944
9945The standard functions @code{capitalize}, @code{downcase},
9946@code{upcase}, and @code{upcase-initials} may be useful, too.
9947
9948Everybody knows that whitespace characters in file names are evil,
9949except those who don't know. If you receive lots of attachments from
9950such unenlightened users, you can make live easier by adding
9951
9952@lisp
9953(setq mm-file-name-rewrite-functions
9954 '(mm-file-name-trim-whitespace
9955 mm-file-name-collapse-whitespace
9956 mm-file-name-replace-whitespace))
9957@end lisp
9958
9959@noindent
9960to your @file{~/.gnus.el} file.
9961
9962@end table
9963
9964
9965@node Charsets
9966@section Charsets
9967@cindex charsets
9968
9969People use different charsets, and we have @acronym{MIME} to let us know what
9970charsets they use. Or rather, we wish we had. Many people use
9971newsreaders and mailers that do not understand or use @acronym{MIME}, and
9972just send out messages without saying what character sets they use. To
9973help a bit with this, some local news hierarchies have policies that say
9974what character set is the default. For instance, the @samp{fj}
9975hierarchy uses @code{iso-2022-jp}.
9976
9977@vindex gnus-group-charset-alist
9978This knowledge is encoded in the @code{gnus-group-charset-alist}
9979variable, which is an alist of regexps (use the first item to match full
9980group names) and default charsets to be used when reading these groups.
9981
9982@vindex gnus-newsgroup-ignored-charsets
9983In addition, some people do use soi-disant @acronym{MIME}-aware agents that
9984aren't. These blithely mark messages as being in @code{iso-8859-1}
9985even if they really are in @code{koi-8}. To help here, the
9986@code{gnus-newsgroup-ignored-charsets} variable can be used. The
9987charsets that are listed here will be ignored. The variable can be
9988set on a group-by-group basis using the group parameters (@pxref{Group
9989Parameters}). The default value is @code{(unknown-8bit x-unknown)},
9990which includes values some agents insist on having in there.
9991
9992@vindex gnus-group-posting-charset-alist
9993When posting, @code{gnus-group-posting-charset-alist} is used to
9994determine which charsets should not be encoded using the @acronym{MIME}
9995encodings. For instance, some hierarchies discourage using
9996quoted-printable header encoding.
9997
9998This variable is an alist of regexps and permitted unencoded charsets
9999for posting. Each element of the alist has the form @code{(}@var{test
10000header body-list}@code{)}, where:
10001
10002@table @var
10003@item test
10004is either a regular expression matching the newsgroup header or a
10005variable to query,
10006@item header
10007is the charset which may be left unencoded in the header (@code{nil}
10008means encode all charsets),
10009@item body-list
10010is a list of charsets which may be encoded using 8bit content-transfer
10011encoding in the body, or one of the special values @code{nil} (always
10012encode using quoted-printable) or @code{t} (always use 8bit).
10013@end table
10014
10015@cindex Russian
10016@cindex koi8-r
10017@cindex koi8-u
10018@cindex iso-8859-5
10019@cindex coding system aliases
10020@cindex preferred charset
10021
10022@xref{Encoding Customization, , Encoding Customization, emacs-mime,
10023The Emacs MIME Manual}, for additional variables that control which
10024MIME charsets are used when sending messages.
10025
10026Other charset tricks that may be useful, although not Gnus-specific:
10027
10028If there are several @acronym{MIME} charsets that encode the same Emacs
10029charset, you can choose what charset to use by saying the following:
10030
10031@lisp
10032(put-charset-property 'cyrillic-iso8859-5
10033 'preferred-coding-system 'koi8-r)
10034@end lisp
10035
10036This means that Russian will be encoded using @code{koi8-r} instead of
10037the default @code{iso-8859-5} @acronym{MIME} charset.
10038
10039If you want to read messages in @code{koi8-u}, you can cheat and say
10040
10041@lisp
10042(define-coding-system-alias 'koi8-u 'koi8-r)
10043@end lisp
10044
10045This will almost do the right thing.
10046
10047And finally, to read charsets like @code{windows-1251}, you can say
10048something like
10049
10050@lisp
10051(codepage-setup 1251)
10052(define-coding-system-alias 'windows-1251 'cp1251)
10053@end lisp
10054
10055
10056@node Article Commands
10057@section Article Commands
10058
10059@table @kbd
10060
10061@item A P
10062@cindex PostScript
10063@cindex printing
10064@kindex A P (Summary)
10065@vindex gnus-ps-print-hook
10066@findex gnus-summary-print-article
10067Generate and print a PostScript image of the article buffer
10068(@code{gnus-summary-print-article}). @code{gnus-ps-print-hook} will
10069be run just before printing the buffer. An alternative way to print
10070article is to use Muttprint (@pxref{Saving Articles}).
10071
10072@end table
10073
10074
10075@node Summary Sorting
10076@section Summary Sorting
10077@cindex summary sorting
10078
10079You can have the summary buffer sorted in various ways, even though I
10080can't really see why you'd want that.
10081
10082@table @kbd
10083
10084@item C-c C-s C-n
10085@kindex C-c C-s C-n (Summary)
10086@findex gnus-summary-sort-by-number
10087Sort by article number (@code{gnus-summary-sort-by-number}).
10088
10089@item C-c C-s C-a
10090@kindex C-c C-s C-a (Summary)
10091@findex gnus-summary-sort-by-author
10092Sort by author (@code{gnus-summary-sort-by-author}).
10093
01c52d31
MB
10094@item C-c C-s C-t
10095@kindex C-c C-s C-t (Summary)
10096@findex gnus-summary-sort-by-recipient
10097Sort by recipient (@code{gnus-summary-sort-by-recipient}).
10098
4009494e
GM
10099@item C-c C-s C-s
10100@kindex C-c C-s C-s (Summary)
10101@findex gnus-summary-sort-by-subject
10102Sort by subject (@code{gnus-summary-sort-by-subject}).
10103
10104@item C-c C-s C-d
10105@kindex C-c C-s C-d (Summary)
10106@findex gnus-summary-sort-by-date
10107Sort by date (@code{gnus-summary-sort-by-date}).
10108
10109@item C-c C-s C-l
10110@kindex C-c C-s C-l (Summary)
10111@findex gnus-summary-sort-by-lines
10112Sort by lines (@code{gnus-summary-sort-by-lines}).
10113
10114@item C-c C-s C-c
10115@kindex C-c C-s C-c (Summary)
10116@findex gnus-summary-sort-by-chars
10117Sort by article length (@code{gnus-summary-sort-by-chars}).
10118
10119@item C-c C-s C-i
10120@kindex C-c C-s C-i (Summary)
10121@findex gnus-summary-sort-by-score
10122Sort by score (@code{gnus-summary-sort-by-score}).
10123
10124@item C-c C-s C-r
10125@kindex C-c C-s C-r (Summary)
10126@findex gnus-summary-sort-by-random
10127Randomize (@code{gnus-summary-sort-by-random}).
10128
10129@item C-c C-s C-o
10130@kindex C-c C-s C-o (Summary)
10131@findex gnus-summary-sort-by-original
10132Sort using the default sorting method
10133(@code{gnus-summary-sort-by-original}).
10134@end table
10135
10136These functions will work both when you use threading and when you don't
10137use threading. In the latter case, all summary lines will be sorted,
10138line by line. In the former case, sorting will be done on a
10139root-by-root basis, which might not be what you were looking for. To
10140toggle whether to use threading, type @kbd{T T} (@pxref{Thread
10141Commands}).
10142
10143
10144@node Finding the Parent
10145@section Finding the Parent
10146@cindex parent articles
10147@cindex referring articles
10148
10149@table @kbd
10150@item ^
10151@kindex ^ (Summary)
10152@findex gnus-summary-refer-parent-article
10153If you'd like to read the parent of the current article, and it is not
10154displayed in the summary buffer, you might still be able to. That is,
10155if the current group is fetched by @acronym{NNTP}, the parent hasn't expired
10156and the @code{References} in the current article are not mangled, you
10157can just press @kbd{^} or @kbd{A r}
10158(@code{gnus-summary-refer-parent-article}). If everything goes well,
10159you'll get the parent. If the parent is already displayed in the
10160summary buffer, point will just move to this article.
10161
10162If given a positive numerical prefix, fetch that many articles back into
10163the ancestry. If given a negative numerical prefix, fetch just that
10164ancestor. So if you say @kbd{3 ^}, Gnus will fetch the parent, the
10165grandparent and the grandgrandparent of the current article. If you say
10166@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
10167article.
10168
10169@item A R (Summary)
10170@findex gnus-summary-refer-references
10171@kindex A R (Summary)
10172Fetch all articles mentioned in the @code{References} header of the
10173article (@code{gnus-summary-refer-references}).
10174
10175@item A T (Summary)
10176@findex gnus-summary-refer-thread
10177@kindex A T (Summary)
10178Display the full thread where the current article appears
10179(@code{gnus-summary-refer-thread}). This command has to fetch all the
10180headers in the current group to work, so it usually takes a while. If
10181you do it often, you may consider setting @code{gnus-fetch-old-headers}
10182to @code{invisible} (@pxref{Filling In Threads}). This won't have any
10183visible effects normally, but it'll make this command work a whole lot
10184faster. Of course, it'll make group entry somewhat slow.
10185
10186@vindex gnus-refer-thread-limit
10187The @code{gnus-refer-thread-limit} variable says how many old (i. e.,
10188articles before the first displayed in the current group) headers to
10189fetch when doing this command. The default is 200. If @code{t}, all
10190the available headers will be fetched. This variable can be overridden
10191by giving the @kbd{A T} command a numerical prefix.
10192
10193@item M-^ (Summary)
10194@findex gnus-summary-refer-article
10195@kindex M-^ (Summary)
10196@cindex Message-ID
10197@cindex fetching by Message-ID
10198You can also ask Gnus for an arbitrary article, no matter what group it
10199belongs to. @kbd{M-^} (@code{gnus-summary-refer-article}) will ask you
10200for a @code{Message-ID}, which is one of those long, hard-to-read
10201thingies that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}.
10202You have to get it all exactly right. No fuzzy searches, I'm afraid.
10203
10204Gnus looks for the @code{Message-ID} in the headers that have already
10205been fetched, but also tries all the select methods specified by
10206@code{gnus-refer-article-method} if it is not found.
10207@end table
10208
10209@vindex gnus-refer-article-method
10210If the group you are reading is located on a back end that does not
10211support fetching by @code{Message-ID} very well (like @code{nnspool}),
10212you can set @code{gnus-refer-article-method} to an @acronym{NNTP} method. It
10213would, perhaps, be best if the @acronym{NNTP} server you consult is the one
10214updating the spool you are reading from, but that's not really
10215necessary.
10216
10217It can also be a list of select methods, as well as the special symbol
10218@code{current}, which means to use the current select method. If it
10219is a list, Gnus will try all the methods in the list until it finds a
10220match.
10221
10222Here's an example setting that will first try the current method, and
10223then ask Google if that fails:
10224
10225@lisp
10226(setq gnus-refer-article-method
10227 '(current
10228 (nnweb "google" (nnweb-type google))))
10229@end lisp
10230
10231Most of the mail back ends support fetching by @code{Message-ID}, but
10232do not do a particularly excellent job at it. That is, @code{nnmbox},
10233@code{nnbabyl}, @code{nnmaildir}, @code{nnml}, are able to locate
10234articles from any groups, while @code{nnfolder}, and @code{nnimap} are
10235only able to locate articles that have been posted to the current
10236group. (Anything else would be too time consuming.) @code{nnmh} does
10237not support this at all.
10238
10239
10240@node Alternative Approaches
10241@section Alternative Approaches
10242
10243Different people like to read news using different methods. This being
10244Gnus, we offer a small selection of minor modes for the summary buffers.
10245
10246@menu
10247* Pick and Read:: First mark articles and then read them.
10248* Binary Groups:: Auto-decode all articles.
10249@end menu
10250
10251
10252@node Pick and Read
10253@subsection Pick and Read
10254@cindex pick and read
10255
10256Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use
10257a two-phased reading interface. The user first marks in a summary
10258buffer the articles she wants to read. Then she starts reading the
10259articles with just an article buffer displayed.
10260
10261@findex gnus-pick-mode
10262@kindex M-x gnus-pick-mode
10263Gnus provides a summary buffer minor mode that allows
10264this---@code{gnus-pick-mode}. This basically means that a few process
10265mark commands become one-keystroke commands to allow easy marking, and
10266it provides one additional command for switching to the summary buffer.
10267
10268Here are the available keystrokes when using pick mode:
10269
10270@table @kbd
10271@item .
10272@kindex . (Pick)
10273@findex gnus-pick-article-or-thread
10274Pick the article or thread on the current line
10275(@code{gnus-pick-article-or-thread}). If the variable
10276@code{gnus-thread-hide-subtree} is true, then this key selects the
10277entire thread when used at the first article of the thread. Otherwise,
10278it selects just the article. If given a numerical prefix, go to that
10279thread or article and pick it. (The line number is normally displayed
10280at the beginning of the summary pick lines.)
10281
10282@item SPACE
10283@kindex SPACE (Pick)
10284@findex gnus-pick-next-page
10285Scroll the summary buffer up one page (@code{gnus-pick-next-page}). If
10286at the end of the buffer, start reading the picked articles.
10287
10288@item u
10289@kindex u (Pick)
10290@findex gnus-pick-unmark-article-or-thread.
10291Unpick the thread or article
10292(@code{gnus-pick-unmark-article-or-thread}). If the variable
10293@code{gnus-thread-hide-subtree} is true, then this key unpicks the
10294thread if used at the first article of the thread. Otherwise it unpicks
10295just the article. You can give this key a numerical prefix to unpick
10296the thread or article at that line.
10297
10298@item RET
10299@kindex RET (Pick)
10300@findex gnus-pick-start-reading
10301@vindex gnus-pick-display-summary
10302Start reading the picked articles (@code{gnus-pick-start-reading}). If
10303given a prefix, mark all unpicked articles as read first. If
10304@code{gnus-pick-display-summary} is non-@code{nil}, the summary buffer
10305will still be visible when you are reading.
10306
10307@end table
10308
10309All the normal summary mode commands are still available in the
10310pick-mode, with the exception of @kbd{u}. However @kbd{!} is available
10311which is mapped to the same function
10312@code{gnus-summary-tick-article-forward}.
10313
10314If this sounds like a good idea to you, you could say:
10315
10316@lisp
10317(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
10318@end lisp
10319
10320@vindex gnus-pick-mode-hook
10321@code{gnus-pick-mode-hook} is run in pick minor mode buffers.
10322
10323@vindex gnus-mark-unpicked-articles-as-read
10324If @code{gnus-mark-unpicked-articles-as-read} is non-@code{nil}, mark
10325all unpicked articles as read. The default is @code{nil}.
10326
10327@vindex gnus-summary-pick-line-format
10328The summary line format in pick mode is slightly different from the
10329standard format. At the beginning of each line the line number is
10330displayed. The pick mode line format is controlled by the
10331@code{gnus-summary-pick-line-format} variable (@pxref{Formatting
10332Variables}). It accepts the same format specs that
10333@code{gnus-summary-line-format} does (@pxref{Summary Buffer Lines}).
10334
10335
10336@node Binary Groups
10337@subsection Binary Groups
10338@cindex binary groups
10339
10340@findex gnus-binary-mode
10341@kindex M-x gnus-binary-mode
10342If you spend much time in binary groups, you may grow tired of hitting
10343@kbd{X u}, @kbd{n}, @kbd{RET} all the time. @kbd{M-x gnus-binary-mode}
10344is a minor mode for summary buffers that makes all ordinary Gnus article
10345selection functions uudecode series of articles and display the result
10346instead of just displaying the articles the normal way.
10347
10348@kindex g (Binary)
10349@findex gnus-binary-show-article
10350The only way, in fact, to see the actual articles is the @kbd{g}
10351command, when you have turned on this mode
10352(@code{gnus-binary-show-article}).
10353
10354@vindex gnus-binary-mode-hook
10355@code{gnus-binary-mode-hook} is called in binary minor mode buffers.
10356
10357
10358@node Tree Display
10359@section Tree Display
10360@cindex trees
10361
10362@vindex gnus-use-trees
10363If you don't like the normal Gnus summary display, you might try setting
10364@code{gnus-use-trees} to @code{t}. This will create (by default) an
10365additional @dfn{tree buffer}. You can execute all summary mode commands
10366in the tree buffer.
10367
10368There are a few variables to customize the tree display, of course:
10369
10370@table @code
10371@item gnus-tree-mode-hook
10372@vindex gnus-tree-mode-hook
10373A hook called in all tree mode buffers.
10374
10375@item gnus-tree-mode-line-format
10376@vindex gnus-tree-mode-line-format
10377A format string for the mode bar in the tree mode buffers (@pxref{Mode
10378Line Formatting}). The default is @samp{Gnus: %%b %S %Z}. For a list
10379of valid specs, @pxref{Summary Buffer Mode Line}.
10380
10381@item gnus-selected-tree-face
10382@vindex gnus-selected-tree-face
10383Face used for highlighting the selected article in the tree buffer. The
10384default is @code{modeline}.
10385
10386@item gnus-tree-line-format
10387@vindex gnus-tree-line-format
10388A format string for the tree nodes. The name is a bit of a misnomer,
10389though---it doesn't define a line, but just the node. The default value
10390is @samp{%(%[%3,3n%]%)}, which displays the first three characters of
10391the name of the poster. It is vital that all nodes are of the same
10392length, so you @emph{must} use @samp{%4,4n}-like specifiers.
10393
10394Valid specs are:
10395
10396@table @samp
10397@item n
10398The name of the poster.
10399@item f
10400The @code{From} header.
10401@item N
10402The number of the article.
10403@item [
10404The opening bracket.
10405@item ]
10406The closing bracket.
10407@item s
10408The subject.
10409@end table
10410
10411@xref{Formatting Variables}.
10412
10413Variables related to the display are:
10414
10415@table @code
10416@item gnus-tree-brackets
10417@vindex gnus-tree-brackets
10418This is used for differentiating between ``real'' articles and
10419``sparse'' articles. The format is
10420@example
10421((@var{real-open} . @var{real-close})
10422 (@var{sparse-open} . @var{sparse-close})
10423 (@var{dummy-open} . @var{dummy-close}))
10424@end example
10425and the default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
10426
10427@item gnus-tree-parent-child-edges
10428@vindex gnus-tree-parent-child-edges
10429This is a list that contains the characters used for connecting parent
10430nodes to their children. The default is @code{(?- ?\\ ?|)}.
10431
10432@end table
10433
10434@item gnus-tree-minimize-window
10435@vindex gnus-tree-minimize-window
10436If this variable is non-@code{nil}, Gnus will try to keep the tree
10437buffer as small as possible to allow more room for the other Gnus
10438windows. If this variable is a number, the tree buffer will never be
10439higher than that number. The default is @code{t}. Note that if you
10440have several windows displayed side-by-side in a frame and the tree
10441buffer is one of these, minimizing the tree window will also resize all
10442other windows displayed next to it.
10443
10444You may also wish to add the following hook to keep the window minimized
10445at all times:
10446
10447@lisp
10448(add-hook 'gnus-configure-windows-hook
10449 'gnus-tree-perhaps-minimize)
10450@end lisp
10451
10452@item gnus-generate-tree-function
10453@vindex gnus-generate-tree-function
10454@findex gnus-generate-horizontal-tree
10455@findex gnus-generate-vertical-tree
10456The function that actually generates the thread tree. Two predefined
10457functions are available: @code{gnus-generate-horizontal-tree} and
10458@code{gnus-generate-vertical-tree} (which is the default).
10459
10460@end table
10461
10462Here's an example from a horizontal tree buffer:
10463
10464@example
10465@{***@}-(***)-[odd]-[Gun]
10466 | \[Jan]
10467 | \[odd]-[Eri]
10468 | \(***)-[Eri]
10469 | \[odd]-[Paa]
10470 \[Bjo]
10471 \[Gun]
10472 \[Gun]-[Jor]
10473@end example
10474
10475Here's the same thread displayed in a vertical tree buffer:
10476
10477@example
10478@group
10479@{***@}
10480 |--------------------------\-----\-----\
10481(***) [Bjo] [Gun] [Gun]
10482 |--\-----\-----\ |
10483[odd] [Jan] [odd] (***) [Jor]
10484 | | |--\
10485[Gun] [Eri] [Eri] [odd]
10486 |
10487 [Paa]
10488@end group
10489@end example
10490
10491If you're using horizontal trees, it might be nice to display the trees
10492side-by-side with the summary buffer. You could add something like the
10493following to your @file{~/.gnus.el} file:
10494
10495@lisp
10496(setq gnus-use-trees t
10497 gnus-generate-tree-function 'gnus-generate-horizontal-tree
10498 gnus-tree-minimize-window nil)
10499(gnus-add-configuration
10500 '(article
10501 (vertical 1.0
10502 (horizontal 0.25
10503 (summary 0.75 point)
10504 (tree 1.0))
10505 (article 1.0))))
10506@end lisp
10507
10508@xref{Window Layout}.
10509
10510
10511@node Mail Group Commands
10512@section Mail Group Commands
10513@cindex mail group commands
10514
10515Some commands only make sense in mail groups. If these commands are
10516invalid in the current group, they will raise a hell and let you know.
10517
10518All these commands (except the expiry and edit commands) use the
10519process/prefix convention (@pxref{Process/Prefix}).
10520
10521@table @kbd
10522
10523@item B e
10524@kindex B e (Summary)
10525@findex gnus-summary-expire-articles
10526@cindex expiring mail
10527Run all expirable articles in the current group through the expiry
10528process (@code{gnus-summary-expire-articles}). That is, delete all
10529expirable articles in the group that have been around for a while.
10530(@pxref{Expiring Mail}).
10531
10532@item B C-M-e
10533@kindex B C-M-e (Summary)
10534@findex gnus-summary-expire-articles-now
10535@cindex expiring mail
10536Delete all the expirable articles in the group
10537(@code{gnus-summary-expire-articles-now}). This means that @strong{all}
10538articles eligible for expiry in the current group will
10539disappear forever into that big @file{/dev/null} in the sky.
10540
10541@item B DEL
10542@kindex B DEL (Summary)
10543@findex gnus-summary-delete-article
10544@c @icon{gnus-summary-mail-delete}
10545Delete the mail article. This is ``delete'' as in ``delete it from your
10546disk forever and ever, never to return again.'' Use with caution.
10547(@code{gnus-summary-delete-article}).
10548
10549@item B m
10550@kindex B m (Summary)
10551@cindex move mail
10552@findex gnus-summary-move-article
10553@vindex gnus-preserve-marks
10554Move the article from one mail group to another
10555(@code{gnus-summary-move-article}). Marks will be preserved if
10556@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
10557
10558@item B c
10559@kindex B c (Summary)
10560@cindex copy mail
10561@findex gnus-summary-copy-article
10562@c @icon{gnus-summary-mail-copy}
10563Copy the article from one group (mail group or not) to a mail group
10564(@code{gnus-summary-copy-article}). Marks will be preserved if
10565@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
10566
10567@item B B
10568@kindex B B (Summary)
10569@cindex crosspost mail
10570@findex gnus-summary-crosspost-article
10571Crosspost the current article to some other group
10572(@code{gnus-summary-crosspost-article}). This will create a new copy of
10573the article in the other group, and the Xref headers of the article will
10574be properly updated.
10575
10576@item B i
10577@kindex B i (Summary)
10578@findex gnus-summary-import-article
10579Import an arbitrary file into the current mail newsgroup
10580(@code{gnus-summary-import-article}). You will be prompted for a file
10581name, a @code{From} header and a @code{Subject} header.
10582
10583@item B I
10584@kindex B I (Summary)
10585@findex gnus-summary-create-article
10586Create an empty article in the current mail newsgroups
10587(@code{gnus-summary-create-article}). You will be prompted for a
10588@code{From} header and a @code{Subject} header.
10589
10590@item B r
10591@kindex B r (Summary)
10592@findex gnus-summary-respool-article
10593@vindex gnus-summary-respool-default-method
10594Respool the mail article (@code{gnus-summary-respool-article}).
10595@code{gnus-summary-respool-default-method} will be used as the default
10596select method when respooling. This variable is @code{nil} by default,
10597which means that the current group select method will be used instead.
10598Marks will be preserved if @code{gnus-preserve-marks} is non-@code{nil}
10599(which is the default).
10600
10601@item B w
10602@itemx e
10603@kindex B w (Summary)
10604@kindex e (Summary)
10605@findex gnus-summary-edit-article
10606@kindex C-c C-c (Article)
10607@findex gnus-summary-edit-article-done
10608Edit the current article (@code{gnus-summary-edit-article}). To finish
10609editing and make the changes permanent, type @kbd{C-c C-c}
10610(@code{gnus-summary-edit-article-done}). If you give a prefix to the
10611@kbd{C-c C-c} command, Gnus won't re-highlight the article.
10612
10613@item B q
10614@kindex B q (Summary)
10615@findex gnus-summary-respool-query
10616If you want to re-spool an article, you might be curious as to what group
10617the article will end up in before you do the re-spooling. This command
10618will tell you (@code{gnus-summary-respool-query}).
10619
10620@item B t
10621@kindex B t (Summary)
10622@findex gnus-summary-respool-trace
10623Similarly, this command will display all fancy splitting patterns used
10624when respooling, if any (@code{gnus-summary-respool-trace}).
10625
10626@item B p
10627@kindex B p (Summary)
10628@findex gnus-summary-article-posted-p
10629Some people have a tendency to send you ``courtesy'' copies when they
10630follow up to articles you have posted. These usually have a
10631@code{Newsgroups} header in them, but not always. This command
10632(@code{gnus-summary-article-posted-p}) will try to fetch the current
10633article from your news server (or rather, from
10634@code{gnus-refer-article-method} or @code{gnus-select-method}) and will
10635report back whether it found the article or not. Even if it says that
10636it didn't find the article, it may have been posted anyway---mail
10637propagation is much faster than news propagation, and the news copy may
10638just not have arrived yet.
10639
10640@item K E
10641@kindex K E (Summary)
10642@findex gnus-article-encrypt-body
10643@vindex gnus-article-encrypt-protocol
10644Encrypt the body of an article (@code{gnus-article-encrypt-body}).
10645The body is encrypted with the encryption protocol specified by the
10646variable @code{gnus-article-encrypt-protocol}.
10647
10648@end table
10649
10650@vindex gnus-move-split-methods
10651@cindex moving articles
10652If you move (or copy) articles regularly, you might wish to have Gnus
10653suggest where to put the articles. @code{gnus-move-split-methods} is a
10654variable that uses the same syntax as @code{gnus-split-methods}
10655(@pxref{Saving Articles}). You may customize that variable to create
10656suggestions you find reasonable. (Note that
10657@code{gnus-move-split-methods} uses group names where
10658@code{gnus-split-methods} uses file names.)
10659
10660@lisp
10661(setq gnus-move-split-methods
10662 '(("^From:.*Lars Magne" "nnml:junk")
10663 ("^Subject:.*gnus" "nnfolder:important")
10664 (".*" "nnml:misc")))
10665@end lisp
10666
10667
10668@node Various Summary Stuff
10669@section Various Summary Stuff
10670
10671@menu
10672* Summary Group Information:: Information oriented commands.
10673* Searching for Articles:: Multiple article commands.
10674* Summary Generation Commands::
10675* Really Various Summary Commands:: Those pesky non-conformant commands.
10676@end menu
10677
10678@table @code
10679@vindex gnus-summary-display-while-building
10680@item gnus-summary-display-while-building
10681If non-@code{nil}, show and update the summary buffer as it's being
10682built. If @code{t}, update the buffer after every line is inserted.
10683If the value is an integer, @var{n}, update the display every @var{n}
10684lines. The default is @code{nil}.
10685
10686@vindex gnus-summary-display-arrow
10687@item gnus-summary-display-arrow
10688If non-@code{nil}, display an arrow in the fringe to indicate the
10689current article.
10690
10691@vindex gnus-summary-mode-hook
10692@item gnus-summary-mode-hook
10693This hook is called when creating a summary mode buffer.
10694
10695@vindex gnus-summary-generate-hook
10696@item gnus-summary-generate-hook
10697This is called as the last thing before doing the threading and the
10698generation of the summary buffer. It's quite convenient for customizing
10699the threading variables based on what data the newsgroup has. This hook
10700is called from the summary buffer after most summary buffer variables
10701have been set.
10702
10703@vindex gnus-summary-prepare-hook
10704@item gnus-summary-prepare-hook
10705It is called after the summary buffer has been generated. You might use
10706it to, for instance, highlight lines or modify the look of the buffer in
10707some other ungodly manner. I don't care.
10708
10709@vindex gnus-summary-prepared-hook
10710@item gnus-summary-prepared-hook
10711A hook called as the very last thing after the summary buffer has been
10712generated.
10713
10714@vindex gnus-summary-ignore-duplicates
10715@item gnus-summary-ignore-duplicates
10716When Gnus discovers two articles that have the same @code{Message-ID},
10717it has to do something drastic. No articles are allowed to have the
10718same @code{Message-ID}, but this may happen when reading mail from some
10719sources. Gnus allows you to customize what happens with this variable.
10720If it is @code{nil} (which is the default), Gnus will rename the
10721@code{Message-ID} (for display purposes only) and display the article as
10722any other article. If this variable is @code{t}, it won't display the
10723article---it'll be as if it never existed.
10724
10725@vindex gnus-alter-articles-to-read-function
10726@item gnus-alter-articles-to-read-function
10727This function, which takes two parameters (the group name and the list
10728of articles to be selected), is called to allow the user to alter the
10729list of articles to be selected.
10730
10731For instance, the following function adds the list of cached articles to
10732the list in one particular group:
10733
10734@lisp
10735(defun my-add-cached-articles (group articles)
10736 (if (string= group "some.group")
10737 (append gnus-newsgroup-cached articles)
10738 articles))
10739@end lisp
10740
10741@vindex gnus-newsgroup-variables
10742@item gnus-newsgroup-variables
10743A list of newsgroup (summary buffer) local variables, or cons of
10744variables and their default expressions to be evalled (when the default
10745values are not @code{nil}), that should be made global while the summary
10746buffer is active.
10747
10748Note: The default expressions will be evaluated (using function
10749@code{eval}) before assignment to the local variable rather than just
10750assigned to it. If the default expression is the symbol @code{global},
10751that symbol will not be evaluated but the global value of the local
10752variable will be used instead.
10753
10754These variables can be used to set variables in the group parameters
10755while still allowing them to affect operations done in other
10756buffers. For example:
10757
10758@lisp
10759(setq gnus-newsgroup-variables
10760 '(message-use-followup-to
10761 (gnus-visible-headers .
10762 "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
10763@end lisp
10764
10765Also @pxref{Group Parameters}.
3a23a519
MB
10766
10767@vindex gnus-propagate-marks
10768@item gnus-propagate-marks
10769If non-@code{nil}, propagate marks to the backends for possible
10770storing. @xref{NNTP marks}, and friends, for a more fine-grained
10771sieve.
10772
4009494e
GM
10773@end table
10774
10775
10776@node Summary Group Information
10777@subsection Summary Group Information
10778
10779@table @kbd
10780
10781@item H f
10782@kindex H f (Summary)
10783@findex gnus-summary-fetch-faq
10784@vindex gnus-group-faq-directory
10785Try to fetch the @acronym{FAQ} (list of frequently asked questions)
10786for the current group (@code{gnus-summary-fetch-faq}). Gnus will try
10787to get the @acronym{FAQ} from @code{gnus-group-faq-directory}, which
10788is usually a directory on a remote machine. This variable can also be
10789a list of directories. In that case, giving a prefix to this command
10790will allow you to choose between the various sites. @code{ange-ftp}
10791or @code{efs} will probably be used for fetching the file.
10792
10793@item H d
10794@kindex H d (Summary)
10795@findex gnus-summary-describe-group
10796Give a brief description of the current group
10797(@code{gnus-summary-describe-group}). If given a prefix, force
10798rereading the description from the server.
10799
10800@item H h
10801@kindex H h (Summary)
10802@findex gnus-summary-describe-briefly
10803Give an extremely brief description of the most important summary
10804keystrokes (@code{gnus-summary-describe-briefly}).
10805
10806@item H i
10807@kindex H i (Summary)
10808@findex gnus-info-find-node
10809Go to the Gnus info node (@code{gnus-info-find-node}).
10810@end table
10811
10812
10813@node Searching for Articles
10814@subsection Searching for Articles
10815
10816@table @kbd
10817
10818@item M-s
10819@kindex M-s (Summary)
10820@findex gnus-summary-search-article-forward
10821Search through all subsequent (raw) articles for a regexp
10822(@code{gnus-summary-search-article-forward}).
10823
10824@item M-r
10825@kindex M-r (Summary)
10826@findex gnus-summary-search-article-backward
10827Search through all previous (raw) articles for a regexp
10828(@code{gnus-summary-search-article-backward}).
10829
01c52d31
MB
10830@item M-S
10831@kindex M-S (Summary)
10832@findex gnus-summary-repeat-search-article-forward
10833Repeat the previous search forwards
10834(@code{gnus-summary-repeat-search-article-forward}).
10835
10836@item M-R
10837@kindex M-R (Summary)
10838@findex gnus-summary-repeat-search-article-backward
10839Repeat the previous search backwards
10840(@code{gnus-summary-repeat-search-article-backward}).
10841
4009494e
GM
10842@item &
10843@kindex & (Summary)
10844@findex gnus-summary-execute-command
10845This command will prompt you for a header, a regular expression to match
10846on this field, and a command to be executed if the match is made
10847(@code{gnus-summary-execute-command}). If the header is an empty
10848string, the match is done on the entire article. If given a prefix,
10849search backward instead.
10850
10851For instance, @kbd{& RET some.*string RET #} will put the process mark on
10852all articles that have heads or bodies that match @samp{some.*string}.
10853
10854@item M-&
10855@kindex M-& (Summary)
10856@findex gnus-summary-universal-argument
10857Perform any operation on all articles that have been marked with
10858the process mark (@code{gnus-summary-universal-argument}).
10859@end table
10860
10861@node Summary Generation Commands
10862@subsection Summary Generation Commands
10863
10864@table @kbd
10865
10866@item Y g
10867@kindex Y g (Summary)
10868@findex gnus-summary-prepare
10869Regenerate the current summary buffer (@code{gnus-summary-prepare}).
10870
10871@item Y c
10872@kindex Y c (Summary)
10873@findex gnus-summary-insert-cached-articles
10874Pull all cached articles (for the current group) into the summary buffer
10875(@code{gnus-summary-insert-cached-articles}).
10876
10877@item Y d
10878@kindex Y d (Summary)
10879@findex gnus-summary-insert-dormant-articles
10880Pull all dormant articles (for the current group) into the summary buffer
10881(@code{gnus-summary-insert-dormant-articles}).
10882
01c52d31
MB
10883@item Y t
10884@kindex Y t (Summary)
10885@findex gnus-summary-insert-ticked-articles
10886Pull all ticked articles (for the current group) into the summary buffer
10887(@code{gnus-summary-insert-ticked-articles}).
10888
4009494e
GM
10889@end table
10890
10891
10892@node Really Various Summary Commands
10893@subsection Really Various Summary Commands
10894
10895@table @kbd
10896
10897@item A D
10898@itemx C-d
10899@kindex C-d (Summary)
10900@kindex A D (Summary)
10901@findex gnus-summary-enter-digest-group
10902If the current article is a collection of other articles (for instance,
10903a digest), you might use this command to enter a group based on the that
10904article (@code{gnus-summary-enter-digest-group}). Gnus will try to
10905guess what article type is currently displayed unless you give a prefix
10906to this command, which forces a ``digest'' interpretation. Basically,
10907whenever you see a message that is a collection of other messages of
10908some format, you @kbd{C-d} and read these messages in a more convenient
10909fashion.
10910
01c52d31
MB
10911@vindex gnus-auto-select-on-ephemeral-exit
10912The variable @code{gnus-auto-select-on-ephemeral-exit} controls what
10913article should be selected after exiting a digest group. Valid values
10914include:
10915
10916@table @code
10917@item next
10918Select the next article.
10919
10920@item next-unread
10921Select the next unread article.
10922
10923@item next-noselect
10924Move the cursor to the next article. This is the default.
10925
10926@item next-unread-noselect
10927Move the cursor to the next unread article.
10928@end table
10929
10930If it has any other value or there is no next (unread) article, the
10931article selected before entering to the digest group will appear.
10932
4009494e
GM
10933@item C-M-d
10934@kindex C-M-d (Summary)
10935@findex gnus-summary-read-document
10936This command is very similar to the one above, but lets you gather
10937several documents into one biiig group
10938(@code{gnus-summary-read-document}). It does this by opening several
10939@code{nndoc} groups for each document, and then opening an
10940@code{nnvirtual} group on top of these @code{nndoc} groups. This
10941command understands the process/prefix convention
10942(@pxref{Process/Prefix}).
10943
10944@item C-t
10945@kindex C-t (Summary)
10946@findex gnus-summary-toggle-truncation
10947Toggle truncation of summary lines
10948(@code{gnus-summary-toggle-truncation}). This will probably confuse the
10949line centering function in the summary buffer, so it's not a good idea
10950to have truncation switched off while reading articles.
10951
10952@item =
10953@kindex = (Summary)
10954@findex gnus-summary-expand-window
10955Expand the summary buffer window (@code{gnus-summary-expand-window}).
10956If given a prefix, force an @code{article} window configuration.
10957
10958@item C-M-e
10959@kindex C-M-e (Summary)
10960@findex gnus-summary-edit-parameters
10961Edit the group parameters (@pxref{Group Parameters}) of the current
10962group (@code{gnus-summary-edit-parameters}).
10963
10964@item C-M-a
10965@kindex C-M-a (Summary)
10966@findex gnus-summary-customize-parameters
10967Customize the group parameters (@pxref{Group Parameters}) of the current
10968group (@code{gnus-summary-customize-parameters}).
10969
10970@end table
10971
10972
10973@node Exiting the Summary Buffer
10974@section Exiting the Summary Buffer
10975@cindex summary exit
10976@cindex exiting groups
10977
10978Exiting from the summary buffer will normally update all info on the
10979group and return you to the group buffer.
10980
10981@table @kbd
10982
10983@item Z Z
10984@itemx Z Q
10985@itemx q
10986@kindex Z Z (Summary)
10987@kindex Z Q (Summary)
10988@kindex q (Summary)
10989@findex gnus-summary-exit
10990@vindex gnus-summary-exit-hook
10991@vindex gnus-summary-prepare-exit-hook
10992@vindex gnus-group-no-more-groups-hook
10993@c @icon{gnus-summary-exit}
10994Exit the current group and update all information on the group
10995(@code{gnus-summary-exit}). @code{gnus-summary-prepare-exit-hook} is
10996called before doing much of the exiting, which calls
10997@code{gnus-summary-expire-articles} by default.
10998@code{gnus-summary-exit-hook} is called after finishing the exit
10999process. @code{gnus-group-no-more-groups-hook} is run when returning to
11000group mode having no more (unread) groups.
11001
11002@item Z E
11003@itemx Q
11004@kindex Z E (Summary)
11005@kindex Q (Summary)
11006@findex gnus-summary-exit-no-update
11007Exit the current group without updating any information on the group
11008(@code{gnus-summary-exit-no-update}).
11009
11010@item Z c
11011@itemx c
11012@kindex Z c (Summary)
11013@kindex c (Summary)
11014@findex gnus-summary-catchup-and-exit
11015@c @icon{gnus-summary-catchup-and-exit}
11016Mark all unticked articles in the group as read and then exit
11017(@code{gnus-summary-catchup-and-exit}).
11018
11019@item Z C
11020@kindex Z C (Summary)
11021@findex gnus-summary-catchup-all-and-exit
11022Mark all articles, even the ticked ones, as read and then exit
11023(@code{gnus-summary-catchup-all-and-exit}).
11024
11025@item Z n
11026@kindex Z n (Summary)
11027@findex gnus-summary-catchup-and-goto-next-group
11028Mark all articles as read and go to the next group
11029(@code{gnus-summary-catchup-and-goto-next-group}).
11030
01c52d31
MB
11031@item Z p
11032@kindex Z p (Summary)
11033@findex gnus-summary-catchup-and-goto-prev-group
11034Mark all articles as read and go to the previous group
11035(@code{gnus-summary-catchup-and-goto-prev-group}).
11036
4009494e
GM
11037@item Z R
11038@itemx C-x C-s
11039@kindex Z R (Summary)
11040@kindex C-x C-s (Summary)
11041@findex gnus-summary-reselect-current-group
11042Exit this group, and then enter it again
11043(@code{gnus-summary-reselect-current-group}). If given a prefix, select
11044all articles, both read and unread.
11045
11046@item Z G
11047@itemx M-g
11048@kindex Z G (Summary)
11049@kindex M-g (Summary)
11050@findex gnus-summary-rescan-group
11051@c @icon{gnus-summary-mail-get}
11052Exit the group, check for new articles in the group, and select the
11053group (@code{gnus-summary-rescan-group}). If given a prefix, select all
11054articles, both read and unread.
11055
11056@item Z N
11057@kindex Z N (Summary)
11058@findex gnus-summary-next-group
11059Exit the group and go to the next group
11060(@code{gnus-summary-next-group}).
11061
11062@item Z P
11063@kindex Z P (Summary)
11064@findex gnus-summary-prev-group
11065Exit the group and go to the previous group
11066(@code{gnus-summary-prev-group}).
11067
11068@item Z s
11069@kindex Z s (Summary)
11070@findex gnus-summary-save-newsrc
11071Save the current number of read/marked articles in the dribble buffer
11072and then save the dribble buffer (@code{gnus-summary-save-newsrc}). If
11073given a prefix, also save the @file{.newsrc} file(s). Using this
11074command will make exit without updating (the @kbd{Q} command) worthless.
11075@end table
11076
11077@vindex gnus-exit-group-hook
11078@code{gnus-exit-group-hook} is called when you exit the current group
11079with an ``updating'' exit. For instance @kbd{Q}
11080(@code{gnus-summary-exit-no-update}) does not call this hook.
11081
11082@findex gnus-summary-wake-up-the-dead
11083@findex gnus-dead-summary-mode
11084@vindex gnus-kill-summary-on-exit
11085If you're in the habit of exiting groups, and then changing your mind
11086about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
11087If you do that, Gnus won't kill the summary buffer when you exit it.
11088(Quelle surprise!) Instead it will change the name of the buffer to
11089something like @samp{*Dead Summary ... *} and install a minor mode
11090called @code{gnus-dead-summary-mode}. Now, if you switch back to this
11091buffer, you'll find that all keys are mapped to a function called
11092@code{gnus-summary-wake-up-the-dead}. So tapping any keys in a dead
11093summary buffer will result in a live, normal summary buffer.
11094
11095There will never be more than one dead summary buffer at any one time.
11096
11097@vindex gnus-use-cross-reference
11098The data on the current group will be updated (which articles you have
11099read, which articles you have replied to, etc.) when you exit the
11100summary buffer. If the @code{gnus-use-cross-reference} variable is
11101@code{t} (which is the default), articles that are cross-referenced to
11102this group and are marked as read, will also be marked as read in the
11103other subscribed groups they were cross-posted to. If this variable is
11104neither @code{nil} nor @code{t}, the article will be marked as read in
11105both subscribed and unsubscribed groups (@pxref{Crosspost Handling}).
11106
11107
11108@node Crosspost Handling
11109@section Crosspost Handling
11110
11111@cindex velveeta
11112@cindex spamming
11113Marking cross-posted articles as read ensures that you'll never have to
11114read the same article more than once. Unless, of course, somebody has
11115posted it to several groups separately. Posting the same article to
11116several groups (not cross-posting) is called @dfn{spamming}, and you are
11117by law required to send nasty-grams to anyone who perpetrates such a
11118heinous crime. You may want to try NoCeM handling to filter out spam
11119(@pxref{NoCeM}).
11120
11121Remember: Cross-posting is kinda ok, but posting the same article
11122separately to several groups is not. Massive cross-posting (aka.
11123@dfn{velveeta}) is to be avoided at all costs, and you can even use the
11124@code{gnus-summary-mail-crosspost-complaint} command to complain about
11125excessive crossposting (@pxref{Summary Mail Commands}).
11126
11127@cindex cross-posting
11128@cindex Xref
11129@cindex @acronym{NOV}
11130One thing that may cause Gnus to not do the cross-posting thing
11131correctly is if you use an @acronym{NNTP} server that supports @sc{xover}
11132(which is very nice, because it speeds things up considerably) which
11133does not include the @code{Xref} header in its @acronym{NOV} lines. This is
11134Evil, but all too common, alas, alack. Gnus tries to Do The Right Thing
11135even with @sc{xover} by registering the @code{Xref} lines of all
11136articles you actually read, but if you kill the articles, or just mark
11137them as read without reading them, Gnus will not get a chance to snoop
11138the @code{Xref} lines out of these articles, and will be unable to use
11139the cross reference mechanism.
11140
11141@cindex LIST overview.fmt
11142@cindex overview.fmt
11143To check whether your @acronym{NNTP} server includes the @code{Xref} header
11144in its overview files, try @samp{telnet your.nntp.server nntp},
11145@samp{MODE READER} on @code{inn} servers, and then say @samp{LIST
11146overview.fmt}. This may not work, but if it does, and the last line you
11147get does not read @samp{Xref:full}, then you should shout and whine at
11148your news admin until she includes the @code{Xref} header in the
11149overview files.
11150
4009494e 11151If you want Gnus to get the @code{Xref}s right all the time, you have to
4b70e299
MB
11152set @code{nntp-nov-is-evil} to @code{t}, which slows things down
11153considerably. Also @pxref{Slow/Expensive Connection}.
4009494e
GM
11154
11155C'est la vie.
11156
11157For an alternative approach, @pxref{Duplicate Suppression}.
11158
11159
11160@node Duplicate Suppression
11161@section Duplicate Suppression
11162
11163By default, Gnus tries to make sure that you don't have to read the same
11164article more than once by utilizing the crossposting mechanism
11165(@pxref{Crosspost Handling}). However, that simple and efficient
11166approach may not work satisfactory for some users for various
11167reasons.
11168
11169@enumerate
11170@item
11171The @acronym{NNTP} server may fail to generate the @code{Xref} header. This
11172is evil and not very common.
11173
11174@item
11175The @acronym{NNTP} server may fail to include the @code{Xref} header in the
11176@file{.overview} data bases. This is evil and all too common, alas.
11177
11178@item
11179You may be reading the same group (or several related groups) from
11180different @acronym{NNTP} servers.
11181
11182@item
11183You may be getting mail that duplicates articles posted to groups.
11184@end enumerate
11185
11186I'm sure there are other situations where @code{Xref} handling fails as
11187well, but these four are the most common situations.
11188
11189If, and only if, @code{Xref} handling fails for you, then you may
11190consider switching on @dfn{duplicate suppression}. If you do so, Gnus
11191will remember the @code{Message-ID}s of all articles you have read or
11192otherwise marked as read, and then, as if by magic, mark them as read
11193all subsequent times you see them---in @emph{all} groups. Using this
11194mechanism is quite likely to be somewhat inefficient, but not overly
11195so. It's certainly preferable to reading the same articles more than
11196once.
11197
11198Duplicate suppression is not a very subtle instrument. It's more like a
11199sledge hammer than anything else. It works in a very simple
11200fashion---if you have marked an article as read, it adds this Message-ID
11201to a cache. The next time it sees this Message-ID, it will mark the
11202article as read with the @samp{M} mark. It doesn't care what group it
11203saw the article in.
11204
11205@table @code
11206@item gnus-suppress-duplicates
11207@vindex gnus-suppress-duplicates
11208If non-@code{nil}, suppress duplicates.
11209
11210@item gnus-save-duplicate-list
11211@vindex gnus-save-duplicate-list
11212If non-@code{nil}, save the list of duplicates to a file. This will
11213make startup and shutdown take longer, so the default is @code{nil}.
11214However, this means that only duplicate articles read in a single Gnus
11215session are suppressed.
11216
11217@item gnus-duplicate-list-length
11218@vindex gnus-duplicate-list-length
11219This variable says how many @code{Message-ID}s to keep in the duplicate
11220suppression list. The default is 10000.
11221
11222@item gnus-duplicate-file
11223@vindex gnus-duplicate-file
11224The name of the file to store the duplicate suppression list in. The
11225default is @file{~/News/suppression}.
11226@end table
11227
11228If you have a tendency to stop and start Gnus often, setting
11229@code{gnus-save-duplicate-list} to @code{t} is probably a good idea. If
11230you leave Gnus running for weeks on end, you may have it @code{nil}. On
11231the other hand, saving the list makes startup and shutdown much slower,
11232so that means that if you stop and start Gnus often, you should set
11233@code{gnus-save-duplicate-list} to @code{nil}. Uhm. I'll leave this up
11234to you to figure out, I think.
11235
11236@node Security
11237@section Security
11238
11239Gnus is able to verify signed messages or decrypt encrypted messages.
11240The formats that are supported are @acronym{PGP}, @acronym{PGP/MIME}
11241and @acronym{S/MIME}, however you need some external programs to get
11242things to work:
11243
11244@enumerate
11245@item
11246To handle @acronym{PGP} and @acronym{PGP/MIME} messages, you have to
11247install an OpenPGP implementation such as GnuPG. The Lisp interface
11248to GnuPG included with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG
11249Manual}), but Mailcrypt and gpg.el are also supported.
11250
11251@item
11252To handle @acronym{S/MIME} message, you need to install OpenSSL. OpenSSL 0.9.6
11253or newer is recommended.
11254
11255@end enumerate
11256
11257The variables that control security functionality on reading messages
11258include:
11259
11260@table @code
11261@item mm-verify-option
11262@vindex mm-verify-option
11263Option of verifying signed parts. @code{never}, not verify;
11264@code{always}, always verify; @code{known}, only verify known
11265protocols. Otherwise, ask user.
11266
11267@item mm-decrypt-option
11268@vindex mm-decrypt-option
11269Option of decrypting encrypted parts. @code{never}, no decryption;
11270@code{always}, always decrypt; @code{known}, only decrypt known
11271protocols. Otherwise, ask user.
11272
11273@item mml1991-use
11274@vindex mml1991-use
11275Symbol indicating elisp interface to OpenPGP implementation for
11276@acronym{PGP} messages. The default is @code{pgg}, but
11277@code{mailcrypt} and @code{gpg} are also supported although
11278deprecated.
11279
11280@item mml2015-use
11281@vindex mml2015-use
11282Symbol indicating elisp interface to OpenPGP implementation for
11283@acronym{PGP/MIME} messages. The default is @code{pgg}, but
11284@code{mailcrypt} and @code{gpg} are also supported although
11285deprecated.
11286
11287@end table
11288
11289By default the buttons that display security information are not
11290shown, because they clutter reading the actual e-mail. You can type
11291@kbd{K b} manually to display the information. Use the
11292@code{gnus-buttonized-mime-types} and
11293@code{gnus-unbuttonized-mime-types} variables to control this
11294permanently. @ref{MIME Commands} for further details, and hints on
11295how to customize these variables to always display security
11296information.
11297
11298@cindex snarfing keys
11299@cindex importing PGP keys
11300@cindex PGP key ring import
11301Snarfing OpenPGP keys (i.e., importing keys from articles into your
11302key ring) is not supported explicitly through a menu item or command,
11303rather Gnus do detect and label keys as @samp{application/pgp-keys},
11304allowing you to specify whatever action you think is appropriate
11305through the usual @acronym{MIME} infrastructure. You can use a
11306@file{~/.mailcap} entry (@pxref{mailcap, , mailcap, emacs-mime, The
11307Emacs MIME Manual}) such as the following to import keys using GNU
11308Privacy Guard when you click on the @acronym{MIME} button
11309(@pxref{Using MIME}).
11310
11311@example
11312application/pgp-keys; gpg --import --interactive --verbose; needsterminal
11313@end example
11314@noindent
11315This happens to also be the default action defined in
11316@code{mailcap-mime-data}.
11317
11318More information on how to set things for sending outgoing signed and
11319encrypted messages up can be found in the message manual
11320(@pxref{Security, ,Security, message, Message Manual}).
11321
11322@node Mailing List
11323@section Mailing List
11324@cindex mailing list
11325@cindex RFC 2396
11326
11327@kindex A M (summary)
11328@findex gnus-mailing-list-insinuate
11329Gnus understands some mailing list fields of RFC 2369. To enable it,
11330add a @code{to-list} group parameter (@pxref{Group Parameters}),
11331possibly using @kbd{A M} (@code{gnus-mailing-list-insinuate}) in the
11332summary buffer.
11333
11334That enables the following commands to the summary buffer:
11335
11336@table @kbd
11337
11338@item C-c C-n h
11339@kindex C-c C-n h (Summary)
11340@findex gnus-mailing-list-help
11341Send a message to fetch mailing list help, if List-Help field exists.
11342
11343@item C-c C-n s
11344@kindex C-c C-n s (Summary)
11345@findex gnus-mailing-list-subscribe
11346Send a message to subscribe the mailing list, if List-Subscribe field exists.
11347
11348@item C-c C-n u
11349@kindex C-c C-n u (Summary)
11350@findex gnus-mailing-list-unsubscribe
11351Send a message to unsubscribe the mailing list, if List-Unsubscribe
11352field exists.
11353
11354@item C-c C-n p
11355@kindex C-c C-n p (Summary)
11356@findex gnus-mailing-list-post
11357Post to the mailing list, if List-Post field exists.
11358
11359@item C-c C-n o
11360@kindex C-c C-n o (Summary)
11361@findex gnus-mailing-list-owner
11362Send a message to the mailing list owner, if List-Owner field exists.
11363
11364@item C-c C-n a
11365@kindex C-c C-n a (Summary)
01c52d31 11366@findex gnus-mailing-list-archive
4009494e
GM
11367Browse the mailing list archive, if List-Archive field exists.
11368
11369@end table
11370
11371
11372@node Article Buffer
11373@chapter Article Buffer
11374@cindex article buffer
11375
11376The articles are displayed in the article buffer, of which there is only
11377one. All the summary buffers share the same article buffer unless you
11378tell Gnus otherwise.
11379
11380@menu
11381* Hiding Headers:: Deciding what headers should be displayed.
11382* Using MIME:: Pushing articles through @acronym{MIME} before reading them.
11383* Customizing Articles:: Tailoring the look of the articles.
11384* Article Keymap:: Keystrokes available in the article buffer.
11385* Misc Article:: Other stuff.
11386@end menu
11387
11388
11389@node Hiding Headers
11390@section Hiding Headers
11391@cindex hiding headers
11392@cindex deleting headers
11393
11394The top section of each article is the @dfn{head}. (The rest is the
11395@dfn{body}, but you may have guessed that already.)
11396
11397@vindex gnus-show-all-headers
11398There is a lot of useful information in the head: the name of the person
11399who wrote the article, the date it was written and the subject of the
11400article. That's well and nice, but there's also lots of information
11401most people do not want to see---what systems the article has passed
11402through before reaching you, the @code{Message-ID}, the
11403@code{References}, etc. ad nauseam---and you'll probably want to get rid
11404of some of those lines. If you want to keep all those lines in the
11405article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
11406
11407Gnus provides you with two variables for sifting headers:
11408
11409@table @code
11410
11411@item gnus-visible-headers
11412@vindex gnus-visible-headers
11413If this variable is non-@code{nil}, it should be a regular expression
11414that says what headers you wish to keep in the article buffer. All
11415headers that do not match this variable will be hidden.
11416
11417For instance, if you only want to see the name of the person who wrote
11418the article and the subject, you'd say:
11419
11420@lisp
11421(setq gnus-visible-headers "^From:\\|^Subject:")
11422@end lisp
11423
11424This variable can also be a list of regexps to match headers to
11425remain visible.
11426
11427@item gnus-ignored-headers
11428@vindex gnus-ignored-headers
11429This variable is the reverse of @code{gnus-visible-headers}. If this
11430variable is set (and @code{gnus-visible-headers} is @code{nil}), it
11431should be a regular expression that matches all lines that you want to
11432hide. All lines that do not match this variable will remain visible.
11433
11434For instance, if you just want to get rid of the @code{References} line
11435and the @code{Xref} line, you might say:
11436
11437@lisp
11438(setq gnus-ignored-headers "^References:\\|^Xref:")
11439@end lisp
11440
11441This variable can also be a list of regexps to match headers to
11442be removed.
11443
11444Note that if @code{gnus-visible-headers} is non-@code{nil}, this
11445variable will have no effect.
11446
11447@end table
11448
11449@vindex gnus-sorted-header-list
11450Gnus can also sort the headers for you. (It does this by default.) You
11451can control the sorting by setting the @code{gnus-sorted-header-list}
11452variable. It is a list of regular expressions that says in what order
11453the headers are to be displayed.
11454
11455For instance, if you want the name of the author of the article first,
11456and then the subject, you might say something like:
11457
11458@lisp
11459(setq gnus-sorted-header-list '("^From:" "^Subject:"))
11460@end lisp
11461
11462Any headers that are to remain visible, but are not listed in this
11463variable, will be displayed in random order after all the headers listed in this variable.
11464
11465@findex gnus-article-hide-boring-headers
11466@vindex gnus-boring-article-headers
11467You can hide further boring headers by setting
11468@code{gnus-treat-hide-boring-headers} to @code{head}. What this function
11469does depends on the @code{gnus-boring-article-headers} variable. It's a
11470list, but this list doesn't actually contain header names. Instead it
11471lists various @dfn{boring conditions} that Gnus can check and remove
11472from sight.
11473
11474These conditions are:
11475@table @code
11476@item empty
11477Remove all empty headers.
11478@item followup-to
11479Remove the @code{Followup-To} header if it is identical to the
11480@code{Newsgroups} header.
11481@item reply-to
11482Remove the @code{Reply-To} header if it lists the same addresses as
11483the @code{From} header, or if the @code{broken-reply-to} group
11484parameter is set.
11485@item newsgroups
11486Remove the @code{Newsgroups} header if it only contains the current group
11487name.
11488@item to-address
11489Remove the @code{To} header if it only contains the address identical to
11490the current group's @code{to-address} parameter.
11491@item to-list
11492Remove the @code{To} header if it only contains the address identical to
11493the current group's @code{to-list} parameter.
11494@item cc-list
11495Remove the @code{Cc} header if it only contains the address identical to
11496the current group's @code{to-list} parameter.
11497@item date
11498Remove the @code{Date} header if the article is less than three days
11499old.
11500@item long-to
11501Remove the @code{To} and/or @code{Cc} header if it is very long.
11502@item many-to
11503Remove all @code{To} and/or @code{Cc} headers if there are more than one.
11504@end table
11505
11506To include these three elements, you could say something like:
11507
11508@lisp
11509(setq gnus-boring-article-headers
11510 '(empty followup-to reply-to))
11511@end lisp
11512
11513This is also the default value for this variable.
11514
11515
11516@node Using MIME
11517@section Using MIME
11518@cindex @acronym{MIME}
11519
11520Mime is a standard for waving your hands through the air, aimlessly,
11521while people stand around yawning.
11522
11523@acronym{MIME}, however, is a standard for encoding your articles, aimlessly,
11524while all newsreaders die of fear.
11525
11526@acronym{MIME} may specify what character set the article uses, the encoding
11527of the characters, and it also makes it possible to embed pictures and
11528other naughty stuff in innocent-looking articles.
11529
11530@vindex gnus-display-mime-function
11531@findex gnus-display-mime
11532Gnus pushes @acronym{MIME} articles through @code{gnus-display-mime-function}
11533to display the @acronym{MIME} parts. This is @code{gnus-display-mime} by
11534default, which creates a bundle of clickable buttons that can be used to
11535display, save and manipulate the @acronym{MIME} objects.
11536
11537The following commands are available when you have placed point over a
11538@acronym{MIME} button:
11539
11540@table @kbd
11541@findex gnus-article-press-button
11542@item RET (Article)
11543@kindex RET (Article)
11544@itemx BUTTON-2 (Article)
11545Toggle displaying of the @acronym{MIME} object
11546(@code{gnus-article-press-button}). If built-in viewers can not display
11547the object, Gnus resorts to external viewers in the @file{mailcap}
11548files. If a viewer has the @samp{copiousoutput} specification, the
11549object is displayed inline.
11550
11551@findex gnus-mime-view-part
11552@item M-RET (Article)
11553@kindex M-RET (Article)
11554@itemx v (Article)
11555Prompt for a method, and then view the @acronym{MIME} object using this
11556method (@code{gnus-mime-view-part}).
11557
11558@findex gnus-mime-view-part-as-type
11559@item t (Article)
11560@kindex t (Article)
11561View the @acronym{MIME} object as if it were a different @acronym{MIME} media type
11562(@code{gnus-mime-view-part-as-type}).
11563
11564@findex gnus-mime-view-part-as-charset
11565@item C (Article)
11566@kindex C (Article)
11567Prompt for a charset, and then view the @acronym{MIME} object using this
11568charset (@code{gnus-mime-view-part-as-charset}).
11569
11570@findex gnus-mime-save-part
11571@item o (Article)
11572@kindex o (Article)
11573Prompt for a file name, and then save the @acronym{MIME} object
11574(@code{gnus-mime-save-part}).
11575
11576@findex gnus-mime-save-part-and-strip
11577@item C-o (Article)
11578@kindex C-o (Article)
11579Prompt for a file name, then save the @acronym{MIME} object and strip it from
11580the article. Then proceed to article editing, where a reasonable
11581suggestion is being made on how the altered article should look
11582like. The stripped @acronym{MIME} object will be referred via the
11583message/external-body @acronym{MIME} type.
11584(@code{gnus-mime-save-part-and-strip}).
11585
01c52d31
MB
11586@findex gnus-mime-replace-part
11587@item r (Article)
11588@kindex r (Article)
11589Prompt for a file name, replace the @acronym{MIME} object with an
11590external body refering to the file via the message/external-body
11591@acronym{MIME} type. (@code{gnus-mime-replace-part}).
11592
4009494e
GM
11593@findex gnus-mime-delete-part
11594@item d (Article)
11595@kindex d (Article)
11596Delete the @acronym{MIME} object from the article and replace it with some
11597information about the removed @acronym{MIME} object
11598(@code{gnus-mime-delete-part}).
11599
01c52d31
MB
11600@c FIXME: gnus-auto-select-part should be documented here
11601
4009494e
GM
11602@findex gnus-mime-copy-part
11603@item c (Article)
11604@kindex c (Article)
11605Copy the @acronym{MIME} object to a fresh buffer and display this buffer
01c52d31
MB
11606(@code{gnus-mime-copy-part}). If given a prefix, copy the raw contents
11607without decoding. If given a numerical prefix, you can do semi-manual
11608charset stuff (see @code{gnus-summary-show-article-charset-alist} in
11609@ref{Paging the Article}). Compressed files like @file{.gz} and
4009494e
GM
11610@file{.bz2} are automatically decompressed if
11611@code{auto-compression-mode} is enabled (@pxref{Compressed Files,,
11612Accessing Compressed Files, emacs, The Emacs Editor}).
11613
11614@findex gnus-mime-print-part
11615@item p (Article)
11616@kindex p (Article)
11617Print the @acronym{MIME} object (@code{gnus-mime-print-part}). This
11618command respects the @samp{print=} specifications in the
11619@file{.mailcap} file.
11620
11621@findex gnus-mime-inline-part
11622@item i (Article)
11623@kindex i (Article)
11624Insert the contents of the @acronym{MIME} object into the buffer
9b3ebcb6 11625(@code{gnus-mime-inline-part}) as @samp{text/plain}. If given a prefix, insert
4009494e
GM
11626the raw contents without decoding. If given a numerical prefix, you can
11627do semi-manual charset stuff (see
11628@code{gnus-summary-show-article-charset-alist} in @ref{Paging the
01c52d31
MB
11629Article}). Compressed files like @file{.gz} and @file{.bz2} are
11630automatically decompressed depending on @code{jka-compr} regardless of
11631@code{auto-compression-mode} (@pxref{Compressed Files,, Accessing
11632Compressed Files, emacs, The Emacs Editor}).
4009494e
GM
11633
11634@findex gnus-mime-view-part-internally
11635@item E (Article)
11636@kindex E (Article)
11637View the @acronym{MIME} object with an internal viewer. If no internal
11638viewer is available, use an external viewer
11639(@code{gnus-mime-view-part-internally}).
11640
11641@findex gnus-mime-view-part-externally
11642@item e (Article)
11643@kindex e (Article)
11644View the @acronym{MIME} object with an external viewer.
11645(@code{gnus-mime-view-part-externally}).
11646
11647@findex gnus-mime-pipe-part
11648@item | (Article)
11649@kindex | (Article)
11650Output the @acronym{MIME} object to a process (@code{gnus-mime-pipe-part}).
11651
11652@findex gnus-mime-action-on-part
11653@item . (Article)
11654@kindex . (Article)
11655Interactively run an action on the @acronym{MIME} object
11656(@code{gnus-mime-action-on-part}).
11657
11658@end table
11659
11660Gnus will display some @acronym{MIME} objects automatically. The way Gnus
11661determines which parts to do this with is described in the Emacs
11662@acronym{MIME} manual.
11663
11664It might be best to just use the toggling functions from the article
11665buffer to avoid getting nasty surprises. (For instance, you enter the
11666group @samp{alt.sing-a-long} and, before you know it, @acronym{MIME} has
11667decoded the sound file in the article and some horrible sing-a-long song
11668comes screaming out your speakers, and you can't find the volume button,
11669because there isn't one, and people are starting to look at you, and you
11670try to stop the program, but you can't, and you can't find the program
11671to control the volume, and everybody else in the room suddenly decides
11672to look at you disdainfully, and you'll feel rather stupid.)
11673
11674Any similarity to real events and people is purely coincidental. Ahem.
11675
11676Also @pxref{MIME Commands}.
11677
11678
11679@node Customizing Articles
11680@section Customizing Articles
11681@cindex article customization
11682
11683A slew of functions for customizing how the articles are to look like
11684exist. You can call these functions interactively
11685(@pxref{Article Washing}), or you can have them
11686called automatically when you select the articles.
11687
11688To have them called automatically, you should set the corresponding
11689``treatment'' variable. For instance, to have headers hidden, you'd set
11690@code{gnus-treat-hide-headers}. Below is a list of variables that can
11691be set, but first we discuss the values these variables can have.
11692
11693Note: Some values, while valid, make little sense. Check the list below
11694for sensible values.
11695
11696@enumerate
11697@item
11698@code{nil}: Don't do this treatment.
11699
11700@item
11701@code{t}: Do this treatment on all body parts.
11702
11703@item
11704@code{head}: Do the treatment on the headers.
11705
11706@item
01c52d31
MB
11707@code{first}: Do this treatment on the first body part.
11708
11709@item
11710@code{last}: Do this treatment on the last body part.
4009494e
GM
11711
11712@item
11713An integer: Do this treatment on all body parts that have a length less
11714than this number.
11715
11716@item
11717A list of strings: Do this treatment on all body parts that are in
11718articles that are read in groups that have names that match one of the
11719regexps in the list.
11720
11721@item
11722A list where the first element is not a string:
11723
11724The list is evaluated recursively. The first element of the list is a
11725predicate. The following predicates are recognized: @code{or},
11726@code{and}, @code{not} and @code{typep}. Here's an example:
11727
11728@lisp
11729(or last
11730 (typep "text/x-vcard"))
11731@end lisp
11732
11733@end enumerate
11734
11735You may have noticed that the word @dfn{part} is used here. This refers
11736to the fact that some messages are @acronym{MIME} multipart articles that may
11737be divided into several parts. Articles that are not multiparts are
11738considered to contain just a single part.
11739
11740@vindex gnus-article-treat-types
11741Are the treatments applied to all sorts of multipart parts? Yes, if you
11742want to, but by default, only @samp{text/plain} parts are given the
11743treatment. This is controlled by the @code{gnus-article-treat-types}
11744variable, which is a list of regular expressions that are matched to the
11745type of the part. This variable is ignored if the value of the
11746controlling variable is a predicate list, as described above.
11747
11748@ifinfo
11749@c Avoid sort of redundant entries in the same section for the printed
11750@c manual, but add them in info to allow `i gnus-treat-foo-bar RET' or
11751@c `i foo-bar'.
11752@vindex gnus-treat-buttonize
11753@vindex gnus-treat-buttonize-head
11754@vindex gnus-treat-capitalize-sentences
11755@vindex gnus-treat-overstrike
11756@vindex gnus-treat-strip-cr
11757@vindex gnus-treat-strip-headers-in-body
11758@vindex gnus-treat-strip-leading-blank-lines
11759@vindex gnus-treat-strip-multiple-blank-lines
11760@vindex gnus-treat-strip-pem
11761@vindex gnus-treat-strip-trailing-blank-lines
11762@vindex gnus-treat-unsplit-urls
11763@vindex gnus-treat-wash-html
11764@vindex gnus-treat-date-english
11765@vindex gnus-treat-date-iso8601
11766@vindex gnus-treat-date-lapsed
11767@vindex gnus-treat-date-local
11768@vindex gnus-treat-date-original
11769@vindex gnus-treat-date-user-defined
11770@vindex gnus-treat-date-ut
11771@vindex gnus-treat-from-picon
11772@vindex gnus-treat-mail-picon
11773@vindex gnus-treat-newsgroups-picon
11774@vindex gnus-treat-display-smileys
11775@vindex gnus-treat-body-boundary
11776@vindex gnus-treat-display-x-face
11777@vindex gnus-treat-display-face
11778@vindex gnus-treat-emphasize
11779@vindex gnus-treat-fill-article
11780@vindex gnus-treat-fill-long-lines
11781@vindex gnus-treat-hide-boring-headers
11782@vindex gnus-treat-hide-citation
11783@vindex gnus-treat-hide-citation-maybe
11784@vindex gnus-treat-hide-headers
11785@vindex gnus-treat-hide-signature
11786@vindex gnus-treat-strip-banner
11787@vindex gnus-treat-strip-list-identifiers
11788@vindex gnus-treat-highlight-citation
11789@vindex gnus-treat-highlight-headers
11790@vindex gnus-treat-highlight-signature
11791@vindex gnus-treat-play-sounds
11792@vindex gnus-treat-translate
11793@vindex gnus-treat-x-pgp-sig
11794@vindex gnus-treat-unfold-headers
11795@vindex gnus-treat-fold-headers
11796@vindex gnus-treat-fold-newsgroups
11797@vindex gnus-treat-leading-whitespace
11798@end ifinfo
11799
11800The following treatment options are available. The easiest way to
11801customize this is to examine the @code{gnus-article-treat} customization
11802group. Values in parenthesis are suggested sensible values. Others are
11803possible but those listed are probably sufficient for most people.
11804
11805@table @code
11806@item gnus-treat-buttonize (t, integer)
11807@item gnus-treat-buttonize-head (head)
11808
11809@xref{Article Buttons}.
11810
11811@item gnus-treat-capitalize-sentences (t, integer)
11812@item gnus-treat-overstrike (t, integer)
11813@item gnus-treat-strip-cr (t, integer)
11814@item gnus-treat-strip-headers-in-body (t, integer)
01c52d31 11815@item gnus-treat-strip-leading-blank-lines (t, first, integer)
4009494e
GM
11816@item gnus-treat-strip-multiple-blank-lines (t, integer)
11817@item gnus-treat-strip-pem (t, last, integer)
11818@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
11819@item gnus-treat-unsplit-urls (t, integer)
11820@item gnus-treat-wash-html (t, integer)
11821
11822@xref{Article Washing}.
11823
11824@item gnus-treat-date-english (head)
11825@item gnus-treat-date-iso8601 (head)
11826@item gnus-treat-date-lapsed (head)
11827@item gnus-treat-date-local (head)
11828@item gnus-treat-date-original (head)
11829@item gnus-treat-date-user-defined (head)
11830@item gnus-treat-date-ut (head)
11831
11832@xref{Article Date}.
11833
11834@item gnus-treat-from-picon (head)
11835@item gnus-treat-mail-picon (head)
11836@item gnus-treat-newsgroups-picon (head)
11837
11838@xref{Picons}.
11839
11840@item gnus-treat-display-smileys (t, integer)
11841
11842@item gnus-treat-body-boundary (head)
11843
11844@vindex gnus-body-boundary-delimiter
11845Adds a delimiter between header and body, the string used as delimiter
11846is controlled by @code{gnus-body-boundary-delimiter}.
11847
11848@xref{Smileys}.
11849
11850@vindex gnus-treat-display-x-face
11851@item gnus-treat-display-x-face (head)
11852
11853@xref{X-Face}.
11854
11855@vindex gnus-treat-display-face
11856@item gnus-treat-display-face (head)
11857
11858@xref{Face}.
11859
11860@vindex gnus-treat-emphasize
11861@item gnus-treat-emphasize (t, head, integer)
11862@vindex gnus-treat-fill-article
11863@item gnus-treat-fill-article (t, integer)
11864@vindex gnus-treat-fill-long-lines
11865@item gnus-treat-fill-long-lines (t, integer)
11866@vindex gnus-treat-hide-boring-headers
11867@item gnus-treat-hide-boring-headers (head)
11868@vindex gnus-treat-hide-citation
11869@item gnus-treat-hide-citation (t, integer)
11870@vindex gnus-treat-hide-citation-maybe
11871@item gnus-treat-hide-citation-maybe (t, integer)
11872@vindex gnus-treat-hide-headers
11873@item gnus-treat-hide-headers (head)
11874@vindex gnus-treat-hide-signature
11875@item gnus-treat-hide-signature (t, last)
11876@vindex gnus-treat-strip-banner
11877@item gnus-treat-strip-banner (t, last)
11878@vindex gnus-treat-strip-list-identifiers
11879@item gnus-treat-strip-list-identifiers (head)
11880
11881@xref{Article Hiding}.
11882
11883@vindex gnus-treat-highlight-citation
11884@item gnus-treat-highlight-citation (t, integer)
11885@vindex gnus-treat-highlight-headers
11886@item gnus-treat-highlight-headers (head)
11887@vindex gnus-treat-highlight-signature
11888@item gnus-treat-highlight-signature (t, last, integer)
11889
11890@xref{Article Highlighting}.
11891
11892@vindex gnus-treat-play-sounds
11893@item gnus-treat-play-sounds
11894@vindex gnus-treat-translate
11895@item gnus-treat-translate
01c52d31 11896@item gnus-treat-ansi-sequences (t)
4009494e
GM
11897@vindex gnus-treat-x-pgp-sig
11898@item gnus-treat-x-pgp-sig (head)
11899
11900@vindex gnus-treat-unfold-headers
11901@item gnus-treat-unfold-headers (head)
11902@vindex gnus-treat-fold-headers
11903@item gnus-treat-fold-headers (head)
11904@vindex gnus-treat-fold-newsgroups
11905@item gnus-treat-fold-newsgroups (head)
11906@vindex gnus-treat-leading-whitespace
11907@item gnus-treat-leading-whitespace (head)
11908
11909@xref{Article Header}.
11910
11911
11912@end table
11913
11914@vindex gnus-part-display-hook
11915You can, of course, write your own functions to be called from
11916@code{gnus-part-display-hook}. The functions are called narrowed to the
11917part, and you can do anything you like, pretty much. There is no
11918information that you have to keep in the buffer---you can change
11919everything.
11920
11921
11922@node Article Keymap
11923@section Article Keymap
11924
11925Most of the keystrokes in the summary buffer can also be used in the
11926article buffer. They should behave as if you typed them in the summary
11927buffer, which means that you don't actually have to have a summary
11928buffer displayed while reading. You can do it all from the article
11929buffer.
11930
11931@kindex v (Article)
11932@cindex keys, reserved for users (Article)
11933The key @kbd{v} is reserved for users. You can bind it to some
11934command or better use it as a prefix key.
11935
11936A few additional keystrokes are available:
11937
11938@table @kbd
11939
11940@item SPACE
11941@kindex SPACE (Article)
11942@findex gnus-article-next-page
11943Scroll forwards one page (@code{gnus-article-next-page}).
11944This is exactly the same as @kbd{h SPACE h}.
11945
11946@item DEL
11947@kindex DEL (Article)
11948@findex gnus-article-prev-page
11949Scroll backwards one page (@code{gnus-article-prev-page}).
11950This is exactly the same as @kbd{h DEL h}.
11951
11952@item C-c ^
11953@kindex C-c ^ (Article)
11954@findex gnus-article-refer-article
11955If point is in the neighborhood of a @code{Message-ID} and you press
11956@kbd{C-c ^}, Gnus will try to get that article from the server
11957(@code{gnus-article-refer-article}).
11958
11959@item C-c C-m
11960@kindex C-c C-m (Article)
11961@findex gnus-article-mail
11962Send a reply to the address near point (@code{gnus-article-mail}). If
11963given a prefix, include the mail.
11964
11965@item s
11966@kindex s (Article)
11967@findex gnus-article-show-summary
11968Reconfigure the buffers so that the summary buffer becomes visible
11969(@code{gnus-article-show-summary}).
11970
11971@item ?
11972@kindex ? (Article)
11973@findex gnus-article-describe-briefly
11974Give a very brief description of the available keystrokes
11975(@code{gnus-article-describe-briefly}).
11976
11977@item TAB
11978@kindex TAB (Article)
11979@findex gnus-article-next-button
11980Go to the next button, if any (@code{gnus-article-next-button}). This
11981only makes sense if you have buttonizing turned on.
11982
11983@item M-TAB
11984@kindex M-TAB (Article)
11985@findex gnus-article-prev-button
11986Go to the previous button, if any (@code{gnus-article-prev-button}).
11987
11988@item R
11989@kindex R (Article)
11990@findex gnus-article-reply-with-original
11991Send a reply to the current article and yank the current article
95838435
MB
11992(@code{gnus-article-reply-with-original}). If the region is active,
11993only yank the text in the region.
11994
11995@item S W
11996@kindex S W (Article)
11997@findex gnus-article-wide-reply-with-original
11998Send a wide reply to the current article and yank the current article
11999(@code{gnus-article-wide-reply-with-original}). If the region is
12000active, only yank the text in the region.
4009494e
GM
12001
12002@item F
12003@kindex F (Article)
12004@findex gnus-article-followup-with-original
12005Send a followup to the current article and yank the current article
95838435
MB
12006(@code{gnus-article-followup-with-original}). If the region is active,
12007only yank the text in the region.
4009494e
GM
12008
12009
12010@end table
12011
12012
12013@node Misc Article
12014@section Misc Article
12015
12016@table @code
12017
12018@item gnus-single-article-buffer
12019@vindex gnus-single-article-buffer
12020@cindex article buffers, several
12021If non-@code{nil}, use the same article buffer for all the groups.
12022(This is the default.) If @code{nil}, each group will have its own
12023article buffer.
12024
12025@vindex gnus-article-decode-hook
12026@item gnus-article-decode-hook
12027@cindex @acronym{MIME}
12028Hook used to decode @acronym{MIME} articles. The default value is
12029@code{(article-decode-charset article-decode-encoded-words)}
12030
12031@vindex gnus-article-prepare-hook
12032@item gnus-article-prepare-hook
12033This hook is called right after the article has been inserted into the
12034article buffer. It is mainly intended for functions that do something
12035depending on the contents; it should probably not be used for changing
12036the contents of the article buffer.
12037
12038@item gnus-article-mode-hook
12039@vindex gnus-article-mode-hook
12040Hook called in article mode buffers.
12041
12042@item gnus-article-mode-syntax-table
12043@vindex gnus-article-mode-syntax-table
12044Syntax table used in article buffers. It is initialized from
12045@code{text-mode-syntax-table}.
12046
12047@vindex gnus-article-over-scroll
12048@item gnus-article-over-scroll
12049If non-@code{nil}, allow scrolling the article buffer even when there
12050no more new text to scroll in. The default is @code{nil}.
12051
12052@vindex gnus-article-mode-line-format
12053@item gnus-article-mode-line-format
12054This variable is a format string along the same lines as
12055@code{gnus-summary-mode-line-format} (@pxref{Summary Buffer Mode
12056Line}). It accepts the same format specifications as that variable,
12057with two extensions:
12058
12059@table @samp
12060
12061@item w
12062The @dfn{wash status} of the article. This is a short string with one
12063character for each possible article wash operation that may have been
12064performed. The characters and their meaning:
12065
12066@table @samp
12067
12068@item c
12069Displayed when cited text may be hidden in the article buffer.
12070
12071@item h
12072Displayed when headers are hidden in the article buffer.
12073
12074@item p
12075Displayed when article is digitally signed or encrypted, and Gnus has
12076hidden the security headers. (N.B. does not tell anything about
12077security status, i.e. good or bad signature.)
12078
12079@item s
12080Displayed when the signature has been hidden in the Article buffer.
12081
12082@item o
12083Displayed when Gnus has treated overstrike characters in the article buffer.
12084
12085@item e
12086Displayed when Gnus has treated emphasised strings in the article buffer.
12087
12088@end table
12089
12090@item m
12091The number of @acronym{MIME} parts in the article.
12092
12093@end table
12094
12095@vindex gnus-break-pages
12096
12097@item gnus-break-pages
12098Controls whether @dfn{page breaking} is to take place. If this variable
12099is non-@code{nil}, the articles will be divided into pages whenever a
12100page delimiter appears in the article. If this variable is @code{nil},
12101paging will not be done.
12102
12103@item gnus-page-delimiter
12104@vindex gnus-page-delimiter
12105This is the delimiter mentioned above. By default, it is @samp{^L}
12106(formfeed).
12107
12108@cindex IDNA
12109@cindex internationalized domain names
12110@vindex gnus-use-idna
12111@item gnus-use-idna
12112This variable controls whether Gnus performs IDNA decoding of
12113internationalized domain names inside @samp{From}, @samp{To} and
01c52d31
MB
12114@samp{Cc} headers. @xref{IDNA, ,IDNA,message, The Message Manual},
12115for how to compose such messages. This requires
4009494e
GM
12116@uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this
12117variable is only enabled if you have installed it.
12118
12119@end table
12120
12121
12122@node Composing Messages
12123@chapter Composing Messages
12124@cindex composing messages
12125@cindex messages
12126@cindex mail
12127@cindex sending mail
12128@cindex reply
12129@cindex followup
12130@cindex post
12131@cindex using gpg
12132@cindex using s/mime
12133@cindex using smime
12134
12135@kindex C-c C-c (Post)
12136All commands for posting and mailing will put you in a message buffer
12137where you can edit the article all you like, before you send the
12138article by pressing @kbd{C-c C-c}. @xref{Top, , Overview, message,
12139Message Manual}. Where the message will be posted/mailed to depends
12140on your setup (@pxref{Posting Server}).
12141
12142@menu
12143* Mail:: Mailing and replying.
12144* Posting Server:: What server should you post and mail via?
12145* POP before SMTP:: You cannot send a mail unless you read a mail.
12146* Mail and Post:: Mailing and posting at the same time.
12147* Archived Messages:: Where Gnus stores the messages you've sent.
12148* Posting Styles:: An easier way to specify who you are.
12149* Drafts:: Postponing messages and rejected messages.
12150* Rejected Articles:: What happens if the server doesn't like your article?
12151* Signing and encrypting:: How to compose secure messages.
12152@end menu
12153
12154Also @pxref{Canceling and Superseding} for information on how to
12155remove articles you shouldn't have posted.
12156
12157
12158@node Mail
12159@section Mail
12160
12161Variables for customizing outgoing mail:
12162
12163@table @code
12164@item gnus-uu-digest-headers
12165@vindex gnus-uu-digest-headers
12166List of regexps to match headers included in digested messages. The
12167headers will be included in the sequence they are matched. If
12168@code{nil} include all headers.
12169
12170@item gnus-add-to-list
12171@vindex gnus-add-to-list
12172If non-@code{nil}, add a @code{to-list} group parameter to mail groups
12173that have none when you do a @kbd{a}.
12174
12175@item gnus-confirm-mail-reply-to-news
12176@vindex gnus-confirm-mail-reply-to-news
12177If non-@code{nil}, Gnus will ask you for a confirmation when you are
12178about to reply to news articles by mail. If it is @code{nil}, nothing
12179interferes in what you want to do. This can also be a function
12180receiving the group name as the only parameter which should return
12181non-@code{nil} if a confirmation is needed, or a regular expression
12182matching group names, where confirmation should be asked for.
12183
12184If you find yourself never wanting to reply to mail, but occasionally
12185press @kbd{R} anyway, this variable might be for you.
12186
12187@item gnus-confirm-treat-mail-like-news
12188@vindex gnus-confirm-treat-mail-like-news
12189If non-@code{nil}, Gnus also requests confirmation according to
12190@code{gnus-confirm-mail-reply-to-news} when replying to mail. This is
12191useful for treating mailing lists like newsgroups.
12192
12193@end table
12194
12195
12196@node Posting Server
12197@section Posting Server
12198
12199When you press those magical @kbd{C-c C-c} keys to ship off your latest
12200(extremely intelligent, of course) article, where does it go?
12201
12202Thank you for asking. I hate you.
12203
12204It can be quite complicated.
12205
12206@vindex gnus-post-method
12207When posting news, Message usually invokes @code{message-send-news}
12208(@pxref{News Variables, , News Variables, message, Message Manual}).
12209Normally, Gnus will post using the same select method as you're
12210reading from (which might be convenient if you're reading lots of
12211groups from different private servers). However. If the server
12212you're reading from doesn't allow posting, just reading, you probably
12213want to use some other server to post your (extremely intelligent and
12214fabulously interesting) articles. You can then set the
12215@code{gnus-post-method} to some other method:
12216
12217@lisp
12218(setq gnus-post-method '(nnspool ""))
12219@end lisp
12220
12221Now, if you've done this, and then this server rejects your article, or
12222this server is down, what do you do then? To override this variable you
12223can use a non-zero prefix to the @kbd{C-c C-c} command to force using
12224the ``current'' server, to get back the default behavior, for posting.
12225
12226If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
12227Gnus will prompt you for what method to use for posting.
12228
12229You can also set @code{gnus-post-method} to a list of select methods.
12230If that's the case, Gnus will always prompt you for what method to use
12231for posting.
12232
12233Finally, if you want to always post using the native select method,
12234you can set this variable to @code{native}.
12235
d82cf70b
MB
12236@vindex message-send-mail-function
12237When sending mail, Message invokes the function specified by the
12238variable @code{message-send-mail-function}. Gnus tries to set it to a
12239value suitable for your system.
12240@xref{Mail Variables, ,Mail Variables,message,Message manual}, for more
12241information.
4009494e
GM
12242
12243@node POP before SMTP
12244@section POP before SMTP
12245@cindex pop before smtp
12246@findex message-smtpmail-send-it
12247@findex mail-source-touch-pop
12248
12249Does your @acronym{ISP} require the @acronym{POP}-before-@acronym{SMTP}
12250authentication? It is whether you need to connect to the @acronym{POP}
12251mail server within a certain time before sending mails. If so, there is
12252a convenient way. To do that, put the following lines in your
12253@file{~/.gnus.el} file:
12254
12255@lisp
12256(setq message-send-mail-function 'message-smtpmail-send-it)
12257(add-hook 'message-send-mail-hook 'mail-source-touch-pop)
12258@end lisp
12259
12260@noindent
12261It means to let Gnus connect to the @acronym{POP} mail server in advance
12262whenever you send a mail. The @code{mail-source-touch-pop} function
12263does only a @acronym{POP} authentication according to the value of
12264@code{mail-sources} without fetching mails, just before sending a mail.
12265Note that you have to use @code{message-smtpmail-send-it} which runs
12266@code{message-send-mail-hook} rather than @code{smtpmail-send-it} and
12267set the value of @code{mail-sources} for a @acronym{POP} connection
12268correctly. @xref{Mail Sources}.
12269
12270If you have two or more @acronym{POP} mail servers set in
12271@code{mail-sources}, you may want to specify one of them to
12272@code{mail-source-primary-source} as the @acronym{POP} mail server to be
12273used for the @acronym{POP}-before-@acronym{SMTP} authentication. If it
12274is your primary @acronym{POP} mail server (i.e., you are fetching mails
12275mainly from that server), you can set it permanently as follows:
12276
12277@lisp
12278(setq mail-source-primary-source
12279 '(pop :server "pop3.mail.server"
12280 :password "secret"))
12281@end lisp
12282
12283@noindent
12284Otherwise, bind it dynamically only when performing the
12285@acronym{POP}-before-@acronym{SMTP} authentication as follows:
12286
12287@lisp
12288(add-hook 'message-send-mail-hook
12289 (lambda ()
12290 (let ((mail-source-primary-source
12291 '(pop :server "pop3.mail.server"
12292 :password "secret")))
12293 (mail-source-touch-pop))))
12294@end lisp
12295
12296@node Mail and Post
12297@section Mail and Post
12298
12299Here's a list of variables relevant to both mailing and
12300posting:
12301
12302@table @code
12303@item gnus-mailing-list-groups
12304@findex gnus-mailing-list-groups
12305@cindex mailing lists
12306
12307If your news server offers groups that are really mailing lists
12308gatewayed to the @acronym{NNTP} server, you can read those groups without
12309problems, but you can't post/followup to them without some difficulty.
12310One solution is to add a @code{to-address} to the group parameters
12311(@pxref{Group Parameters}). An easier thing to do is set the
12312@code{gnus-mailing-list-groups} to a regexp that matches the groups that
12313really are mailing lists. Then, at least, followups to the mailing
12314lists will work most of the time. Posting to these groups (@kbd{a}) is
12315still a pain, though.
12316
12317@item gnus-user-agent
12318@vindex gnus-user-agent
12319@cindex User-Agent
12320
12321This variable controls which information should be exposed in the
12322User-Agent header. It can be a list of symbols or a string. Valid
12323symbols are @code{gnus} (show Gnus version) and @code{emacs} (show Emacs
12324version). In addition to the Emacs version, you can add @code{codename}
12325(show (S)XEmacs codename) or either @code{config} (show system
12326configuration) or @code{type} (show system type). If you set it to a
12327string, be sure to use a valid format, see RFC 2616.
12328
12329@end table
12330
12331You may want to do spell-checking on messages that you send out. Or, if
12332you don't want to spell-check by hand, you could add automatic
12333spell-checking via the @code{ispell} package:
12334
12335@cindex ispell
12336@findex ispell-message
12337@lisp
12338(add-hook 'message-send-hook 'ispell-message)
12339@end lisp
12340
12341If you want to change the @code{ispell} dictionary based on what group
12342you're in, you could say something like the following:
12343
12344@lisp
12345(add-hook 'gnus-select-group-hook
12346 (lambda ()
12347 (cond
12348 ((string-match
12349 "^de\\." (gnus-group-real-name gnus-newsgroup-name))
12350 (ispell-change-dictionary "deutsch"))
12351 (t
12352 (ispell-change-dictionary "english")))))
12353@end lisp
12354
12355Modify to suit your needs.
12356
01c52d31
MB
12357@vindex gnus-message-highlight-citation
12358If @code{gnus-message-highlight-citation} is t, different levels of
12359citations are highlighted like in Gnus article buffers also in message
12360mode buffers.
4009494e
GM
12361
12362@node Archived Messages
12363@section Archived Messages
12364@cindex archived messages
12365@cindex sent messages
12366
12367Gnus provides a few different methods for storing the mail and news you
12368send. The default method is to use the @dfn{archive virtual server} to
12369store the messages. If you want to disable this completely, the
12370@code{gnus-message-archive-group} variable should be @code{nil}, which
12371is the default.
12372
12373For archiving interesting messages in a group you read, see the
12374@kbd{B c} (@code{gnus-summary-copy-article}) command (@pxref{Mail
12375Group Commands}).
12376
12377@vindex gnus-message-archive-method
12378@code{gnus-message-archive-method} says what virtual server Gnus is to
01c52d31
MB
12379use to store sent messages. The default is @code{"archive"}, and when
12380actually being used it is expanded into:
4009494e
GM
12381
12382@lisp
12383(nnfolder "archive"
12384 (nnfolder-directory "~/Mail/archive")
12385 (nnfolder-active-file "~/Mail/archive/active")
12386 (nnfolder-get-new-mail nil)
12387 (nnfolder-inhibit-expiry t))
12388@end lisp
12389
01c52d31
MB
12390@quotation
12391@vindex gnus-update-message-archive-method
12392Note: a server like this is saved in the @file{~/.newsrc.eld} file first
12393so that it may be used as a real method of the server which is named
12394@code{"archive"} (that is, for the case where
12395@code{gnus-message-archive-method} is set to @code{"archive"}) ever
12396since. If it once has been saved, it will never be updated by default
12397even if you change the value of @code{gnus-message-archive-method}
12398afterward. Therefore, the server @code{"archive"} doesn't necessarily
12399mean the @code{nnfolder} server like this at all times. If you want the
12400saved method to reflect always the value of
12401@code{gnus-message-archive-method}, set the
12402@code{gnus-update-message-archive-method} variable to a non-@code{nil}
12403value. The default value of this variable is @code{nil}.
12404@end quotation
12405
4009494e
GM
12406You can, however, use any mail select method (@code{nnml},
12407@code{nnmbox}, etc.). @code{nnfolder} is a quite likable select method
12408for doing this sort of thing, though. If you don't like the default
12409directory chosen, you could say something like:
12410
12411@lisp
12412(setq gnus-message-archive-method
12413 '(nnfolder "archive"
12414 (nnfolder-inhibit-expiry t)
12415 (nnfolder-active-file "~/News/sent-mail/active")
12416 (nnfolder-directory "~/News/sent-mail/")))
12417@end lisp
12418
12419@vindex gnus-message-archive-group
12420@cindex Gcc
12421Gnus will insert @code{Gcc} headers in all outgoing messages that point
12422to one or more group(s) on that server. Which group to use is
12423determined by the @code{gnus-message-archive-group} variable.
12424
12425This variable can be used to do the following:
12426
12427@table @asis
12428@item a string
12429Messages will be saved in that group.
12430
12431Note that you can include a select method in the group name, then the
12432message will not be stored in the select method given by
12433@code{gnus-message-archive-method}, but in the select method specified
12434by the group name, instead. Suppose @code{gnus-message-archive-method}
12435has the default value shown above. Then setting
12436@code{gnus-message-archive-group} to @code{"foo"} means that outgoing
12437messages are stored in @samp{nnfolder+archive:foo}, but if you use the
12438value @code{"nnml:foo"}, then outgoing messages will be stored in
12439@samp{nnml:foo}.
12440
12441@item a list of strings
12442Messages will be saved in all those groups.
12443
12444@item an alist of regexps, functions and forms
12445When a key ``matches'', the result is used.
12446
12447@item @code{nil}
12448No message archiving will take place. This is the default.
12449@end table
12450
12451Let's illustrate:
12452
12453Just saving to a single group called @samp{MisK}:
12454@lisp
12455(setq gnus-message-archive-group "MisK")
12456@end lisp
12457
12458Saving to two groups, @samp{MisK} and @samp{safe}:
12459@lisp
12460(setq gnus-message-archive-group '("MisK" "safe"))
12461@end lisp
12462
12463Save to different groups based on what group you are in:
12464@lisp
12465(setq gnus-message-archive-group
12466 '(("^alt" "sent-to-alt")
12467 ("mail" "sent-to-mail")
12468 (".*" "sent-to-misc")))
12469@end lisp
12470
12471More complex stuff:
12472@lisp
12473(setq gnus-message-archive-group
12474 '((if (message-news-p)
12475 "misc-news"
12476 "misc-mail")))
12477@end lisp
12478
12479How about storing all news messages in one file, but storing all mail
12480messages in one file per month:
12481
12482@lisp
12483(setq gnus-message-archive-group
12484 '((if (message-news-p)
12485 "misc-news"
12486 (concat "mail." (format-time-string "%Y-%m")))))
12487@end lisp
12488
12489@c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
12490@c use a different value for @code{gnus-message-archive-group} there.)
12491
12492Now, when you send a message off, it will be stored in the appropriate
12493group. (If you want to disable storing for just one particular message,
12494you can just remove the @code{Gcc} header that has been inserted.) The
12495archive group will appear in the group buffer the next time you start
12496Gnus, or the next time you press @kbd{F} in the group buffer. You can
12497enter it and read the articles in it just like you'd read any other
12498group. If the group gets really big and annoying, you can simply rename
12499if (using @kbd{G r} in the group buffer) to something
12500nice---@samp{misc-mail-september-1995}, or whatever. New messages will
12501continue to be stored in the old (now empty) group.
12502
12503That's the default method of archiving sent messages. Gnus offers a
12504different way for the people who don't like the default method. In that
12505case you should set @code{gnus-message-archive-group} to @code{nil};
12506this will disable archiving.
12507
12508@table @code
12509@item gnus-outgoing-message-group
12510@vindex gnus-outgoing-message-group
12511All outgoing messages will be put in this group. If you want to store
12512all your outgoing mail and articles in the group @samp{nnml:archive},
12513you set this variable to that value. This variable can also be a list of
12514group names.
12515
12516If you want to have greater control over what group to put each
12517message in, you can set this variable to a function that checks the
12518current newsgroup name and then returns a suitable group name (or list
12519of names).
12520
12521This variable can be used instead of @code{gnus-message-archive-group},
12522but the latter is the preferred method.
12523
12524@item gnus-gcc-mark-as-read
12525@vindex gnus-gcc-mark-as-read
12526If non-@code{nil}, automatically mark @code{Gcc} articles as read.
12527
12528@item gnus-gcc-externalize-attachments
12529@vindex gnus-gcc-externalize-attachments
12530If @code{nil}, attach files as normal parts in Gcc copies; if a regexp
12531and matches the Gcc group name, attach files as external parts; if it is
12532@code{all}, attach local files as external parts; if it is other
12533non-@code{nil}, the behavior is the same as @code{all}, but it may be
12534changed in the future.
12535
12536@end table
12537
12538
12539@node Posting Styles
12540@section Posting Styles
12541@cindex posting styles
12542@cindex styles
12543
12544All them variables, they make my head swim.
12545
12546So what if you want a different @code{Organization} and signature based
12547on what groups you post to? And you post both from your home machine
12548and your work machine, and you want different @code{From} lines, and so
12549on?
12550
12551@vindex gnus-posting-styles
12552One way to do stuff like that is to write clever hooks that change the
12553variables you need to have changed. That's a bit boring, so somebody
12554came up with the bright idea of letting the user specify these things in
12555a handy alist. Here's an example of a @code{gnus-posting-styles}
12556variable:
12557
12558@lisp
12559((".*"
12560 (signature "Peace and happiness")
12561 (organization "What me?"))
12562 ("^comp"
12563 (signature "Death to everybody"))
12564 ("comp.emacs.i-love-it"
12565 (organization "Emacs is it")))
12566@end lisp
12567
12568As you might surmise from this example, this alist consists of several
12569@dfn{styles}. Each style will be applicable if the first element
12570``matches'', in some form or other. The entire alist will be iterated
12571over, from the beginning towards the end, and each match will be
12572applied, which means that attributes in later styles that match override
12573the same attributes in earlier matching styles. So
12574@samp{comp.programming.literate} will have the @samp{Death to everybody}
12575signature and the @samp{What me?} @code{Organization} header.
12576
12577The first element in each style is called the @code{match}. If it's a
12578string, then Gnus will try to regexp match it against the group name.
12579If it is the form @code{(header @var{match} @var{regexp})}, then Gnus
12580will look in the original article for a header whose name is
12581@var{match} and compare that @var{regexp}. @var{match} and
12582@var{regexp} are strings. (The original article is the one you are
12583replying or following up to. If you are not composing a reply or a
12584followup, then there is nothing to match against.) If the
12585@code{match} is a function symbol, that function will be called with
12586no arguments. If it's a variable symbol, then the variable will be
12587referenced. If it's a list, then that list will be @code{eval}ed. In
12588any case, if this returns a non-@code{nil} value, then the style is
12589said to @dfn{match}.
12590
12591Each style may contain an arbitrary amount of @dfn{attributes}. Each
12592attribute consists of a @code{(@var{name} @var{value})} pair. In
12593addition, you can also use the @code{(@var{name} :file @var{value})}
12594form or the @code{(@var{name} :value @var{value})} form. Where
12595@code{:file} signifies @var{value} represents a file name and its
12596contents should be used as the attribute value, @code{:value} signifies
12597@var{value} does not represent a file name explicitly. The attribute
12598name can be one of:
12599
12600@itemize @bullet
12601@item @code{signature}
12602@item @code{signature-file}
12603@item @code{x-face-file}
12604@item @code{address}, overriding @code{user-mail-address}
12605@item @code{name}, overriding @code{(user-full-name)}
12606@item @code{body}
12607@end itemize
12608
01c52d31
MB
12609Note that the @code{signature-file} attribute honors the variable
12610@code{message-signature-directory}.
12611
4009494e
GM
12612The attribute name can also be a string or a symbol. In that case,
12613this will be used as a header name, and the value will be inserted in
12614the headers of the article; if the value is @code{nil}, the header
12615name will be removed. If the attribute name is @code{eval}, the form
12616is evaluated, and the result is thrown away.
12617
12618The attribute value can be a string (used verbatim), a function with
12619zero arguments (the return value will be used), a variable (its value
12620will be used) or a list (it will be @code{eval}ed and the return value
12621will be used). The functions and sexps are called/@code{eval}ed in the
12622message buffer that is being set up. The headers of the current article
12623are available through the @code{message-reply-headers} variable, which
12624is a vector of the following headers: number subject from date id
12625references chars lines xref extra.
12626
12627@vindex message-reply-headers
12628
12629If you wish to check whether the message you are about to compose is
12630meant to be a news article or a mail message, you can check the values
12631of the @code{message-news-p} and @code{message-mail-p} functions.
12632
12633@findex message-mail-p
12634@findex message-news-p
12635
12636So here's a new example:
12637
12638@lisp
12639(setq gnus-posting-styles
12640 '((".*"
12641 (signature-file "~/.signature")
12642 (name "User Name")
12643 (x-face-file "~/.xface")
12644 (x-url (getenv "WWW_HOME"))
12645 (organization "People's Front Against MWM"))
12646 ("^rec.humor"
12647 (signature my-funny-signature-randomizer))
12648 ((equal (system-name) "gnarly") ;; @r{A form}
12649 (signature my-quote-randomizer))
12650 (message-news-p ;; @r{A function symbol}
12651 (signature my-news-signature))
12652 (window-system ;; @r{A value symbol}
12653 ("X-Window-System" (format "%s" window-system)))
12654 ;; @r{If I'm replying to Larsi, set the Organization header.}
12655 ((header "from" "larsi.*org")
12656 (Organization "Somewhere, Inc."))
12657 ((posting-from-work-p) ;; @r{A user defined function}
12658 (signature-file "~/.work-signature")
12659 (address "user@@bar.foo")
12660 (body "You are fired.\n\nSincerely, your boss.")
12661 (organization "Important Work, Inc"))
12662 ("nnml:.*"
12663 (From (save-excursion
12664 (set-buffer gnus-article-buffer)
12665 (message-fetch-field "to"))))
12666 ("^nn.+:"
12667 (signature-file "~/.mail-signature"))))
12668@end lisp
12669
12670The @samp{nnml:.*} rule means that you use the @code{To} address as the
12671@code{From} address in all your outgoing replies, which might be handy
12672if you fill many roles.
12673You may also use @code{message-alternative-emails} instead.
12674@xref{Message Headers, ,Message Headers, message, Message Manual}.
12675
12676@node Drafts
12677@section Drafts
12678@cindex drafts
12679
12680If you are writing a message (mail or news) and suddenly remember that
12681you have a steak in the oven (or some pesto in the food processor, you
12682craaazy vegetarians), you'll probably wish there was a method to save
12683the message you are writing so that you can continue editing it some
12684other day, and send it when you feel its finished.
12685
12686Well, don't worry about it. Whenever you start composing a message of
12687some sort using the Gnus mail and post commands, the buffer you get will
12688automatically associate to an article in a special @dfn{draft} group.
12689If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
12690article will be saved there. (Auto-save files also go to the draft
12691group.)
12692
12693@cindex nndraft
12694@vindex nndraft-directory
12695The draft group is a special group (which is implemented as an
12696@code{nndraft} group, if you absolutely have to know) called
12697@samp{nndraft:drafts}. The variable @code{nndraft-directory} says where
12698@code{nndraft} is to store its files. What makes this group special is
12699that you can't tick any articles in it or mark any articles as
12700read---all articles in the group are permanently unread.
12701
12702If the group doesn't exist, it will be created and you'll be subscribed
12703to it. The only way to make it disappear from the Group buffer is to
12704unsubscribe it. The special properties of the draft group comes from
12705a group property (@pxref{Group Parameters}), and if lost the group
12706behaves like any other group. This means the commands below will not
12707be available. To restore the special properties of the group, the
12708simplest way is to kill the group, using @kbd{C-k}, and restart
12709Gnus. The group is automatically created again with the
12710correct parameters. The content of the group is not lost.
12711
12712@c @findex gnus-dissociate-buffer-from-draft
12713@c @kindex C-c M-d (Mail)
12714@c @kindex C-c M-d (Post)
12715@c @findex gnus-associate-buffer-with-draft
12716@c @kindex C-c C-d (Mail)
12717@c @kindex C-c C-d (Post)
12718@c If you're writing some super-secret message that you later want to
12719@c encode with PGP before sending, you may wish to turn the auto-saving
12720@c (and association with the draft group) off. You never know who might be
12721@c interested in reading all your extremely valuable and terribly horrible
12722@c and interesting secrets. The @kbd{C-c M-d}
12723@c (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
12724@c If you change your mind and want to turn the auto-saving back on again,
12725@c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
12726@c
12727@c @vindex gnus-use-draft
12728@c To leave association with the draft group off by default, set
12729@c @code{gnus-use-draft} to @code{nil}. It is @code{t} by default.
12730
12731@findex gnus-draft-edit-message
12732@kindex D e (Draft)
12733When you want to continue editing the article, you simply enter the
12734draft group and push @kbd{D e} (@code{gnus-draft-edit-message}) to do
12735that. You will be placed in a buffer where you left off.
12736
12737Rejected articles will also be put in this draft group (@pxref{Rejected
12738Articles}).
12739
12740@findex gnus-draft-send-all-messages
12741@kindex D s (Draft)
12742@findex gnus-draft-send-message
12743@kindex D S (Draft)
12744If you have lots of rejected messages you want to post (or mail) without
12745doing further editing, you can use the @kbd{D s} command
12746(@code{gnus-draft-send-message}). This command understands the
12747process/prefix convention (@pxref{Process/Prefix}). The @kbd{D S}
12748command (@code{gnus-draft-send-all-messages}) will ship off all messages
12749in the buffer.
12750
12751@findex gnus-draft-toggle-sending
12752@kindex D t (Draft)
12753If you have some messages that you wish not to send, you can use the
12754@kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message
12755as unsendable. This is a toggling command.
12756
12757
12758@node Rejected Articles
12759@section Rejected Articles
12760@cindex rejected articles
12761
12762Sometimes a news server will reject an article. Perhaps the server
12763doesn't like your face. Perhaps it just feels miserable. Perhaps
12764@emph{there be demons}. Perhaps you have included too much cited text.
12765Perhaps the disk is full. Perhaps the server is down.
12766
12767These situations are, of course, totally beyond the control of Gnus.
12768(Gnus, of course, loves the way you look, always feels great, has angels
12769fluttering around inside of it, doesn't care about how much cited text
12770you include, never runs full and never goes down.) So Gnus saves these
12771articles until some later time when the server feels better.
12772
12773The rejected articles will automatically be put in a special draft group
12774(@pxref{Drafts}). When the server comes back up again, you'd then
12775typically enter that group and send all the articles off.
12776
12777@node Signing and encrypting
12778@section Signing and encrypting
12779@cindex using gpg
12780@cindex using s/mime
12781@cindex using smime
12782
12783Gnus can digitally sign and encrypt your messages, using vanilla
12784@acronym{PGP} format or @acronym{PGP/MIME} or @acronym{S/MIME}. For
12785decoding such messages, see the @code{mm-verify-option} and
12786@code{mm-decrypt-option} options (@pxref{Security}).
12787
12788@vindex gnus-message-replysign
12789@vindex gnus-message-replyencrypt
12790@vindex gnus-message-replysignencrypted
12791Often, you would like to sign replies to people who send you signed
12792messages. Even more often, you might want to encrypt messages which
12793are in reply to encrypted messages. Gnus offers
12794@code{gnus-message-replysign} to enable the former, and
12795@code{gnus-message-replyencrypt} for the latter. In addition, setting
12796@code{gnus-message-replysignencrypted} (on by default) will sign
12797automatically encrypted messages.
12798
12799Instructing @acronym{MML} to perform security operations on a
12800@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
12801signing and the @kbd{C-c C-m c} key map for encryption, as follows.
12802
12803@table @kbd
12804
12805@item C-c C-m s s
12806@kindex C-c C-m s s (Message)
12807@findex mml-secure-message-sign-smime
12808
12809Digitally sign current message using @acronym{S/MIME}.
12810
12811@item C-c C-m s o
12812@kindex C-c C-m s o (Message)
12813@findex mml-secure-message-sign-pgp
12814
12815Digitally sign current message using @acronym{PGP}.
12816
12817@item C-c C-m s p
12818@kindex C-c C-m s p (Message)
12819@findex mml-secure-message-sign-pgp
12820
12821Digitally sign current message using @acronym{PGP/MIME}.
12822
12823@item C-c C-m c s
12824@kindex C-c C-m c s (Message)
12825@findex mml-secure-message-encrypt-smime
12826
12827Digitally encrypt current message using @acronym{S/MIME}.
12828
12829@item C-c C-m c o
12830@kindex C-c C-m c o (Message)
12831@findex mml-secure-message-encrypt-pgp
12832
12833Digitally encrypt current message using @acronym{PGP}.
12834
12835@item C-c C-m c p
12836@kindex C-c C-m c p (Message)
12837@findex mml-secure-message-encrypt-pgpmime
12838
12839Digitally encrypt current message using @acronym{PGP/MIME}.
12840
12841@item C-c C-m C-n
12842@kindex C-c C-m C-n (Message)
12843@findex mml-unsecure-message
12844Remove security related @acronym{MML} tags from message.
12845
12846@end table
12847
12848@xref{Security, ,Security, message, Message Manual}, for more information.
12849
12850@node Select Methods
12851@chapter Select Methods
12852@cindex foreign groups
12853@cindex select methods
12854
12855A @dfn{foreign group} is a group not read by the usual (or
12856default) means. It could be, for instance, a group from a different
12857@acronym{NNTP} server, it could be a virtual group, or it could be your own
12858personal mail group.
12859
12860A foreign group (or any group, really) is specified by a @dfn{name} and
12861a @dfn{select method}. To take the latter first, a select method is a
12862list where the first element says what back end to use (e.g. @code{nntp},
12863@code{nnspool}, @code{nnml}) and the second element is the @dfn{server
12864name}. There may be additional elements in the select method, where the
12865value may have special meaning for the back end in question.
12866
12867One could say that a select method defines a @dfn{virtual server}---so
12868we do just that (@pxref{Server Buffer}).
12869
12870The @dfn{name} of the group is the name the back end will recognize the
12871group as.
12872
12873For instance, the group @samp{soc.motss} on the @acronym{NNTP} server
12874@samp{some.where.edu} will have the name @samp{soc.motss} and select
12875method @code{(nntp "some.where.edu")}. Gnus will call this group
12876@samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}
12877back end just knows this group as @samp{soc.motss}.
12878
12879The different methods all have their peculiarities, of course.
12880
12881@menu
12882* Server Buffer:: Making and editing virtual servers.
12883* Getting News:: Reading USENET news with Gnus.
12884* Getting Mail:: Reading your personal mail with Gnus.
12885* Browsing the Web:: Getting messages from a plethora of Web sources.
12886* IMAP:: Using Gnus as a @acronym{IMAP} client.
12887* Other Sources:: Reading directories, files, SOUP packets.
12888* Combined Groups:: Combining groups into one group.
12889* Email Based Diary:: Using mails to manage diary events in Gnus.
12890* Gnus Unplugged:: Reading news and mail offline.
12891@end menu
12892
12893
12894@node Server Buffer
12895@section Server Buffer
12896
12897Traditionally, a @dfn{server} is a machine or a piece of software that
12898one connects to, and then requests information from. Gnus does not
12899connect directly to any real servers, but does all transactions through
12900one back end or other. But that's just putting one layer more between
12901the actual media and Gnus, so we might just as well say that each
12902back end represents a virtual server.
12903
12904For instance, the @code{nntp} back end may be used to connect to several
12905different actual @acronym{NNTP} servers, or, perhaps, to many different ports
12906on the same actual @acronym{NNTP} server. You tell Gnus which back end to
12907use, and what parameters to set by specifying a @dfn{select method}.
12908
12909These select method specifications can sometimes become quite
12910complicated---say, for instance, that you want to read from the
12911@acronym{NNTP} server @samp{news.funet.fi} on port number 13, which
12912hangs if queried for @acronym{NOV} headers and has a buggy select. Ahem.
12913Anyway, if you had to specify that for each group that used this
12914server, that would be too much work, so Gnus offers a way of naming
12915select methods, which is what you do in the server buffer.
12916
12917To enter the server buffer, use the @kbd{^}
12918(@code{gnus-group-enter-server-mode}) command in the group buffer.
12919
12920@menu
12921* Server Buffer Format:: You can customize the look of this buffer.
12922* Server Commands:: Commands to manipulate servers.
12923* Example Methods:: Examples server specifications.
12924* Creating a Virtual Server:: An example session.
12925* Server Variables:: Which variables to set.
12926* Servers and Methods:: You can use server names as select methods.
12927* Unavailable Servers:: Some servers you try to contact may be down.
12928@end menu
12929
12930@vindex gnus-server-mode-hook
12931@code{gnus-server-mode-hook} is run when creating the server buffer.
12932
12933
12934@node Server Buffer Format
12935@subsection Server Buffer Format
12936@cindex server buffer format
12937
12938@vindex gnus-server-line-format
12939You can change the look of the server buffer lines by changing the
12940@code{gnus-server-line-format} variable. This is a @code{format}-like
12941variable, with some simple extensions:
12942
12943@table @samp
12944
12945@item h
12946How the news is fetched---the back end name.
12947
12948@item n
12949The name of this server.
12950
12951@item w
12952Where the news is to be fetched from---the address.
12953
12954@item s
12955The opened/closed/denied status of the server.
12956
12957@item a
12958Whether this server is agentized.
12959@end table
12960
12961@vindex gnus-server-mode-line-format
12962The mode line can also be customized by using the
12963@code{gnus-server-mode-line-format} variable (@pxref{Mode Line
12964Formatting}). The following specs are understood:
12965
12966@table @samp
12967@item S
12968Server name.
12969
12970@item M
12971Server method.
12972@end table
12973
12974Also @pxref{Formatting Variables}.
12975
12976
12977@node Server Commands
12978@subsection Server Commands
12979@cindex server commands
12980
12981@table @kbd
12982
12983@item v
12984@kindex v (Server)
12985@cindex keys, reserved for users (Server)
12986The key @kbd{v} is reserved for users. You can bind it to some
12987command or better use it as a prefix key.
12988
12989@item a
12990@kindex a (Server)
12991@findex gnus-server-add-server
12992Add a new server (@code{gnus-server-add-server}).
12993
12994@item e
12995@kindex e (Server)
12996@findex gnus-server-edit-server
12997Edit a server (@code{gnus-server-edit-server}).
12998
12999@item SPACE
13000@kindex SPACE (Server)
13001@findex gnus-server-read-server
13002Browse the current server (@code{gnus-server-read-server}).
13003
13004@item q
13005@kindex q (Server)
13006@findex gnus-server-exit
13007Return to the group buffer (@code{gnus-server-exit}).
13008
13009@item k
13010@kindex k (Server)
13011@findex gnus-server-kill-server
13012Kill the current server (@code{gnus-server-kill-server}).
13013
13014@item y
13015@kindex y (Server)
13016@findex gnus-server-yank-server
13017Yank the previously killed server (@code{gnus-server-yank-server}).
13018
13019@item c
13020@kindex c (Server)
13021@findex gnus-server-copy-server
13022Copy the current server (@code{gnus-server-copy-server}).
13023
13024@item l
13025@kindex l (Server)
13026@findex gnus-server-list-servers
13027List all servers (@code{gnus-server-list-servers}).
13028
13029@item s
13030@kindex s (Server)
13031@findex gnus-server-scan-server
13032Request that the server scan its sources for new articles
13033(@code{gnus-server-scan-server}). This is mainly sensible with mail
13034servers.
13035
13036@item g
13037@kindex g (Server)
13038@findex gnus-server-regenerate-server
13039Request that the server regenerate all its data structures
13040(@code{gnus-server-regenerate-server}). This can be useful if you have
13041a mail back end that has gotten out of sync.
13042
01c52d31
MB
13043@item z
13044@kindex z (Server)
13045@findex gnus-server-compact-server
13046
13047Compact all groups in the server under point
13048(@code{gnus-server-compact-server}). Currently implemented only in
13049nnml (@pxref{Mail Spool}). This removes gaps between article numbers,
13050hence getting a correct total article count.
13051
4009494e
GM
13052@end table
13053
13054
13055@node Example Methods
13056@subsection Example Methods
13057
13058Most select methods are pretty simple and self-explanatory:
13059
13060@lisp
13061(nntp "news.funet.fi")
13062@end lisp
13063
13064Reading directly from the spool is even simpler:
13065
13066@lisp
13067(nnspool "")
13068@end lisp
13069
13070As you can see, the first element in a select method is the name of the
13071back end, and the second is the @dfn{address}, or @dfn{name}, if you
13072will.
13073
13074After these two elements, there may be an arbitrary number of
13075@code{(@var{variable} @var{form})} pairs.
13076
13077To go back to the first example---imagine that you want to read from
13078port 15 on that machine. This is what the select method should
13079look like then:
13080
13081@lisp
13082(nntp "news.funet.fi" (nntp-port-number 15))
13083@end lisp
13084
13085You should read the documentation to each back end to find out what
13086variables are relevant, but here's an @code{nnmh} example:
13087
13088@code{nnmh} is a mail back end that reads a spool-like structure. Say
13089you have two structures that you wish to access: One is your private
13090mail spool, and the other is a public one. Here's the possible spec for
13091your private mail:
13092
13093@lisp
13094(nnmh "private" (nnmh-directory "~/private/mail/"))
13095@end lisp
13096
13097(This server is then called @samp{private}, but you may have guessed
13098that.)
13099
13100Here's the method for a public spool:
13101
13102@lisp
13103(nnmh "public"
13104 (nnmh-directory "/usr/information/spool/")
13105 (nnmh-get-new-mail nil))
13106@end lisp
13107
13108@cindex proxy
13109@cindex firewall
13110
13111If you are behind a firewall and only have access to the @acronym{NNTP}
13112server from the firewall machine, you can instruct Gnus to @code{rlogin}
31fe2b00
SM
13113on the firewall machine and connect with
13114@uref{http://netcat.sourceforge.net/, netcat} from there to the
13115@acronym{NNTP} server.
4009494e
GM
13116Doing this can be rather fiddly, but your virtual server definition
13117should probably look something like this:
13118
13119@lisp
13120(nntp "firewall"
31fe2b00 13121 (nntp-open-connection-function nntp-open-via-rlogin-and-netcat)
4009494e 13122 (nntp-via-address "the.firewall.machine")
31fe2b00 13123 (nntp-address "the.real.nntp.host"))
4009494e
GM
13124@end lisp
13125
13126If you want to use the wonderful @code{ssh} program to provide a
13127compressed connection over the modem line, you could add the following
13128configuration to the example above:
13129
13130@lisp
13131 (nntp-via-rlogin-command "ssh")
13132@end lisp
13133
01c52d31
MB
13134See also @code{nntp-via-rlogin-command-switches}. Here's an example for
13135an indirect connection:
fbcbb58c 13136
01c52d31
MB
13137@lisp
13138(setq gnus-select-method
13139 '(nntp "indirect"
13140 (nntp-address "news.server.example")
13141 (nntp-via-user-name "intermediate_user_name")
13142 (nntp-via-address "intermediate.host.example")
13143 (nntp-via-rlogin-command "ssh")
31fe2b00
SM
13144 (nntp-via-rlogin-command-switches ("-C"))
13145 (nntp-open-connection-function nntp-open-via-rlogin-and-netcat)))
01c52d31 13146@end lisp
4009494e 13147
fbcbb58c
KY
13148This means that you have to have set up @code{ssh-agent} correctly to
13149provide automatic authorization, of course.
13150
4009494e
GM
13151If you're behind a firewall, but have direct access to the outside world
13152through a wrapper command like "runsocks", you could open a socksified
31fe2b00 13153netcat connection to the news server as follows:
4009494e
GM
13154
13155@lisp
13156(nntp "outside"
13157 (nntp-pre-command "runsocks")
990e2c2f 13158 (nntp-open-connection-function nntp-open-netcat-stream)
31fe2b00 13159 (nntp-address "the.news.server"))
4009494e
GM
13160@end lisp
13161
4009494e
GM
13162
13163@node Creating a Virtual Server
13164@subsection Creating a Virtual Server
13165
13166If you're saving lots of articles in the cache by using persistent
13167articles, you may want to create a virtual server to read the cache.
13168
13169First you need to add a new server. The @kbd{a} command does that. It
13170would probably be best to use @code{nnml} to read the cache. You
13171could also use @code{nnspool} or @code{nnmh}, though.
13172
13173Type @kbd{a nnml RET cache RET}.
13174
13175You should now have a brand new @code{nnml} virtual server called
13176@samp{cache}. You now need to edit it to have the right definitions.
13177Type @kbd{e} to edit the server. You'll be entered into a buffer that
13178will contain the following:
13179
13180@lisp
13181(nnml "cache")
13182@end lisp
13183
13184Change that to:
13185
13186@lisp
13187(nnml "cache"
13188 (nnml-directory "~/News/cache/")
13189 (nnml-active-file "~/News/cache/active"))
13190@end lisp
13191
13192Type @kbd{C-c C-c} to return to the server buffer. If you now press
13193@kbd{RET} over this virtual server, you should be entered into a browse
13194buffer, and you should be able to enter any of the groups displayed.
13195
13196
13197@node Server Variables
13198@subsection Server Variables
13199@cindex server variables
13200@cindex server parameters
13201
13202One sticky point when defining variables (both on back ends and in Emacs
13203in general) is that some variables are typically initialized from other
13204variables when the definition of the variables is being loaded. If you
13205change the ``base'' variable after the variables have been loaded, you
13206won't change the ``derived'' variables.
13207
13208This typically affects directory and file variables. For instance,
13209@code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}
13210directory variables are initialized from that variable, so
13211@code{nnml-active-file} will be @file{~/Mail/active}. If you define a
13212new virtual @code{nnml} server, it will @emph{not} suffice to set just
13213@code{nnml-directory}---you have to explicitly set all the file
13214variables to be what you want them to be. For a complete list of
13215variables for each back end, see each back end's section later in this
13216manual, but here's an example @code{nnml} definition:
13217
13218@lisp
13219(nnml "public"
13220 (nnml-directory "~/my-mail/")
13221 (nnml-active-file "~/my-mail/active")
13222 (nnml-newsgroups-file "~/my-mail/newsgroups"))
13223@end lisp
13224
13225Server variables are often called @dfn{server parameters}.
13226
13227@node Servers and Methods
13228@subsection Servers and Methods
13229
13230Wherever you would normally use a select method
13231(e.g. @code{gnus-secondary-select-method}, in the group select method,
13232when browsing a foreign server) you can use a virtual server name
13233instead. This could potentially save lots of typing. And it's nice all
13234over.
13235
13236
13237@node Unavailable Servers
13238@subsection Unavailable Servers
13239
13240If a server seems to be unreachable, Gnus will mark that server as
13241@code{denied}. That means that any subsequent attempt to make contact
13242with that server will just be ignored. ``It can't be opened,'' Gnus
13243will tell you, without making the least effort to see whether that is
13244actually the case or not.
13245
13246That might seem quite naughty, but it does make sense most of the time.
13247Let's say you have 10 groups subscribed to on server
13248@samp{nephelococcygia.com}. This server is located somewhere quite far
13249away from you and the machine is quite slow, so it takes 1 minute just
13250to find out that it refuses connection to you today. If Gnus were to
13251attempt to do that 10 times, you'd be quite annoyed, so Gnus won't
13252attempt to do that. Once it has gotten a single ``connection refused'',
13253it will regard that server as ``down''.
13254
13255So, what happens if the machine was only feeling unwell temporarily?
13256How do you test to see whether the machine has come up again?
13257
13258You jump to the server buffer (@pxref{Server Buffer}) and poke it
13259with the following commands:
13260
13261@table @kbd
13262
13263@item O
13264@kindex O (Server)
13265@findex gnus-server-open-server
13266Try to establish connection to the server on the current line
13267(@code{gnus-server-open-server}).
13268
13269@item C
13270@kindex C (Server)
13271@findex gnus-server-close-server
13272Close the connection (if any) to the server
13273(@code{gnus-server-close-server}).
13274
13275@item D
13276@kindex D (Server)
13277@findex gnus-server-deny-server
13278Mark the current server as unreachable
13279(@code{gnus-server-deny-server}).
13280
13281@item M-o
13282@kindex M-o (Server)
13283@findex gnus-server-open-all-servers
13284Open the connections to all servers in the buffer
13285(@code{gnus-server-open-all-servers}).
13286
13287@item M-c
13288@kindex M-c (Server)
13289@findex gnus-server-close-all-servers
13290Close the connections to all servers in the buffer
13291(@code{gnus-server-close-all-servers}).
13292
13293@item R
13294@kindex R (Server)
13295@findex gnus-server-remove-denials
13296Remove all marks to whether Gnus was denied connection from any servers
13297(@code{gnus-server-remove-denials}).
13298
13299@item L
13300@kindex L (Server)
13301@findex gnus-server-offline-server
13302Set server status to offline (@code{gnus-server-offline-server}).
13303
13304@end table
13305
13306
13307@node Getting News
13308@section Getting News
13309@cindex reading news
13310@cindex news back ends
13311
13312A newsreader is normally used for reading news. Gnus currently provides
13313only two methods of getting news---it can read from an @acronym{NNTP} server,
13314or it can read from a local spool.
13315
13316@menu
13317* NNTP:: Reading news from an @acronym{NNTP} server.
13318* News Spool:: Reading news from the local spool.
13319@end menu
13320
13321
13322@node NNTP
13323@subsection NNTP
13324@cindex nntp
13325
13326Subscribing to a foreign group from an @acronym{NNTP} server is rather easy.
13327You just specify @code{nntp} as method and the address of the @acronym{NNTP}
13328server as the, uhm, address.
13329
13330If the @acronym{NNTP} server is located at a non-standard port, setting the
13331third element of the select method to this port number should allow you
13332to connect to the right port. You'll have to edit the group info for
13333that (@pxref{Foreign Groups}).
13334
13335The name of the foreign group can be the same as a native group. In
13336fact, you can subscribe to the same group from as many different servers
13337you feel like. There will be no name collisions.
13338
13339The following variables can be used to create a virtual @code{nntp}
13340server:
13341
13342@table @code
13343
13344@item nntp-server-opened-hook
13345@vindex nntp-server-opened-hook
13346@cindex @sc{mode reader}
13347@cindex authinfo
13348@cindex authentication
13349@cindex nntp authentication
13350@findex nntp-send-authinfo
13351@findex nntp-send-mode-reader
13352is run after a connection has been made. It can be used to send
13353commands to the @acronym{NNTP} server after it has been contacted. By
13354default it sends the command @code{MODE READER} to the server with the
13355@code{nntp-send-mode-reader} function. This function should always be
13356present in this hook.
13357
13358@item nntp-authinfo-function
13359@vindex nntp-authinfo-function
13360@findex nntp-send-authinfo
13361@vindex nntp-authinfo-file
13362This function will be used to send @samp{AUTHINFO} to the @acronym{NNTP}
13363server. The default function is @code{nntp-send-authinfo}, which looks
13364through your @file{~/.authinfo} (or whatever you've set the
13365@code{nntp-authinfo-file} variable to) for applicable entries. If none
13366are found, it will prompt you for a login name and a password. The
13367format of the @file{~/.authinfo} file is (almost) the same as the
13368@code{ftp} @file{~/.netrc} file, which is defined in the @code{ftp}
13369manual page, but here are the salient facts:
13370
13371@enumerate
13372@item
13373The file contains one or more line, each of which define one server.
13374
13375@item
13376Each line may contain an arbitrary number of token/value pairs.
13377
13378The valid tokens include @samp{machine}, @samp{login}, @samp{password},
13379@samp{default}. In addition Gnus introduces two new tokens, not present
13380in the original @file{.netrc}/@code{ftp} syntax, namely @samp{port} and
13381@samp{force}. (This is the only way the @file{.authinfo} file format
13382deviates from the @file{.netrc} file format.) @samp{port} is used to
13383indicate what port on the server the credentials apply to and
13384@samp{force} is explained below.
13385
13386@end enumerate
13387
13388Here's an example file:
13389
13390@example
13391machine news.uio.no login larsi password geheimnis
13392machine nntp.ifi.uio.no login larsi force yes
13393@end example
13394
13395The token/value pairs may appear in any order; @samp{machine} doesn't
13396have to be first, for instance.
13397
13398In this example, both login name and password have been supplied for the
13399former server, while the latter has only the login name listed, and the
13400user will be prompted for the password. The latter also has the
13401@samp{force} tag, which means that the authinfo will be sent to the
13402@var{nntp} server upon connection; the default (i.e., when there is not
13403@samp{force} tag) is to not send authinfo to the @var{nntp} server
13404until the @var{nntp} server asks for it.
13405
13406You can also add @samp{default} lines that will apply to all servers
13407that don't have matching @samp{machine} lines.
13408
13409@example
13410default force yes
13411@end example
13412
13413This will force sending @samp{AUTHINFO} commands to all servers not
13414previously mentioned.
13415
13416Remember to not leave the @file{~/.authinfo} file world-readable.
13417
13418@item nntp-server-action-alist
13419@vindex nntp-server-action-alist
13420This is a list of regexps to match on server types and actions to be
13421taken when matches are made. For instance, if you want Gnus to beep
13422every time you connect to innd, you could say something like:
13423
13424@lisp
13425(setq nntp-server-action-alist
13426 '(("innd" (ding))))
13427@end lisp
13428
13429You probably don't want to do that, though.
13430
13431The default value is
13432
13433@lisp
13434'(("nntpd 1\\.5\\.11t"
13435 (remove-hook 'nntp-server-opened-hook
13436 'nntp-send-mode-reader)))
13437@end lisp
13438
13439This ensures that Gnus doesn't send the @code{MODE READER} command to
13440nntpd 1.5.11t, since that command chokes that server, I've been told.
13441
13442@item nntp-maximum-request
13443@vindex nntp-maximum-request
13444If the @acronym{NNTP} server doesn't support @acronym{NOV} headers, this back end
13445will collect headers by sending a series of @code{head} commands. To
13446speed things up, the back end sends lots of these commands without
13447waiting for reply, and then reads all the replies. This is controlled
13448by the @code{nntp-maximum-request} variable, and is 400 by default. If
13449your network is buggy, you should set this to 1.
13450
13451@item nntp-connection-timeout
13452@vindex nntp-connection-timeout
13453If you have lots of foreign @code{nntp} groups that you connect to
13454regularly, you're sure to have problems with @acronym{NNTP} servers not
13455responding properly, or being too loaded to reply within reasonable
13456time. This is can lead to awkward problems, which can be helped
13457somewhat by setting @code{nntp-connection-timeout}. This is an integer
13458that says how many seconds the @code{nntp} back end should wait for a
13459connection before giving up. If it is @code{nil}, which is the default,
13460no timeouts are done.
13461
13462@item nntp-nov-is-evil
13463@vindex nntp-nov-is-evil
13464If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this
13465variable to @code{t}, but @code{nntp} usually checks automatically whether @acronym{NOV}
13466can be used.
13467
13468@item nntp-xover-commands
13469@vindex nntp-xover-commands
13470@cindex @acronym{NOV}
13471@cindex XOVER
13472List of strings used as commands to fetch @acronym{NOV} lines from a
13473server. The default value of this variable is @code{("XOVER"
13474"XOVERVIEW")}.
13475
13476@item nntp-nov-gap
13477@vindex nntp-nov-gap
13478@code{nntp} normally sends just one big request for @acronym{NOV} lines to
13479the server. The server responds with one huge list of lines. However,
13480if you have read articles 2-5000 in the group, and only want to read
13481article 1 and 5001, that means that @code{nntp} will fetch 4999 @acronym{NOV}
13482lines that you will not need. This variable says how
13483big a gap between two consecutive articles is allowed to be before the
13484@code{XOVER} request is split into several request. Note that if your
13485network is fast, setting this variable to a really small number means
13486that fetching will probably be slower. If this variable is @code{nil},
13487@code{nntp} will never split requests. The default is 5.
13488
13489@item nntp-xref-number-is-evil
13490@vindex nntp-xref-number-is-evil
13491When Gnus refers to an article having the @code{Message-ID} that a user
13492specifies or having the @code{Message-ID} of the parent article of the
13493current one (@pxref{Finding the Parent}), Gnus sends a @code{HEAD}
13494command to the @acronym{NNTP} server to know where it is, and the server
13495returns the data containing the pairs of a group and an article number
13496in the @code{Xref} header. Gnus normally uses the article number to
13497refer to the article if the data shows that that article is in the
13498current group, while it uses the @code{Message-ID} otherwise. However,
13499some news servers, e.g., ones running Diablo, run multiple engines
13500having the same articles but article numbers are not kept synchronized
13501between them. In that case, the article number that appears in the
13502@code{Xref} header varies by which engine is chosen, so you cannot refer
13503to the parent article that is in the current group, for instance. If
13504you connect to such a server, set this variable to a non-@code{nil}
13505value, and Gnus never uses article numbers. For example:
13506
13507@lisp
13508(setq gnus-select-method
13509 '(nntp "newszilla"
13510 (nntp-address "newszilla.example.com")
13511 (nntp-xref-number-is-evil t)
13512 @dots{}))
13513@end lisp
13514
13515The default value of this server variable is @code{nil}.
13516
13517@item nntp-prepare-server-hook
13518@vindex nntp-prepare-server-hook
13519A hook run before attempting to connect to an @acronym{NNTP} server.
13520
13521@item nntp-record-commands
13522@vindex nntp-record-commands
13523If non-@code{nil}, @code{nntp} will log all commands it sends to the
13524@acronym{NNTP} server (along with a timestamp) in the @samp{*nntp-log*}
13525buffer. This is useful if you are debugging a Gnus/@acronym{NNTP} connection
13526that doesn't seem to work.
13527
13528@item nntp-open-connection-function
13529@vindex nntp-open-connection-function
13530It is possible to customize how the connection to the nntp server will
13531be opened. If you specify an @code{nntp-open-connection-function}
13532parameter, Gnus will use that function to establish the connection.
01c52d31
MB
13533Seven pre-made functions are supplied. These functions can be grouped
13534in two categories: direct connection functions (four pre-made), and
13535indirect ones (three pre-made).
4009494e
GM
13536
13537@item nntp-never-echoes-commands
13538@vindex nntp-never-echoes-commands
13539Non-@code{nil} means the nntp server never echoes commands. It is
13540reported that some nntps server doesn't echo commands. So, you may want
13541to set this to non-@code{nil} in the method for such a server setting
13542@code{nntp-open-connection-function} to @code{nntp-open-ssl-stream} for
13543example. The default value is @code{nil}. Note that the
13544@code{nntp-open-connection-functions-never-echo-commands} variable
13545overrides the @code{nil} value of this variable.
13546
13547@item nntp-open-connection-functions-never-echo-commands
13548@vindex nntp-open-connection-functions-never-echo-commands
13549List of functions that never echo commands. Add or set a function which
13550you set to @code{nntp-open-connection-function} to this list if it does
13551not echo commands. Note that a non-@code{nil} value of the
13552@code{nntp-never-echoes-commands} variable overrides this variable. The
13553default value is @code{(nntp-open-network-stream)}.
13554
13555@item nntp-prepare-post-hook
13556@vindex nntp-prepare-post-hook
13557A hook run just before posting an article. If there is no
13558@code{Message-ID} header in the article and the news server provides the
13559recommended ID, it will be added to the article before running this
13560hook. It is useful to make @code{Cancel-Lock} headers even if you
13561inhibit Gnus to add a @code{Message-ID} header, you could say:
13562
13563@lisp
13564(add-hook 'nntp-prepare-post-hook 'canlock-insert-header)
13565@end lisp
13566
13567Note that not all servers support the recommended ID. This works for
13568INN versions 2.3.0 and later, for instance.
13569
13570@end table
13571
13572@menu
13573* Direct Functions:: Connecting directly to the server.
13574* Indirect Functions:: Connecting indirectly to the server.
13575* Common Variables:: Understood by several connection functions.
01c52d31 13576* NNTP marks:: Storing marks for @acronym{NNTP} servers.
4009494e
GM
13577@end menu
13578
13579
13580@node Direct Functions
13581@subsubsection Direct Functions
13582@cindex direct connection functions
13583
13584These functions are called direct because they open a direct connection
13585between your machine and the @acronym{NNTP} server. The behavior of these
13586functions is also affected by commonly understood variables
13587(@pxref{Common Variables}).
13588
13589@table @code
13590@findex nntp-open-network-stream
13591@item nntp-open-network-stream
13592This is the default, and simply connects to some port or other on the
13593remote system.
13594
13595@findex nntp-open-tls-stream
13596@item nntp-open-tls-stream
13597Opens a connection to a server over a @dfn{secure} channel. To use
13598this you must have @uref{http://www.gnu.org/software/gnutls/, GNUTLS}
13599installed. You then define a server as follows:
13600
13601@lisp
13602;; @r{"nntps" is port 563 and is predefined in our @file{/etc/services}}
13603;; @r{however, @samp{gnutls-cli -p} doesn't like named ports.}
13604;;
13605(nntp "snews.bar.com"
13606 (nntp-open-connection-function nntp-open-tls-stream)
13607 (nntp-port-number )
13608 (nntp-address "snews.bar.com"))
13609@end lisp
13610
13611@findex nntp-open-ssl-stream
13612@item nntp-open-ssl-stream
13613Opens a connection to a server over a @dfn{secure} channel. To use
13614this you must have @uref{http://www.openssl.org, OpenSSL} or
13615@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL, SSLeay} installed. You
13616then define a server as follows:
13617
13618@lisp
13619;; @r{"snews" is port 563 and is predefined in our @file{/etc/services}}
13620;; @r{however, @samp{openssl s_client -port} doesn't like named ports.}
13621;;
13622(nntp "snews.bar.com"
13623 (nntp-open-connection-function nntp-open-ssl-stream)
13624 (nntp-port-number 563)
13625 (nntp-address "snews.bar.com"))
13626@end lisp
13627
990e2c2f
SM
13628@findex nntp-open-netcat-stream
13629@item nntp-open-netcat-stream
31fe2b00
SM
13630Opens a connection to an @acronym{NNTP} server using the @code{netcat}
13631program. You might wonder why this function exists, since we have
13632the default @code{nntp-open-network-stream} which would do the job. (One
4009494e
GM
13633of) the reason(s) is that if you are behind a firewall but have direct
13634connections to the outside world thanks to a command wrapper like
13635@code{runsocks}, you can use it like this:
13636
13637@lisp
13638(nntp "socksified"
13639 (nntp-pre-command "runsocks")
990e2c2f 13640 (nntp-open-connection-function nntp-open-netcat-stream)
4009494e
GM
13641 (nntp-address "the.news.server"))
13642@end lisp
13643
13644With the default method, you would need to wrap your whole Emacs
13645session, which is not a good idea.
31fe2b00
SM
13646
13647@findex nntp-open-telnet-stream
13648@item nntp-open-telnet-stream
990e2c2f 13649Like @code{nntp-open-netcat-stream}, but uses @code{telnet} rather than
31fe2b00
SM
13650@code{netcat}. @code{telnet} is a bit less robust because of things
13651like line-end-conversion, but sometimes netcat is simply
13652not available. The previous example would turn into:
13653
13654@lisp
13655(nntp "socksified"
13656 (nntp-pre-command "runsocks")
13657 (nntp-open-connection-function nntp-open-telnet-stream)
13658 (nntp-address "the.news.server")
13659 (nntp-end-of-line "\n"))
13660@end lisp
4009494e
GM
13661@end table
13662
13663
13664@node Indirect Functions
13665@subsubsection Indirect Functions
13666@cindex indirect connection functions
13667
13668These functions are called indirect because they connect to an
13669intermediate host before actually connecting to the @acronym{NNTP} server.
13670All of these functions and related variables are also said to belong to
13671the ``via'' family of connection: they're all prefixed with ``via'' to make
13672things cleaner. The behavior of these functions is also affected by
13673commonly understood variables (@pxref{Common Variables}).
13674
13675@table @code
31fe2b00
SM
13676@item nntp-open-via-rlogin-and-netcat
13677@findex nntp-open-via-rlogin-and-netcat
13678Does an @samp{rlogin} on a remote system, and then uses @code{netcat} to connect
4009494e
GM
13679to the real @acronym{NNTP} server from there. This is useful for instance if
13680you need to connect to a firewall machine first.
13681
31fe2b00 13682@code{nntp-open-via-rlogin-and-netcat}-specific variables:
4009494e
GM
13683
13684@table @code
13685@item nntp-via-rlogin-command
13686@vindex nntp-via-rlogin-command
13687Command used to log in on the intermediate host. The default is
13688@samp{rsh}, but @samp{ssh} is a popular alternative.
13689
13690@item nntp-via-rlogin-command-switches
13691@vindex nntp-via-rlogin-command-switches
13692List of strings to be used as the switches to
13693@code{nntp-via-rlogin-command}. The default is @code{nil}. If you use
13694@samp{ssh} for @code{nntp-via-rlogin-command}, you may set this to
31fe2b00 13695@samp{("-C")} in order to compress all data connections.
4009494e
GM
13696@end table
13697
31fe2b00
SM
13698@item nntp-open-via-rlogin-and-telnet
13699@findex nntp-open-via-rlogin-and-telnet
13700Does essentially the same, but uses @code{telnet} instead of @samp{netcat}
01c52d31 13701to connect to the real @acronym{NNTP} server from the intermediate host.
31fe2b00
SM
13702@code{telnet} is a bit less robust because of things like
13703line-end-conversion, but sometimes @code{netcat} is simply not available.
01c52d31 13704
31fe2b00 13705@code{nntp-open-via-rlogin-and-telnet}-specific variables:
01c52d31
MB
13706
13707@table @code
31fe2b00
SM
13708@item nntp-telnet-command
13709@vindex nntp-telnet-command
01c52d31 13710Command used to connect to the real @acronym{NNTP} server from the
fbcbb58c 13711intermediate host. The default is @samp{telnet}.
01c52d31 13712
31fe2b00
SM
13713@item nntp-telnet-switches
13714@vindex nntp-telnet-switches
01c52d31 13715List of strings to be used as the switches to the
31fe2b00 13716@code{nntp-telnet-command} command. The default is @code{("-8")}.
01c52d31
MB
13717
13718@item nntp-via-rlogin-command
13719@vindex nntp-via-rlogin-command
13720Command used to log in on the intermediate host. The default is
13721@samp{rsh}, but @samp{ssh} is a popular alternative.
13722
13723@item nntp-via-rlogin-command-switches
13724@vindex nntp-via-rlogin-command-switches
13725List of strings to be used as the switches to
31fe2b00
SM
13726@code{nntp-via-rlogin-command}. If you use @samp{ssh}, you may need to set
13727this to @samp{("-t" "-e" "none")} or @samp{("-C" "-t" "-e" "none")} if
13728the telnet command requires a pseudo-tty allocation on an intermediate
13729host. The default is @code{nil}.
01c52d31
MB
13730@end table
13731
31fe2b00
SM
13732Note that you may want to change the value for @code{nntp-end-of-line}
13733to @samp{\n} (@pxref{Common Variables}).
13734
4009494e
GM
13735@item nntp-open-via-telnet-and-telnet
13736@findex nntp-open-via-telnet-and-telnet
13737Does essentially the same, but uses @samp{telnet} instead of
13738@samp{rlogin} to connect to the intermediate host.
13739
13740@code{nntp-open-via-telnet-and-telnet}-specific variables:
13741
13742@table @code
13743@item nntp-via-telnet-command
13744@vindex nntp-via-telnet-command
13745Command used to @code{telnet} the intermediate host. The default is
13746@samp{telnet}.
13747
13748@item nntp-via-telnet-switches
13749@vindex nntp-via-telnet-switches
13750List of strings to be used as the switches to the
13751@code{nntp-via-telnet-command} command. The default is @samp{("-8")}.
13752
13753@item nntp-via-user-password
13754@vindex nntp-via-user-password
13755Password to use when logging in on the intermediate host.
13756
13757@item nntp-via-envuser
13758@vindex nntp-via-envuser
13759If non-@code{nil}, the intermediate @code{telnet} session (client and
13760server both) will support the @code{ENVIRON} option and not prompt for
13761login name. This works for Solaris @code{telnet}, for instance.
13762
13763@item nntp-via-shell-prompt
13764@vindex nntp-via-shell-prompt
13765Regexp matching the shell prompt on the intermediate host. The default
13766is @samp{bash\\|\$ *\r?$\\|> *\r?}.
13767
13768@end table
13769
01c52d31
MB
13770Note that you may want to change the value for @code{nntp-end-of-line}
13771to @samp{\n} (@pxref{Common Variables}).
4009494e
GM
13772@end table
13773
13774
13775Here are some additional variables that are understood by all the above
13776functions:
13777
13778@table @code
13779
13780@item nntp-via-user-name
13781@vindex nntp-via-user-name
13782User name to use when connecting to the intermediate host.
13783
13784@item nntp-via-address
13785@vindex nntp-via-address
13786Address of the intermediate host to connect to.
13787
13788@end table
13789
13790
13791@node Common Variables
13792@subsubsection Common Variables
13793
13794The following variables affect the behavior of all, or several of the
13795pre-made connection functions. When not specified, all functions are
13796affected (the values of the following variables will be used as the
13797default if each virtual @code{nntp} server doesn't specify those server
13798variables individually).
13799
13800@table @code
13801
13802@item nntp-pre-command
13803@vindex nntp-pre-command
13804A command wrapper to use when connecting through a non native
13805connection function (all except @code{nntp-open-network-stream},
13806@code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}). This is
13807where you would put a @samp{SOCKS} wrapper for instance.
13808
13809@item nntp-address
13810@vindex nntp-address
13811The address of the @acronym{NNTP} server.
13812
13813@item nntp-port-number
13814@vindex nntp-port-number
13815Port number to connect to the @acronym{NNTP} server. The default is
13816@samp{nntp}. If you use @acronym{NNTP} over
13817@acronym{TLS}/@acronym{SSL}, you may want to use integer ports rather
13818than named ports (i.e, use @samp{563} instead of @samp{snews} or
13819@samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may
13820not work with named ports.
13821
13822@item nntp-end-of-line
13823@vindex nntp-end-of-line
13824String to use as end-of-line marker when talking to the @acronym{NNTP}
13825server. This is @samp{\r\n} by default, but should be @samp{\n} when
01c52d31 13826using a non native telnet connection function.
4009494e 13827
990e2c2f
SM
13828@item nntp-netcat-command
13829@vindex nntp-netcat-command
4009494e 13830Command to use when connecting to the @acronym{NNTP} server through
31fe2b00 13831@samp{netcat}. This is @emph{not} for an intermediate host. This is
4009494e 13832just for the real @acronym{NNTP} server. The default is
31fe2b00 13833@samp{nc}.
4009494e 13834
990e2c2f
SM
13835@item nntp-netcat-switches
13836@vindex nntp-netcat-switches
13837A list of switches to pass to @code{nntp-netcat-command}. The default
31fe2b00 13838is @samp{()}.
4009494e
GM
13839
13840@end table
13841
01c52d31
MB
13842@node NNTP marks
13843@subsubsection NNTP marks
13844@cindex storing NNTP marks
13845
13846Gnus stores marks (@pxref{Marking Articles}) for @acronym{NNTP}
13847servers in marks files. A marks file records what marks you have set
13848in a group and each file is specific to the corresponding server.
13849Marks files are stored in @file{~/News/marks}
13850(@code{nntp-marks-directory}) under a classic hierarchy resembling
13851that of a news server, for example marks for the group
13852@samp{gmane.discuss} on the news.gmane.org server will be stored in
13853the file @file{~/News/marks/news.gmane.org/gmane/discuss/.marks}.
13854
13855Marks files are useful because you can copy the @file{~/News/marks}
13856directory (using rsync, scp or whatever) to another Gnus installation,
13857and it will realize what articles you have read and marked. The data
13858in @file{~/News/marks} has priority over the same data in
13859@file{~/.newsrc.eld}.
13860
13861Note that marks files are very much server-specific: Gnus remembers
13862the article numbers so if you don't use the same servers on both
13863installations things are most likely to break (most @acronym{NNTP}
13864servers do not use the same article numbers as any other server).
13865However, if you use servers A, B, C on one installation and servers A,
13866D, E on the other, you can sync the marks files for A and then you'll
13867get synchronization for that server between the two installations.
13868
13869Using @acronym{NNTP} marks can possibly incur a performance penalty so
13870if Gnus feels sluggish, try setting the @code{nntp-marks-is-evil}
13871variable to @code{t}. Marks will then be stored in @file{~/.newsrc.eld}.
13872
13873Related variables:
13874
13875@table @code
13876
13877@item nntp-marks-is-evil
13878@vindex nntp-marks-is-evil
13879If non-@code{nil}, this back end will ignore any marks files. The
13880default is @code{nil}.
13881
13882@item nntp-marks-directory
13883@vindex nntp-marks-directory
13884The directory where marks for nntp groups will be stored.
13885
13886@end table
13887
4009494e
GM
13888
13889@node News Spool
13890@subsection News Spool
13891@cindex nnspool
13892@cindex news spool
13893
13894Subscribing to a foreign group from the local spool is extremely easy,
13895and might be useful, for instance, to speed up reading groups that
13896contain very big articles---@samp{alt.binaries.pictures.furniture}, for
13897instance.
13898
13899Anyway, you just specify @code{nnspool} as the method and @code{""} (or
13900anything else) as the address.
13901
13902If you have access to a local spool, you should probably use that as the
13903native select method (@pxref{Finding the News}). It is normally faster
13904than using an @code{nntp} select method, but might not be. It depends.
13905You just have to try to find out what's best at your site.
13906
13907@table @code
13908
13909@item nnspool-inews-program
13910@vindex nnspool-inews-program
13911Program used to post an article.
13912
13913@item nnspool-inews-switches
13914@vindex nnspool-inews-switches
13915Parameters given to the inews program when posting an article.
13916
13917@item nnspool-spool-directory
13918@vindex nnspool-spool-directory
13919Where @code{nnspool} looks for the articles. This is normally
13920@file{/usr/spool/news/}.
13921
13922@item nnspool-nov-directory
13923@vindex nnspool-nov-directory
13924Where @code{nnspool} will look for @acronym{NOV} files. This is normally@*
13925@file{/usr/spool/news/over.view/}.
13926
13927@item nnspool-lib-dir
13928@vindex nnspool-lib-dir
13929Where the news lib dir is (@file{/usr/lib/news/} by default).
13930
13931@item nnspool-active-file
13932@vindex nnspool-active-file
13933The name of the active file.
13934
13935@item nnspool-newsgroups-file
13936@vindex nnspool-newsgroups-file
13937The name of the group descriptions file.
13938
13939@item nnspool-history-file
13940@vindex nnspool-history-file
13941The name of the news history file.
13942
13943@item nnspool-active-times-file
13944@vindex nnspool-active-times-file
13945The name of the active date file.
13946
13947@item nnspool-nov-is-evil
13948@vindex nnspool-nov-is-evil
13949If non-@code{nil}, @code{nnspool} won't try to use any @acronym{NOV} files
13950that it finds.
13951
13952@item nnspool-sift-nov-with-sed
13953@vindex nnspool-sift-nov-with-sed
13954@cindex sed
13955If non-@code{nil}, which is the default, use @code{sed} to get the
13956relevant portion from the overview file. If @code{nil},
13957@code{nnspool} will load the entire file into a buffer and process it
13958there.
13959
13960@end table
13961
13962
13963@node Getting Mail
13964@section Getting Mail
13965@cindex reading mail
13966@cindex mail
13967
13968Reading mail with a newsreader---isn't that just plain WeIrD? But of
13969course.
13970
13971@menu
13972* Mail in a Newsreader:: Important introductory notes.
13973* Getting Started Reading Mail:: A simple cookbook example.
13974* Splitting Mail:: How to create mail groups.
13975* Mail Sources:: How to tell Gnus where to get mail from.
13976* Mail Back End Variables:: Variables for customizing mail handling.
13977* Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail.
13978* Group Mail Splitting:: Use group customize to drive mail splitting.
13979* Incorporating Old Mail:: What about the old mail you have?
13980* Expiring Mail:: Getting rid of unwanted mail.
13981* Washing Mail:: Removing cruft from the mail you get.
13982* Duplicates:: Dealing with duplicated mail.
13983* Not Reading Mail:: Using mail back ends for reading other files.
13984* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
13985@end menu
13986
13987
13988@node Mail in a Newsreader
13989@subsection Mail in a Newsreader
13990
13991If you are used to traditional mail readers, but have decided to switch
13992to reading mail with Gnus, you may find yourself experiencing something
13993of a culture shock.
13994
13995Gnus does not behave like traditional mail readers. If you want to make
13996it behave that way, you can, but it's an uphill battle.
13997
13998Gnus, by default, handles all its groups using the same approach. This
13999approach is very newsreaderly---you enter a group, see the new/unread
14000messages, and when you read the messages, they get marked as read, and
14001you don't see them any more. (Unless you explicitly ask for them.)
14002
14003In particular, you do not do anything explicitly to delete messages.
14004
14005Does this mean that all the messages that have been marked as read are
14006deleted? How awful!
14007
14008But, no, it means that old messages are @dfn{expired} according to some
14009scheme or other. For news messages, the expire process is controlled by
14010the news administrator; for mail, the expire process is controlled by
14011you. The expire process for mail is covered in depth in @ref{Expiring
14012Mail}.
14013
14014What many Gnus users find, after using it a while for both news and
14015mail, is that the transport mechanism has very little to do with how
14016they want to treat a message.
14017
14018Many people subscribe to several mailing lists. These are transported
14019via @acronym{SMTP}, and are therefore mail. But we might go for weeks without
14020answering, or even reading these messages very carefully. We may not
14021need to save them because if we should need to read one again, they are
14022archived somewhere else.
14023
14024Some people have local news groups which have only a handful of readers.
14025These are transported via @acronym{NNTP}, and are therefore news. But we may need
14026to read and answer a large fraction of the messages very carefully in
14027order to do our work. And there may not be an archive, so we may need
14028to save the interesting messages the same way we would personal mail.
14029
14030The important distinction turns out to be not the transport mechanism,
14031but other factors such as how interested we are in the subject matter,
14032or how easy it is to retrieve the message if we need to read it again.
14033
14034Gnus provides many options for sorting mail into ``groups'' which behave
14035like newsgroups, and for treating each group (whether mail or news)
14036differently.
14037
14038Some users never get comfortable using the Gnus (ahem) paradigm and wish
14039that Gnus should grow up and be a male, er, mail reader. It is possible
14040to whip Gnus into a more mailreaderly being, but, as said before, it's
14041not easy. People who prefer proper mail readers should try @sc{vm}
14042instead, which is an excellent, and proper, mail reader.
14043
14044I don't mean to scare anybody off, but I want to make it clear that you
14045may be required to learn a new way of thinking about messages. After
14046you've been subjected to The Gnus Way, you will come to love it. I can
14047guarantee it. (At least the guy who sold me the Emacs Subliminal
14048Brain-Washing Functions that I've put into Gnus did guarantee it. You
14049Will Be Assimilated. You Love Gnus. You Love The Gnus Mail Way.
14050You Do.)
14051
14052
14053@node Getting Started Reading Mail
14054@subsection Getting Started Reading Mail
14055
14056It's quite easy to use Gnus to read your new mail. You just plonk the
14057mail back end of your choice into @code{gnus-secondary-select-methods},
14058and things will happen automatically.
14059
14060For instance, if you want to use @code{nnml} (which is a ``one file per
14061mail'' back end), you could put the following in your @file{~/.gnus.el} file:
14062
14063@lisp
14064(setq gnus-secondary-select-methods '((nnml "")))
14065@end lisp
14066
14067Now, the next time you start Gnus, this back end will be queried for new
14068articles, and it will move all the messages in your spool file to its
14069directory, which is @file{~/Mail/} by default. The new group that will
14070be created (@samp{mail.misc}) will be subscribed, and you can read it
14071like any other group.
14072
14073You will probably want to split the mail into several groups, though:
14074
14075@lisp
14076(setq nnmail-split-methods
14077 '(("junk" "^From:.*Lars Ingebrigtsen")
14078 ("crazy" "^Subject:.*die\\|^Organization:.*flabby")
14079 ("other" "")))
14080@end lisp
14081
14082This will result in three new @code{nnml} mail groups being created:
14083@samp{nnml:junk}, @samp{nnml:crazy}, and @samp{nnml:other}. All the
14084mail that doesn't fit into the first two groups will be placed in the
14085last group.
14086
14087This should be sufficient for reading mail with Gnus. You might want to
14088give the other sections in this part of the manual a perusal, though.
14089Especially @pxref{Choosing a Mail Back End} and @pxref{Expiring Mail}.
14090
14091
14092@node Splitting Mail
14093@subsection Splitting Mail
14094@cindex splitting mail
14095@cindex mail splitting
14096@cindex mail filtering (splitting)
14097
14098@vindex nnmail-split-methods
14099The @code{nnmail-split-methods} variable says how the incoming mail is
14100to be split into groups.
14101
14102@lisp
14103(setq nnmail-split-methods
14104 '(("mail.junk" "^From:.*Lars Ingebrigtsen")
14105 ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
14106 ("mail.other" "")))
14107@end lisp
14108
14109This variable is a list of lists, where the first element of each of
14110these lists is the name of the mail group (they do not have to be called
14111something beginning with @samp{mail}, by the way), and the second
14112element is a regular expression used on the header of each mail to
14113determine if it belongs in this mail group. The first string may
14114contain @samp{\\1} forms, like the ones used by @code{replace-match} to
14115insert sub-expressions from the matched text. For instance:
14116
14117@lisp
14118("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
14119@end lisp
14120
14121@noindent
14122In that case, @code{nnmail-split-lowercase-expanded} controls whether
14123the inserted text should be made lowercase. @xref{Fancy Mail Splitting}.
14124
14125The second element can also be a function. In that case, it will be
14126called narrowed to the headers with the first element of the rule as the
14127argument. It should return a non-@code{nil} value if it thinks that the
14128mail belongs in that group.
14129
14130@cindex @samp{bogus} group
14131The last of these groups should always be a general one, and the regular
14132expression should @emph{always} be @samp{""} so that it matches any mails
14133that haven't been matched by any of the other regexps. (These rules are
14134processed from the beginning of the alist toward the end. The first rule
14135to make a match will ``win'', unless you have crossposting enabled. In
14136that case, all matching rules will ``win''.) If no rule matched, the mail
14137will end up in the @samp{bogus} group. When new groups are created by
14138splitting mail, you may want to run @code{gnus-group-find-new-groups} to
14139see the new groups. This also applies to the @samp{bogus} group.
14140
14141If you like to tinker with this yourself, you can set this variable to a
14142function of your choice. This function will be called without any
14143arguments in a buffer narrowed to the headers of an incoming mail
14144message. The function should return a list of group names that it
14145thinks should carry this mail message.
14146
14147Note that the mail back ends are free to maul the poor, innocent,
14148incoming headers all they want to. They all add @code{Lines} headers;
14149some add @code{X-Gnus-Group} headers; most rename the Unix mbox
14150@code{From<SPACE>} line to something else.
14151
14152@vindex nnmail-crosspost
14153The mail back ends all support cross-posting. If several regexps match,
14154the mail will be ``cross-posted'' to all those groups.
14155@code{nnmail-crosspost} says whether to use this mechanism or not. Note
14156that no articles are crossposted to the general (@samp{""}) group.
14157
14158@vindex nnmail-crosspost-link-function
14159@cindex crosspost
14160@cindex links
14161@code{nnmh} and @code{nnml} makes crossposts by creating hard links to
14162the crossposted articles. However, not all file systems support hard
14163links. If that's the case for you, set
14164@code{nnmail-crosspost-link-function} to @code{copy-file}. (This
14165variable is @code{add-name-to-file} by default.)
14166
14167@kindex M-x nnmail-split-history
14168@findex nnmail-split-history
14169If you wish to see where the previous mail split put the messages, you
14170can use the @kbd{M-x nnmail-split-history} command. If you wish to see
14171where re-spooling messages would put the messages, you can use
14172@code{gnus-summary-respool-trace} and related commands (@pxref{Mail
14173Group Commands}).
14174
14175@vindex nnmail-split-header-length-limit
14176Header lines longer than the value of
14177@code{nnmail-split-header-length-limit} are excluded from the split
14178function.
14179
14180@vindex nnmail-mail-splitting-decodes
14181@vindex nnmail-mail-splitting-charset
14182By default, splitting does not decode headers, so you can not match on
14183non-@acronym{ASCII} strings. But it is useful if you want to match
14184articles based on the raw header data. To enable it, set the
14185@code{nnmail-mail-splitting-decodes} variable to a non-@code{nil} value.
14186In addition, the value of the @code{nnmail-mail-splitting-charset}
14187variable is used for decoding non-@acronym{MIME} encoded string when
14188@code{nnmail-mail-splitting-decodes} is non-@code{nil}. The default
14189value is @code{nil} which means not to decode non-@acronym{MIME} encoded
14190string. A suitable value for you will be @code{undecided} or be the
14191charset used normally in mails you are interested in.
14192
14193@vindex nnmail-resplit-incoming
14194By default, splitting is performed on all incoming messages. If you
14195specify a @code{directory} entry for the variable @code{mail-sources}
14196(@pxref{Mail Source Specifiers}), however, then splitting does
14197@emph{not} happen by default. You can set the variable
14198@code{nnmail-resplit-incoming} to a non-@code{nil} value to make
14199splitting happen even in this case. (This variable has no effect on
14200other kinds of entries.)
14201
14202Gnus gives you all the opportunity you could possibly want for shooting
14203yourself in the foot. Let's say you create a group that will contain
14204all the mail you get from your boss. And then you accidentally
14205unsubscribe from the group. Gnus will still put all the mail from your
14206boss in the unsubscribed group, and so, when your boss mails you ``Have
14207that report ready by Monday or you're fired!'', you'll never see it and,
14208come Tuesday, you'll still believe that you're gainfully employed while
14209you really should be out collecting empty bottles to save up for next
14210month's rent money.
14211
14212
14213@node Mail Sources
14214@subsection Mail Sources
14215
14216Mail can be gotten from many different sources---the mail spool, from
14217a @acronym{POP} mail server, from a procmail directory, or from a
14218maildir, for instance.
14219
14220@menu
14221* Mail Source Specifiers:: How to specify what a mail source is.
14222* Mail Source Customization:: Some variables that influence things.
14223* Fetching Mail:: Using the mail source specifiers.
14224@end menu
14225
14226
14227@node Mail Source Specifiers
14228@subsubsection Mail Source Specifiers
14229@cindex POP
14230@cindex mail server
14231@cindex procmail
14232@cindex mail spool
14233@cindex mail source
14234
14235You tell Gnus how to fetch mail by setting @code{mail-sources}
14236(@pxref{Fetching Mail}) to a @dfn{mail source specifier}.
14237
14238Here's an example:
14239
14240@lisp
14241(pop :server "pop3.mailserver.com" :user "myname")
14242@end lisp
14243
14244As can be observed, a mail source specifier is a list where the first
14245element is a @dfn{mail source type}, followed by an arbitrary number of
14246@dfn{keywords}. Keywords that are not explicitly specified are given
14247default values.
14248
a1da1e37
MB
14249The @code{mail-sources} is global for all mail groups. You can specify
14250an additional mail source for a particular group by including the
14251@code{group} mail specifier in @code{mail-sources}, and setting a
14252@code{mail-source} group parameter (@pxref{Group Parameters}) specifying
14253a single mail source. When this is used, @code{mail-sources} is
14254typically just @code{(group)}; the @code{mail-source} parameter for a
14255group might look like this:
14256
14257@lisp
14258(mail-source . (file :path "home/user/spools/foo.spool"))
14259@end lisp
14260
14261This means that the group's (and only this group's) messages will be
14262fetched from the spool file @samp{/user/spools/foo.spool}.
14263
4009494e
GM
14264The following mail source types are available:
14265
14266@table @code
14267@item file
14268Get mail from a single file; typically from the mail spool.
14269
14270Keywords:
14271
14272@table @code
14273@item :path
14274The file name. Defaults to the value of the @env{MAIL}
14275environment variable or the value of @code{rmail-spool-directory}
14276(usually something like @file{/usr/mail/spool/user-name}).
14277
14278@item :prescript
14279@itemx :postscript
14280Script run before/after fetching mail.
14281@end table
14282
14283An example file mail source:
14284
14285@lisp
14286(file :path "/usr/spool/mail/user-name")
14287@end lisp
14288
14289Or using the default file name:
14290
14291@lisp
14292(file)
14293@end lisp
14294
14295If the mail spool file is not located on the local machine, it's best
14296to use @acronym{POP} or @acronym{IMAP} or the like to fetch the mail.
14297You can not use ange-ftp file names here---it has no way to lock the
14298mail spool while moving the mail.
14299
14300If it's impossible to set up a proper server, you can use ssh instead.
14301
14302@lisp
14303(setq mail-sources
14304 '((file :prescript "ssh host bin/getmail >%t")))
14305@end lisp
14306
14307The @samp{getmail} script would look something like the following:
14308
14309@example
14310#!/bin/sh
14311# getmail - move mail from spool to stdout
14312# flu@@iki.fi
14313
14314MOVEMAIL=/usr/lib/emacs/20.3/i386-redhat-linux/movemail
14315TMP=$HOME/Mail/tmp
14316rm -f $TMP; $MOVEMAIL $MAIL $TMP >/dev/null && cat $TMP
14317@end example
14318
14319Alter this script to fit the @samp{movemail} and temporary
14320file you want to use.
14321
14322
14323@item directory
14324@vindex nnmail-scan-directory-mail-source-once
14325Get mail from several files in a directory. This is typically used
14326when you have procmail split the incoming mail into several files.
14327That is, there is a one-to-one correspondence between files in that
14328directory and groups, so that mail from the file @file{foo.bar.spool}
14329will be put in the group @code{foo.bar}. (You can change the suffix
14330to be used instead of @code{.spool}.) Setting
14331@code{nnmail-scan-directory-mail-source-once} to non-@code{nil} forces
14332Gnus to scan the mail source only once. This is particularly useful
14333if you want to scan mail groups at a specified level.
14334
14335@vindex nnmail-resplit-incoming
14336There is also the variable @code{nnmail-resplit-incoming}, if you set
14337that to a non-@code{nil} value, then the normal splitting process is
14338applied to all the files from the directory, @ref{Splitting Mail}.
14339
14340Keywords:
14341
14342@table @code
14343@item :path
14344The name of the directory where the files are. There is no default
14345value.
14346
14347@item :suffix
14348Only files ending with this suffix are used. The default is
14349@samp{.spool}.
14350
14351@item :predicate
14352Only files that have this predicate return non-@code{nil} are returned.
14353The default is @code{identity}. This is used as an additional
14354filter---only files that have the right suffix @emph{and} satisfy this
14355predicate are considered.
14356
14357@item :prescript
14358@itemx :postscript
14359Script run before/after fetching mail.
14360
14361@end table
14362
14363An example directory mail source:
14364
14365@lisp
14366(directory :path "/home/user-name/procmail-dir/"
14367 :suffix ".prcml")
14368@end lisp
14369
14370@item pop
14371Get mail from a @acronym{POP} server.
14372
14373Keywords:
14374
14375@table @code
14376@item :server
14377The name of the @acronym{POP} server. The default is taken from the
14378@env{MAILHOST} environment variable.
14379
14380@item :port
14381The port number of the @acronym{POP} server. This can be a number (eg,
14382@samp{:port 1234}) or a string (eg, @samp{:port "pop3"}). If it is a
14383string, it should be a service name as listed in @file{/etc/services} on
14384Unix systems. The default is @samp{"pop3"}. On some systems you might
14385need to specify it as @samp{"pop-3"} instead.
14386
14387@item :user
14388The user name to give to the @acronym{POP} server. The default is the login
14389name.
14390
14391@item :password
14392The password to give to the @acronym{POP} server. If not specified,
14393the user is prompted.
14394
14395@item :program
14396The program to use to fetch mail from the @acronym{POP} server. This
14397should be a @code{format}-like string. Here's an example:
14398
14399@example
14400fetchmail %u@@%s -P %p %t
14401@end example
14402
14403The valid format specifier characters are:
14404
14405@table @samp
14406@item t
14407The name of the file the mail is to be moved to. This must always be
14408included in this string.
14409
14410@item s
14411The name of the server.
14412
14413@item P
14414The port number of the server.
14415
14416@item u
14417The user name to use.
14418
14419@item p
14420The password to use.
14421@end table
14422
14423The values used for these specs are taken from the values you give the
14424corresponding keywords.
14425
14426@item :prescript
14427A script to be run before fetching the mail. The syntax is the same as
14428the @code{:program} keyword. This can also be a function to be run.
14429
14430@item :postscript
14431A script to be run after fetching the mail. The syntax is the same as
14432the @code{:program} keyword. This can also be a function to be run.
14433
14434@item :function
14435The function to use to fetch mail from the @acronym{POP} server. The
14436function is called with one parameter---the name of the file where the
14437mail should be moved to.
14438
14439@item :authentication
14440This can be either the symbol @code{password} or the symbol @code{apop}
14441and says what authentication scheme to use. The default is
14442@code{password}.
14443
14444@end table
14445
14446@vindex pop3-movemail
14447@vindex pop3-leave-mail-on-server
14448If the @code{:program} and @code{:function} keywords aren't specified,
14449@code{pop3-movemail} will be used. If @code{pop3-leave-mail-on-server}
14450is non-@code{nil} the mail is to be left on the @acronym{POP} server
14451after fetching when using @code{pop3-movemail}. Note that POP servers
14452maintain no state information between sessions, so what the client
14453believes is there and what is actually there may not match up. If they
14454do not, then you may get duplicate mails or the whole thing can fall
14455apart and leave you with a corrupt mailbox.
14456
14457Here are some examples for getting mail from a @acronym{POP} server.
14458Fetch from the default @acronym{POP} server, using the default user
14459name, and default fetcher:
14460
14461@lisp
14462(pop)
14463@end lisp
14464
14465Fetch from a named server with a named user and password:
14466
14467@lisp
14468(pop :server "my.pop.server"
14469 :user "user-name" :password "secret")
14470@end lisp
14471
14472Use @samp{movemail} to move the mail:
14473
14474@lisp
14475(pop :program "movemail po:%u %t %p")
14476@end lisp
14477
14478@item maildir
14479Get mail from a maildir. This is a type of mailbox that is supported by
14480at least qmail and postfix, where each file in a special directory
14481contains exactly one mail.
14482
14483Keywords:
14484
14485@table @code
14486@item :path
14487The name of the directory where the mails are stored. The default is
14488taken from the @env{MAILDIR} environment variable or
14489@file{~/Maildir/}.
14490@item :subdirs
14491The subdirectories of the Maildir. The default is
14492@samp{("new" "cur")}.
14493
14494@c If you sometimes look at your mail through a pop3 daemon before fetching
14495@c them with Gnus, you may also have to fetch your mails from the
14496@c @code{cur} directory inside the maildir, like in the first example
14497@c below.
14498
14499You can also get mails from remote hosts (because maildirs don't suffer
14500from locking problems).
14501
14502@end table
14503
14504Two example maildir mail sources:
14505
14506@lisp
14507(maildir :path "/home/user-name/Maildir/"
14508 :subdirs ("cur" "new"))
14509@end lisp
14510
14511@lisp
14512(maildir :path "/user@@remotehost.org:~/Maildir/"
14513 :subdirs ("new"))
14514@end lisp
14515
14516@item imap
14517Get mail from a @acronym{IMAP} server. If you don't want to use
14518@acronym{IMAP} as intended, as a network mail reading protocol (ie
14519with nnimap), for some reason or other, Gnus let you treat it similar
14520to a @acronym{POP} server and fetches articles from a given
14521@acronym{IMAP} mailbox. @xref{IMAP}, for more information.
14522
14523Note that for the Kerberos, GSSAPI, @acronym{TLS}/@acronym{SSL} and STARTTLS support you
14524may need external programs and libraries, @xref{IMAP}.
14525
14526Keywords:
14527
14528@table @code
14529@item :server
14530The name of the @acronym{IMAP} server. The default is taken from the
14531@env{MAILHOST} environment variable.
14532
14533@item :port
14534The port number of the @acronym{IMAP} server. The default is @samp{143}, or
14535@samp{993} for @acronym{TLS}/@acronym{SSL} connections.
14536
14537@item :user
14538The user name to give to the @acronym{IMAP} server. The default is the login
14539name.
14540
14541@item :password
14542The password to give to the @acronym{IMAP} server. If not specified, the user is
14543prompted.
14544
14545@item :stream
14546What stream to use for connecting to the server, this is one of the
14547symbols in @code{imap-stream-alist}. Right now, this means
14548@samp{gssapi}, @samp{kerberos4}, @samp{starttls}, @samp{tls},
14549@samp{ssl}, @samp{shell} or the default @samp{network}.
14550
14551@item :authentication
14552Which authenticator to use for authenticating to the server, this is
14553one of the symbols in @code{imap-authenticator-alist}. Right now,
14554this means @samp{gssapi}, @samp{kerberos4}, @samp{digest-md5},
14555@samp{cram-md5}, @samp{anonymous} or the default @samp{login}.
14556
14557@item :program
14558When using the `shell' :stream, the contents of this variable is
14559mapped into the @code{imap-shell-program} variable. This should be a
14560@code{format}-like string (or list of strings). Here's an example:
14561
14562@example
14563ssh %s imapd
14564@end example
14565
01c52d31
MB
14566Make sure nothing is interfering with the output of the program, e.g.,
14567don't forget to redirect the error output to the void. The valid format
14568specifier characters are:
4009494e
GM
14569
14570@table @samp
14571@item s
14572The name of the server.
14573
14574@item l
14575User name from @code{imap-default-user}.
14576
14577@item p
14578The port number of the server.
14579@end table
14580
14581The values used for these specs are taken from the values you give the
14582corresponding keywords.
14583
14584@item :mailbox
14585The name of the mailbox to get mail from. The default is @samp{INBOX}
d55fe5bb 14586which normally is the mailbox which receives incoming mail.
4009494e
GM
14587
14588@item :predicate
14589The predicate used to find articles to fetch. The default, @samp{UNSEEN
14590UNDELETED}, is probably the best choice for most people, but if you
14591sometimes peek in your mailbox with a @acronym{IMAP} client and mark some
14592articles as read (or; SEEN) you might want to set this to @samp{1:*}.
14593Then all articles in the mailbox is fetched, no matter what. For a
14594complete list of predicates, see RFC 2060 section 6.4.4.
14595
14596@item :fetchflag
14597How to flag fetched articles on the server, the default @samp{\Deleted}
14598will mark them as deleted, an alternative would be @samp{\Seen} which
14599would simply mark them as read. These are the two most likely choices,
14600but more flags are defined in RFC 2060 section 2.3.2.
14601
14602@item :dontexpunge
14603If non-@code{nil}, don't remove all articles marked as deleted in the
14604mailbox after finishing the fetch.
14605
14606@end table
14607
14608An example @acronym{IMAP} mail source:
14609
14610@lisp
14611(imap :server "mail.mycorp.com"
14612 :stream kerberos4
14613 :fetchflag "\\Seen")
14614@end lisp
14615
14616@item webmail
14617Get mail from a webmail server, such as @uref{http://www.hotmail.com/},
14618@uref{http://webmail.netscape.com/}, @uref{http://www.netaddress.com/},
14619@uref{http://mail.yahoo.com/}.
14620
14621NOTE: Webmail largely depends on cookies. A "one-line-cookie" patch is
14622required for url "4.0pre.46".
14623
14624WARNING: Mails may be lost. NO WARRANTY.
14625
14626Keywords:
14627
14628@table @code
14629@item :subtype
14630The type of the webmail server. The default is @code{hotmail}. The
14631alternatives are @code{netscape}, @code{netaddress}, @code{my-deja}.
14632
14633@item :user
14634The user name to give to the webmail server. The default is the login
14635name.
14636
14637@item :password
14638The password to give to the webmail server. If not specified, the user is
14639prompted.
14640
14641@item :dontexpunge
14642If non-@code{nil}, only fetch unread articles and don't move them to
14643trash folder after finishing the fetch.
14644
14645@end table
14646
14647An example webmail source:
14648
14649@lisp
14650(webmail :subtype 'hotmail
14651 :user "user-name"
14652 :password "secret")
14653@end lisp
a1da1e37
MB
14654
14655@item group
14656Get the actual mail source from the @code{mail-source} group parameter,
14657@xref{Group Parameters}.
14658
4009494e
GM
14659@end table
14660
14661@table @dfn
14662@item Common Keywords
14663Common keywords can be used in any type of mail source.
14664
14665Keywords:
14666
14667@table @code
14668@item :plugged
14669If non-@code{nil}, fetch the mail even when Gnus is unplugged. If you
14670use directory source to get mail, you can specify it as in this
14671example:
14672
14673@lisp
14674(setq mail-sources
14675 '((directory :path "/home/pavel/.Spool/"
14676 :suffix ""
14677 :plugged t)))
14678@end lisp
14679
14680Gnus will then fetch your mail even when you are unplugged. This is
14681useful when you use local mail and news.
14682
14683@end table
14684@end table
14685
14686@subsubsection Function Interface
14687
14688Some of the above keywords specify a Lisp function to be executed.
14689For each keyword @code{:foo}, the Lisp variable @code{foo} is bound to
14690the value of the keyword while the function is executing. For example,
14691consider the following mail-source setting:
14692
14693@lisp
14694(setq mail-sources '((pop :user "jrl"
14695 :server "pophost" :function fetchfunc)))
14696@end lisp
14697
14698While the function @code{fetchfunc} is executing, the symbol @code{user}
14699is bound to @code{"jrl"}, and the symbol @code{server} is bound to
14700@code{"pophost"}. The symbols @code{port}, @code{password},
14701@code{program}, @code{prescript}, @code{postscript}, @code{function},
14702and @code{authentication} are also bound (to their default values).
14703
14704See above for a list of keywords for each type of mail source.
14705
14706
14707@node Mail Source Customization
14708@subsubsection Mail Source Customization
14709
14710The following is a list of variables that influence how the mail is
14711fetched. You would normally not need to set or change any of these
14712variables.
14713
14714@table @code
14715@item mail-source-crash-box
14716@vindex mail-source-crash-box
14717File where mail will be stored while processing it. The default is@*
14718@file{~/.emacs-mail-crash-box}.
14719
37a68866 14720@cindex Incoming*
4009494e
GM
14721@item mail-source-delete-incoming
14722@vindex mail-source-delete-incoming
14723If non-@code{nil}, delete incoming files after handling them. If
14724@code{t}, delete the files immediately, if @code{nil}, never delete any
14725files. If a positive number, delete files older than number of days
37a68866
MB
14726(the deletion will only happen when receiving new mail). You may also
14727set @code{mail-source-delete-incoming} to @code{nil} and call
4009494e 14728@code{mail-source-delete-old-incoming} from a hook or interactively.
37a68866
MB
14729@code{mail-source-delete-incoming} defaults to @code{2} in alpha Gnusae
14730and @code{10} in released Gnusae. @xref{Gnus Development}.
4009494e
GM
14731
14732@item mail-source-delete-old-incoming-confirm
14733@vindex mail-source-delete-old-incoming-confirm
14734If non-@code{nil}, ask for confirmation before deleting old incoming
14735files. This variable only applies when
14736@code{mail-source-delete-incoming} is a positive number.
14737
14738@item mail-source-ignore-errors
14739@vindex mail-source-ignore-errors
14740If non-@code{nil}, ignore errors when reading mail from a mail source.
14741
14742@item mail-source-directory
14743@vindex mail-source-directory
14744Directory where incoming mail source files (if any) will be stored. The
14745default is @file{~/Mail/}. At present, the only thing this is used for
14746is to say where the incoming files will be stored if the variable
14747@code{mail-source-delete-incoming} is @code{nil} or a number.
14748
14749@item mail-source-incoming-file-prefix
14750@vindex mail-source-incoming-file-prefix
14751Prefix for file name for storing incoming mail. The default is
14752@file{Incoming}, in which case files will end up with names like
14753@file{Incoming30630D_} or @file{Incoming298602ZD}. This is really only
14754relevant if @code{mail-source-delete-incoming} is @code{nil} or a
14755number.
14756
14757@item mail-source-default-file-modes
14758@vindex mail-source-default-file-modes
14759All new mail files will get this file mode. The default is 384.
14760
14761@item mail-source-movemail-program
14762@vindex mail-source-movemail-program
14763If non-@code{nil}, name of program for fetching new mail. If
14764@code{nil}, @code{movemail} in @var{exec-directory}.
14765
14766@end table
14767
14768
14769@node Fetching Mail
14770@subsubsection Fetching Mail
14771
14772@vindex mail-sources
4009494e
GM
14773The way to actually tell Gnus where to get new mail from is to set
14774@code{mail-sources} to a list of mail source specifiers
14775(@pxref{Mail Source Specifiers}).
14776
b890d447
MB
14777If this variable is @code{nil}, the mail back ends will never attempt to
14778fetch mail by themselves.
4009494e
GM
14779
14780If you want to fetch mail both from your local spool as well as a
14781@acronym{POP} mail server, you'd say something like:
14782
14783@lisp
14784(setq mail-sources
14785 '((file)
14786 (pop :server "pop3.mail.server"
14787 :password "secret")))
14788@end lisp
14789
14790Or, if you don't want to use any of the keyword defaults:
14791
14792@lisp
14793(setq mail-sources
14794 '((file :path "/var/spool/mail/user-name")
14795 (pop :server "pop3.mail.server"
14796 :user "user-name"
14797 :port "pop3"
14798 :password "secret")))
14799@end lisp
14800
14801
14802When you use a mail back end, Gnus will slurp all your mail from your
14803inbox and plonk it down in your home directory. Gnus doesn't move any
14804mail if you're not using a mail back end---you have to do a lot of magic
14805invocations first. At the time when you have finished drawing the
14806pentagram, lightened the candles, and sacrificed the goat, you really
14807shouldn't be too surprised when Gnus moves your mail.
14808
14809
14810
14811@node Mail Back End Variables
14812@subsection Mail Back End Variables
14813
14814These variables are (for the most part) pertinent to all the various
14815mail back ends.
14816
14817@table @code
14818@vindex nnmail-read-incoming-hook
14819@item nnmail-read-incoming-hook
14820The mail back ends all call this hook after reading new mail. You can
14821use this hook to notify any mail watch programs, if you want to.
14822
14823@vindex nnmail-split-hook
14824@item nnmail-split-hook
14825@findex gnus-article-decode-encoded-words
14826@cindex RFC 1522 decoding
14827@cindex RFC 2047 decoding
14828Hook run in the buffer where the mail headers of each message is kept
14829just before the splitting based on these headers is done. The hook is
14830free to modify the buffer contents in any way it sees fit---the buffer
14831is discarded after the splitting has been done, and no changes performed
14832in the buffer will show up in any files.
14833@code{gnus-article-decode-encoded-words} is one likely function to add
14834to this hook.
14835
14836@vindex nnmail-pre-get-new-mail-hook
14837@vindex nnmail-post-get-new-mail-hook
14838@item nnmail-pre-get-new-mail-hook
14839@itemx nnmail-post-get-new-mail-hook
14840These are two useful hooks executed when treating new incoming
14841mail---@code{nnmail-pre-get-new-mail-hook} (is called just before
14842starting to handle the new mail) and
14843@code{nnmail-post-get-new-mail-hook} (is called when the mail handling
14844is done). Here's and example of using these two hooks to change the
14845default file modes the new mail files get:
14846
14847@lisp
14848(add-hook 'nnmail-pre-get-new-mail-hook
14849 (lambda () (set-default-file-modes 511)))
14850
14851(add-hook 'nnmail-post-get-new-mail-hook
14852 (lambda () (set-default-file-modes 551)))
14853@end lisp
14854
14855@item nnmail-use-long-file-names
14856@vindex nnmail-use-long-file-names
14857If non-@code{nil}, the mail back ends will use long file and directory
14858names. Groups like @samp{mail.misc} will end up in directories
14859(assuming use of @code{nnml} back end) or files (assuming use of
14860@code{nnfolder} back end) like @file{mail.misc}. If it is @code{nil},
14861the same group will end up in @file{mail/misc}.
14862
14863@item nnmail-delete-file-function
14864@vindex nnmail-delete-file-function
14865@findex delete-file
14866Function called to delete files. It is @code{delete-file} by default.
14867
14868@item nnmail-cache-accepted-message-ids
14869@vindex nnmail-cache-accepted-message-ids
14870If non-@code{nil}, put the @code{Message-ID}s of articles imported into
14871the back end (via @code{Gcc}, for instance) into the mail duplication
14872discovery cache. The default is @code{nil}.
14873
14874@item nnmail-cache-ignore-groups
14875@vindex nnmail-cache-ignore-groups
14876This can be a regular expression or a list of regular expressions.
14877Group names that match any of the regular expressions will never be
14878recorded in the @code{Message-ID} cache.
14879
14880This can be useful, for example, when using Fancy Splitting
14881(@pxref{Fancy Mail Splitting}) together with the function
14882@code{nnmail-split-fancy-with-parent}.
14883
14884@end table
14885
14886
14887@node Fancy Mail Splitting
14888@subsection Fancy Mail Splitting
14889@cindex mail splitting
14890@cindex fancy mail splitting
14891
14892@vindex nnmail-split-fancy
14893@findex nnmail-split-fancy
14894If the rather simple, standard method for specifying how to split mail
14895doesn't allow you to do what you want, you can set
14896@code{nnmail-split-methods} to @code{nnmail-split-fancy}. Then you can
14897play with the @code{nnmail-split-fancy} variable.
14898
14899Let's look at an example value of this variable first:
14900
14901@lisp
14902;; @r{Messages from the mailer daemon are not crossposted to any of}
14903;; @r{the ordinary groups. Warnings are put in a separate group}
14904;; @r{from real errors.}
14905(| ("from" mail (| ("subject" "warn.*" "mail.warning")
14906 "mail.misc"))
14907 ;; @r{Non-error messages are crossposted to all relevant}
14908 ;; @r{groups, but we don't crosspost between the group for the}
14909 ;; @r{(ding) list and the group for other (ding) related mail.}
14910 (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
14911 ("subject" "ding" "ding.misc"))
14912 ;; @r{Other mailing lists@dots{}}
14913 (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
14914 (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
14915 ;; @r{Both lists below have the same suffix, so prevent}
14916 ;; @r{cross-posting to mkpkg.list of messages posted only to}
14917 ;; @r{the bugs- list, but allow cross-posting when the}
14918 ;; @r{message was really cross-posted.}
14919 (any "bugs-mypackage@@somewhere" "mypkg.bugs")
14920 (any "mypackage@@somewhere" - "bugs-mypackage" "mypkg.list")
14921 ;; @r{People@dots{}}
14922 (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
14923 ;; @r{Unmatched mail goes to the catch all group.}
14924 "misc.misc")
14925@end lisp
14926
14927This variable has the format of a @dfn{split}. A split is a
14928(possibly) recursive structure where each split may contain other
14929splits. Here are the possible split syntaxes:
14930
14931@table @code
14932
14933@item group
14934If the split is a string, that will be taken as a group name. Normal
14935regexp match expansion will be done. See below for examples.
14936
14937@c Don't fold this line.
14938@item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split} [@var{invert-partial}])
14939The split can be a list containing at least three elements. If the
14940first element @var{field} (a regexp matching a header) contains
14941@var{value} (also a regexp) then store the message as specified by
14942@var{split}.
14943
14944If @var{restrict} (yet another regexp) matches some string after
14945@var{field} and before the end of the matched @var{value}, the
14946@var{split} is ignored. If none of the @var{restrict} clauses match,
14947@var{split} is processed.
14948
14949The last element @var{invert-partial} is optional. If it is
14950non-@code{nil}, the match-partial-words behavior controlled by the
14951variable @code{nnmail-split-fancy-match-partial-words} (see below) is
14952be inverted. (New in Gnus 5.10.7)
14953
14954@item (| @var{split} @dots{})
14955If the split is a list, and the first element is @code{|} (vertical
14956bar), then process each @var{split} until one of them matches. A
14957@var{split} is said to match if it will cause the mail message to be
14958stored in one or more groups.
14959
14960@item (& @var{split} @dots{})
14961If the split is a list, and the first element is @code{&}, then
14962process all @var{split}s in the list.
14963
14964@item junk
14965If the split is the symbol @code{junk}, then don't save (i.e., delete)
14966this message. Use with extreme caution.
14967
14968@item (: @var{function} @var{arg1} @var{arg2} @dots{})
14969If the split is a list, and the first element is @samp{:}, then the
14970second element will be called as a function with @var{args} given as
14971arguments. The function should return a @var{split}.
14972
14973@cindex body split
14974For instance, the following function could be used to split based on the
14975body of the messages:
14976
14977@lisp
14978(defun split-on-body ()
14979 (save-excursion
14980 (save-restriction
14981 (widen)
14982 (goto-char (point-min))
14983 (when (re-search-forward "Some.*string" nil t)
14984 "string.group"))))
14985@end lisp
14986
b890d447
MB
14987The buffer is narrowed to the header of the message in question when
14988@var{function} is run. That's why @code{(widen)} needs to be called
14989after @code{save-excursion} and @code{save-restriction} in the example
23f87bed 14990above. Also note that with the nnimap backend, message bodies will
4009494e
GM
14991not be downloaded by default. You need to set
14992@code{nnimap-split-download-body} to @code{t} to do that
14993(@pxref{Splitting in IMAP}).
14994
14995@item (! @var{func} @var{split})
14996If the split is a list, and the first element is @code{!}, then
14997@var{split} will be processed, and @var{func} will be called as a
14998function with the result of @var{split} as argument. @var{func}
14999should return a split.
15000
15001@item nil
15002If the split is @code{nil}, it is ignored.
15003
15004@end table
15005
15006In these splits, @var{field} must match a complete field name.
15007
15008Normally, @var{value} in these splits must match a complete @emph{word}
15009according to the fundamental mode syntax table. In other words, all
15010@var{value}'s will be implicitly surrounded by @code{\<...\>} markers,
15011which are word delimiters. Therefore, if you use the following split,
15012for example,
15013
15014@example
15015(any "joe" "joemail")
15016@end example
15017
15018@noindent
15019messages sent from @samp{joedavis@@foo.org} will normally not be filed
15020in @samp{joemail}. If you want to alter this behavior, you can use any
15021of the following three ways:
15022
15023@enumerate
15024@item
15025@vindex nnmail-split-fancy-match-partial-words
15026You can set the @code{nnmail-split-fancy-match-partial-words} variable
15027to non-@code{nil} in order to ignore word boundaries and instead the
15028match becomes more like a grep. This variable controls whether partial
15029words are matched during fancy splitting. The default value is
15030@code{nil}.
15031
15032Note that it influences all @var{value}'s in your split rules.
15033
15034@item
15035@var{value} beginning with @code{.*} ignores word boundaries in front of
15036a word. Similarly, if @var{value} ends with @code{.*}, word boundaries
15037in the rear of a word will be ignored. For example, the @var{value}
15038@code{"@@example\\.com"} does not match @samp{foo@@example.com} but
15039@code{".*@@example\\.com"} does.
15040
15041@item
15042You can set the @var{invert-partial} flag in your split rules of the
15043@samp{(@var{field} @var{value} @dots{})} types, aforementioned in this
15044section. If the flag is set, word boundaries on both sides of a word
15045are ignored even if @code{nnmail-split-fancy-match-partial-words} is
15046@code{nil}. Contrarily, if the flag is set, word boundaries are not
15047ignored even if @code{nnmail-split-fancy-match-partial-words} is
15048non-@code{nil}. (New in Gnus 5.10.7)
15049@end enumerate
15050
15051@vindex nnmail-split-abbrev-alist
15052@var{field} and @var{value} can also be Lisp symbols, in that case
15053they are expanded as specified by the variable
15054@code{nnmail-split-abbrev-alist}. This is an alist of cons cells,
15055where the @sc{car} of a cell contains the key, and the @sc{cdr}
15056contains the associated value. Predefined entries in
15057@code{nnmail-split-abbrev-alist} include:
15058
15059@table @code
15060@item from
15061Matches the @samp{From}, @samp{Sender} and @samp{Resent-From} fields.
15062@item to
15063Matches the @samp{To}, @samp{Cc}, @samp{Apparently-To},
15064@samp{Resent-To} and @samp{Resent-Cc} fields.
15065@item any
15066Is the union of the @code{from} and @code{to} entries.
15067@end table
15068
15069@vindex nnmail-split-fancy-syntax-table
15070@code{nnmail-split-fancy-syntax-table} is the syntax table in effect
15071when all this splitting is performed.
15072
15073If you want to have Gnus create groups dynamically based on some
15074information in the headers (i.e., do @code{replace-match}-like
15075substitutions in the group names), you can say things like:
15076
15077@example
15078(any "debian-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
15079@end example
15080
15081In this example, messages sent to @samp{debian-foo@@lists.debian.org}
15082will be filed in @samp{mail.debian.foo}.
15083
15084If the string contains the element @samp{\&}, then the previously
15085matched string will be substituted. Similarly, the elements @samp{\\1}
15086up to @samp{\\9} will be substituted with the text matched by the
15087groupings 1 through 9.
15088
15089@vindex nnmail-split-lowercase-expanded
15090Where @code{nnmail-split-lowercase-expanded} controls whether the
15091lowercase of the matched string should be used for the substitution.
15092Setting it as non-@code{nil} is useful to avoid the creation of multiple
15093groups when users send to an address using different case
15094(i.e. mailing-list@@domain vs Mailing-List@@Domain). The default value
15095is @code{t}.
15096
15097@findex nnmail-split-fancy-with-parent
15098@code{nnmail-split-fancy-with-parent} is a function which allows you to
15099split followups into the same groups their parents are in. Sometimes
15100you can't make splitting rules for all your mail. For example, your
15101boss might send you personal mail regarding different projects you are
15102working on, and as you can't tell your boss to put a distinguishing
15103string into the subject line, you have to resort to manually moving the
15104messages into the right group. With this function, you only have to do
15105it once per thread.
15106
15107To use this feature, you have to set @code{nnmail-treat-duplicates}
15108and @code{nnmail-cache-accepted-message-ids} to a non-@code{nil}
15109value. And then you can include @code{nnmail-split-fancy-with-parent}
15110using the colon feature, like so:
15111@lisp
15112(setq nnmail-treat-duplicates 'warn ; @r{or @code{delete}}
15113 nnmail-cache-accepted-message-ids t
15114 nnmail-split-fancy
15115 '(| (: nnmail-split-fancy-with-parent)
15116 ;; @r{other splits go here}
15117 ))
15118@end lisp
15119
15120This feature works as follows: when @code{nnmail-treat-duplicates} is
15121non-@code{nil}, Gnus records the message id of every message it sees
15122in the file specified by the variable
15123@code{nnmail-message-id-cache-file}, together with the group it is in
15124(the group is omitted for non-mail messages). When mail splitting is
15125invoked, the function @code{nnmail-split-fancy-with-parent} then looks
15126at the References (and In-Reply-To) header of each message to split
15127and searches the file specified by @code{nnmail-message-id-cache-file}
15128for the message ids. When it has found a parent, it returns the
15129corresponding group name unless the group name matches the regexp
15130@code{nnmail-split-fancy-with-parent-ignore-groups}. It is
15131recommended that you set @code{nnmail-message-id-cache-length} to a
15132somewhat higher number than the default so that the message ids are
15133still in the cache. (A value of 5000 appears to create a file some
15134300 kBytes in size.)
15135@vindex nnmail-cache-accepted-message-ids
15136When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus
15137also records the message ids of moved articles, so that the followup
15138messages goes into the new group.
15139
15140Also see the variable @code{nnmail-cache-ignore-groups} if you don't
15141want certain groups to be recorded in the cache. For example, if all
15142outgoing messages are written to an ``outgoing'' group, you could set
15143@code{nnmail-cache-ignore-groups} to match that group name.
15144Otherwise, answers to all your messages would end up in the
15145``outgoing'' group.
15146
15147
15148@node Group Mail Splitting
15149@subsection Group Mail Splitting
15150@cindex mail splitting
15151@cindex group mail splitting
15152
15153@findex gnus-group-split
15154If you subscribe to dozens of mailing lists but you don't want to
15155maintain mail splitting rules manually, group mail splitting is for you.
15156You just have to set @code{to-list} and/or @code{to-address} in group
15157parameters or group customization and set @code{nnmail-split-methods} to
15158@code{gnus-group-split}. This splitting function will scan all groups
15159for those parameters and split mail accordingly, i.e., messages posted
15160from or to the addresses specified in the parameters @code{to-list} or
15161@code{to-address} of a mail group will be stored in that group.
15162
15163Sometimes, mailing lists have multiple addresses, and you may want mail
15164splitting to recognize them all: just set the @code{extra-aliases} group
15165parameter to the list of additional addresses and it's done. If you'd
15166rather use a regular expression, set @code{split-regexp}.
15167
15168All these parameters in a group will be used to create an
15169@code{nnmail-split-fancy} split, in which the @var{field} is @samp{any},
15170the @var{value} is a single regular expression that matches
15171@code{to-list}, @code{to-address}, all of @code{extra-aliases} and all
15172matches of @code{split-regexp}, and the @var{split} is the name of the
15173group. @var{restrict}s are also supported: just set the
15174@code{split-exclude} parameter to a list of regular expressions.
15175
15176If you can't get the right split to be generated using all these
15177parameters, or you just need something fancier, you can set the
15178parameter @code{split-spec} to an @code{nnmail-split-fancy} split. In
15179this case, all other aforementioned parameters will be ignored by
15180@code{gnus-group-split}. In particular, @code{split-spec} may be set to
15181@code{nil}, in which case the group will be ignored by
15182@code{gnus-group-split}.
15183
15184@vindex gnus-group-split-default-catch-all-group
15185@code{gnus-group-split} will do cross-posting on all groups that match,
15186by defining a single @code{&} fancy split containing one split for each
15187group. If a message doesn't match any split, it will be stored in the
15188group named in @code{gnus-group-split-default-catch-all-group}, unless
15189some group has @code{split-spec} set to @code{catch-all}, in which case
15190that group is used as the catch-all group. Even though this variable is
15191often used just to name a group, it may also be set to an arbitrarily
15192complex fancy split (after all, a group name is a fancy split), and this
15193may be useful to split mail that doesn't go to any mailing list to
15194personal mail folders. Note that this fancy split is added as the last
15195element of a @code{|} split list that also contains a @code{&} split
15196with the rules extracted from group parameters.
15197
15198It's time for an example. Assume the following group parameters have
15199been defined:
15200
15201@example
15202nnml:mail.bar:
15203((to-address . "bar@@femail.com")
15204 (split-regexp . ".*@@femail\\.com"))
15205nnml:mail.foo:
15206((to-list . "foo@@nowhere.gov")
15207 (extra-aliases "foo@@localhost" "foo-redist@@home")
15208 (split-exclude "bugs-foo" "rambling-foo")
15209 (admin-address . "foo-request@@nowhere.gov"))
15210nnml:mail.others:
15211((split-spec . catch-all))
15212@end example
15213
15214Setting @code{nnmail-split-methods} to @code{gnus-group-split} will
15215behave as if @code{nnmail-split-fancy} had been selected and variable
15216@code{nnmail-split-fancy} had been set as follows:
15217
15218@lisp
15219(| (& (any "\\(bar@@femail\\.com\\|.*@@femail\\.com\\)" "mail.bar")
15220 (any "\\(foo@@nowhere\\.gov\\|foo@@localhost\\|foo-redist@@home\\)"
15221 - "bugs-foo" - "rambling-foo" "mail.foo"))
15222 "mail.others")
15223@end lisp
15224
15225@findex gnus-group-split-fancy
15226If you'd rather not use group splitting for all your mail groups, you
15227may use it for only some of them, by using @code{nnmail-split-fancy}
15228splits like this:
15229
15230@lisp
15231(: gnus-group-split-fancy @var{groups} @var{no-crosspost} @var{catch-all})
15232@end lisp
15233
15234@var{groups} may be a regular expression or a list of group names whose
15235parameters will be scanned to generate the output split.
15236@var{no-crosspost} can be used to disable cross-posting; in this case, a
15237single @code{|} split will be output. @var{catch-all} is the fall back
15238fancy split, used like @code{gnus-group-split-default-catch-all-group}.
15239If @var{catch-all} is @code{nil}, or if @code{split-regexp} matches the
15240empty string in any selected group, no catch-all split will be issued.
15241Otherwise, if some group has @code{split-spec} set to @code{catch-all},
15242this group will override the value of the @var{catch-all} argument.
15243
15244@findex gnus-group-split-setup
15245Unfortunately, scanning all groups and their parameters can be quite
15246slow, especially considering that it has to be done for every message.
15247But don't despair! The function @code{gnus-group-split-setup} can be
15248used to enable @code{gnus-group-split} in a much more efficient way. It
15249sets @code{nnmail-split-methods} to @code{nnmail-split-fancy} and sets
15250@code{nnmail-split-fancy} to the split produced by
15251@code{gnus-group-split-fancy}. Thus, the group parameters are only
15252scanned once, no matter how many messages are split.
15253
15254@findex gnus-group-split-update
15255However, if you change group parameters, you'd have to update
15256@code{nnmail-split-fancy} manually. You can do it by running
15257@code{gnus-group-split-update}. If you'd rather have it updated
15258automatically, just tell @code{gnus-group-split-setup} to do it for
15259you. For example, add to your @file{~/.gnus.el}:
15260
15261@lisp
15262(gnus-group-split-setup @var{auto-update} @var{catch-all})
15263@end lisp
15264
15265If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
15266will be added to @code{nnmail-pre-get-new-mail-hook}, so you won't ever
15267have to worry about updating @code{nnmail-split-fancy} again. If you
15268don't omit @var{catch-all} (it's optional, equivalent to @code{nil}),
15269@code{gnus-group-split-default-catch-all-group} will be set to its
15270value.
15271
15272@vindex gnus-group-split-updated-hook
15273Because you may want to change @code{nnmail-split-fancy} after it is set
15274by @code{gnus-group-split-update}, this function will run
15275@code{gnus-group-split-updated-hook} just before finishing.
15276
15277@node Incorporating Old Mail
15278@subsection Incorporating Old Mail
15279@cindex incorporating old mail
15280@cindex import old mail
15281
15282Most people have lots of old mail stored in various file formats. If
15283you have set up Gnus to read mail using one of the spiffy Gnus mail
15284back ends, you'll probably wish to have that old mail incorporated into
15285your mail groups.
15286
15287Doing so can be quite easy.
15288
15289To take an example: You're reading mail using @code{nnml}
15290(@pxref{Mail Spool}), and have set @code{nnmail-split-methods} to a
15291satisfactory value (@pxref{Splitting Mail}). You have an old Unix mbox
15292file filled with important, but old, mail. You want to move it into
15293your @code{nnml} groups.
15294
15295Here's how:
15296
15297@enumerate
15298@item
15299Go to the group buffer.
15300
15301@item
15302Type @kbd{G f} and give the file name to the mbox file when prompted to create an
15303@code{nndoc} group from the mbox file (@pxref{Foreign Groups}).
15304
15305@item
15306Type @kbd{SPACE} to enter the newly created group.
15307
15308@item
15309Type @kbd{M P b} to process-mark all articles in this group's buffer
15310(@pxref{Setting Process Marks}).
15311
15312@item
15313Type @kbd{B r} to respool all the process-marked articles, and answer
15314@samp{nnml} when prompted (@pxref{Mail Group Commands}).
15315@end enumerate
15316
15317All the mail messages in the mbox file will now also be spread out over
15318all your @code{nnml} groups. Try entering them and check whether things
15319have gone without a glitch. If things look ok, you may consider
15320deleting the mbox file, but I wouldn't do that unless I was absolutely
15321sure that all the mail has ended up where it should be.
15322
15323Respooling is also a handy thing to do if you're switching from one mail
15324back end to another. Just respool all the mail in the old mail groups
15325using the new mail back end.
15326
15327
15328@node Expiring Mail
15329@subsection Expiring Mail
15330@cindex article expiry
15331@cindex expiring mail
15332
15333Traditional mail readers have a tendency to remove mail articles when
15334you mark them as read, in some way. Gnus takes a fundamentally
15335different approach to mail reading.
15336
15337Gnus basically considers mail just to be news that has been received in
15338a rather peculiar manner. It does not think that it has the power to
15339actually change the mail, or delete any mail messages. If you enter a
15340mail group, and mark articles as ``read'', or kill them in some other
15341fashion, the mail articles will still exist on the system. I repeat:
15342Gnus will not delete your old, read mail. Unless you ask it to, of
15343course.
15344
15345To make Gnus get rid of your unwanted mail, you have to mark the
15346articles as @dfn{expirable}. (With the default key bindings, this means
15347that you have to type @kbd{E}.) This does not mean that the articles
15348will disappear right away, however. In general, a mail article will be
15349deleted from your system if, 1) it is marked as expirable, AND 2) it is
15350more than one week old. If you do not mark an article as expirable, it
15351will remain on your system until hell freezes over. This bears
15352repeating one more time, with some spurious capitalizations: IF you do
15353NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
15354
15355You do not have to mark articles as expirable by hand. Gnus provides
15356two features, called ``auto-expire'' and ``total-expire'', that can help you
15357with this. In a nutshell, ``auto-expire'' means that Gnus hits @kbd{E}
15358for you when you select an article. And ``total-expire'' means that Gnus
15359considers all articles as expirable that are read. So, in addition to
15360the articles marked @samp{E}, also the articles marked @samp{r},
15361@samp{R}, @samp{O}, @samp{K}, @samp{Y} and so on are considered
15362expirable.
15363
15364When should either auto-expire or total-expire be used? Most people
15365who are subscribed to mailing lists split each list into its own group
15366and then turn on auto-expire or total-expire for those groups.
15367(@xref{Splitting Mail}, for more information on splitting each list
15368into its own group.)
15369
15370Which one is better, auto-expire or total-expire? It's not easy to
15371answer. Generally speaking, auto-expire is probably faster. Another
15372advantage of auto-expire is that you get more marks to work with: for
15373the articles that are supposed to stick around, you can still choose
15374between tick and dormant and read marks. But with total-expire, you
15375only have dormant and ticked to choose from. The advantage of
15376total-expire is that it works well with adaptive scoring (@pxref{Adaptive
15377Scoring}). Auto-expire works with normal scoring but not with adaptive
15378scoring.
15379
15380@vindex gnus-auto-expirable-newsgroups
15381Groups that match the regular expression
15382@code{gnus-auto-expirable-newsgroups} will have all articles that you
15383read marked as expirable automatically. All articles marked as
15384expirable have an @samp{E} in the first column in the summary buffer.
15385
15386By default, if you have auto expiry switched on, Gnus will mark all the
15387articles you read as expirable, no matter if they were read or unread
15388before. To avoid having articles marked as read marked as expirable
15389automatically, you can put something like the following in your
15390@file{~/.gnus.el} file:
15391
15392@vindex gnus-mark-article-hook
15393@lisp
15394(remove-hook 'gnus-mark-article-hook
15395 'gnus-summary-mark-read-and-unread-as-read)
15396(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
15397@end lisp
15398
15399Note that making a group auto-expirable doesn't mean that all read
15400articles are expired---only the articles marked as expirable
15401will be expired. Also note that using the @kbd{d} command won't make
15402articles expirable---only semi-automatic marking of articles as read will
15403mark the articles as expirable in auto-expirable groups.
15404
15405Let's say you subscribe to a couple of mailing lists, and you want the
15406articles you have read to disappear after a while:
15407
15408@lisp
15409(setq gnus-auto-expirable-newsgroups
15410 "mail.nonsense-list\\|mail.nice-list")
15411@end lisp
15412
15413Another way to have auto-expiry happen is to have the element
15414@code{auto-expire} in the group parameters of the group.
15415
15416If you use adaptive scoring (@pxref{Adaptive Scoring}) and
15417auto-expiring, you'll have problems. Auto-expiring and adaptive scoring
15418don't really mix very well.
15419
15420@vindex nnmail-expiry-wait
15421The @code{nnmail-expiry-wait} variable supplies the default time an
15422expirable article has to live. Gnus starts counting days from when the
15423message @emph{arrived}, not from when it was sent. The default is seven
15424days.
15425
15426Gnus also supplies a function that lets you fine-tune how long articles
15427are to live, based on what group they are in. Let's say you want to
15428have one month expiry period in the @samp{mail.private} group, a one day
15429expiry period in the @samp{mail.junk} group, and a six day expiry period
15430everywhere else:
15431
15432@vindex nnmail-expiry-wait-function
15433@lisp
15434(setq nnmail-expiry-wait-function
15435 (lambda (group)
15436 (cond ((string= group "mail.private")
15437 31)
15438 ((string= group "mail.junk")
15439 1)
15440 ((string= group "important")
15441 'never)
15442 (t
15443 6))))
15444@end lisp
15445
15446The group names this function is fed are ``unadorned'' group
15447names---no @samp{nnml:} prefixes and the like.
15448
15449The @code{nnmail-expiry-wait} variable and
15450@code{nnmail-expiry-wait-function} function can either be a number (not
15451necessarily an integer) or one of the symbols @code{immediate} or
15452@code{never}.
15453
15454You can also use the @code{expiry-wait} group parameter to selectively
15455change the expiry period (@pxref{Group Parameters}).
15456
15457@vindex nnmail-expiry-target
15458The normal action taken when expiring articles is to delete them.
15459However, in some circumstances it might make more sense to move them
15460to other groups instead of deleting them. The variable
15461@code{nnmail-expiry-target} (and the @code{expiry-target} group
15462parameter) controls this. The variable supplies a default value for
15463all groups, which can be overridden for specific groups by the group
15464parameter. default value is @code{delete}, but this can also be a
15465string (which should be the name of the group the message should be
15466moved to), or a function (which will be called in a buffer narrowed to
15467the message in question, and with the name of the group being moved
15468from as its parameter) which should return a target---either a group
15469name or @code{delete}.
15470
15471Here's an example for specifying a group name:
15472@lisp
15473(setq nnmail-expiry-target "nnml:expired")
15474@end lisp
15475
15476@findex nnmail-fancy-expiry-target
15477@vindex nnmail-fancy-expiry-targets
15478Gnus provides a function @code{nnmail-fancy-expiry-target} which will
15479expire mail to groups according to the variable
15480@code{nnmail-fancy-expiry-targets}. Here's an example:
15481
15482@lisp
15483 (setq nnmail-expiry-target 'nnmail-fancy-expiry-target
15484 nnmail-fancy-expiry-targets
15485 '((to-from "boss" "nnfolder:Work")
15486 ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
15487 ("from" ".*" "nnfolder:Archive-%Y")))
15488@end lisp
15489
15490With this setup, any mail that has @code{IMPORTANT} in its Subject
15491header and was sent in the year @code{YYYY} and month @code{MMM}, will
15492get expired to the group @code{nnfolder:IMPORTANT.YYYY.MMM}. If its
15493From or To header contains the string @code{boss}, it will get expired
15494to @code{nnfolder:Work}. All other mail will get expired to
15495@code{nnfolder:Archive-YYYY}.
15496
15497@vindex nnmail-keep-last-article
15498If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
15499expire the final article in a mail newsgroup. This is to make life
15500easier for procmail users.
15501
15502@vindex gnus-total-expirable-newsgroups
15503By the way: That line up there, about Gnus never expiring non-expirable
15504articles, is a lie. If you put @code{total-expire} in the group
15505parameters, articles will not be marked as expirable, but all read
15506articles will be put through the expiry process. Use with extreme
15507caution. Even more dangerous is the
15508@code{gnus-total-expirable-newsgroups} variable. All groups that match
15509this regexp will have all read articles put through the expiry process,
15510which means that @emph{all} old mail articles in the groups in question
15511will be deleted after a while. Use with extreme caution, and don't come
15512crying to me when you discover that the regexp you used matched the
15513wrong group and all your important mail has disappeared. Be a
15514@emph{man}! Or a @emph{woman}! Whatever you feel more comfortable
15515with! So there!
15516
15517Most people make most of their mail groups total-expirable, though.
15518
15519@vindex gnus-inhibit-user-auto-expire
15520If @code{gnus-inhibit-user-auto-expire} is non-@code{nil}, user marking
15521commands will not mark an article as expirable, even if the group has
15522auto-expire turned on.
15523
15524
15525@node Washing Mail
15526@subsection Washing Mail
15527@cindex mail washing
15528@cindex list server brain damage
15529@cindex incoming mail treatment
15530
15531Mailers and list servers are notorious for doing all sorts of really,
15532really stupid things with mail. ``Hey, RFC 822 doesn't explicitly
15533prohibit us from adding the string @code{wE aRe ElItE!!!!!1!!} to the
15534end of all lines passing through our server, so let's do that!!!!1!''
15535Yes, but RFC 822 wasn't designed to be read by morons. Things that were
15536considered to be self-evident were not discussed. So. Here we are.
15537
15538Case in point: The German version of Microsoft Exchange adds @samp{AW:
15539} to the subjects of replies instead of @samp{Re: }. I could pretend to
15540be shocked and dismayed by this, but I haven't got the energy. It is to
15541laugh.
15542
15543Gnus provides a plethora of functions for washing articles while
15544displaying them, but it might be nicer to do the filtering before
15545storing the mail to disk. For that purpose, we have three hooks and
15546various functions that can be put in these hooks.
15547
15548@table @code
15549@item nnmail-prepare-incoming-hook
15550@vindex nnmail-prepare-incoming-hook
15551This hook is called before doing anything with the mail and is meant for
15552grand, sweeping gestures. It is called in a buffer that contains all
15553the new, incoming mail. Functions to be used include:
15554
15555@table @code
15556@item nnheader-ms-strip-cr
15557@findex nnheader-ms-strip-cr
15558Remove trailing carriage returns from each line. This is default on
15559Emacs running on MS machines.
15560
15561@end table
15562
15563@item nnmail-prepare-incoming-header-hook
15564@vindex nnmail-prepare-incoming-header-hook
15565This hook is called narrowed to each header. It can be used when
15566cleaning up the headers. Functions that can be used include:
15567
15568@table @code
15569@item nnmail-remove-leading-whitespace
15570@findex nnmail-remove-leading-whitespace
15571Clear leading white space that ``helpful'' listservs have added to the
15572headers to make them look nice. Aaah.
15573
15574(Note that this function works on both the header on the body of all
15575messages, so it is a potentially dangerous function to use (if a body
15576of a message contains something that looks like a header line). So
15577rather than fix the bug, it is of course the right solution to make it
15578into a feature by documenting it.)
15579
15580@item nnmail-remove-list-identifiers
15581@findex nnmail-remove-list-identifiers
15582Some list servers add an identifier---for example, @samp{(idm)}---to the
15583beginning of all @code{Subject} headers. I'm sure that's nice for
15584people who use stone age mail readers. This function will remove
15585strings that match the @code{nnmail-list-identifiers} regexp, which can
15586also be a list of regexp. @code{nnmail-list-identifiers} may not contain
15587@code{\\(..\\)}.
15588
15589For instance, if you want to remove the @samp{(idm)} and the
15590@samp{nagnagnag} identifiers:
15591
15592@lisp
15593(setq nnmail-list-identifiers
15594 '("(idm)" "nagnagnag"))
15595@end lisp
15596
15597This can also be done non-destructively with
15598@code{gnus-list-identifiers}, @xref{Article Hiding}.
15599
15600@item nnmail-remove-tabs
15601@findex nnmail-remove-tabs
15602Translate all @samp{TAB} characters into @samp{SPACE} characters.
15603
01c52d31
MB
15604@item nnmail-ignore-broken-references
15605@findex nnmail-ignore-broken-references
15606@c @findex nnmail-fix-eudora-headers
4009494e 15607@cindex Eudora
01c52d31
MB
15608@cindex Pegasus
15609Some mail user agents (e.g. Eudora and Pegasus) produce broken
15610@code{References} headers, but correct @code{In-Reply-To} headers. This
15611function will get rid of the @code{References} header if the headers
15612contain a line matching the regular expression
15613@code{nnmail-broken-references-mailers}.
4009494e
GM
15614
15615@end table
15616
15617@item nnmail-prepare-incoming-message-hook
15618@vindex nnmail-prepare-incoming-message-hook
15619This hook is called narrowed to each message. Functions to be used
15620include:
15621
15622@table @code
15623@item article-de-quoted-unreadable
15624@findex article-de-quoted-unreadable
15625Decode Quoted Readable encoding.
15626
15627@end table
15628@end table
15629
15630
15631@node Duplicates
15632@subsection Duplicates
15633
15634@vindex nnmail-treat-duplicates
15635@vindex nnmail-message-id-cache-length
15636@vindex nnmail-message-id-cache-file
15637@cindex duplicate mails
15638If you are a member of a couple of mailing lists, you will sometimes
15639receive two copies of the same mail. This can be quite annoying, so
15640@code{nnmail} checks for and treats any duplicates it might find. To do
15641this, it keeps a cache of old @code{Message-ID}s---
15642@code{nnmail-message-id-cache-file}, which is @file{~/.nnmail-cache} by
15643default. The approximate maximum number of @code{Message-ID}s stored
15644there is controlled by the @code{nnmail-message-id-cache-length}
15645variable, which is 1000 by default. (So 1000 @code{Message-ID}s will be
15646stored.) If all this sounds scary to you, you can set
15647@code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
15648default), and @code{nnmail} won't delete duplicate mails. Instead it
15649will insert a warning into the head of the mail saying that it thinks
15650that this is a duplicate of a different message.
15651
15652This variable can also be a function. If that's the case, the function
15653will be called from a buffer narrowed to the message in question with
15654the @code{Message-ID} as a parameter. The function must return either
15655@code{nil}, @code{warn}, or @code{delete}.
15656
15657You can turn this feature off completely by setting the variable to
15658@code{nil}.
15659
15660If you want all the duplicate mails to be put into a special
15661@dfn{duplicates} group, you could do that using the normal mail split
15662methods:
15663
15664@lisp
15665(setq nnmail-split-fancy
15666 '(| ;; @r{Messages duplicates go to a separate group.}
15667 ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
15668 ;; @r{Message from daemons, postmaster, and the like to another.}
15669 (any mail "mail.misc")
15670 ;; @r{Other rules.}
15671 [...] ))
15672@end lisp
15673@noindent
15674Or something like:
15675@lisp
15676(setq nnmail-split-methods
15677 '(("duplicates" "^Gnus-Warning:.*duplicate")
15678 ;; @r{Other rules.}
15679 [...]))
15680@end lisp
15681
15682Here's a neat feature: If you know that the recipient reads her mail
15683with Gnus, and that she has @code{nnmail-treat-duplicates} set to
15684@code{delete}, you can send her as many insults as you like, just by
15685using a @code{Message-ID} of a mail that you know that she's already
15686received. Think of all the fun! She'll never see any of it! Whee!
15687
15688
15689@node Not Reading Mail
15690@subsection Not Reading Mail
15691
15692If you start using any of the mail back ends, they have the annoying
15693habit of assuming that you want to read mail with them. This might not
15694be unreasonable, but it might not be what you want.
15695
15696If you set @code{mail-sources} and @code{nnmail-spool-file} to
15697@code{nil}, none of the back ends will ever attempt to read incoming
15698mail, which should help.
15699
15700@vindex nnbabyl-get-new-mail
15701@vindex nnmbox-get-new-mail
15702@vindex nnml-get-new-mail
15703@vindex nnmh-get-new-mail
15704@vindex nnfolder-get-new-mail
15705This might be too much, if, for instance, you are reading mail quite
15706happily with @code{nnml} and just want to peek at some old Rmail
15707file you have stashed away with @code{nnbabyl}. All back ends have
15708variables called back-end-@code{get-new-mail}. If you want to disable
15709the @code{nnbabyl} mail reading, you edit the virtual server for the
15710group to have a setting where @code{nnbabyl-get-new-mail} to @code{nil}.
15711
15712All the mail back ends will call @code{nn}*@code{-prepare-save-mail-hook}
15713narrowed to the article to be saved before saving it when reading
15714incoming mail.
15715
15716
15717@node Choosing a Mail Back End
15718@subsection Choosing a Mail Back End
15719
15720Gnus will read the mail spool when you activate a mail group. The mail
15721file is first copied to your home directory. What happens after that
15722depends on what format you want to store your mail in.
15723
15724There are six different mail back ends in the standard Gnus, and more
15725back ends are available separately. The mail back end most people use
15726(because it is possibly the fastest) is @code{nnml} (@pxref{Mail
15727Spool}).
15728
15729@menu
15730* Unix Mail Box:: Using the (quite) standard Un*x mbox.
15731* Rmail Babyl:: Emacs programs use the Rmail Babyl format.
15732* Mail Spool:: Store your mail in a private spool?
15733* MH Spool:: An mhspool-like back end.
15734* Maildir:: Another one-file-per-message format.
15735* Mail Folders:: Having one file for each group.
15736* Comparing Mail Back Ends:: An in-depth looks at pros and cons.
15737@end menu
15738
15739
15740@node Unix Mail Box
15741@subsubsection Unix Mail Box
15742@cindex nnmbox
15743@cindex unix mail box
15744
15745@vindex nnmbox-active-file
15746@vindex nnmbox-mbox-file
15747The @dfn{nnmbox} back end will use the standard Un*x mbox file to store
15748mail. @code{nnmbox} will add extra headers to each mail article to say
15749which group it belongs in.
15750
15751Virtual server settings:
15752
15753@table @code
15754@item nnmbox-mbox-file
15755@vindex nnmbox-mbox-file
15756The name of the mail box in the user's home directory. Default is
15757@file{~/mbox}.
15758
15759@item nnmbox-active-file
15760@vindex nnmbox-active-file
15761The name of the active file for the mail box. Default is
15762@file{~/.mbox-active}.
15763
15764@item nnmbox-get-new-mail
15765@vindex nnmbox-get-new-mail
15766If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
15767into groups. Default is @code{t}.
15768@end table
15769
15770
15771@node Rmail Babyl
15772@subsubsection Rmail Babyl
15773@cindex nnbabyl
15774@cindex Rmail mbox
15775
15776@vindex nnbabyl-active-file
15777@vindex nnbabyl-mbox-file
15778The @dfn{nnbabyl} back end will use a Babyl mail box (aka. @dfn{Rmail
15779mbox}) to store mail. @code{nnbabyl} will add extra headers to each
15780mail article to say which group it belongs in.
15781
15782Virtual server settings:
15783
15784@table @code
15785@item nnbabyl-mbox-file
15786@vindex nnbabyl-mbox-file
15787The name of the Rmail mbox file. The default is @file{~/RMAIL}
15788
15789@item nnbabyl-active-file
15790@vindex nnbabyl-active-file
15791The name of the active file for the rmail box. The default is
15792@file{~/.rmail-active}
15793
15794@item nnbabyl-get-new-mail
15795@vindex nnbabyl-get-new-mail
15796If non-@code{nil}, @code{nnbabyl} will read incoming mail. Default is
15797@code{t}
15798@end table
15799
15800
15801@node Mail Spool
15802@subsubsection Mail Spool
15803@cindex nnml
15804@cindex mail @acronym{NOV} spool
15805
15806The @dfn{nnml} spool mail format isn't compatible with any other known
15807format. It should be used with some caution.
15808
15809@vindex nnml-directory
15810If you use this back end, Gnus will split all incoming mail into files,
15811one file for each mail, and put the articles into the corresponding
15812directories under the directory specified by the @code{nnml-directory}
15813variable. The default value is @file{~/Mail/}.
15814
15815You do not have to create any directories beforehand; Gnus will take
15816care of all that.
15817
15818If you have a strict limit as to how many files you are allowed to store
15819in your account, you should not use this back end. As each mail gets its
15820own file, you might very well occupy thousands of inodes within a few
15821weeks. If this is no problem for you, and it isn't a problem for you
15822having your friendly systems administrator walking around, madly,
15823shouting ``Who is eating all my inodes?! Who? Who!?!'', then you should
15824know that this is probably the fastest format to use. You do not have
15825to trudge through a big mbox file just to read your new mail.
15826
15827@code{nnml} is probably the slowest back end when it comes to article
15828splitting. It has to create lots of files, and it also generates
15829@acronym{NOV} databases for the incoming mails. This makes it possibly the
15830fastest back end when it comes to reading mail.
15831
15832@cindex self contained nnml servers
15833@cindex marks
15834When the marks file is used (which it is by default), @code{nnml}
15835servers have the property that you may backup them using @code{tar} or
15836similar, and later be able to restore them into Gnus (by adding the
15837proper @code{nnml} server) and have all your marks be preserved. Marks
01c52d31 15838for a group are usually stored in the @code{.marks} file (but see
4009494e
GM
15839@code{nnml-marks-file-name}) within each @code{nnml} group's directory.
15840Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
15841to restore the group (after restoring the backup into the nnml
15842directory).
15843
15844If for some reason you believe your @file{.marks} files are screwed
15845up, you can just delete them all. Gnus will then correctly regenerate
15846them next time it starts.
15847
15848Virtual server settings:
15849
15850@table @code
15851@item nnml-directory
15852@vindex nnml-directory
15853All @code{nnml} directories will be placed under this directory. The
15854default is the value of @code{message-directory} (whose default value
15855is @file{~/Mail}).
15856
15857@item nnml-active-file
15858@vindex nnml-active-file
15859The active file for the @code{nnml} server. The default is
15860@file{~/Mail/active}.
15861
15862@item nnml-newsgroups-file
15863@vindex nnml-newsgroups-file
15864The @code{nnml} group descriptions file. @xref{Newsgroups File
15865Format}. The default is @file{~/Mail/newsgroups}.
15866
15867@item nnml-get-new-mail
15868@vindex nnml-get-new-mail
15869If non-@code{nil}, @code{nnml} will read incoming mail. The default is
15870@code{t}.
15871
15872@item nnml-nov-is-evil
15873@vindex nnml-nov-is-evil
15874If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The
15875default is @code{nil}.
15876
15877@item nnml-nov-file-name
15878@vindex nnml-nov-file-name
15879The name of the @acronym{NOV} files. The default is @file{.overview}.
15880
15881@item nnml-prepare-save-mail-hook
15882@vindex nnml-prepare-save-mail-hook
15883Hook run narrowed to an article before saving.
15884
15885@item nnml-marks-is-evil
15886@vindex nnml-marks-is-evil
15887If non-@code{nil}, this back end will ignore any @sc{marks} files. The
15888default is @code{nil}.
15889
15890@item nnml-marks-file-name
15891@vindex nnml-marks-file-name
15892The name of the @dfn{marks} files. The default is @file{.marks}.
15893
15894@item nnml-use-compressed-files
15895@vindex nnml-use-compressed-files
15896If non-@code{nil}, @code{nnml} will allow using compressed message
01c52d31
MB
15897files. This requires @code{auto-compression-mode} to be enabled
15898(@pxref{Compressed Files, ,Compressed Files, emacs, The Emacs Manual}).
15899If the value of @code{nnml-use-compressed-files} is a string, it is used
15900as the file extension specifying the compression program. You can set it
15901to @samp{.bz2} if your Emacs supports it. A value of @code{t} is
15902equivalent to @samp{.gz}.
15903
15904@item nnml-compressed-files-size-threshold
15905@vindex nnml-compressed-files-size-threshold
15906Default size threshold for compressed message files. Message files with
15907bodies larger than that many characters will be automatically compressed
15908if @code{nnml-use-compressed-files} is non-@code{nil}.
4009494e
GM
15909
15910@end table
15911
15912@findex nnml-generate-nov-databases
15913If your @code{nnml} groups and @acronym{NOV} files get totally out of
15914whack, you can do a complete update by typing @kbd{M-x
15915nnml-generate-nov-databases}. This command will trawl through the
15916entire @code{nnml} hierarchy, looking at each and every article, so it
15917might take a while to complete. A better interface to this
15918functionality can be found in the server buffer (@pxref{Server
15919Commands}).
15920
15921
15922@node MH Spool
15923@subsubsection MH Spool
15924@cindex nnmh
15925@cindex mh-e mail spool
15926
15927@code{nnmh} is just like @code{nnml}, except that is doesn't generate
15928@acronym{NOV} databases and it doesn't keep an active file or marks
15929file. This makes @code{nnmh} a @emph{much} slower back end than
15930@code{nnml}, but it also makes it easier to write procmail scripts
15931for.
15932
15933Virtual server settings:
15934
15935@table @code
15936@item nnmh-directory
15937@vindex nnmh-directory
15938All @code{nnmh} directories will be located under this directory. The
15939default is the value of @code{message-directory} (whose default is
15940@file{~/Mail})
15941
15942@item nnmh-get-new-mail
15943@vindex nnmh-get-new-mail
15944If non-@code{nil}, @code{nnmh} will read incoming mail. The default is
15945@code{t}.
15946
15947@item nnmh-be-safe
15948@vindex nnmh-be-safe
15949If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
15950sure that the articles in the folder are actually what Gnus thinks
15951they are. It will check date stamps and stat everything in sight, so
15952setting this to @code{t} will mean a serious slow-down. If you never
15953use anything but Gnus to read the @code{nnmh} articles, you do not
15954have to set this variable to @code{t}. The default is @code{nil}.
15955@end table
15956
15957
15958@node Maildir
15959@subsubsection Maildir
15960@cindex nnmaildir
15961@cindex maildir
15962
15963@code{nnmaildir} stores mail in the maildir format, with each maildir
15964corresponding to a group in Gnus. This format is documented here:
15965@uref{http://cr.yp.to/proto/maildir.html} and here:
15966@uref{http://www.qmail.org/man/man5/maildir.html}. @code{nnmaildir}
15967also stores extra information in the @file{.nnmaildir/} directory
15968within a maildir.
15969
15970Maildir format was designed to allow concurrent deliveries and
15971reading, without needing locks. With other back ends, you would have
15972your mail delivered to a spool of some kind, and then you would
15973configure Gnus to split mail from that spool into your groups. You
15974can still do that with @code{nnmaildir}, but the more common
15975configuration is to have your mail delivered directly to the maildirs
15976that appear as group in Gnus.
15977
15978@code{nnmaildir} is designed to be perfectly reliable: @kbd{C-g} will
15979never corrupt its data in memory, and @code{SIGKILL} will never
15980corrupt its data in the filesystem.
15981
15982@code{nnmaildir} stores article marks and @acronym{NOV} data in each
15983maildir. So you can copy a whole maildir from one Gnus setup to
15984another, and you will keep your marks.
15985
15986Virtual server settings:
15987
15988@table @code
15989@item directory
15990For each of your @code{nnmaildir} servers (it's very unlikely that
15991you'd need more than one), you need to create a directory and populate
15992it with maildirs or symlinks to maildirs (and nothing else; do not
15993choose a directory already used for other purposes). Each maildir
15994will be represented in Gnus as a newsgroup on that server; the
15995filename of the symlink will be the name of the group. Any filenames
15996in the directory starting with @samp{.} are ignored. The directory is
15997scanned when you first start Gnus, and each time you type @kbd{g} in
15998the group buffer; if any maildirs have been removed or added,
15999@code{nnmaildir} notices at these times.
16000
16001The value of the @code{directory} parameter should be a Lisp form
16002which is processed by @code{eval} and @code{expand-file-name} to get
16003the path of the directory for this server. The form is @code{eval}ed
16004only when the server is opened; the resulting string is used until the
16005server is closed. (If you don't know about forms and @code{eval},
16006don't worry---a simple string will work.) This parameter is not
16007optional; you must specify it. I don't recommend using
16008@code{"~/Mail"} or a subdirectory of it; several other parts of Gnus
16009use that directory by default for various things, and may get confused
16010if @code{nnmaildir} uses it too. @code{"~/.nnmaildir"} is a typical
16011value.
16012
16013@item target-prefix
16014This should be a Lisp form which is processed by @code{eval} and
16015@code{expand-file-name}. The form is @code{eval}ed only when the
16016server is opened; the resulting string is used until the server is
16017closed.
16018
16019When you create a group on an @code{nnmaildir} server, the maildir is
16020created with @code{target-prefix} prepended to its name, and a symlink
16021pointing to that maildir is created, named with the plain group name.
16022So if @code{directory} is @code{"~/.nnmaildir"} and
16023@code{target-prefix} is @code{"../maildirs/"}, then when you create
16024the group @code{foo}, @code{nnmaildir} will create
16025@file{~/.nnmaildir/../maildirs/foo} as a maildir, and will create
16026@file{~/.nnmaildir/foo} as a symlink pointing to
16027@file{../maildirs/foo}.
16028
16029You can set @code{target-prefix} to a string without any slashes to
16030create both maildirs and symlinks in the same @code{directory}; in
16031this case, any maildirs found in @code{directory} whose names start
16032with @code{target-prefix} will not be listed as groups (but the
16033symlinks pointing to them will be).
16034
16035As a special case, if @code{target-prefix} is @code{""} (the default),
16036then when you create a group, the maildir will be created in
16037@code{directory} without a corresponding symlink. Beware that you
16038cannot use @code{gnus-group-delete-group} on such groups without the
16039@code{force} argument.
16040
16041@item directory-files
16042This should be a function with the same interface as
16043@code{directory-files} (such as @code{directory-files} itself). It is
16044used to scan the server's @code{directory} for maildirs. This
16045parameter is optional; the default is
16046@code{nnheader-directory-files-safe} if
16047@code{nnheader-directory-files-is-safe} is @code{nil}, and
16048@code{directory-files} otherwise.
16049(@code{nnheader-directory-files-is-safe} is checked only once when the
16050server is opened; if you want to check it each time the directory is
16051scanned, you'll have to provide your own function that does that.)
16052
16053@item get-new-mail
16054If non-@code{nil}, then after scanning for new mail in the group
16055maildirs themselves as usual, this server will also incorporate mail
16056the conventional Gnus way, from @code{mail-sources} according to
16057@code{nnmail-split-methods} or @code{nnmail-split-fancy}. The default
16058value is @code{nil}.
16059
16060Do @emph{not} use the same maildir both in @code{mail-sources} and as
16061an @code{nnmaildir} group. The results might happen to be useful, but
16062that would be by chance, not by design, and the results might be
16063different in the future. If your split rules create new groups,
16064remember to supply a @code{create-directory} server parameter.
16065@end table
16066
16067@subsubsection Group parameters
16068
16069@code{nnmaildir} uses several group parameters. It's safe to ignore
16070all this; the default behavior for @code{nnmaildir} is the same as the
16071default behavior for other mail back ends: articles are deleted after
16072one week, etc. Except for the expiry parameters, all this
16073functionality is unique to @code{nnmaildir}, so you can ignore it if
16074you're just trying to duplicate the behavior you already have with
16075another back end.
16076
16077If the value of any of these parameters is a vector, the first element
16078is evaluated as a Lisp form and the result is used, rather than the
16079original value. If the value is not a vector, the value itself is
16080evaluated as a Lisp form. (This is why these parameters use names
16081different from those of other, similar parameters supported by other
16082back ends: they have different, though similar, meanings.) (For
16083numbers, strings, @code{nil}, and @code{t}, you can ignore the
16084@code{eval} business again; for other values, remember to use an extra
16085quote and wrap the value in a vector when appropriate.)
16086
16087@table @code
16088@item expire-age
16089An integer specifying the minimum age, in seconds, of an article
16090before it will be expired, or the symbol @code{never} to specify that
16091articles should never be expired. If this parameter is not set,
16092@code{nnmaildir} falls back to the usual
16093@code{nnmail-expiry-wait}(@code{-function}) variables (the
16094@code{expiry-wait} group parameter overrides @code{nnmail-expiry-wait}
16095and makes @code{nnmail-expiry-wait-function} ineffective). If you
16096wanted a value of 3 days, you could use something like @code{[(* 3 24
1609760 60)]}; @code{nnmaildir} will evaluate the form and use the result.
16098An article's age is measured starting from the article file's
16099modification time. Normally, this is the same as the article's
16100delivery time, but editing an article makes it younger. Moving an
16101article (other than via expiry) may also make an article younger.
16102
16103@item expire-group
16104If this is set to a string such as a full Gnus group name, like
16105@example
16106"backend+server.address.string:group.name"
16107@end example
16108and if it is not the name of the same group that the parameter belongs
16109to, then articles will be moved to the specified group during expiry
16110before being deleted. @emph{If this is set to an @code{nnmaildir}
16111group, the article will be just as old in the destination group as it
16112was in the source group.} So be careful with @code{expire-age} in the
16113destination group. If this is set to the name of the same group that
16114the parameter belongs to, then the article is not expired at all. If
16115you use the vector form, the first element is evaluated once for each
16116article. So that form can refer to
16117@code{nnmaildir-article-file-name}, etc., to decide where to put the
16118article. @emph{Even if this parameter is not set, @code{nnmaildir}
16119does not fall back to the @code{expiry-target} group parameter or the
16120@code{nnmail-expiry-target} variable.}
16121
16122@item read-only
16123If this is set to @code{t}, @code{nnmaildir} will treat the articles
16124in this maildir as read-only. This means: articles are not renamed
16125from @file{new/} into @file{cur/}; articles are only found in
16126@file{new/}, not @file{cur/}; articles are never deleted; articles
16127cannot be edited. @file{new/} is expected to be a symlink to the
16128@file{new/} directory of another maildir---e.g., a system-wide mailbox
16129containing a mailing list of common interest. Everything in the
16130maildir outside @file{new/} is @emph{not} treated as read-only, so for
16131a shared mailbox, you do still need to set up your own maildir (or
16132have write permission to the shared mailbox); your maildir just won't
16133contain extra copies of the articles.
16134
16135@item directory-files
16136A function with the same interface as @code{directory-files}. It is
16137used to scan the directories in the maildir corresponding to this
16138group to find articles. The default is the function specified by the
16139server's @code{directory-files} parameter.
16140
16141@item distrust-Lines:
16142If non-@code{nil}, @code{nnmaildir} will always count the lines of an
16143article, rather than use the @code{Lines:} header field. If
16144@code{nil}, the header field will be used if present.
16145
16146@item always-marks
16147A list of mark symbols, such as @code{['(read expire)]}. Whenever
16148Gnus asks @code{nnmaildir} for article marks, @code{nnmaildir} will
16149say that all articles have these marks, regardless of whether the
16150marks stored in the filesystem say so. This is a proof-of-concept
16151feature that will probably be removed eventually; it ought to be done
16152in Gnus proper, or abandoned if it's not worthwhile.
16153
16154@item never-marks
16155A list of mark symbols, such as @code{['(tick expire)]}. Whenever
16156Gnus asks @code{nnmaildir} for article marks, @code{nnmaildir} will
16157say that no articles have these marks, regardless of whether the marks
16158stored in the filesystem say so. @code{never-marks} overrides
16159@code{always-marks}. This is a proof-of-concept feature that will
16160probably be removed eventually; it ought to be done in Gnus proper, or
16161abandoned if it's not worthwhile.
16162
16163@item nov-cache-size
16164An integer specifying the size of the @acronym{NOV} memory cache. To
16165speed things up, @code{nnmaildir} keeps @acronym{NOV} data in memory
16166for a limited number of articles in each group. (This is probably not
16167worthwhile, and will probably be removed in the future.) This
16168parameter's value is noticed only the first time a group is seen after
16169the server is opened---i.e., when you first start Gnus, typically.
16170The @acronym{NOV} cache is never resized until the server is closed
16171and reopened. The default is an estimate of the number of articles
16172that would be displayed in the summary buffer: a count of articles
16173that are either marked with @code{tick} or not marked with
16174@code{read}, plus a little extra.
16175@end table
16176
16177@subsubsection Article identification
16178Articles are stored in the @file{cur/} subdirectory of each maildir.
16179Each article file is named like @code{uniq:info}, where @code{uniq}
16180contains no colons. @code{nnmaildir} ignores, but preserves, the
16181@code{:info} part. (Other maildir readers typically use this part of
16182the filename to store marks.) The @code{uniq} part uniquely
16183identifies the article, and is used in various places in the
16184@file{.nnmaildir/} subdirectory of the maildir to store information
16185about the corresponding article. The full pathname of an article is
16186available in the variable @code{nnmaildir-article-file-name} after you
16187request the article in the summary buffer.
16188
16189@subsubsection NOV data
16190An article identified by @code{uniq} has its @acronym{NOV} data (used
16191to generate lines in the summary buffer) stored in
16192@code{.nnmaildir/nov/uniq}. There is no
16193@code{nnmaildir-generate-nov-databases} function. (There isn't much
16194need for it---an article's @acronym{NOV} data is updated automatically
16195when the article or @code{nnmail-extra-headers} has changed.) You can
16196force @code{nnmaildir} to regenerate the @acronym{NOV} data for a
16197single article simply by deleting the corresponding @acronym{NOV}
16198file, but @emph{beware}: this will also cause @code{nnmaildir} to
16199assign a new article number for this article, which may cause trouble
16200with @code{seen} marks, the Agent, and the cache.
16201
16202@subsubsection Article marks
16203An article identified by @code{uniq} is considered to have the mark
16204@code{flag} when the file @file{.nnmaildir/marks/flag/uniq} exists.
16205When Gnus asks @code{nnmaildir} for a group's marks, @code{nnmaildir}
16206looks for such files and reports the set of marks it finds. When Gnus
16207asks @code{nnmaildir} to store a new set of marks, @code{nnmaildir}
16208creates and deletes the corresponding files as needed. (Actually,
16209rather than create a new file for each mark, it just creates hard
16210links to @file{.nnmaildir/markfile}, to save inodes.)
16211
16212You can invent new marks by creating a new directory in
16213@file{.nnmaildir/marks/}. You can tar up a maildir and remove it from
16214your server, untar it later, and keep your marks. You can add and
16215remove marks yourself by creating and deleting mark files. If you do
16216this while Gnus is running and your @code{nnmaildir} server is open,
16217it's best to exit all summary buffers for @code{nnmaildir} groups and
16218type @kbd{s} in the group buffer first, and to type @kbd{g} or
16219@kbd{M-g} in the group buffer afterwards. Otherwise, Gnus might not
16220pick up the changes, and might undo them.
16221
16222
16223@node Mail Folders
16224@subsubsection Mail Folders
16225@cindex nnfolder
16226@cindex mbox folders
16227@cindex mail folders
16228
16229@code{nnfolder} is a back end for storing each mail group in a
16230separate file. Each file is in the standard Un*x mbox format.
16231@code{nnfolder} will add extra headers to keep track of article
16232numbers and arrival dates.
16233
16234@cindex self contained nnfolder servers
16235@cindex marks
16236When the marks file is used (which it is by default), @code{nnfolder}
16237servers have the property that you may backup them using @code{tar} or
16238similar, and later be able to restore them into Gnus (by adding the
16239proper @code{nnfolder} server) and have all your marks be preserved.
16240Marks for a group are usually stored in a file named as the mbox file
16241with @code{.mrk} concatenated to it (but see
16242@code{nnfolder-marks-file-suffix}) within the @code{nnfolder}
16243directory. Individual @code{nnfolder} groups are also possible to
16244backup, use @kbd{G m} to restore the group (after restoring the backup
16245into the @code{nnfolder} directory).
16246
16247Virtual server settings:
16248
16249@table @code
16250@item nnfolder-directory
16251@vindex nnfolder-directory
16252All the @code{nnfolder} mail boxes will be stored under this
16253directory. The default is the value of @code{message-directory}
16254(whose default is @file{~/Mail})
16255
16256@item nnfolder-active-file
16257@vindex nnfolder-active-file
16258The name of the active file. The default is @file{~/Mail/active}.
16259
16260@item nnfolder-newsgroups-file
16261@vindex nnfolder-newsgroups-file
16262The name of the group descriptions file. @xref{Newsgroups File
16263Format}. The default is @file{~/Mail/newsgroups}
16264
16265@item nnfolder-get-new-mail
16266@vindex nnfolder-get-new-mail
16267If non-@code{nil}, @code{nnfolder} will read incoming mail. The
16268default is @code{t}
16269
16270@item nnfolder-save-buffer-hook
16271@vindex nnfolder-save-buffer-hook
16272@cindex backup files
16273Hook run before saving the folders. Note that Emacs does the normal
16274backup renaming of files even with the @code{nnfolder} buffers. If
16275you wish to switch this off, you could say something like the
16276following in your @file{.emacs} file:
16277
16278@lisp
16279(defun turn-off-backup ()
16280 (set (make-local-variable 'backup-inhibited) t))
16281
16282(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
16283@end lisp
16284
16285@item nnfolder-delete-mail-hook
16286@vindex nnfolder-delete-mail-hook
16287Hook run in a buffer narrowed to the message that is to be deleted.
16288This function can be used to copy the message to somewhere else, or to
16289extract some information from it before removing it.
16290
16291@item nnfolder-nov-is-evil
16292@vindex nnfolder-nov-is-evil
16293If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The
16294default is @code{nil}.
16295
16296@item nnfolder-nov-file-suffix
16297@vindex nnfolder-nov-file-suffix
16298The extension for @acronym{NOV} files. The default is @file{.nov}.
16299
16300@item nnfolder-nov-directory
16301@vindex nnfolder-nov-directory
16302The directory where the @acronym{NOV} files should be stored. If
16303@code{nil}, @code{nnfolder-directory} is used.
16304
16305@item nnfolder-marks-is-evil
16306@vindex nnfolder-marks-is-evil
16307If non-@code{nil}, this back end will ignore any @sc{marks} files. The
16308default is @code{nil}.
16309
16310@item nnfolder-marks-file-suffix
16311@vindex nnfolder-marks-file-suffix
16312The extension for @sc{marks} files. The default is @file{.mrk}.
16313
16314@item nnfolder-marks-directory
16315@vindex nnfolder-marks-directory
16316The directory where the @sc{marks} files should be stored. If
16317@code{nil}, @code{nnfolder-directory} is used.
16318
16319@end table
16320
16321
16322@findex nnfolder-generate-active-file
16323@kindex M-x nnfolder-generate-active-file
16324If you have lots of @code{nnfolder}-like files you'd like to read with
16325@code{nnfolder}, you can use the @kbd{M-x nnfolder-generate-active-file}
16326command to make @code{nnfolder} aware of all likely files in
16327@code{nnfolder-directory}. This only works if you use long file names,
16328though.
16329
16330@node Comparing Mail Back Ends
16331@subsubsection Comparing Mail Back Ends
16332
16333First, just for terminology, the @dfn{back end} is the common word for a
16334low-level access method---a transport, if you will, by which something
16335is acquired. The sense is that one's mail has to come from somewhere,
16336and so selection of a suitable back end is required in order to get that
16337mail within spitting distance of Gnus.
16338
16339The same concept exists for Usenet itself: Though access to articles is
16340typically done by @acronym{NNTP} these days, once upon a midnight dreary, everyone
16341in the world got at Usenet by running a reader on the machine where the
16342articles lay (the machine which today we call an @acronym{NNTP} server), and
16343access was by the reader stepping into the articles' directory spool
16344area directly. One can still select between either the @code{nntp} or
16345@code{nnspool} back ends, to select between these methods, if one happens
16346actually to live on the server (or can see its spool directly, anyway,
16347via NFS).
16348
16349The goal in selecting a mail back end is to pick one which
16350simultaneously represents a suitable way of dealing with the original
16351format plus leaving mail in a form that is convenient to use in the
16352future. Here are some high and low points on each:
16353
16354@table @code
16355@item nnmbox
16356
16357UNIX systems have historically had a single, very common, and well-
16358defined format. All messages arrive in a single @dfn{spool file}, and
16359they are delineated by a line whose regular expression matches
16360@samp{^From_}. (My notational use of @samp{_} is to indicate a space,
16361to make it clear in this instance that this is not the RFC-specified
16362@samp{From:} header.) Because Emacs and therefore Gnus emanate
16363historically from the Unix environment, it is simplest if one does not
16364mess a great deal with the original mailbox format, so if one chooses
16365this back end, Gnus' primary activity in getting mail from the real spool
16366area to Gnus' preferred directory is simply to copy it, with no
16367(appreciable) format change in the process. It is the ``dumbest'' way
16368to move mail into availability in the Gnus environment. This makes it
16369fast to move into place, but slow to parse, when Gnus has to look at
16370what's where.
16371
16372@item nnbabyl
16373
16374Once upon a time, there was the DEC-10 and DEC-20, running operating
16375systems called TOPS and related things, and the usual (only?) mail
16376reading environment was a thing called Babyl. I don't know what format
16377was used for mail landing on the system, but Babyl had its own internal
16378format to which mail was converted, primarily involving creating a
16379spool-file-like entity with a scheme for inserting Babyl-specific
16380headers and status bits above the top of each message in the file.
16381Rmail was Emacs' first mail reader, it was written by Richard Stallman,
16382and Stallman came out of that TOPS/Babyl environment, so he wrote Rmail
16383to understand the mail files folks already had in existence. Gnus (and
16384VM, for that matter) continue to support this format because it's
16385perceived as having some good qualities in those mailer-specific
16386headers/status bits stuff. Rmail itself still exists as well, of
16387course, and is still maintained by Stallman.
16388
16389Both of the above forms leave your mail in a single file on your
16390file system, and they must parse that entire file each time you take a
16391look at your mail.
16392
16393@item nnml
16394
16395@code{nnml} is the back end which smells the most as though you were
16396actually operating with an @code{nnspool}-accessed Usenet system. (In
16397fact, I believe @code{nnml} actually derived from @code{nnspool} code,
16398lo these years ago.) One's mail is taken from the original spool file,
16399and is then cut up into individual message files, 1:1. It maintains a
16400Usenet-style active file (analogous to what one finds in an INN- or
16401CNews-based news system in (for instance) @file{/var/lib/news/active},
16402or what is returned via the @samp{NNTP LIST} verb) and also creates
16403@dfn{overview} files for efficient group entry, as has been defined for
16404@acronym{NNTP} servers for some years now. It is slower in mail-splitting,
16405due to the creation of lots of files, updates to the @code{nnml} active
16406file, and additions to overview files on a per-message basis, but it is
16407extremely fast on access because of what amounts to the indexing support
16408provided by the active file and overviews.
16409
16410@code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the
16411resource which defines available places in the file system to put new
16412files. Sysadmins take a dim view of heavy inode occupation within
16413tight, shared file systems. But if you live on a personal machine where
16414the file system is your own and space is not at a premium, @code{nnml}
16415wins big.
16416
16417It is also problematic using this back end if you are living in a
16418FAT16-based Windows world, since much space will be wasted on all these
16419tiny files.
16420
16421@item nnmh
16422
16423The Rand MH mail-reading system has been around UNIX systems for a very
16424long time; it operates by splitting one's spool file of messages into
16425individual files, but with little or no indexing support---@code{nnmh}
16426is considered to be semantically equivalent to ``@code{nnml} without
16427active file or overviews''. This is arguably the worst choice, because
16428one gets the slowness of individual file creation married to the
16429slowness of access parsing when learning what's new in one's groups.
16430
16431@item nnfolder
16432
16433Basically the effect of @code{nnfolder} is @code{nnmbox} (the first
16434method described above) on a per-group basis. That is, @code{nnmbox}
16435itself puts @emph{all} one's mail in one file; @code{nnfolder} provides a
16436little bit of optimization to this so that each of one's mail groups has
16437a Unix mail box file. It's faster than @code{nnmbox} because each group
16438can be parsed separately, and still provides the simple Unix mail box
16439format requiring minimal effort in moving the mail around. In addition,
16440it maintains an ``active'' file making it much faster for Gnus to figure
16441out how many messages there are in each separate group.
16442
16443If you have groups that are expected to have a massive amount of
16444messages, @code{nnfolder} is not the best choice, but if you receive
16445only a moderate amount of mail, @code{nnfolder} is probably the most
16446friendly mail back end all over.
16447
16448@item nnmaildir
16449
16450For configuring expiry and other things, @code{nnmaildir} uses
16451incompatible group parameters, slightly different from those of other
16452mail back ends.
16453
16454@code{nnmaildir} is largely similar to @code{nnml}, with some notable
16455differences. Each message is stored in a separate file, but the
16456filename is unrelated to the article number in Gnus. @code{nnmaildir}
16457also stores the equivalent of @code{nnml}'s overview files in one file
16458per article, so it uses about twice as many inodes as @code{nnml}. (Use
16459@code{df -i} to see how plentiful your inode supply is.) If this slows
16460you down or takes up very much space, consider switching to
16461@uref{http://www.namesys.com/, ReiserFS} or another non-block-structured
16462file system.
16463
16464Since maildirs don't require locking for delivery, the maildirs you use
16465as groups can also be the maildirs your mail is directly delivered to.
16466This means you can skip Gnus' mail splitting if your mail is already
16467organized into different mailboxes during delivery. A @code{directory}
16468entry in @code{mail-sources} would have a similar effect, but would
16469require one set of mailboxes for spooling deliveries (in mbox format,
16470thus damaging message bodies), and another set to be used as groups (in
16471whatever format you like). A maildir has a built-in spool, in the
16472@code{new/} subdirectory. Beware that currently, mail moved from
16473@code{new/} to @code{cur/} instead of via mail splitting will not
16474undergo treatment such as duplicate checking.
16475
16476@code{nnmaildir} stores article marks for a given group in the
16477corresponding maildir, in a way designed so that it's easy to manipulate
16478them from outside Gnus. You can tar up a maildir, unpack it somewhere
16479else, and still have your marks. @code{nnml} also stores marks, but
16480it's not as easy to work with them from outside Gnus as with
16481@code{nnmaildir}.
16482
16483@code{nnmaildir} uses a significant amount of memory to speed things up.
16484(It keeps in memory some of the things that @code{nnml} stores in files
16485and that @code{nnmh} repeatedly parses out of message files.) If this
16486is a problem for you, you can set the @code{nov-cache-size} group
16487parameter to something small (0 would probably not work, but 1 probably
16488would) to make it use less memory. This caching will probably be
16489removed in the future.
16490
16491Startup is likely to be slower with @code{nnmaildir} than with other
16492back ends. Everything else is likely to be faster, depending in part
16493on your file system.
16494
16495@code{nnmaildir} does not use @code{nnoo}, so you cannot use @code{nnoo}
16496to write an @code{nnmaildir}-derived back end.
16497
16498@end table
16499
16500
16501@node Browsing the Web
16502@section Browsing the Web
16503@cindex web
16504@cindex browsing the web
16505@cindex www
16506@cindex http
16507
16508Web-based discussion forums are getting more and more popular. On many
16509subjects, the web-based forums have become the most important forums,
16510eclipsing the importance of mailing lists and news groups. The reason
16511is easy to understand---they are friendly to new users; you just point
16512and click, and there's the discussion. With mailing lists, you have to
16513go through a cumbersome subscription procedure, and most people don't
16514even know what a news group is.
16515
16516The problem with this scenario is that web browsers are not very good at
16517being newsreaders. They do not keep track of what articles you've read;
16518they do not allow you to score on subjects you're interested in; they do
16519not allow off-line browsing; they require you to click around and drive
16520you mad in the end.
16521
16522So---if web browsers suck at reading discussion forums, why not use Gnus
16523to do it instead?
16524
16525Gnus has been getting a bit of a collection of back ends for providing
16526interfaces to these sources.
16527
16528@menu
16529* Archiving Mail::
16530* Web Searches:: Creating groups from articles that match a string.
16531* Slashdot:: Reading the Slashdot comments.
16532* Ultimate:: The Ultimate Bulletin Board systems.
16533* Web Archive:: Reading mailing list archived on web.
16534* RSS:: Reading RDF site summary.
16535* Customizing W3:: Doing stuff to Emacs/W3 from Gnus.
16536@end menu
16537
16538All the web sources require Emacs/W3 and the url library or those
16539alternatives to work.
16540
16541The main caveat with all these web sources is that they probably won't
16542work for a very long time. Gleaning information from the @acronym{HTML} data
16543is guesswork at best, and when the layout is altered, the Gnus back end
16544will fail. If you have reasonably new versions of these back ends,
16545though, you should be ok.
16546
16547One thing all these Web methods have in common is that the Web sources
16548are often down, unavailable or just plain too slow to be fun. In those
16549cases, it makes a lot of sense to let the Gnus Agent (@pxref{Gnus
16550Unplugged}) handle downloading articles, and then you can read them at
16551leisure from your local disk. No more World Wide Wait for you.
16552
16553@node Archiving Mail
16554@subsection Archiving Mail
16555@cindex archiving mail
16556@cindex backup of mail
16557
16558Some of the back ends, notably @code{nnml}, @code{nnfolder}, and
16559@code{nnmaildir}, now actually store the article marks with each group.
16560For these servers, archiving and restoring a group while preserving
16561marks is fairly simple.
16562
16563(Preserving the group level and group parameters as well still
16564requires ritual dancing and sacrifices to the @file{.newsrc.eld} deity
16565though.)
16566
16567To archive an entire @code{nnml}, @code{nnfolder}, or @code{nnmaildir}
16568server, take a recursive copy of the server directory. There is no need
16569to shut down Gnus, so archiving may be invoked by @code{cron} or
16570similar. You restore the data by restoring the directory tree, and
16571adding a server definition pointing to that directory in Gnus. The
16572@ref{Article Backlog}, @ref{Asynchronous Fetching} and other things
16573might interfere with overwriting data, so you may want to shut down Gnus
16574before you restore the data.
16575
16576It is also possible to archive individual @code{nnml},
16577@code{nnfolder}, or @code{nnmaildir} groups, while preserving marks.
16578For @code{nnml} or @code{nnmaildir}, you copy all files in the group's
16579directory. For @code{nnfolder} you need to copy both the base folder
16580file itself (@file{FOO}, say), and the marks file (@file{FOO.mrk} in
16581this example). Restoring the group is done with @kbd{G m} from the Group
16582buffer. The last step makes Gnus notice the new directory.
16583@code{nnmaildir} notices the new directory automatically, so @kbd{G m}
16584is unnecessary in that case.
16585
16586@node Web Searches
16587@subsection Web Searches
16588@cindex nnweb
16589@cindex Google
16590@cindex dejanews
16591@cindex gmane
16592@cindex Usenet searches
16593@cindex searching the Usenet
16594
16595It's, like, too neat to search the Usenet for articles that match a
16596string, but it, like, totally @emph{sucks}, like, totally, to use one of
16597those, like, Web browsers, and you, like, have to, rilly, like, look at
16598the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
16599searches without having to use a browser.
16600
16601The @code{nnweb} back end allows an easy interface to the mighty search
16602engine. You create an @code{nnweb} group, enter a search pattern, and
16603then enter the group and read the articles like you would any normal
16604group. The @kbd{G w} command in the group buffer (@pxref{Foreign
16605Groups}) will do this in an easy-to-use fashion.
16606
16607@code{nnweb} groups don't really lend themselves to being solid
16608groups---they have a very fleeting idea of article numbers. In fact,
16609each time you enter an @code{nnweb} group (not even changing the search
16610pattern), you are likely to get the articles ordered in a different
16611manner. Not even using duplicate suppression (@pxref{Duplicate
16612Suppression}) will help, since @code{nnweb} doesn't even know the
16613@code{Message-ID} of the articles before reading them using some search
16614engines (Google, for instance). The only possible way to keep track
16615of which articles you've read is by scoring on the @code{Date}
16616header---mark all articles posted before the last date you read the
16617group as read.
16618
16619If the search engine changes its output substantially, @code{nnweb}
16620won't be able to parse it and will fail. One could hardly fault the Web
01c52d31 16621providers if they were to do this---their @emph{raison d'@^etre} is to
4009494e
GM
16622make money off of advertisements, not to provide services to the
16623community. Since @code{nnweb} washes the ads off all the articles, one
16624might think that the providers might be somewhat miffed. We'll see.
16625
16626You must have the @code{url} and @code{W3} package or those alternatives
16627(try @code{customize-group} on the @samp{mm-url} variable group)
16628installed to be able to use @code{nnweb}.
16629
16630Virtual server variables:
16631
16632@table @code
16633@item nnweb-type
16634@vindex nnweb-type
16635What search engine type is being used. The currently supported types
16636are @code{google}, @code{dejanews}, and @code{gmane}. Note that
16637@code{dejanews} is an alias to @code{google}.
16638
16639@item nnweb-search
16640@vindex nnweb-search
16641The search string to feed to the search engine.
16642
16643@item nnweb-max-hits
16644@vindex nnweb-max-hits
16645Advisory maximum number of hits per search to display. The default is
16646999.
16647
16648@item nnweb-type-definition
16649@vindex nnweb-type-definition
16650Type-to-definition alist. This alist says what @code{nnweb} should do
16651with the various search engine types. The following elements must be
16652present:
16653
16654@table @code
16655@item article
16656Function to decode the article and provide something that Gnus
16657understands.
16658
16659@item map
16660Function to create an article number to message header and URL alist.
16661
16662@item search
16663Function to send the search string to the search engine.
16664
16665@item address
16666The address the aforementioned function should send the search string
16667to.
16668
16669@item id
16670Format string URL to fetch an article by @code{Message-ID}.
16671@end table
16672
16673@end table
16674
16675
16676@node Slashdot
16677@subsection Slashdot
16678@cindex Slashdot
16679@cindex nnslashdot
16680
16681@uref{http://slashdot.org/, Slashdot} is a popular news site, with
16682lively discussion following the news articles. @code{nnslashdot} will
16683let you read this forum in a convenient manner.
16684
16685The easiest way to read this source is to put something like the
16686following in your @file{~/.gnus.el} file:
16687
16688@lisp
16689(setq gnus-secondary-select-methods
16690 '((nnslashdot "")))
16691@end lisp
16692
16693This will make Gnus query the @code{nnslashdot} back end for new comments
16694and groups. The @kbd{F} command will subscribe each new news article as
16695a new Gnus group, and you can read the comments by entering these
16696groups. (Note that the default subscription method is to subscribe new
16697groups as zombies. Other methods are available (@pxref{Subscription
16698Methods}).
16699
16700If you want to remove an old @code{nnslashdot} group, the @kbd{G DEL}
16701command is the most handy tool (@pxref{Foreign Groups}).
16702
16703When following up to @code{nnslashdot} comments (or posting new
16704comments), some light @acronym{HTML}izations will be performed. In
16705particular, text quoted with @samp{> } will be quoted with
16706@samp{blockquote} instead, and signatures will have @samp{br} added to
16707the end of each line. Other than that, you can just write @acronym{HTML}
16708directly into the message buffer. Note that Slashdot filters out some
16709@acronym{HTML} forms.
16710
16711The following variables can be altered to change its behavior:
16712
16713@table @code
16714@item nnslashdot-threaded
16715Whether @code{nnslashdot} should display threaded groups or not. The
16716default is @code{t}. To be able to display threads, @code{nnslashdot}
16717has to retrieve absolutely all comments in a group upon entry. If a
16718threaded display is not required, @code{nnslashdot} will only retrieve
16719the comments that are actually wanted by the user. Threading is nicer,
16720but much, much slower than unthreaded.
16721
16722@item nnslashdot-login-name
16723@vindex nnslashdot-login-name
16724The login name to use when posting.
16725
16726@item nnslashdot-password
16727@vindex nnslashdot-password
16728The password to use when posting.
16729
16730@item nnslashdot-directory
16731@vindex nnslashdot-directory
16732Where @code{nnslashdot} will store its files. The default is
16733@file{~/News/slashdot/}.
16734
16735@item nnslashdot-active-url
16736@vindex nnslashdot-active-url
16737The @acronym{URL} format string that will be used to fetch the
16738information on news articles and comments. The default is@*
16739@samp{http://slashdot.org/search.pl?section=&min=%d}.
16740
16741@item nnslashdot-comments-url
16742@vindex nnslashdot-comments-url
16743The @acronym{URL} format string that will be used to fetch comments.
16744
16745@item nnslashdot-article-url
16746@vindex nnslashdot-article-url
16747The @acronym{URL} format string that will be used to fetch the news
16748article. The default is
16749@samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.
16750
16751@item nnslashdot-threshold
16752@vindex nnslashdot-threshold
16753The score threshold. The default is -1.
16754
16755@item nnslashdot-group-number
16756@vindex nnslashdot-group-number
16757The number of old groups, in addition to the ten latest, to keep
16758updated. The default is 0.
16759
16760@end table
16761
16762
16763
16764@node Ultimate
16765@subsection Ultimate
16766@cindex nnultimate
16767@cindex Ultimate Bulletin Board
16768
16769@uref{http://www.ultimatebb.com/, The Ultimate Bulletin Board} is
16770probably the most popular Web bulletin board system used. It has a
16771quite regular and nice interface, and it's possible to get the
16772information Gnus needs to keep groups updated.
16773
16774The easiest way to get started with @code{nnultimate} is to say
16775something like the following in the group buffer: @kbd{B nnultimate RET
16776http://www.tcj.com/messboard/ubbcgi/ RET}. (Substitute the @acronym{URL}
16777(not including @samp{Ultimate.cgi} or the like at the end) for a forum
16778you're interested in; there's quite a list of them on the Ultimate web
16779site.) Then subscribe to the groups you're interested in from the
16780server buffer, and read them from the group buffer.
16781
16782The following @code{nnultimate} variables can be altered:
16783
16784@table @code
16785@item nnultimate-directory
16786@vindex nnultimate-directory
16787The directory where @code{nnultimate} stores its files. The default is@*
16788@file{~/News/ultimate/}.
16789@end table
16790
16791
16792@node Web Archive
16793@subsection Web Archive
16794@cindex nnwarchive
16795@cindex Web Archive
16796
16797Some mailing lists only have archives on Web servers, such as
16798@uref{http://www.egroups.com/} and
16799@uref{http://www.mail-archive.com/}. It has a quite regular and nice
16800interface, and it's possible to get the information Gnus needs to keep
16801groups updated.
16802
16803@findex gnus-group-make-warchive-group
16804The easiest way to get started with @code{nnwarchive} is to say
16805something like the following in the group buffer: @kbd{M-x
16806gnus-group-make-warchive-group RET @var{an_egroup} RET egroups RET
16807www.egroups.com RET @var{your@@email.address} RET}. (Substitute the
16808@var{an_egroup} with the mailing list you subscribed, the
16809@var{your@@email.address} with your email address.), or to browse the
16810back end by @kbd{B nnwarchive RET mail-archive RET}.
16811
16812The following @code{nnwarchive} variables can be altered:
16813
16814@table @code
16815@item nnwarchive-directory
16816@vindex nnwarchive-directory
16817The directory where @code{nnwarchive} stores its files. The default is@*
16818@file{~/News/warchive/}.
16819
16820@item nnwarchive-login
16821@vindex nnwarchive-login
16822The account name on the web server.
16823
16824@item nnwarchive-passwd
16825@vindex nnwarchive-passwd
16826The password for your account on the web server.
16827@end table
16828
16829@node RSS
16830@subsection RSS
16831@cindex nnrss
16832@cindex RSS
16833
16834Some web sites have an RDF Site Summary (@acronym{RSS}).
16835@acronym{RSS} is a format for summarizing headlines from news related
16836sites (such as BBC or CNN). But basically anything list-like can be
16837presented as an @acronym{RSS} feed: weblogs, changelogs or recent
16838changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}).
16839
16840@acronym{RSS} has a quite regular and nice interface, and it's
16841possible to get the information Gnus needs to keep groups updated.
16842
16843Note: you had better use Emacs which supports the @code{utf-8} coding
16844system because @acronym{RSS} uses UTF-8 for encoding non-@acronym{ASCII}
16845text by default. It is also used by default for non-@acronym{ASCII}
16846group names.
16847
16848@kindex G R (Group)
16849Use @kbd{G R} from the group buffer to subscribe to a feed---you will be
16850prompted for the location, the title and the description of the feed.
16851The title, which allows any characters, will be used for the group name
16852and the name of the group data file. The description can be omitted.
16853
16854An easy way to get started with @code{nnrss} is to say something like
16855the following in the group buffer: @kbd{B nnrss RET RET y}, then
16856subscribe to groups.
16857
16858The @code{nnrss} back end saves the group data file in
16859@code{nnrss-directory} (see below) for each @code{nnrss} group. File
16860names containing non-@acronym{ASCII} characters will be encoded by the
16861coding system specified with the @code{nnmail-pathname-coding-system}
16862variable. If it is @code{nil}, in Emacs the coding system defaults to
16863the value of @code{default-file-name-coding-system}. If you are using
16864XEmacs and want to use non-@acronym{ASCII} group names, you should set
16865the value for the @code{nnmail-pathname-coding-system} variable properly.
16866
16867The @code{nnrss} back end generates @samp{multipart/alternative}
16868@acronym{MIME} articles in which each contains a @samp{text/plain} part
16869and a @samp{text/html} part.
16870
16871@cindex OPML
16872You can also use the following commands to import and export your
16873subscriptions from a file in @acronym{OPML} format (Outline Processor
16874Markup Language).
16875
16876@defun nnrss-opml-import file
16877Prompt for an @acronym{OPML} file, and subscribe to each feed in the
16878file.
16879@end defun
16880
16881@defun nnrss-opml-export
16882Write your current @acronym{RSS} subscriptions to a buffer in
16883@acronym{OPML} format.
16884@end defun
16885
16886The following @code{nnrss} variables can be altered:
16887
16888@table @code
16889@item nnrss-directory
16890@vindex nnrss-directory
16891The directory where @code{nnrss} stores its files. The default is
16892@file{~/News/rss/}.
16893
16894@item nnrss-file-coding-system
16895@vindex nnrss-file-coding-system
16896The coding system used when reading and writing the @code{nnrss} groups
16897data files. The default is the value of
16898@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}
16899in Emacs or @code{escape-quoted} in XEmacs).
16900
01c52d31
MB
16901@item nnrss-ignore-article-fields
16902@vindex nnrss-ignore-article-fields
16903Some feeds update constantly article fields during their publications,
16904e.g. to indicate the number of comments. However, if there is
16905a difference between the local article and the distant one, the latter
16906is considered to be new. To avoid this and discard some fields, set this
16907variable to the list of fields to be ignored. The default is
16908@code{'(slash:comments)}.
16909
4009494e
GM
16910@item nnrss-use-local
16911@vindex nnrss-use-local
16912@findex nnrss-generate-download-script
16913If you set @code{nnrss-use-local} to @code{t}, @code{nnrss} will read
16914the feeds from local files in @code{nnrss-directory}. You can use
16915the command @code{nnrss-generate-download-script} to generate a
16916download script using @command{wget}.
16917
16918@item nnrss-wash-html-in-text-plain-parts
16919Non-@code{nil} means that @code{nnrss} renders text in @samp{text/plain}
16920parts as @acronym{HTML}. The function specified by the
16921@code{mm-text-html-renderer} variable (@pxref{Display Customization,
16922,Display Customization, emacs-mime, The Emacs MIME Manual}) will be used
16923to render text. If it is @code{nil}, which is the default, text will
16924simply be folded. Leave it @code{nil} if you prefer to see
16925@samp{text/html} parts.
16926@end table
16927
16928The following code may be helpful, if you want to show the description in
16929the summary buffer.
16930
16931@lisp
16932(add-to-list 'nnmail-extra-headers nnrss-description-field)
16933(setq gnus-summary-line-format "%U%R%z%I%(%[%4L: %-15,15f%]%) %s%uX\n")
16934
16935(defun gnus-user-format-function-X (header)
16936 (let ((descr
16937 (assq nnrss-description-field (mail-header-extra header))))
16938 (if descr (concat "\n\t" (cdr descr)) "")))
16939@end lisp
16940
16941The following code may be useful to open an nnrss url directly from the
16942summary buffer.
16943
16944@lisp
16945(require 'browse-url)
16946
01c52d31 16947(defun browse-nnrss-url (arg)
4009494e
GM
16948 (interactive "p")
16949 (let ((url (assq nnrss-url-field
16950 (mail-header-extra
16951 (gnus-data-header
16952 (assq (gnus-summary-article-number)
16953 gnus-newsgroup-data))))))
16954 (if url
16955 (progn
16956 (browse-url (cdr url))
16957 (gnus-summary-mark-as-read-forward 1))
16958 (gnus-summary-scroll-up arg))))
16959
16960(eval-after-load "gnus"
16961 #'(define-key gnus-summary-mode-map
16962 (kbd "<RET>") 'browse-nnrss-url))
16963(add-to-list 'nnmail-extra-headers nnrss-url-field)
16964@end lisp
16965
9b3ebcb6 16966Even if you have added @samp{text/html} to the
4009494e
GM
16967@code{mm-discouraged-alternatives} variable (@pxref{Display
16968Customization, ,Display Customization, emacs-mime, The Emacs MIME
16969Manual}) since you don't want to see @acronym{HTML} parts, it might be
16970more useful especially in @code{nnrss} groups to display
16971@samp{text/html} parts. Here's an example of setting
16972@code{mm-discouraged-alternatives} as a group parameter (@pxref{Group
16973Parameters}) in order to display @samp{text/html} parts only in
16974@code{nnrss} groups:
16975
16976@lisp
16977;; @r{Set the default value of @code{mm-discouraged-alternatives}.}
16978(eval-after-load "gnus-sum"
16979 '(add-to-list
16980 'gnus-newsgroup-variables
16981 '(mm-discouraged-alternatives
16982 . '("text/html" "image/.*"))))
16983
16984;; @r{Display @samp{text/html} parts in @code{nnrss} groups.}
16985(add-to-list
16986 'gnus-parameters
16987 '("\\`nnrss:" (mm-discouraged-alternatives nil)))
16988@end lisp
16989
16990
16991@node Customizing W3
16992@subsection Customizing W3
16993@cindex W3
16994@cindex html
16995@cindex url
16996@cindex Netscape
16997
16998Gnus uses the url library to fetch web pages and Emacs/W3 (or those
16999alternatives) to display web pages. Emacs/W3 is documented in its own
17000manual, but there are some things that may be more relevant for Gnus
17001users.
17002
17003For instance, a common question is how to make Emacs/W3 follow links
17004using the @code{browse-url} functions (which will call some external web
17005browser like Netscape). Here's one way:
17006
17007@lisp
17008(eval-after-load "w3"
17009 '(progn
17010 (fset 'w3-fetch-orig (symbol-function 'w3-fetch))
17011 (defun w3-fetch (&optional url target)
17012 (interactive (list (w3-read-url-with-default)))
17013 (if (eq major-mode 'gnus-article-mode)
17014 (browse-url url)
17015 (w3-fetch-orig url target)))))
17016@end lisp
17017
17018Put that in your @file{.emacs} file, and hitting links in W3-rendered
17019@acronym{HTML} in the Gnus article buffers will use @code{browse-url} to
17020follow the link.
17021
17022
17023@node IMAP
17024@section IMAP
17025@cindex nnimap
17026@cindex @acronym{IMAP}
17027
17028@acronym{IMAP} is a network protocol for reading mail (or news, or @dots{}),
17029think of it as a modernized @acronym{NNTP}. Connecting to a @acronym{IMAP}
17030server is much similar to connecting to a news server, you just
17031specify the network address of the server.
17032
17033@acronym{IMAP} has two properties. First, @acronym{IMAP} can do
17034everything that @acronym{POP} can, it can hence be viewed as a
17035@acronym{POP++}. Secondly, @acronym{IMAP} is a mail storage protocol,
17036similar to @acronym{NNTP} being a news storage protocol---however,
17037@acronym{IMAP} offers more features than @acronym{NNTP} because news
17038is more or less read-only whereas mail is read-write.
17039
17040If you want to use @acronym{IMAP} as a @acronym{POP++}, use an imap
17041entry in @code{mail-sources}. With this, Gnus will fetch mails from
17042the @acronym{IMAP} server and store them on the local disk. This is
17043not the usage described in this section---@xref{Mail Sources}.
17044
17045If you want to use @acronym{IMAP} as a mail storage protocol, use an nnimap
17046entry in @code{gnus-secondary-select-methods}. With this, Gnus will
17047manipulate mails stored on the @acronym{IMAP} server. This is the kind of
17048usage explained in this section.
17049
17050A server configuration in @file{~/.gnus.el} with a few @acronym{IMAP}
17051servers might look something like the following. (Note that for
17052@acronym{TLS}/@acronym{SSL}, you need external programs and libraries,
17053see below.)
17054
17055@lisp
17056(setq gnus-secondary-select-methods
17057 '((nnimap "simpleserver") ; @r{no special configuration}
17058 ; @r{perhaps a ssh port forwarded server:}
17059 (nnimap "dolk"
17060 (nnimap-address "localhost")
17061 (nnimap-server-port 1430))
17062 ; @r{a UW server running on localhost}
17063 (nnimap "barbar"
17064 (nnimap-server-port 143)
17065 (nnimap-address "localhost")
17066 (nnimap-list-pattern ("INBOX" "mail/*")))
17067 ; @r{anonymous public cyrus server:}
17068 (nnimap "cyrus.andrew.cmu.edu"
17069 (nnimap-authenticator anonymous)
17070 (nnimap-list-pattern "archive.*")
17071 (nnimap-stream network))
17072 ; @r{a ssl server on a non-standard port:}
17073 (nnimap "vic20"
17074 (nnimap-address "vic20.somewhere.com")
17075 (nnimap-server-port 9930)
17076 (nnimap-stream ssl))))
17077@end lisp
17078
17079After defining the new server, you can subscribe to groups on the
17080server using normal Gnus commands such as @kbd{U} in the Group Buffer
17081(@pxref{Subscription Commands}) or via the Server Buffer
17082(@pxref{Server Buffer}).
17083
17084The following variables can be used to create a virtual @code{nnimap}
17085server:
17086
17087@table @code
17088
17089@item nnimap-address
17090@vindex nnimap-address
17091
17092The address of the remote @acronym{IMAP} server. Defaults to the virtual
17093server name if not specified.
17094
17095@item nnimap-server-port
17096@vindex nnimap-server-port
17097Port on server to contact. Defaults to port 143, or 993 for @acronym{TLS}/@acronym{SSL}.
17098
17099Note that this should be an integer, example server specification:
17100
17101@lisp
17102(nnimap "mail.server.com"
17103 (nnimap-server-port 4711))
17104@end lisp
17105
17106@item nnimap-list-pattern
17107@vindex nnimap-list-pattern
17108String or list of strings of mailboxes to limit available groups to.
17109This is used when the server has very many mailboxes and you're only
17110interested in a few---some servers export your home directory via
17111@acronym{IMAP}, you'll probably want to limit the mailboxes to those in
17112@file{~/Mail/*} then.
17113
17114The string can also be a cons of REFERENCE and the string as above, what
17115REFERENCE is used for is server specific, but on the University of
17116Washington server it's a directory that will be concatenated with the
17117mailbox.
17118
17119Example server specification:
17120
17121@lisp
17122(nnimap "mail.server.com"
17123 (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
17124 ("~friend/Mail/" . "list/*"))))
17125@end lisp
17126
17127@item nnimap-stream
17128@vindex nnimap-stream
17129The type of stream used to connect to your server. By default, nnimap
17130will detect and automatically use all of the below, with the exception
17131of @acronym{TLS}/@acronym{SSL}. (@acronym{IMAP} over
17132@acronym{TLS}/@acronym{SSL} is being replaced by STARTTLS, which can
17133be automatically detected, but it's not widely deployed yet.)
17134
17135Example server specification:
17136
17137@lisp
17138(nnimap "mail.server.com"
17139 (nnimap-stream ssl))
17140@end lisp
17141
17142Please note that the value of @code{nnimap-stream} is a symbol!
17143
17144@itemize @bullet
17145@item
17146@dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5). Requires the
17147@samp{gsasl} or @samp{imtest} program.
17148@item
17149@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
17150@item
17151@dfn{starttls:} Connect via the STARTTLS extension (similar to
17152@acronym{TLS}/@acronym{SSL}). Requires the external library @samp{starttls.el} and program
17153@samp{starttls}.
17154@item
17155@dfn{tls:} Connect through @acronym{TLS}. Requires GNUTLS (the program
17156@samp{gnutls-cli}).
17157@item
17158@dfn{ssl:} Connect through @acronym{SSL}. Requires OpenSSL (the program
17159@samp{openssl}) or SSLeay (@samp{s_client}).
17160@item
17161@dfn{shell:} Use a shell command to start @acronym{IMAP} connection.
17162@item
17163@dfn{network:} Plain, TCP/IP network connection.
17164@end itemize
17165
17166@vindex imap-kerberos4-program
17167The @samp{imtest} program is shipped with Cyrus IMAPD. If you're
17168using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version
171691.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
17170to make @code{imap.el} use a pty instead of a pipe when communicating
17171with @samp{imtest}. You will then suffer from a line length
17172restrictions on @acronym{IMAP} commands, which might make Gnus seem to hang
17173indefinitely if you have many articles in a mailbox. The variable
17174@code{imap-kerberos4-program} contain parameters to pass to the imtest
17175program.
17176
17177For @acronym{TLS} connection, the @code{gnutls-cli} program from GNUTLS is
17178needed. It is available from
17179@uref{http://www.gnu.org/software/gnutls/}.
17180
17181@vindex imap-gssapi-program
17182This parameter specifies a list of command lines that invoke a GSSAPI
17183authenticated @acronym{IMAP} stream in a subshell. They are tried
17184sequentially until a connection is made, or the list has been
17185exhausted. By default, @samp{gsasl} from GNU SASL, available from
17186@uref{http://www.gnu.org/software/gsasl/}, and the @samp{imtest}
17187program from Cyrus IMAPD (see @code{imap-kerberos4-program}), are
17188tried.
17189
17190@vindex imap-ssl-program
17191For @acronym{SSL} connections, the OpenSSL program is available from
17192@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
17193and nnimap support it too---although the most recent versions of
17194SSLeay, 0.9.x, are known to have serious bugs making it
17195useless. Earlier versions, especially 0.8.x, of SSLeay are known to
17196work. The variable @code{imap-ssl-program} contain parameters to pass
17197to OpenSSL/SSLeay.
17198
17199@vindex imap-shell-program
17200@vindex imap-shell-host
01c52d31
MB
17201For @acronym{IMAP} connections using the @code{shell} stream, the
17202variable @code{imap-shell-program} specify what program to call. Make
17203sure nothing is interfering with the output of the program, e.g., don't
17204forget to redirect the error output to the void.
4009494e
GM
17205
17206@item nnimap-authenticator
17207@vindex nnimap-authenticator
17208
17209The authenticator used to connect to the server. By default, nnimap
17210will use the most secure authenticator your server is capable of.
17211
17212Example server specification:
17213
17214@lisp
17215(nnimap "mail.server.com"
17216 (nnimap-authenticator anonymous))
17217@end lisp
17218
17219Please note that the value of @code{nnimap-authenticator} is a symbol!
17220
17221@itemize @bullet
17222@item
17223@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
17224external program @code{gsasl} or @code{imtest}.
17225@item
17226@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
17227@code{imtest}.
17228@item
17229@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Requires
17230external library @code{digest-md5.el}.
17231@item
17232@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
17233@item
17234@dfn{login:} Plain-text username/password via LOGIN.
17235@item
17236@dfn{anonymous:} Login as ``anonymous'', supplying your email address as password.
17237@end itemize
17238
17239@item nnimap-expunge-on-close
17240@cindex expunging
17241@vindex nnimap-expunge-on-close
17242Unlike Parmenides the @acronym{IMAP} designers have decided things that
17243don't exist actually do exist. More specifically, @acronym{IMAP} has
17244this concept of marking articles @code{Deleted} which doesn't actually
17245delete them, and this (marking them @code{Deleted}, that is) is what
17246nnimap does when you delete an article in Gnus (with @kbd{B DEL} or
17247similar).
17248
17249Since the articles aren't really removed when we mark them with the
17250@code{Deleted} flag we'll need a way to actually delete them. Feel like
17251running in circles yet?
17252
17253Traditionally, nnimap has removed all articles marked as @code{Deleted}
17254when closing a mailbox but this is now configurable by this server
17255variable.
17256
17257The possible options are:
17258
17259@table @code
17260
17261@item always
17262The default behavior, delete all articles marked as ``Deleted'' when
17263closing a mailbox.
17264@item never
17265Never actually delete articles. Currently there is no way of showing
17266the articles marked for deletion in nnimap, but other @acronym{IMAP} clients
17267may allow you to do this. If you ever want to run the EXPUNGE command
17268manually, @xref{Expunging mailboxes}.
17269@item ask
17270When closing mailboxes, nnimap will ask if you wish to expunge deleted
17271articles or not.
17272
17273@end table
17274
17275@item nnimap-importantize-dormant
17276@vindex nnimap-importantize-dormant
17277
17278If non-@code{nil} (the default), marks dormant articles as ticked (as
17279well), for other @acronym{IMAP} clients. Within Gnus, dormant articles will
17280naturally still (only) be marked as dormant. This is to make dormant
17281articles stand out, just like ticked articles, in other @acronym{IMAP}
17282clients. (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP}
17283has only one.)
17284
17285Probably the only reason for frobbing this would be if you're trying
17286enable per-user persistent dormant flags, using something like:
17287
17288@lisp
17289(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
17290 (format "gnus-dormant-%s" (user-login-name)))
17291(setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
17292 (format "KEYWORD gnus-dormant-%s" (user-login-name)))
17293@end lisp
17294
17295In this case, you would not want the per-user dormant flag showing up
17296as ticked for other users.
17297
17298@item nnimap-expunge-search-string
17299@cindex expunging
17300@vindex nnimap-expunge-search-string
17301@cindex expiring @acronym{IMAP} mail
17302
17303This variable contain the @acronym{IMAP} search command sent to server when
17304searching for articles eligible for expiring. The default is
17305@code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
17306UID set and the second @code{%s} is replaced by a date.
17307
17308Probably the only useful value to change this to is
17309@code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
17310messages instead of the internal article date. See section 6.4.4 of
17311RFC 2060 for more information on valid strings.
17312
17313However, if @code{nnimap-search-uids-not-since-is-evil}
17314is true, this variable has no effect since the search logic
17315is reversed, as described below.
17316
17317@item nnimap-authinfo-file
17318@vindex nnimap-authinfo-file
17319
17320A file containing credentials used to log in on servers. The format is
17321(almost) the same as the @code{ftp} @file{~/.netrc} file. See the
17322variable @code{nntp-authinfo-file} for exact syntax; also see
17323@ref{NNTP}. An example of an .authinfo line for an IMAP server, is:
17324
17325@example
17326machine students.uio.no login larsi password geheimnis port imap
17327@end example
17328
17329Note that it should be @code{port imap}, or @code{port 143}, if you
17330use a @code{nnimap-stream} of @code{tls} or @code{ssl}, even if the
17331actual port number used is port 993 for secured IMAP. For
17332convenience, Gnus will accept @code{port imaps} as a synonym of
17333@code{port imap}.
17334
17335@item nnimap-need-unselect-to-notice-new-mail
17336@vindex nnimap-need-unselect-to-notice-new-mail
17337
17338Unselect mailboxes before looking for new mail in them. Some servers
17339seem to need this under some circumstances; it was reported that
17340Courier 1.7.1 did.
17341
17342@item nnimap-nov-is-evil
17343@vindex nnimap-nov-is-evil
17344@cindex Courier @acronym{IMAP} server
17345@cindex @acronym{NOV}
17346
17347Never generate or use a local @acronym{NOV} database. Defaults to the
17348value of @code{gnus-agent}.
17349
17350Using a @acronym{NOV} database usually makes header fetching much
17351faster, but it uses the @code{UID SEARCH UID} command, which is very
17352slow on some servers (notably some versions of Courier). Since the Gnus
17353Agent caches the information in the @acronym{NOV} database without using
17354the slow command, this variable defaults to true if the Agent is in use,
17355and false otherwise.
17356
17357@item nnimap-search-uids-not-since-is-evil
17358@vindex nnimap-search-uids-not-since-is-evil
17359@cindex Courier @acronym{IMAP} server
17360@cindex expiring @acronym{IMAP} mail
17361
17362Avoid the @code{UID SEARCH UID @var{message numbers} NOT SINCE
17363@var{date}} command, which is slow on some @acronym{IMAP} servers
17364(notably, some versions of Courier). Instead, use @code{UID SEARCH SINCE
17365@var{date}} and prune the list of expirable articles within Gnus.
17366
17367When Gnus expires your mail (@pxref{Expiring Mail}), it starts with a
17368list of expirable articles and asks the IMAP server questions like ``Of
17369these articles, which ones are older than a week?'' While this seems
17370like a perfectly reasonable question, some IMAP servers take a long time
17371to answer it, since they seemingly go looking into every old article to
17372see if it is one of the expirable ones. Curiously, the question ``Of
17373@emph{all} articles, which ones are newer than a week?'' seems to be
17374much faster to answer, so setting this variable causes Gnus to ask this
17375question and figure out the answer to the real question itself.
17376
17377This problem can really sneak up on you: when you first configure Gnus,
17378everything works fine, but once you accumulate a couple thousand
17379messages, you start cursing Gnus for being so slow. On the other hand,
17380if you get a lot of email within a week, setting this variable will
17381cause a lot of network traffic between Gnus and the IMAP server.
17382
01c52d31
MB
17383@item nnimap-logout-timeout
17384@vindex nnimap-logout-timeout
17385
17386There is a case where a connection to a @acronym{IMAP} server is unable
17387to close, when connecting to the server via a certain kind of network,
17388e.g. @acronym{VPN}. In that case, it will be observed that a connection
17389between Emacs and the local network looks alive even if the server has
17390closed a connection for some reason (typically, a timeout).
17391Consequently, Emacs continues waiting for a response from the server for
17392the @code{LOGOUT} command that Emacs sent, or hangs in other words. If
17393you are in such a network, setting this variable to a number of seconds
17394will be helpful. If it is set, a hung connection will be closed
17395forcibly, after this number of seconds from the time Emacs sends the
17396@code{LOGOUT} command. It should not be too small value but too large
17397value will be inconvenient too. Perhaps the value 1.0 will be a good
17398candidate but it might be worth trying some other values.
17399
17400Example server specification:
17401
17402@lisp
17403(nnimap "mail.server.com"
17404 (nnimap-logout-timeout 1.0))
17405@end lisp
17406
4009494e
GM
17407@end table
17408
17409@menu
17410* Splitting in IMAP:: Splitting mail with nnimap.
17411* Expiring in IMAP:: Expiring mail with nnimap.
17412* Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox.
17413* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button.
17414* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
17415* Debugging IMAP:: What to do when things don't work.
17416@end menu
17417
17418
17419
17420@node Splitting in IMAP
17421@subsection Splitting in IMAP
17422@cindex splitting imap mail
17423
17424Splitting is something Gnus users have loved and used for years, and now
17425the rest of the world is catching up. Yeah, dream on, not many
17426@acronym{IMAP} servers have server side splitting and those that have
17427splitting seem to use some non-standard protocol. This means that
17428@acronym{IMAP} support for Gnus has to do its own splitting.
17429
17430And it does.
17431
17432(Incidentally, people seem to have been dreaming on, and Sieve has
17433gaining a market share and is supported by several IMAP servers.
17434Fortunately, Gnus support it too, @xref{Sieve Commands}.)
17435
17436Here are the variables of interest:
17437
17438@table @code
17439
17440@item nnimap-split-crosspost
17441@cindex splitting, crosspost
17442@cindex crosspost
17443@vindex nnimap-split-crosspost
17444
17445If non-@code{nil}, do crossposting if several split methods match the
17446mail. If @code{nil}, the first match in @code{nnimap-split-rule}
17447found will be used.
17448
17449Nnmail equivalent: @code{nnmail-crosspost}.
17450
17451@item nnimap-split-inbox
17452@cindex splitting, inbox
17453@cindex inbox
17454@vindex nnimap-split-inbox
17455
17456A string or a list of strings that gives the name(s) of @acronym{IMAP}
17457mailboxes to split from. Defaults to @code{nil}, which means that
17458splitting is disabled!
17459
17460@lisp
17461(setq nnimap-split-inbox
17462 '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
17463@end lisp
17464
17465No nnmail equivalent.
17466
17467@item nnimap-split-rule
17468@cindex splitting, rules
17469@vindex nnimap-split-rule
17470
17471New mail found in @code{nnimap-split-inbox} will be split according to
17472this variable.
17473
17474This variable contains a list of lists, where the first element in the
17475sublist gives the name of the @acronym{IMAP} mailbox to move articles
17476matching the regexp in the second element in the sublist. Got that?
17477Neither did I, we need examples.
17478
17479@lisp
17480(setq nnimap-split-rule
17481 '(("INBOX.nnimap"
17482 "^Sender: owner-nnimap@@vic20.globalcom.se")
17483 ("INBOX.junk" "^Subject:.*MAKE MONEY")
17484 ("INBOX.private" "")))
17485@end lisp
17486
17487This will put all articles from the nnimap mailing list into mailbox
17488INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
17489into INBOX.junk and everything else in INBOX.private.
17490
17491The first string may contain @samp{\\1} forms, like the ones used by
17492replace-match to insert sub-expressions from the matched text. For
17493instance:
17494
17495@lisp
17496("INBOX.lists.\\1" "^Sender: owner-\\([a-z-]+\\)@@")
17497@end lisp
17498
17499The first element can also be the symbol @code{junk} to indicate that
17500matching messages should simply be deleted. Use with care.
17501
17502The second element can also be a function. In that case, it will be
17503called with the first element of the rule as the argument, in a buffer
17504containing the headers of the article. It should return a
17505non-@code{nil} value if it thinks that the mail belongs in that group.
17506
17507Nnmail users might recollect that the last regexp had to be empty to
17508match all articles (like in the example above). This is not required in
17509nnimap. Articles not matching any of the regexps will not be moved out
17510of your inbox. (This might affect performance if you keep lots of
17511unread articles in your inbox, since the splitting code would go over
17512them every time you fetch new mail.)
17513
17514These rules are processed from the beginning of the alist toward the
17515end. The first rule to make a match will ``win'', unless you have
17516crossposting enabled. In that case, all matching rules will ``win''.
17517
17518This variable can also have a function as its value, the function will
17519be called with the headers narrowed and should return a group where it
17520thinks the article should be split to. See @code{nnimap-split-fancy}.
17521
17522The splitting code tries to create mailboxes if it needs to.
17523
17524To allow for different split rules on different virtual servers, and
17525even different split rules in different inboxes on the same server,
17526the syntax of this variable have been extended along the lines of:
17527
17528@lisp
17529(setq nnimap-split-rule
17530 '(("my1server" (".*" (("ding" "ding@@gnus.org")
17531 ("junk" "From:.*Simon"))))
17532 ("my2server" ("INBOX" nnimap-split-fancy))
17533 ("my[34]server" (".*" (("private" "To:.*Simon")
17534 ("junk" my-junk-func))))))
17535@end lisp
17536
17537The virtual server name is in fact a regexp, so that the same rules
17538may apply to several servers. In the example, the servers
17539@code{my3server} and @code{my4server} both use the same rules.
17540Similarly, the inbox string is also a regexp. The actual splitting
17541rules are as before, either a function, or a list with group/regexp or
17542group/function elements.
17543
17544Nnmail equivalent: @code{nnmail-split-methods}.
17545
17546@item nnimap-split-predicate
17547@cindex splitting
17548@vindex nnimap-split-predicate
17549
17550Mail matching this predicate in @code{nnimap-split-inbox} will be
17551split, it is a string and the default is @samp{UNSEEN UNDELETED}.
17552
17553This might be useful if you use another @acronym{IMAP} client to read mail in
17554your inbox but would like Gnus to split all articles in the inbox
17555regardless of readedness. Then you might change this to
17556@samp{UNDELETED}.
17557
17558@item nnimap-split-fancy
17559@cindex splitting, fancy
17560@findex nnimap-split-fancy
17561@vindex nnimap-split-fancy
17562
17563It's possible to set @code{nnimap-split-rule} to
17564@code{nnmail-split-fancy} if you want to use fancy
17565splitting. @xref{Fancy Mail Splitting}.
17566
17567However, to be able to have different fancy split rules for nnmail and
17568nnimap back ends you can set @code{nnimap-split-rule} to
17569@code{nnimap-split-fancy} and define the nnimap specific fancy split
17570rule in @code{nnimap-split-fancy}.
17571
17572Example:
17573
17574@lisp
17575(setq nnimap-split-rule 'nnimap-split-fancy
17576 nnimap-split-fancy ...)
17577@end lisp
17578
17579Nnmail equivalent: @code{nnmail-split-fancy}.
17580
17581@item nnimap-split-download-body
17582@findex nnimap-split-download-body
17583@vindex nnimap-split-download-body
17584
17585Set to non-@code{nil} to download entire articles during splitting.
17586This is generally not required, and will slow things down
17587considerably. You may need it if you want to use an advanced
17588splitting function that analyzes the body to split the article.
17589
17590@end table
17591
17592@node Expiring in IMAP
17593@subsection Expiring in IMAP
17594@cindex expiring @acronym{IMAP} mail
17595
17596Even though @code{nnimap} is not a proper @code{nnmail} derived back
17597end, it supports most features in regular expiring (@pxref{Expiring
17598Mail}). Unlike splitting in @acronym{IMAP} (@pxref{Splitting in
17599IMAP}) it does not clone the @code{nnmail} variables (i.e., creating
17600@var{nnimap-expiry-wait}) but reuse the @code{nnmail} variables. What
17601follows below are the variables used by the @code{nnimap} expiry
17602process.
17603
17604A note on how the expire mark is stored on the @acronym{IMAP} server is
17605appropriate here as well. The expire mark is translated into a
17606@code{imap} client specific mark, @code{gnus-expire}, and stored on the
17607message. This means that likely only Gnus will understand and treat
17608the @code{gnus-expire} mark properly, although other clients may allow
17609you to view client specific flags on the message. It also means that
17610your server must support permanent storage of client specific flags on
17611messages. Most do, fortunately.
17612
17613If expiring @acronym{IMAP} mail seems very slow, try setting the server
17614variable @code{nnimap-search-uids-not-since-is-evil}.
17615
17616@table @code
17617
17618@item nnmail-expiry-wait
17619@item nnmail-expiry-wait-function
17620
17621These variables are fully supported. The expire value can be a
17622number, the symbol @code{immediate} or @code{never}.
17623
17624@item nnmail-expiry-target
17625
17626This variable is supported, and internally implemented by calling the
17627@code{nnmail} functions that handle this. It contains an optimization
17628that if the destination is a @acronym{IMAP} group on the same server, the
17629article is copied instead of appended (that is, uploaded again).
17630
17631@end table
17632
17633@node Editing IMAP ACLs
17634@subsection Editing IMAP ACLs
17635@cindex editing imap acls
17636@cindex Access Control Lists
17637@cindex Editing @acronym{IMAP} ACLs
17638@kindex G l (Group)
17639@findex gnus-group-nnimap-edit-acl
17640
17641ACL stands for Access Control List. ACLs are used in @acronym{IMAP} for
17642limiting (or enabling) other users access to your mail boxes. Not all
17643@acronym{IMAP} servers support this, this function will give an error if it
17644doesn't.
17645
17646To edit an ACL for a mailbox, type @kbd{G l}
17647(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with an ACL
17648editing window with detailed instructions.
17649
17650Some possible uses:
17651
17652@itemize @bullet
17653@item
17654Giving ``anyone'' the ``lrs'' rights (lookup, read, keep seen/unseen flags)
17655on your mailing list mailboxes enables other users on the same server to
17656follow the list without subscribing to it.
17657@item
17658At least with the Cyrus server, you are required to give the user
17659``anyone'' posting ("p") capabilities to have ``plussing'' work (that is,
17660mail sent to user+mailbox@@domain ending up in the @acronym{IMAP} mailbox
17661INBOX.mailbox).
17662@end itemize
17663
17664@node Expunging mailboxes
17665@subsection Expunging mailboxes
17666@cindex expunging
17667
17668@cindex expunge
17669@cindex manual expunging
17670@kindex G x (Group)
17671@findex gnus-group-nnimap-expunge
17672
17673If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
17674you may want the option of expunging all deleted articles in a mailbox
17675manually. This is exactly what @kbd{G x} does.
17676
17677Currently there is no way of showing deleted articles, you can just
17678delete them.
17679
17680@node A note on namespaces
17681@subsection A note on namespaces
17682@cindex IMAP namespace
17683@cindex namespaces
17684
17685The @acronym{IMAP} protocol has a concept called namespaces, described
17686by the following text in the RFC2060:
17687
17688@display
176895.1.2. Mailbox Namespace Naming Convention
17690
17691 By convention, the first hierarchical element of any mailbox name
17692 which begins with "#" identifies the "namespace" of the remainder of
17693 the name. This makes it possible to disambiguate between different
17694 types of mailbox stores, each of which have their own namespaces.
17695
17696 For example, implementations which offer access to USENET
17697 newsgroups MAY use the "#news" namespace to partition the USENET
17698 newsgroup namespace from that of other mailboxes. Thus, the
17699 comp.mail.misc newsgroup would have an mailbox name of
17700 "#news.comp.mail.misc", and the name "comp.mail.misc" could refer
17701 to a different object (e.g. a user's private mailbox).
17702@end display
17703
17704While there is nothing in this text that warrants concern for the
17705@acronym{IMAP} implementation in Gnus, some servers use namespace
17706prefixes in a way that does not work with how Gnus uses mailbox names.
17707
17708Specifically, University of Washington's @acronym{IMAP} server uses
17709mailbox names like @code{#driver.mbx/read-mail} which are valid only
17710in the @sc{create} and @sc{append} commands. After the mailbox is
17711created (or a messages is appended to a mailbox), it must be accessed
17712without the namespace prefix, i.e. @code{read-mail}. Since Gnus do
17713not make it possible for the user to guarantee that user entered
17714mailbox names will only be used with the CREATE and APPEND commands,
17715you should simply not use the namespace prefixed mailbox names in
17716Gnus.
17717
17718See the UoW IMAPD documentation for the @code{#driver.*/} prefix
17719for more information on how to use the prefixes. They are a power
17720tool and should be used only if you are sure what the effects are.
17721
17722@node Debugging IMAP
17723@subsection Debugging IMAP
17724@cindex IMAP debugging
17725@cindex protocol dump (IMAP)
17726
17727@acronym{IMAP} is a complex protocol, more so than @acronym{NNTP} or
17728@acronym{POP3}. Implementation bugs are not unlikely, and we do our
17729best to fix them right away. If you encounter odd behavior, chances
17730are that either the server or Gnus is buggy.
17731
17732If you are familiar with network protocols in general, you will
17733probably be able to extract some clues from the protocol dump of the
17734exchanges between Gnus and the server. Even if you are not familiar
17735with network protocols, when you include the protocol dump in
17736@acronym{IMAP}-related bug reports you are helping us with data
17737critical to solving the problem. Therefore, we strongly encourage you
17738to include the protocol dump when reporting IMAP bugs in Gnus.
17739
17740
17741@vindex imap-log
17742Because the protocol dump, when enabled, generates lots of data, it is
17743disabled by default. You can enable it by setting @code{imap-log} as
17744follows:
17745
17746@lisp
17747(setq imap-log t)
17748@end lisp
17749
17750This instructs the @code{imap.el} package to log any exchanges with
17751the server. The log is stored in the buffer @samp{*imap-log*}. Look
17752for error messages, which sometimes are tagged with the keyword
17753@code{BAD}---but when submitting a bug, make sure to include all the
17754data.
17755
17756@node Other Sources
17757@section Other Sources
17758
17759Gnus can do more than just read news or mail. The methods described
17760below allow Gnus to view directories and files as if they were
17761newsgroups.
17762
17763@menu
17764* Directory Groups:: You can read a directory as if it was a newsgroup.
17765* Anything Groups:: Dired? Who needs dired?
17766* Document Groups:: Single files can be the basis of a group.
17767* SOUP:: Reading @sc{soup} packets ``offline''.
17768* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
17769@end menu
17770
17771
17772@node Directory Groups
17773@subsection Directory Groups
17774@cindex nndir
17775@cindex directory groups
17776
17777If you have a directory that has lots of articles in separate files in
17778it, you might treat it as a newsgroup. The files have to have numerical
17779names, of course.
17780
17781This might be an opportune moment to mention @code{ange-ftp} (and its
17782successor @code{efs}), that most wonderful of all wonderful Emacs
17783packages. When I wrote @code{nndir}, I didn't think much about it---a
17784back end to read directories. Big deal.
17785
17786@code{ange-ftp} changes that picture dramatically. For instance, if you
17787enter the @code{ange-ftp} file name
17788@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
17789@code{ange-ftp} or @code{efs} will actually allow you to read this
17790directory over at @samp{sina} as a newsgroup. Distributed news ahoy!
17791
17792@code{nndir} will use @acronym{NOV} files if they are present.
17793
17794@code{nndir} is a ``read-only'' back end---you can't delete or expire
17795articles with this method. You can use @code{nnmh} or @code{nnml} for
17796whatever you use @code{nndir} for, so you could switch to any of those
17797methods if you feel the need to have a non-read-only @code{nndir}.
17798
17799
17800@node Anything Groups
17801@subsection Anything Groups
17802@cindex nneething
17803
17804From the @code{nndir} back end (which reads a single spool-like
17805directory), it's just a hop and a skip to @code{nneething}, which
17806pretends that any arbitrary directory is a newsgroup. Strange, but
17807true.
17808
17809When @code{nneething} is presented with a directory, it will scan this
17810directory and assign article numbers to each file. When you enter such
17811a group, @code{nneething} must create ``headers'' that Gnus can use.
17812After all, Gnus is a newsreader, in case you're forgetting.
17813@code{nneething} does this in a two-step process. First, it snoops each
17814file in question. If the file looks like an article (i.e., the first
17815few lines look like headers), it will use this as the head. If this is
17816just some arbitrary file without a head (e.g. a C source file),
17817@code{nneething} will cobble up a header out of thin air. It will use
17818file ownership, name and date and do whatever it can with these
17819elements.
17820
17821All this should happen automatically for you, and you will be presented
17822with something that looks very much like a newsgroup. Totally like a
17823newsgroup, to be precise. If you select an article, it will be displayed
17824in the article buffer, just as usual.
17825
17826If you select a line that represents a directory, Gnus will pop you into
17827a new summary buffer for this @code{nneething} group. And so on. You can
17828traverse the entire disk this way, if you feel like, but remember that
17829Gnus is not dired, really, and does not intend to be, either.
17830
17831There are two overall modes to this action---ephemeral or solid. When
17832doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
17833will not store information on what files you have read, and what files
17834are new, and so on. If you create a solid @code{nneething} group the
17835normal way with @kbd{G m}, Gnus will store a mapping table between
17836article numbers and file names, and you can treat this group like any
17837other groups. When you activate a solid @code{nneething} group, you will
17838be told how many unread articles it contains, etc., etc.
17839
17840Some variables:
17841
17842@table @code
17843@item nneething-map-file-directory
17844@vindex nneething-map-file-directory
17845All the mapping files for solid @code{nneething} groups will be stored
17846in this directory, which defaults to @file{~/.nneething/}.
17847
17848@item nneething-exclude-files
17849@vindex nneething-exclude-files
17850All files that match this regexp will be ignored. Nice to use to exclude
17851auto-save files and the like, which is what it does by default.
17852
17853@item nneething-include-files
17854@vindex nneething-include-files
17855Regexp saying what files to include in the group. If this variable is
17856non-@code{nil}, only files matching this regexp will be included.
17857
17858@item nneething-map-file
17859@vindex nneething-map-file
17860Name of the map files.
17861@end table
17862
17863
17864@node Document Groups
17865@subsection Document Groups
17866@cindex nndoc
17867@cindex documentation group
17868@cindex help group
17869
17870@code{nndoc} is a cute little thing that will let you read a single file
17871as a newsgroup. Several files types are supported:
17872
17873@table @code
17874@cindex Babyl
17875@cindex Rmail mbox
17876@item babyl
17877The Babyl (Rmail) mail box.
17878
17879@cindex mbox
17880@cindex Unix mbox
17881@item mbox
17882The standard Unix mbox file.
17883
17884@cindex MMDF mail box
17885@item mmdf
17886The MMDF mail box format.
17887
17888@item news
17889Several news articles appended into a file.
17890
17891@cindex rnews batch files
17892@item rnews
17893The rnews batch transport format.
17894
17895@item nsmail
17896Netscape mail boxes.
17897
17898@item mime-parts
17899@acronym{MIME} multipart messages.
17900
17901@item standard-digest
17902The standard (RFC 1153) digest format.
17903
17904@item mime-digest
17905A @acronym{MIME} digest of messages.
17906
17907@item lanl-gov-announce
17908Announcement messages from LANL Gov Announce.
17909
17910@cindex forwarded messages
17911@item rfc822-forward
17912A message forwarded according to RFC822.
17913
17914@item outlook
17915The Outlook mail box.
17916
17917@item oe-dbx
17918The Outlook Express dbx mail box.
17919
17920@item exim-bounce
17921A bounce message from the Exim MTA.
17922
17923@item forward
17924A message forwarded according to informal rules.
17925
17926@item rfc934
17927An RFC934-forwarded message.
17928
17929@item mailman
17930A mailman digest.
17931
17932@item clari-briefs
17933A digest of Clarinet brief news items.
17934
17935@item slack-digest
17936Non-standard digest format---matches most things, but does it badly.
17937
17938@item mail-in-mail
17939The last resort.
17940@end table
17941
17942You can also use the special ``file type'' @code{guess}, which means
17943that @code{nndoc} will try to guess what file type it is looking at.
17944@code{digest} means that @code{nndoc} should guess what digest type the
17945file is.
17946
17947@code{nndoc} will not try to change the file or insert any extra headers into
17948it---it will simply, like, let you use the file as the basis for a
17949group. And that's it.
17950
17951If you have some old archived articles that you want to insert into your
17952new & spiffy Gnus mail back end, @code{nndoc} can probably help you with
17953that. Say you have an old @file{RMAIL} file with mail that you now want
17954to split into your new @code{nnml} groups. You look at that file using
17955@code{nndoc} (using the @kbd{G f} command in the group buffer
17956(@pxref{Foreign Groups})), set the process mark on all the articles in
17957the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r})
17958using @code{nnml}. If all goes well, all the mail in the @file{RMAIL}
17959file is now also stored in lots of @code{nnml} directories, and you can
17960delete that pesky @file{RMAIL} file. If you have the guts!
17961
17962Virtual server variables:
17963
17964@table @code
17965@item nndoc-article-type
17966@vindex nndoc-article-type
17967This should be one of @code{mbox}, @code{babyl}, @code{digest},
17968@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
17969@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
17970@code{slack-digest}, @code{clari-briefs}, @code{nsmail}, @code{outlook},
17971@code{oe-dbx}, @code{mailman}, and @code{mail-in-mail} or @code{guess}.
17972
17973@item nndoc-post-type
17974@vindex nndoc-post-type
17975This variable says whether Gnus is to consider the group a news group or
17976a mail group. There are two valid values: @code{mail} (the default)
17977and @code{news}.
17978@end table
17979
17980@menu
17981* Document Server Internals:: How to add your own document types.
17982@end menu
17983
17984
17985@node Document Server Internals
17986@subsubsection Document Server Internals
17987
17988Adding new document types to be recognized by @code{nndoc} isn't
17989difficult. You just have to whip up a definition of what the document
17990looks like, write a predicate function to recognize that document type,
17991and then hook into @code{nndoc}.
17992
17993First, here's an example document type definition:
17994
17995@example
17996(mmdf
17997 (article-begin . "^\^A\^A\^A\^A\n")
17998 (body-end . "^\^A\^A\^A\^A\n"))
17999@end example
18000
18001The definition is simply a unique @dfn{name} followed by a series of
18002regexp pseudo-variable settings. Below are the possible
18003variables---don't be daunted by the number of variables; most document
18004types can be defined with very few settings:
18005
18006@table @code
18007@item first-article
18008If present, @code{nndoc} will skip past all text until it finds
18009something that match this regexp. All text before this will be
18010totally ignored.
18011
18012@item article-begin
18013This setting has to be present in all document type definitions. It
18014says what the beginning of each article looks like. To do more
18015complicated things that cannot be dealt with a simple regexp, you can
18016use @code{article-begin-function} instead of this.
18017
18018@item article-begin-function
18019If present, this should be a function that moves point to the beginning
18020of each article. This setting overrides @code{article-begin}.
18021
18022@item head-begin
18023If present, this should be a regexp that matches the head of the
18024article. To do more complicated things that cannot be dealt with a
18025simple regexp, you can use @code{head-begin-function} instead of this.
18026
18027@item head-begin-function
18028If present, this should be a function that moves point to the head of
18029the article. This setting overrides @code{head-begin}.
18030
18031@item head-end
18032This should match the end of the head of the article. It defaults to
18033@samp{^$}---the empty line.
18034
18035@item body-begin
18036This should match the beginning of the body of the article. It defaults
18037to @samp{^\n}. To do more complicated things that cannot be dealt with
18038a simple regexp, you can use @code{body-begin-function} instead of this.
18039
18040@item body-begin-function
18041If present, this function should move point to the beginning of the body
18042of the article. This setting overrides @code{body-begin}.
18043
18044@item body-end
18045If present, this should match the end of the body of the article. To do
18046more complicated things that cannot be dealt with a simple regexp, you
18047can use @code{body-end-function} instead of this.
18048
18049@item body-end-function
18050If present, this function should move point to the end of the body of
18051the article. This setting overrides @code{body-end}.
18052
18053@item file-begin
18054If present, this should match the beginning of the file. All text
18055before this regexp will be totally ignored.
18056
18057@item file-end
18058If present, this should match the end of the file. All text after this
18059regexp will be totally ignored.
18060
18061@end table
18062
18063So, using these variables @code{nndoc} is able to dissect a document
18064file into a series of articles, each with a head and a body. However, a
18065few more variables are needed since not all document types are all that
18066news-like---variables needed to transform the head or the body into
18067something that's palatable for Gnus:
18068
18069@table @code
18070@item prepare-body-function
18071If present, this function will be called when requesting an article. It
18072will be called with point at the start of the body, and is useful if the
18073document has encoded some parts of its contents.
18074
18075@item article-transform-function
18076If present, this function is called when requesting an article. It's
18077meant to be used for more wide-ranging transformation of both head and
18078body of the article.
18079
18080@item generate-head-function
18081If present, this function is called to generate a head that Gnus can
18082understand. It is called with the article number as a parameter, and is
18083expected to generate a nice head for the article in question. It is
18084called when requesting the headers of all articles.
18085
18086@item generate-article-function
18087If present, this function is called to generate an entire article that
18088Gnus can understand. It is called with the article number as a
18089parameter when requesting all articles.
18090
18091@item dissection-function
18092If present, this function is called to dissect a document by itself,
18093overriding @code{first-article}, @code{article-begin},
18094@code{article-begin-function}, @code{head-begin},
18095@code{head-begin-function}, @code{head-end}, @code{body-begin},
18096@code{body-begin-function}, @code{body-end}, @code{body-end-function},
18097@code{file-begin}, and @code{file-end}.
18098
18099@end table
18100
18101Let's look at the most complicated example I can come up with---standard
18102digests:
18103
18104@example
18105(standard-digest
18106 (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
18107 (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
18108 (prepare-body-function . nndoc-unquote-dashes)
18109 (body-end-function . nndoc-digest-body-end)
18110 (head-end . "^ ?$")
18111 (body-begin . "^ ?\n")
18112 (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
18113 (subtype digest guess))
18114@end example
18115
18116We see that all text before a 70-width line of dashes is ignored; all
18117text after a line that starts with that @samp{^End of} is also ignored;
18118each article begins with a 30-width line of dashes; the line separating
18119the head from the body may contain a single space; and that the body is
18120run through @code{nndoc-unquote-dashes} before being delivered.
18121
18122To hook your own document definition into @code{nndoc}, use the
18123@code{nndoc-add-type} function. It takes two parameters---the first
18124is the definition itself and the second (optional) parameter says
18125where in the document type definition alist to put this definition.
18126The alist is traversed sequentially, and
18127@code{nndoc-@var{type}-type-p} is called for a given type @var{type}.
18128So @code{nndoc-mmdf-type-p} is called to see whether a document is of
18129@code{mmdf} type, and so on. These type predicates should return
18130@code{nil} if the document is not of the correct type; @code{t} if it
18131is of the correct type; and a number if the document might be of the
18132correct type. A high number means high probability; a low number
18133means low probability with @samp{0} being the lowest valid number.
18134
18135
18136@node SOUP
18137@subsection SOUP
18138@cindex SOUP
18139@cindex offline
18140
18141In the PC world people often talk about ``offline'' newsreaders. These
18142are thingies that are combined reader/news transport monstrosities.
18143With built-in modem programs. Yecchh!
18144
18145Of course, us Unix Weenie types of human beans use things like
18146@code{uucp} and, like, @code{nntpd} and set up proper news and mail
18147transport things like Ghod intended. And then we just use normal
18148newsreaders.
18149
18150However, it can sometimes be convenient to do something that's a bit
18151easier on the brain if you have a very slow modem, and you're not really
18152that interested in doing things properly.
18153
18154A file format called @sc{soup} has been developed for transporting news
18155and mail from servers to home machines and back again. It can be a bit
18156fiddly.
18157
18158First some terminology:
18159
18160@table @dfn
18161
18162@item server
18163This is the machine that is connected to the outside world and where you
18164get news and/or mail from.
18165
18166@item home machine
18167This is the machine that you want to do the actual reading and responding
18168on. It is typically not connected to the rest of the world in any way.
18169
18170@item packet
18171Something that contains messages and/or commands. There are two kinds
18172of packets:
18173
18174@table @dfn
18175@item message packets
18176These are packets made at the server, and typically contain lots of
18177messages for you to read. These are called @file{SoupoutX.tgz} by
18178default, where @var{x} is a number.
18179
18180@item response packets
18181These are packets made at the home machine, and typically contains
18182replies that you've written. These are called @file{SoupinX.tgz} by
18183default, where @var{x} is a number.
18184
18185@end table
18186
18187@end table
18188
18189
18190@enumerate
18191
18192@item
18193You log in on the server and create a @sc{soup} packet. You can either
18194use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
18195can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
18196s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
18197
18198@item
18199You transfer the packet home. Rail, boat, car or modem will do fine.
18200
18201@item
18202You put the packet in your home directory.
18203
18204@item
18205You fire up Gnus on your home machine using the @code{nnsoup} back end as
18206the native or secondary server.
18207
18208@item
18209You read articles and mail and answer and followup to the things you
18210want (@pxref{SOUP Replies}).
18211
18212@item
18213You do the @kbd{G s r} command to pack these replies into a @sc{soup}
18214packet.
18215
18216@item
18217You transfer this packet to the server.
18218
18219@item
18220You use Gnus to mail this packet out with the @kbd{G s s} command.
18221
18222@item
18223You then repeat until you die.
18224
18225@end enumerate
18226
18227So you basically have a bipartite system---you use @code{nnsoup} for
18228reading and Gnus for packing/sending these @sc{soup} packets.
18229
18230@menu
18231* SOUP Commands:: Commands for creating and sending @sc{soup} packets
18232* SOUP Groups:: A back end for reading @sc{soup} packets.
18233* SOUP Replies:: How to enable @code{nnsoup} to take over mail and news.
18234@end menu
18235
18236
18237@node SOUP Commands
18238@subsubsection SOUP Commands
18239
18240These are commands for creating and manipulating @sc{soup} packets.
18241
18242@table @kbd
18243@item G s b
18244@kindex G s b (Group)
18245@findex gnus-group-brew-soup
18246Pack all unread articles in the current group
18247(@code{gnus-group-brew-soup}). This command understands the
18248process/prefix convention.
18249
18250@item G s w
18251@kindex G s w (Group)
18252@findex gnus-soup-save-areas
18253Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
18254
18255@item G s s
18256@kindex G s s (Group)
18257@findex gnus-soup-send-replies
18258Send all replies from the replies packet
18259(@code{gnus-soup-send-replies}).
18260
18261@item G s p
18262@kindex G s p (Group)
18263@findex gnus-soup-pack-packet
18264Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
18265
18266@item G s r
18267@kindex G s r (Group)
18268@findex nnsoup-pack-replies
18269Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
18270
18271@item O s
18272@kindex O s (Summary)
18273@findex gnus-soup-add-article
18274This summary-mode command adds the current article to a @sc{soup} packet
18275(@code{gnus-soup-add-article}). It understands the process/prefix
18276convention (@pxref{Process/Prefix}).
18277
18278@end table
18279
18280
18281There are a few variables to customize where Gnus will put all these
18282thingies:
18283
18284@table @code
18285
18286@item gnus-soup-directory
18287@vindex gnus-soup-directory
18288Directory where Gnus will save intermediate files while composing
18289@sc{soup} packets. The default is @file{~/SoupBrew/}.
18290
18291@item gnus-soup-replies-directory
18292@vindex gnus-soup-replies-directory
18293This is what Gnus will use as a temporary directory while sending our
18294reply packets. @file{~/SoupBrew/SoupReplies/} is the default.
18295
18296@item gnus-soup-prefix-file
18297@vindex gnus-soup-prefix-file
18298Name of the file where Gnus stores the last used prefix. The default is
18299@samp{gnus-prefix}.
18300
18301@item gnus-soup-packer
18302@vindex gnus-soup-packer
18303A format string command for packing a @sc{soup} packet. The default is
18304@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
18305
18306@item gnus-soup-unpacker
18307@vindex gnus-soup-unpacker
18308Format string command for unpacking a @sc{soup} packet. The default is
18309@samp{gunzip -c %s | tar xvf -}.
18310
18311@item gnus-soup-packet-directory
18312@vindex gnus-soup-packet-directory
18313Where Gnus will look for reply packets. The default is @file{~/}.
18314
18315@item gnus-soup-packet-regexp
18316@vindex gnus-soup-packet-regexp
18317Regular expression matching @sc{soup} reply packets in
18318@code{gnus-soup-packet-directory}.
18319
18320@end table
18321
18322
18323@node SOUP Groups
18324@subsubsection SOUP Groups
18325@cindex nnsoup
18326
18327@code{nnsoup} is the back end for reading @sc{soup} packets. It will
18328read incoming packets, unpack them, and put them in a directory where
18329you can read them at leisure.
18330
18331These are the variables you can use to customize its behavior:
18332
18333@table @code
18334
18335@item nnsoup-tmp-directory
18336@vindex nnsoup-tmp-directory
18337When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
18338directory. (@file{/tmp/} by default.)
18339
18340@item nnsoup-directory
18341@vindex nnsoup-directory
18342@code{nnsoup} then moves each message and index file to this directory.
18343The default is @file{~/SOUP/}.
18344
18345@item nnsoup-replies-directory
18346@vindex nnsoup-replies-directory
18347All replies will be stored in this directory before being packed into a
18348reply packet. The default is @file{~/SOUP/replies/}.
18349
18350@item nnsoup-replies-format-type
18351@vindex nnsoup-replies-format-type
18352The @sc{soup} format of the replies packets. The default is @samp{?n}
18353(rnews), and I don't think you should touch that variable. I probably
18354shouldn't even have documented it. Drats! Too late!
18355
18356@item nnsoup-replies-index-type
18357@vindex nnsoup-replies-index-type
18358The index type of the replies packet. The default is @samp{?n}, which
18359means ``none''. Don't fiddle with this one either!
18360
18361@item nnsoup-active-file
18362@vindex nnsoup-active-file
18363Where @code{nnsoup} stores lots of information. This is not an ``active
18364file'' in the @code{nntp} sense; it's an Emacs Lisp file. If you lose
18365this file or mess it up in any way, you're dead. The default is
18366@file{~/SOUP/active}.
18367
18368@item nnsoup-packer
18369@vindex nnsoup-packer
18370Format string command for packing a reply @sc{soup} packet. The default
18371is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
18372
18373@item nnsoup-unpacker
18374@vindex nnsoup-unpacker
18375Format string command for unpacking incoming @sc{soup} packets. The
18376default is @samp{gunzip -c %s | tar xvf -}.
18377
18378@item nnsoup-packet-directory
18379@vindex nnsoup-packet-directory
18380Where @code{nnsoup} will look for incoming packets. The default is
18381@file{~/}.
18382
18383@item nnsoup-packet-regexp
18384@vindex nnsoup-packet-regexp
18385Regular expression matching incoming @sc{soup} packets. The default is
18386@samp{Soupout}.
18387
18388@item nnsoup-always-save
18389@vindex nnsoup-always-save
18390If non-@code{nil}, save the replies buffer after each posted message.
18391
18392@end table
18393
18394
18395@node SOUP Replies
18396@subsubsection SOUP Replies
18397
18398Just using @code{nnsoup} won't mean that your postings and mailings end
18399up in @sc{soup} reply packets automagically. You have to work a bit
18400more for that to happen.
18401
18402@findex nnsoup-set-variables
18403The @code{nnsoup-set-variables} command will set the appropriate
18404variables to ensure that all your followups and replies end up in the
18405@sc{soup} system.
18406
18407In specific, this is what it does:
18408
18409@lisp
18410(setq message-send-news-function 'nnsoup-request-post)
18411(setq message-send-mail-function 'nnsoup-request-mail)
18412@end lisp
18413
18414And that's it, really. If you only want news to go into the @sc{soup}
18415system you just use the first line. If you only want mail to be
18416@sc{soup}ed you use the second.
18417
18418
18419@node Mail-To-News Gateways
18420@subsection Mail-To-News Gateways
18421@cindex mail-to-news gateways
18422@cindex gateways
18423
18424If your local @code{nntp} server doesn't allow posting, for some reason
18425or other, you can post using one of the numerous mail-to-news gateways.
18426The @code{nngateway} back end provides the interface.
18427
18428Note that you can't read anything from this back end---it can only be
18429used to post with.
18430
18431Server variables:
18432
18433@table @code
18434@item nngateway-address
18435@vindex nngateway-address
18436This is the address of the mail-to-news gateway.
18437
18438@item nngateway-header-transformation
18439@vindex nngateway-header-transformation
18440News headers often have to be transformed in some odd way or other
18441for the mail-to-news gateway to accept it. This variable says what
18442transformation should be called, and defaults to
18443@code{nngateway-simple-header-transformation}. The function is called
18444narrowed to the headers to be transformed and with one parameter---the
18445gateway address.
18446
18447This default function just inserts a new @code{To} header based on the
18448@code{Newsgroups} header and the gateway address.
18449For instance, an article with this @code{Newsgroups} header:
18450
18451@example
18452Newsgroups: alt.religion.emacs
18453@end example
18454
18455will get this @code{To} header inserted:
18456
18457@example
18458To: alt-religion-emacs@@GATEWAY
18459@end example
18460
18461The following pre-defined functions exist:
18462
18463@findex nngateway-simple-header-transformation
18464@table @code
18465
18466@item nngateway-simple-header-transformation
18467Creates a @code{To} header that looks like
18468@var{newsgroup}@@@code{nngateway-address}.
18469
18470@findex nngateway-mail2news-header-transformation
18471
18472@item nngateway-mail2news-header-transformation
18473Creates a @code{To} header that looks like
18474@code{nngateway-address}.
18475@end table
18476
18477@end table
18478
18479Here's an example:
18480
18481@lisp
18482(setq gnus-post-method
18483 '(nngateway
18484 "mail2news@@replay.com"
18485 (nngateway-header-transformation
18486 nngateway-mail2news-header-transformation)))
18487@end lisp
18488
18489So, to use this, simply say something like:
18490
18491@lisp
18492(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
18493@end lisp
18494
18495
18496
18497@node Combined Groups
18498@section Combined Groups
18499
18500Gnus allows combining a mixture of all the other group types into bigger
18501groups.
18502
18503@menu
18504* Virtual Groups:: Combining articles from many groups.
18505* Kibozed Groups:: Looking through parts of the newsfeed for articles.
18506@end menu
18507
18508
18509@node Virtual Groups
18510@subsection Virtual Groups
18511@cindex nnvirtual
18512@cindex virtual groups
18513@cindex merging groups
18514
18515An @dfn{nnvirtual group} is really nothing more than a collection of
18516other groups.
18517
18518For instance, if you are tired of reading many small groups, you can
18519put them all in one big group, and then grow tired of reading one
18520big, unwieldy group. The joys of computing!
18521
18522You specify @code{nnvirtual} as the method. The address should be a
18523regexp to match component groups.
18524
18525All marks in the virtual group will stick to the articles in the
18526component groups. So if you tick an article in a virtual group, the
18527article will also be ticked in the component group from whence it
18528came. (And vice versa---marks from the component groups will also be
18529shown in the virtual group.). To create an empty virtual group, run
18530@kbd{G V} (@code{gnus-group-make-empty-virtual}) in the group buffer
18531and edit the method regexp with @kbd{M-e}
18532(@code{gnus-group-edit-group-method})
18533
18534Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
18535newsgroups into one, big, happy newsgroup:
18536
18537@lisp
18538(nnvirtual "^alt\\.fan\\.andrea-dworkin$\\|^rec\\.dworkin.*")
18539@end lisp
18540
18541The component groups can be native or foreign; everything should work
18542smoothly, but if your computer explodes, it was probably my fault.
18543
18544Collecting the same group from several servers might actually be a good
18545idea if users have set the Distribution header to limit distribution.
18546If you would like to read @samp{soc.motss} both from a server in Japan
18547and a server in Norway, you could use the following as the group regexp:
18548
18549@example
18550"^nntp\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"
18551@end example
18552
18553(Remember, though, that if you're creating the group with @kbd{G m}, you
18554shouldn't double the backslashes, and you should leave off the quote
18555characters at the beginning and the end of the string.)
18556
18557This should work kinda smoothly---all articles from both groups should
18558end up in this one, and there should be no duplicates. Threading (and
18559the rest) will still work as usual, but there might be problems with the
18560sequence of articles. Sorting on date might be an option here
18561(@pxref{Selecting a Group}).
18562
18563One limitation, however---all groups included in a virtual
18564group have to be alive (i.e., subscribed or unsubscribed). Killed or
18565zombie groups can't be component groups for @code{nnvirtual} groups.
18566
18567@vindex nnvirtual-always-rescan
18568If the @code{nnvirtual-always-rescan} variable is non-@code{nil} (which
18569is the default), @code{nnvirtual} will always scan groups for unread
18570articles when entering a virtual group. If this variable is @code{nil}
18571and you read articles in a component group after the virtual group has
18572been activated, the read articles from the component group will show up
18573when you enter the virtual group. You'll also see this effect if you
18574have two virtual groups that have a component group in common. If
18575that's the case, you should set this variable to @code{t}. Or you can
18576just tap @code{M-g} on the virtual group every time before you enter
18577it---it'll have much the same effect.
18578
18579@code{nnvirtual} can have both mail and news groups as component groups.
18580When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
18581has to ask the back end of the component group the article comes from
18582whether it is a news or mail back end. However, when you do a @kbd{^},
18583there is typically no sure way for the component back end to know this,
18584and in that case @code{nnvirtual} tells Gnus that the article came from a
18585not-news back end. (Just to be on the safe side.)
18586
18587@kbd{C-c C-n} in the message buffer will insert the @code{Newsgroups}
18588line from the article you respond to in these cases.
18589
18590@code{nnvirtual} groups do not inherit anything but articles and marks
18591from component groups---group parameters, for instance, are not
18592inherited.
18593
18594
18595@node Kibozed Groups
18596@subsection Kibozed Groups
18597@cindex nnkiboze
18598@cindex kibozing
18599
18600@dfn{Kibozing} is defined by the @acronym{OED} as ``grepping through
18601(parts of) the news feed''. @code{nnkiboze} is a back end that will
18602do this for you. Oh joy! Now you can grind any @acronym{NNTP} server
18603down to a halt with useless requests! Oh happiness!
18604
18605@kindex G k (Group)
18606To create a kibozed group, use the @kbd{G k} command in the group
18607buffer.
18608
18609The address field of the @code{nnkiboze} method is, as with
18610@code{nnvirtual}, a regexp to match groups to be ``included'' in the
18611@code{nnkiboze} group. That's where most similarities between
18612@code{nnkiboze} and @code{nnvirtual} end.
18613
18614In addition to this regexp detailing component groups, an
18615@code{nnkiboze} group must have a score file to say what articles are
18616to be included in the group (@pxref{Scoring}).
18617
18618@kindex M-x nnkiboze-generate-groups
18619@findex nnkiboze-generate-groups
18620You must run @kbd{M-x nnkiboze-generate-groups} after creating the
18621@code{nnkiboze} groups you want to have. This command will take time.
18622Lots of time. Oodles and oodles of time. Gnus has to fetch the
18623headers from all the articles in all the component groups and run them
18624through the scoring process to determine if there are any articles in
18625the groups that are to be part of the @code{nnkiboze} groups.
18626
18627Please limit the number of component groups by using restrictive
18628regexps. Otherwise your sysadmin may become annoyed with you, and the
18629@acronym{NNTP} site may throw you off and never let you back in again.
18630Stranger things have happened.
18631
18632@code{nnkiboze} component groups do not have to be alive---they can be dead,
18633and they can be foreign. No restrictions.
18634
18635@vindex nnkiboze-directory
18636The generation of an @code{nnkiboze} group means writing two files in
18637@code{nnkiboze-directory}, which is @file{~/News/kiboze/} by default.
18638One contains the @acronym{NOV} header lines for all the articles in
18639the group, and the other is an additional @file{.newsrc} file to store
18640information on what groups have been searched through to find
18641component articles.
18642
18643Articles marked as read in the @code{nnkiboze} group will have
18644their @acronym{NOV} lines removed from the @acronym{NOV} file.
18645
18646
18647@node Email Based Diary
18648@section Email Based Diary
18649@cindex diary
18650@cindex email based diary
18651@cindex calendar
18652
18653This section describes a special mail back end called @code{nndiary},
18654and its companion library @code{gnus-diary}. It is ``special'' in the
18655sense that it is not meant to be one of the standard alternatives for
18656reading mail with Gnus. See @ref{Choosing a Mail Back End} for that.
18657Instead, it is used to treat @emph{some} of your mails in a special way,
18658namely, as event reminders.
18659
18660Here is a typical scenario:
18661
18662@itemize @bullet
18663@item
18664You've got a date with Andy Mc Dowell or Bruce Willis (select according
18665to your sexual preference) in one month. You don't want to forget it.
18666@item
18667So you send a ``reminder'' message (actually, a diary one) to yourself.
18668@item
18669You forget all about it and keep on getting and reading new mail, as usual.
18670@item
18671From time to time, as you type `g' in the group buffer and as the date
18672is getting closer, the message will pop up again to remind you of your
18673appointment, just as if it were new and unread.
18674@item
18675Read your ``new'' messages, this one included, and start dreaming again
18676of the night you're gonna have.
18677@item
18678Once the date is over (you actually fell asleep just after dinner), the
18679message will be automatically deleted if it is marked as expirable.
18680@end itemize
18681
18682The Gnus Diary back end has the ability to handle regular appointments
18683(that wouldn't ever be deleted) as well as punctual ones, operates as a
18684real mail back end and is configurable in many ways. All of this is
18685explained in the sections below.
18686
18687@menu
18688* The NNDiary Back End:: Basic setup and usage.
18689* The Gnus Diary Library:: Utility toolkit on top of nndiary.
18690* Sending or Not Sending:: A final note on sending diary messages.
18691@end menu
18692
18693
18694@node The NNDiary Back End
18695@subsection The NNDiary Back End
18696@cindex nndiary
18697@cindex the nndiary back end
18698
18699@code{nndiary} is a back end very similar to @code{nnml} (@pxref{Mail
18700Spool}). Actually, it could appear as a mix of @code{nnml} and
18701@code{nndraft}. If you know @code{nnml}, you're already familiar with
18702the message storing scheme of @code{nndiary}: one file per message, one
18703directory per group.
18704
18705 Before anything, there is one requirement to be able to run
18706@code{nndiary} properly: you @emph{must} use the group timestamp feature
18707of Gnus. This adds a timestamp to each group's parameters. @ref{Group
18708Timestamp} to see how it's done.
18709
18710@menu
18711* Diary Messages:: What makes a message valid for nndiary.
18712* Running NNDiary:: NNDiary has two modes of operation.
18713* Customizing NNDiary:: Bells and whistles.
18714@end menu
18715
18716@node Diary Messages
18717@subsubsection Diary Messages
18718@cindex nndiary messages
18719@cindex nndiary mails
18720
18721@code{nndiary} messages are just normal ones, except for the mandatory
18722presence of 7 special headers. These headers are of the form
18723@code{X-Diary-<something>}, @code{<something>} being one of
18724@code{Minute}, @code{Hour}, @code{Dom}, @code{Month}, @code{Year},
18725@code{Time-Zone} and @code{Dow}. @code{Dom} means ``Day of Month'', and
18726@code{dow} means ``Day of Week''. These headers actually behave like
18727crontab specifications and define the event date(s):
18728
18729@itemize @bullet
18730@item
18731For all headers except the @code{Time-Zone} one, a header value is
18732either a star (meaning all possible values), or a list of fields
18733(separated by a comma).
18734@item
18735A field is either an integer, or a range.
18736@item
18737A range is two integers separated by a dash.
18738@item
18739Possible integer values are 0--59 for @code{Minute}, 0--23 for
18740@code{Hour}, 1--31 for @code{Dom}, 1--12 for @code{Month}, above 1971
18741for @code{Year} and 0--6 for @code{Dow} (0 meaning Sunday).
18742@item
18743As a special case, a star in either @code{Dom} or @code{Dow} doesn't
18744mean ``all possible values'', but ``use only the other field''. Note
18745that if both are star'ed, the use of either one gives the same result.
18746@item
18747The @code{Time-Zone} header is special in that it can only have one
18748value (@code{GMT}, for instance). A star doesn't mean ``all possible
18749values'' (because it makes no sense), but ``the current local time
18750zone''. Most of the time, you'll be using a star here. However, for a
18751list of available time zone values, see the variable
18752@code{nndiary-headers}.
18753@end itemize
18754
18755As a concrete example, here are the diary headers to add to your message
18756for specifying ``Each Monday and each 1st of month, at 12:00, 20:00,
1875721:00, 22:00, 23:00 and 24:00, from 1999 to 2010'' (I'll let you find
18758what to do then):
18759
18760@example
18761X-Diary-Minute: 0
18762X-Diary-Hour: 12, 20-24
18763X-Diary-Dom: 1
18764X-Diary-Month: *
18765X-Diary-Year: 1999-2010
18766X-Diary-Dow: 1
18767X-Diary-Time-Zone: *
18768@end example
18769
18770@node Running NNDiary
18771@subsubsection Running NNDiary
18772@cindex running nndiary
18773@cindex nndiary operation modes
18774
18775@code{nndiary} has two modes of operation: ``traditional'' (the default)
18776and ``autonomous''. In traditional mode, @code{nndiary} does not get new
18777mail by itself. You have to move (@kbd{B m}) or copy (@kbd{B c}) mails
18778from your primary mail back end to nndiary groups in order to handle them
18779as diary messages. In autonomous mode, @code{nndiary} retrieves its own
18780mail and handles it independently from your primary mail back end.
18781
18782One should note that Gnus is not inherently designed to allow several
18783``master'' mail back ends at the same time. However, this does make
18784sense with @code{nndiary}: you really want to send and receive diary
18785messages to your diary groups directly. So, @code{nndiary} supports
18786being sort of a ``second primary mail back end'' (to my knowledge, it is
18787the only back end offering this feature). However, there is a limitation
18788(which I hope to fix some day): respooling doesn't work in autonomous
18789mode.
18790
18791In order to use @code{nndiary} in autonomous mode, you have several
18792things to do:
18793
18794@itemize @bullet
18795@item
18796Allow @code{nndiary} to retrieve new mail by itself. Put the following
18797line in your @file{~/.gnus.el} file:
18798
18799@lisp
18800(setq nndiary-get-new-mail t)
18801@end lisp
18802@item
18803You must arrange for diary messages (those containing @code{X-Diary-*}
18804headers) to be split in a private folder @emph{before} Gnus treat them.
18805Again, this is needed because Gnus cannot (yet ?) properly handle
18806multiple primary mail back ends. Getting those messages from a separate
18807source will compensate this misfeature to some extent.
18808
18809As an example, here's my procmailrc entry to store diary files in
18810@file{~/.nndiary} (the default @code{nndiary} mail source file):
18811
18812@example
18813:0 HD :
18814* ^X-Diary
18815.nndiary
18816@end example
18817@end itemize
18818
18819Once this is done, you might want to customize the following two options
18820that affect the diary mail retrieval and splitting processes:
18821
18822@defvar nndiary-mail-sources
18823This is the diary-specific replacement for the standard
18824@code{mail-sources} variable. It obeys the same syntax, and defaults to
18825@code{(file :path "~/.nndiary")}.
18826@end defvar
18827
18828@defvar nndiary-split-methods
18829This is the diary-specific replacement for the standard
18830@code{nnmail-split-methods} variable. It obeys the same syntax.
18831@end defvar
18832
18833 Finally, you may add a permanent @code{nndiary} virtual server
18834(something like @code{(nndiary "diary")} should do) to your
18835@code{gnus-secondary-select-methods}.
18836
18837 Hopefully, almost everything (see the TODO section in
18838@file{nndiary.el}) will work as expected when you restart Gnus: in
18839autonomous mode, typing @kbd{g} and @kbd{M-g} in the group buffer, will
18840also get your new diary mails and split them according to your
18841diary-specific rules, @kbd{F} will find your new diary groups etc.
18842
18843@node Customizing NNDiary
18844@subsubsection Customizing NNDiary
18845@cindex customizing nndiary
18846@cindex nndiary customization
18847
18848Now that @code{nndiary} is up and running, it's time to customize it.
18849The custom group is called @code{nndiary} (no, really ?!). You should
18850browse it to figure out which options you'd like to tweak. The following
18851two variables are probably the only ones you will want to change:
18852
18853@defvar nndiary-reminders
18854This is the list of times when you want to be reminded of your
18855appointments (e.g. 3 weeks before, then 2 days before, then 1 hour
18856before and that's it). Remember that ``being reminded'' means that the
18857diary message will pop up as brand new and unread again when you get new
18858mail.
18859@end defvar
18860
18861@defvar nndiary-week-starts-on-monday
18862Rather self-explanatory. Otherwise, Sunday is assumed (this is the
18863default).
18864@end defvar
18865
18866
18867@node The Gnus Diary Library
18868@subsection The Gnus Diary Library
18869@cindex gnus-diary
18870@cindex the gnus diary library
18871
18872Using @code{nndiary} manually (I mean, writing the headers by hand and
18873so on) would be rather boring. Fortunately, there is a library called
18874@code{gnus-diary} written on top of @code{nndiary}, that does many
18875useful things for you.
18876
18877 In order to use it, add the following line to your @file{~/.gnus.el} file:
18878
18879@lisp
18880(require 'gnus-diary)
18881@end lisp
18882
18883 Also, you shouldn't use any @code{gnus-user-format-function-[d|D]}
18884(@pxref{Summary Buffer Lines}). @code{gnus-diary} provides both of these
18885(sorry if you used them before).
18886
18887
18888@menu
18889* Diary Summary Line Format:: A nicer summary buffer line format.
18890* Diary Articles Sorting:: A nicer way to sort messages.
18891* Diary Headers Generation:: Not doing it manually.
18892* Diary Group Parameters:: Not handling them manually.
18893@end menu
18894
18895@node Diary Summary Line Format
18896@subsubsection Diary Summary Line Format
18897@cindex diary summary buffer line
18898@cindex diary summary line format
18899
18900Displaying diary messages in standard summary line format (usually
18901something like @samp{From Joe: Subject}) is pretty useless. Most of
18902the time, you're the one who wrote the message, and you mostly want to
18903see the event's date.
18904
18905 @code{gnus-diary} provides two supplemental user formats to be used in
18906summary line formats. @code{D} corresponds to a formatted time string
18907for the next occurrence of the event (e.g. ``Sat, Sep 22 01, 12:00''),
18908while @code{d} corresponds to an approximative remaining time until the
18909next occurrence of the event (e.g. ``in 6 months, 1 week'').
18910
18911 For example, here's how Joe's birthday is displayed in my
18912@code{nndiary+diary:birthdays} summary buffer (note that the message is
18913expirable, but will never be deleted, as it specifies a periodic event):
18914
18915@example
18916 E Sat, Sep 22 01, 12:00: Joe's birthday (in 6 months, 1 week)
18917@end example
18918
18919In order to get something like the above, you would normally add the
18920following line to your diary groups'parameters:
18921
18922@lisp
18923(gnus-summary-line-format "%U%R%z %uD: %(%s%) (%ud)\n")
18924@end lisp
18925
18926However, @code{gnus-diary} does it automatically (@pxref{Diary Group
18927Parameters}). You can however customize the provided summary line format
18928with the following user options:
18929
18930@defvar gnus-diary-summary-line-format
18931Defines the summary line format used for diary groups (@pxref{Summary
18932Buffer Lines}). @code{gnus-diary} uses it to automatically update the
18933diary groups'parameters.
18934@end defvar
18935
18936@defvar gnus-diary-time-format
18937Defines the format to display dates in diary summary buffers. This is
18938used by the @code{D} user format. See the docstring for details.
18939@end defvar
18940
18941@defvar gnus-diary-delay-format-function
18942Defines the format function to use for displaying delays (remaining
18943times) in diary summary buffers. This is used by the @code{d} user
18944format. There are currently built-in functions for English and French;
18945you can also define your own. See the docstring for details.
18946@end defvar
18947
18948@node Diary Articles Sorting
18949@subsubsection Diary Articles Sorting
18950@cindex diary articles sorting
18951@cindex diary summary lines sorting
18952@findex gnus-summary-sort-by-schedule
18953@findex gnus-thread-sort-by-schedule
18954@findex gnus-article-sort-by-schedule
18955
18956@code{gnus-diary} provides new sorting functions (@pxref{Sorting the
18957Summary Buffer} ) called @code{gnus-summary-sort-by-schedule},
18958@code{gnus-thread-sort-by-schedule} and
18959@code{gnus-article-sort-by-schedule}. These functions let you organize
18960your diary summary buffers from the closest event to the farthest one.
18961
18962@code{gnus-diary} automatically installs
18963@code{gnus-summary-sort-by-schedule} as a menu item in the summary
18964buffer's ``sort'' menu, and the two others as the primary (hence
18965default) sorting functions in the group parameters (@pxref{Diary Group
18966Parameters}).
18967
18968@node Diary Headers Generation
18969@subsubsection Diary Headers Generation
18970@cindex diary headers generation
18971@findex gnus-diary-check-message
18972
18973@code{gnus-diary} provides a function called
18974@code{gnus-diary-check-message} to help you handle the @code{X-Diary-*}
18975headers. This function ensures that the current message contains all the
18976required diary headers, and prompts you for values or corrections if
18977needed.
18978
18979 This function is hooked into the @code{nndiary} back end, so that
18980moving or copying an article to a diary group will trigger it
d55fe5bb
MB
18981automatically. It is also bound to @kbd{C-c C-f d} in
18982@code{message-mode} and @code{article-edit-mode} in order to ease the
18983process of converting a usual mail to a diary one.
4009494e
GM
18984
18985 This function takes a prefix argument which will force prompting of
18986all diary headers, regardless of their presence or validity. That way,
18987you can very easily reschedule an already valid diary message, for
18988instance.
18989
18990@node Diary Group Parameters
18991@subsubsection Diary Group Parameters
18992@cindex diary group parameters
18993
18994When you create a new diary group, or visit one, @code{gnus-diary}
18995automatically checks your group parameters and if needed, sets the
18996summary line format to the diary-specific value, installs the
18997diary-specific sorting functions, and also adds the different
18998@code{X-Diary-*} headers to the group's posting-style. It is then easier
18999to send a diary message, because if you use @kbd{C-u a} or @kbd{C-u m}
19000on a diary group to prepare a message, these headers will be inserted
19001automatically (although not filled with proper values yet).
19002
19003@node Sending or Not Sending
19004@subsection Sending or Not Sending
19005
19006Well, assuming you've read all of the above, here are two final notes on
19007mail sending with @code{nndiary}:
19008
19009@itemize @bullet
19010@item
19011@code{nndiary} is a @emph{real} mail back end. You really send real diary
19012messsages for real. This means for instance that you can give
19013appointments to anybody (provided they use Gnus and @code{nndiary}) by
19014sending the diary message to them as well.
19015@item
19016However, since @code{nndiary} also has a @code{request-post} method, you
19017can also use @kbd{C-u a} instead of @kbd{C-u m} on a diary group and the
19018message won't actually be sent; just stored locally in the group. This
19019comes in very handy for private appointments.
19020@end itemize
19021
19022@node Gnus Unplugged
19023@section Gnus Unplugged
19024@cindex offline
19025@cindex unplugged
19026@cindex agent
19027@cindex Gnus agent
19028@cindex Gnus unplugged
19029
19030In olden times (ca. February '88), people used to run their newsreaders
19031on big machines with permanent connections to the net. News transport
19032was dealt with by news servers, and all the newsreaders had to do was to
19033read news. Believe it or not.
19034
19035Nowadays most people read news and mail at home, and use some sort of
19036modem to connect to the net. To avoid running up huge phone bills, it
19037would be nice to have a way to slurp down all the news and mail, hang up
19038the phone, read for several hours, and then upload any responses you
19039have to make. And then you repeat the procedure.
19040
19041Of course, you can use news servers for doing this as well. I've used
19042@code{inn} together with @code{slurp}, @code{pop} and @code{sendmail}
19043for some years, but doing that's a bore. Moving the news server
19044functionality up to the newsreader makes sense if you're the only person
19045reading news on a machine.
19046
19047Setting up Gnus as an ``offline'' newsreader is quite simple. In
01c52d31
MB
19048fact, you don't have to configure anything as the agent is now enabled
19049by default (@pxref{Agent Variables, gnus-agent}).
4009494e
GM
19050
19051Of course, to use it as such, you have to learn a few new commands.
19052
19053@menu
19054* Agent Basics:: How it all is supposed to work.
19055* Agent Categories:: How to tell the Gnus Agent what to download.
19056* Agent Commands:: New commands for all the buffers.
19057* Agent Visuals:: Ways that the agent may effect your summary buffer.
19058* Agent as Cache:: The Agent is a big cache too.
19059* Agent Expiry:: How to make old articles go away.
19060* Agent Regeneration:: How to recover from lost connections and other accidents.
01c52d31 19061* Agent and flags:: How the Agent maintains flags.
4009494e
GM
19062* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
19063* Outgoing Messages:: What happens when you post/mail something?
19064* Agent Variables:: Customizing is fun.
19065* Example Setup:: An example @file{~/.gnus.el} file for offline people.
19066* Batching Agents:: How to fetch news from a @code{cron} job.
19067* Agent Caveats:: What you think it'll do and what it does.
19068@end menu
19069
19070
19071@node Agent Basics
19072@subsection Agent Basics
19073
19074First, let's get some terminology out of the way.
19075
19076The Gnus Agent is said to be @dfn{unplugged} when you have severed the
19077connection to the net (and notified the Agent that this is the case).
19078When the connection to the net is up again (and Gnus knows this), the
19079Agent is @dfn{plugged}.
19080
19081The @dfn{local} machine is the one you're running on, and which isn't
19082connected to the net continuously.
19083
19084@dfn{Downloading} means fetching things from the net to your local
19085machine. @dfn{Uploading} is doing the opposite.
19086
19087You know that Gnus gives you all the opportunity you'd ever want for
19088shooting yourself in the foot. Some people call it flexibility. Gnus
19089is also customizable to a great extent, which means that the user has a
19090say on how Gnus behaves. Other newsreaders might unconditionally shoot
19091you in your foot, but with Gnus, you have a choice!
19092
19093Gnus is never really in plugged or unplugged state. Rather, it applies
19094that state to each server individually. This means that some servers
19095can be plugged while others can be unplugged. Additionally, some
19096servers can be ignored by the Agent altogether (which means that
19097they're kinda like plugged always).
19098
19099So when you unplug the Agent and then wonder why is Gnus opening a
19100connection to the Net, the next step to do is to look whether all
19101servers are agentized. If there is an unagentized server, you found
19102the culprit.
19103
19104Another thing is the @dfn{offline} state. Sometimes, servers aren't
19105reachable. When Gnus notices this, it asks you whether you want the
19106server to be switched to offline state. If you say yes, then the
19107server will behave somewhat as if it was unplugged, except that Gnus
19108will ask you whether you want to switch it back online again.
19109
19110Let's take a typical Gnus session using the Agent.
19111
19112@itemize @bullet
19113
19114@item
19115@findex gnus-unplugged
19116You start Gnus with @code{gnus-unplugged}. This brings up the Gnus
19117Agent in a disconnected state. You can read all the news that you have
19118already fetched while in this mode.
19119
19120@item
19121You then decide to see whether any new news has arrived. You connect
19122your machine to the net (using PPP or whatever), and then hit @kbd{J j}
19123to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail
19124as usual. To check for new mail in unplugged mode (@pxref{Mail
19125Source Specifiers}).
19126
19127@item
19128You can then read the new news immediately, or you can download the
19129news onto your local machine. If you want to do the latter, you press
19130@kbd{g} to check if there are any new news and then @kbd{J s} to fetch
19131all the eligible articles in all the groups. (To let Gnus know which
19132articles you want to download, @pxref{Agent Categories}).
19133
19134@item
19135After fetching the articles, you press @kbd{J j} to make Gnus become
19136unplugged again, and you shut down the PPP thing (or whatever). And
19137then you read the news offline.
19138
19139@item
19140And then you go to step 2.
19141@end itemize
19142
19143Here are some things you should do the first time (or so) that you use
19144the Agent.
19145
19146@itemize @bullet
19147
19148@item
19149Decide which servers should be covered by the Agent. If you have a mail
19150back end, it would probably be nonsensical to have it covered by the
19151Agent. Go to the server buffer (@kbd{^} in the group buffer) and press
19152@kbd{J a} on the server (or servers) that you wish to have covered by the
19153Agent (@pxref{Server Agent Commands}), or @kbd{J r} on automatically
19154added servers you do not wish to have covered by the Agent. By default,
19155all @code{nntp} and @code{nnimap} servers in @code{gnus-select-method} and
19156@code{gnus-secondary-select-methods} are agentized.
19157
19158@item
19159Decide on download policy. It's fairly simple once you decide whether
19160you are going to use agent categories, topic parameters, and/or group
19161parameters to implement your policy. If you're new to gnus, it
19162is probably best to start with a category, @xref{Agent Categories}.
19163
19164Both topic parameters (@pxref{Topic Parameters}) and agent categories
19165(@pxref{Agent Categories}) provide for setting a policy that applies
19166to multiple groups. Which you use is entirely up to you. Topic
19167parameters do override categories so, if you mix the two, you'll have
19168to take that into account. If you have a few groups that deviate from
19169your policy, you can use group parameters (@pxref{Group Parameters}) to
19170configure them.
19171
19172@item
19173Uhm@dots{} that's it.
19174@end itemize
19175
19176
19177@node Agent Categories
19178@subsection Agent Categories
19179
19180One of the main reasons to integrate the news transport layer into the
19181newsreader is to allow greater control over what articles to download.
19182There's not much point in downloading huge amounts of articles, just to
19183find out that you're not interested in reading any of them. It's better
19184to be somewhat more conservative in choosing what to download, and then
19185mark the articles for downloading manually if it should turn out that
19186you're interested in the articles anyway.
19187
19188One of the more effective methods for controlling what is to be
19189downloaded is to create a @dfn{category} and then assign some (or all)
19190groups to this category. Groups that do not belong in any other
19191category belong to the @code{default} category. Gnus has its own
19192buffer for creating and managing categories.
19193
19194If you prefer, you can also use group parameters (@pxref{Group
19195Parameters}) and topic parameters (@pxref{Topic Parameters}) for an
19196alternative approach to controlling the agent. The only real
19197difference is that categories are specific to the agent (so there is
19198less to learn) while group and topic parameters include the kitchen
19199sink.
19200
19201Since you can set agent parameters in several different places we have
19202a rule to decide which source to believe. This rule specifies that
19203the parameter sources are checked in the following order: group
19204parameters, topic parameters, agent category, and finally customizable
19205variables. So you can mix all of these sources to produce a wide range
19206of behavior, just don't blame me if you don't remember where you put
19207your settings.
19208
19209@menu
19210* Category Syntax:: What a category looks like.
19211* Category Buffer:: A buffer for maintaining categories.
19212* Category Variables:: Customize'r'Us.
19213@end menu
19214
19215
19216@node Category Syntax
19217@subsubsection Category Syntax
19218
19219A category consists of a name, the list of groups belonging to the
19220category, and a number of optional parameters that override the
19221customizable variables. The complete list of agent parameters are
19222listed below.
19223
19224@cindex Agent Parameters
19225@table @code
01c52d31 19226@item agent-groups
4009494e
GM
19227The list of groups that are in this category.
19228
01c52d31 19229@item agent-predicate
4009494e
GM
19230A predicate which (generally) gives a rough outline of which articles
19231are eligible for downloading; and
19232
01c52d31 19233@item agent-score
4009494e
GM
19234a score rule which (generally) gives you a finer granularity when
19235deciding what articles to download. (Note that this @dfn{download
19236score} is not necessarily related to normal scores.)
19237
01c52d31 19238@item agent-enable-expiration
4009494e
GM
19239a boolean indicating whether the agent should expire old articles in
19240this group. Most groups should be expired to conserve disk space. In
19241fact, its probably safe to say that the gnus.* hierarchy contains the
19242only groups that should not be expired.
19243
01c52d31 19244@item agent-days-until-old
4009494e
GM
19245an integer indicating the number of days that the agent should wait
19246before deciding that a read article is safe to expire.
19247
01c52d31 19248@item agent-low-score
4009494e
GM
19249an integer that overrides the value of @code{gnus-agent-low-score}.
19250
01c52d31 19251@item agent-high-score
4009494e
GM
19252an integer that overrides the value of @code{gnus-agent-high-score}.
19253
01c52d31 19254@item agent-short-article
4009494e
GM
19255an integer that overrides the value of
19256@code{gnus-agent-short-article}.
19257
01c52d31 19258@item agent-long-article
4009494e
GM
19259an integer that overrides the value of @code{gnus-agent-long-article}.
19260
01c52d31 19261@item agent-enable-undownloaded-faces
4009494e 19262a symbol indicating whether the summary buffer should display
01c52d31
MB
19263undownloaded articles using the @code{gnus-summary-*-undownloaded-face}
19264faces. Any symbol other than @code{nil} will enable the use of
19265undownloaded faces.
4009494e
GM
19266@end table
19267
19268The name of a category can not be changed once the category has been
19269created.
19270
19271Each category maintains a list of groups that are exclusive members of
19272that category. The exclusivity rule is automatically enforced, add a
19273group to a new category and it is automatically removed from its old
19274category.
19275
19276A predicate in its simplest form can be a single predicate such as
19277@code{true} or @code{false}. These two will download every available
19278article or nothing respectively. In the case of these two special
19279predicates an additional score rule is superfluous.
19280
19281Predicates of @code{high} or @code{low} download articles in respect of
19282their scores in relationship to @code{gnus-agent-high-score} and
19283@code{gnus-agent-low-score} as described below.
19284
19285To gain even finer control of what is to be regarded eligible for
19286download a predicate can consist of a number of predicates with logical
19287operators sprinkled in between.
19288
19289Perhaps some examples are in order.
19290
19291Here's a simple predicate. (It's the default predicate, in fact, used
19292for all groups that don't belong to any other category.)
19293
19294@lisp
19295short
19296@end lisp
19297
19298Quite simple, eh? This predicate is true if and only if the article is
19299short (for some value of ``short'').
19300
19301Here's a more complex predicate:
19302
19303@lisp
19304(or high
19305 (and
19306 (not low)
19307 (not long)))
19308@end lisp
19309
19310This means that an article should be downloaded if it has a high score,
19311or if the score is not low and the article is not long. You get the
19312drift.
19313
19314The available logical operators are @code{or}, @code{and} and
19315@code{not}. (If you prefer, you can use the more ``C''-ish operators
19316@samp{|}, @code{&} and @code{!} instead.)
19317
19318The following predicates are pre-defined, but if none of these fit what
19319you want to do, you can write your own.
19320
19321When evaluating each of these predicates, the named constant will be
19322bound to the value determined by calling
19323@code{gnus-agent-find-parameter} on the appropriate parameter. For
19324example, gnus-agent-short-article will be bound to
19325@code{(gnus-agent-find-parameter group 'agent-short-article)}. This
19326means that you can specify a predicate in your category then tune that
19327predicate to individual groups.
19328
19329@table @code
19330@item short
19331True if the article is shorter than @code{gnus-agent-short-article}
19332lines; default 100.
19333
19334@item long
19335True if the article is longer than @code{gnus-agent-long-article}
19336lines; default 200.
19337
19338@item low
19339True if the article has a download score less than
19340@code{gnus-agent-low-score}; default 0.
19341
19342@item high
19343True if the article has a download score greater than
19344@code{gnus-agent-high-score}; default 0.
19345
19346@item spam
19347True if the Gnus Agent guesses that the article is spam. The
19348heuristics may change over time, but at present it just computes a
19349checksum and sees whether articles match.
19350
19351@item true
19352Always true.
19353
19354@item false
19355Always false.
19356@end table
19357
19358If you want to create your own predicate function, here's what you have
19359to know: The functions are called with no parameters, but the
19360@code{gnus-headers} and @code{gnus-score} dynamic variables are bound to
19361useful values.
19362
19363For example, you could decide that you don't want to download articles
19364that were posted more than a certain number of days ago (e.g. posted
19365more than @code{gnus-agent-expire-days} ago) you might write a function
19366something along the lines of the following:
19367
19368@lisp
19369(defun my-article-old-p ()
19370 "Say whether an article is old."
19371 (< (time-to-days (date-to-time (mail-header-date gnus-headers)))
19372 (- (time-to-days (current-time)) gnus-agent-expire-days)))
19373@end lisp
19374
19375with the predicate then defined as:
19376
19377@lisp
19378(not my-article-old-p)
19379@end lisp
19380
19381or you could append your predicate to the predefined
19382@code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
19383wherever.
19384
19385@lisp
19386(require 'gnus-agent)
19387(setq gnus-category-predicate-alist
19388 (append gnus-category-predicate-alist
19389 '((old . my-article-old-p))))
19390@end lisp
19391
19392and simply specify your predicate as:
19393
19394@lisp
19395(not old)
19396@end lisp
19397
19398If/when using something like the above, be aware that there are many
19399misconfigured systems/mailers out there and so an article's date is not
19400always a reliable indication of when it was posted. Hell, some people
19401just don't give a damn.
19402
19403The above predicates apply to @emph{all} the groups which belong to the
19404category. However, if you wish to have a specific predicate for an
19405individual group within a category, or you're just too lazy to set up a
19406new category, you can enter a group's individual predicate in its group
19407parameters like so:
19408
19409@lisp
19410(agent-predicate . short)
19411@end lisp
19412
19413This is the group/topic parameter equivalent of the agent category default.
19414Note that when specifying a single word predicate like this, the
19415@code{agent-predicate} specification must be in dotted pair notation.
19416
19417The equivalent of the longer example from above would be:
19418
19419@lisp
19420(agent-predicate or high (and (not low) (not long)))
19421@end lisp
19422
19423The outer parenthesis required in the category specification are not
19424entered here as, not being in dotted pair notation, the value of the
19425predicate is assumed to be a list.
19426
19427
19428Now, the syntax of the download score is the same as the syntax of
19429normal score files, except that all elements that require actually
19430seeing the article itself are verboten. This means that only the
19431following headers can be scored on: @code{Subject}, @code{From},
19432@code{Date}, @code{Message-ID}, @code{References}, @code{Chars},
19433@code{Lines}, and @code{Xref}.
19434
19435As with predicates, the specification of the @code{download score rule}
19436to use in respect of a group can be in either the category definition if
19437it's to be applicable to all groups in therein, or a group's parameters
19438if it's to be specific to that group.
19439
19440In both of these places the @code{download score rule} can take one of
19441three forms:
19442
19443@enumerate
19444@item
19445Score rule
19446
19447This has the same syntax as a normal Gnus score file except only a
19448subset of scoring keywords are available as mentioned above.
19449
19450example:
19451
19452@itemize @bullet
19453@item
19454Category specification
19455
19456@lisp
19457(("from"
19458 ("Lars Ingebrigtsen" 1000000 nil s))
19459("lines"
19460 (500 -100 nil <)))
19461@end lisp
19462
19463@item
19464Group/Topic Parameter specification
19465
19466@lisp
19467(agent-score ("from"
19468 ("Lars Ingebrigtsen" 1000000 nil s))
19469 ("lines"
19470 (500 -100 nil <)))
19471@end lisp
19472
19473Again, note the omission of the outermost parenthesis here.
19474@end itemize
19475
19476@item
19477Agent score file
19478
19479These score files must @emph{only} contain the permitted scoring
19480keywords stated above.
19481
19482example:
19483
19484@itemize @bullet
19485@item
19486Category specification
19487
19488@lisp
19489("~/News/agent.SCORE")
19490@end lisp
19491
19492or perhaps
19493
19494@lisp
19495("~/News/agent.SCORE" "~/News/agent.group.SCORE")
19496@end lisp
19497
19498@item
19499Group Parameter specification
19500
19501@lisp
19502(agent-score "~/News/agent.SCORE")
19503@end lisp
19504
19505Additional score files can be specified as above. Need I say anything
19506about parenthesis?
19507@end itemize
19508
19509@item
19510Use @code{normal} score files
19511
19512If you don't want to maintain two sets of scoring rules for a group, and
19513your desired @code{downloading} criteria for a group are the same as your
19514@code{reading} criteria then you can tell the agent to refer to your
19515@code{normal} score files when deciding what to download.
19516
19517These directives in either the category definition or a group's
19518parameters will cause the agent to read in all the applicable score
19519files for a group, @emph{filtering out} those sections that do not
19520relate to one of the permitted subset of scoring keywords.
19521
19522@itemize @bullet
19523@item
19524Category Specification
19525
19526@lisp
19527file
19528@end lisp
19529
19530@item
19531Group Parameter specification
19532
19533@lisp
19534(agent-score . file)
19535@end lisp
19536@end itemize
19537@end enumerate
19538
19539@node Category Buffer
19540@subsubsection Category Buffer
19541
19542You'd normally do all category maintenance from the category buffer.
19543When you enter it for the first time (with the @kbd{J c} command from
19544the group buffer), you'll only see the @code{default} category.
19545
19546The following commands are available in this buffer:
19547
19548@table @kbd
19549@item q
19550@kindex q (Category)
19551@findex gnus-category-exit
19552Return to the group buffer (@code{gnus-category-exit}).
19553
19554@item e
19555@kindex e (Category)
19556@findex gnus-category-customize-category
19557Use a customization buffer to set all of the selected category's
19558parameters at one time (@code{gnus-category-customize-category}).
19559
19560@item k
19561@kindex k (Category)
19562@findex gnus-category-kill
19563Kill the current category (@code{gnus-category-kill}).
19564
19565@item c
19566@kindex c (Category)
19567@findex gnus-category-copy
19568Copy the current category (@code{gnus-category-copy}).
19569
19570@item a
19571@kindex a (Category)
19572@findex gnus-category-add
19573Add a new category (@code{gnus-category-add}).
19574
19575@item p
19576@kindex p (Category)
19577@findex gnus-category-edit-predicate
19578Edit the predicate of the current category
19579(@code{gnus-category-edit-predicate}).
19580
19581@item g
19582@kindex g (Category)
19583@findex gnus-category-edit-groups
19584Edit the list of groups belonging to the current category
19585(@code{gnus-category-edit-groups}).
19586
19587@item s
19588@kindex s (Category)
19589@findex gnus-category-edit-score
19590Edit the download score rule of the current category
19591(@code{gnus-category-edit-score}).
19592
19593@item l
19594@kindex l (Category)
19595@findex gnus-category-list
19596List all the categories (@code{gnus-category-list}).
19597@end table
19598
19599
19600@node Category Variables
19601@subsubsection Category Variables
19602
19603@table @code
19604@item gnus-category-mode-hook
19605@vindex gnus-category-mode-hook
19606Hook run in category buffers.
19607
19608@item gnus-category-line-format
19609@vindex gnus-category-line-format
19610Format of the lines in the category buffer (@pxref{Formatting
19611Variables}). Valid elements are:
19612
19613@table @samp
19614@item c
19615The name of the category.
19616
19617@item g
19618The number of groups in the category.
19619@end table
19620
19621@item gnus-category-mode-line-format
19622@vindex gnus-category-mode-line-format
19623Format of the category mode line (@pxref{Mode Line Formatting}).
19624
19625@item gnus-agent-short-article
19626@vindex gnus-agent-short-article
19627Articles that have fewer lines than this are short. Default 100.
19628
19629@item gnus-agent-long-article
19630@vindex gnus-agent-long-article
19631Articles that have more lines than this are long. Default 200.
19632
19633@item gnus-agent-low-score
19634@vindex gnus-agent-low-score
19635Articles that have a score lower than this have a low score. Default
196360.
19637
19638@item gnus-agent-high-score
19639@vindex gnus-agent-high-score
19640Articles that have a score higher than this have a high score. Default
196410.
19642
19643@item gnus-agent-expire-days
19644@vindex gnus-agent-expire-days
19645The number of days that a @samp{read} article must stay in the agent's
19646local disk before becoming eligible for expiration (While the name is
19647the same, this doesn't mean expiring the article on the server. It
19648just means deleting the local copy of the article). What is also
19649important to understand is that the counter starts with the time the
19650article was written to the local disk and not the time the article was
19651read.
19652Default 7.
19653
19654@item gnus-agent-enable-expiration
19655@vindex gnus-agent-enable-expiration
19656Determines whether articles in a group are, by default, expired or
19657retained indefinitely. The default is @code{ENABLE} which means that
19658you'll have to disable expiration when desired. On the other hand,
19659you could set this to @code{DISABLE}. In that case, you would then
19660have to enable expiration in selected groups.
19661
19662@end table
19663
19664
19665@node Agent Commands
19666@subsection Agent Commands
19667@findex gnus-agent-toggle-plugged
19668@kindex J j (Agent)
19669
19670All the Gnus Agent commands are on the @kbd{J} submap. The @kbd{J j}
19671(@code{gnus-agent-toggle-plugged}) command works in all modes, and
19672toggles the plugged/unplugged state of the Gnus Agent.
19673
19674
19675@menu
19676* Group Agent Commands:: Configure groups and fetch their contents.
19677* Summary Agent Commands:: Manually select then fetch specific articles.
19678* Server Agent Commands:: Select the servers that are supported by the agent.
19679@end menu
19680
19681
19682
19683
19684@node Group Agent Commands
19685@subsubsection Group Agent Commands
19686
19687@table @kbd
19688@item J u
19689@kindex J u (Agent Group)
19690@findex gnus-agent-fetch-groups
19691Fetch all eligible articles in the current group
19692(@code{gnus-agent-fetch-groups}).
19693
19694@item J c
19695@kindex J c (Agent Group)
19696@findex gnus-enter-category-buffer
19697Enter the Agent category buffer (@code{gnus-enter-category-buffer}).
19698
19699@item J s
19700@kindex J s (Agent Group)
19701@findex gnus-agent-fetch-session
19702Fetch all eligible articles in all groups
19703(@code{gnus-agent-fetch-session}).
19704
19705@item J S
19706@kindex J S (Agent Group)
19707@findex gnus-group-send-queue
19708Send all sendable messages in the queue group
19709(@code{gnus-group-send-queue}). @xref{Drafts}.
19710
19711@item J a
19712@kindex J a (Agent Group)
19713@findex gnus-agent-add-group
19714Add the current group to an Agent category
19715(@code{gnus-agent-add-group}). This command understands the
19716process/prefix convention (@pxref{Process/Prefix}).
19717
19718@item J r
19719@kindex J r (Agent Group)
19720@findex gnus-agent-remove-group
19721Remove the current group from its category, if any
19722(@code{gnus-agent-remove-group}). This command understands the
19723process/prefix convention (@pxref{Process/Prefix}).
19724
19725@item J Y
19726@kindex J Y (Agent Group)
19727@findex gnus-agent-synchronize-flags
19728Synchronize flags changed while unplugged with remote server, if any.
19729
19730
19731@end table
19732
19733
19734@node Summary Agent Commands
19735@subsubsection Summary Agent Commands
19736
19737@table @kbd
19738@item J #
19739@kindex J # (Agent Summary)
19740@findex gnus-agent-mark-article
19741Mark the article for downloading (@code{gnus-agent-mark-article}).
19742
19743@item J M-#
19744@kindex J M-# (Agent Summary)
19745@findex gnus-agent-unmark-article
19746Remove the downloading mark from the article
19747(@code{gnus-agent-unmark-article}).
19748
19749@cindex %
19750@item @@
19751@kindex @@ (Agent Summary)
19752@findex gnus-agent-toggle-mark
19753Toggle whether to download the article
19754(@code{gnus-agent-toggle-mark}). The download mark is @samp{%} by
19755default.
19756
19757@item J c
19758@kindex J c (Agent Summary)
19759@findex gnus-agent-catchup
19760Mark all articles as read (@code{gnus-agent-catchup}) that are neither cached, downloaded, nor downloadable.
19761
19762@item J S
19763@kindex J S (Agent Summary)
19764@findex gnus-agent-fetch-group
19765Download all eligible (@pxref{Agent Categories}) articles in this group.
19766(@code{gnus-agent-fetch-group}).
19767
19768@item J s
19769@kindex J s (Agent Summary)
01c52d31 19770@findex gnus-agent-summary-fetch-series
4009494e 19771Download all processable articles in this group.
01c52d31 19772(@code{gnus-agent-summary-fetch-series}).
4009494e
GM
19773
19774@item J u
19775@kindex J u (Agent Summary)
19776@findex gnus-agent-summary-fetch-group
19777Download all downloadable articles in the current group
19778(@code{gnus-agent-summary-fetch-group}).
19779
19780@end table
19781
19782
19783@node Server Agent Commands
19784@subsubsection Server Agent Commands
19785
19786@table @kbd
19787@item J a
19788@kindex J a (Agent Server)
19789@findex gnus-agent-add-server
19790Add the current server to the list of servers covered by the Gnus Agent
19791(@code{gnus-agent-add-server}).
19792
19793@item J r
19794@kindex J r (Agent Server)
19795@findex gnus-agent-remove-server
19796Remove the current server from the list of servers covered by the Gnus
19797Agent (@code{gnus-agent-remove-server}).
19798
19799@end table
19800
19801
19802@node Agent Visuals
19803@subsection Agent Visuals
19804
19805If you open a summary while unplugged and, Gnus knows from the group's
19806active range that there are more articles than the headers currently
19807stored in the Agent, you may see some articles whose subject looks
19808something like @samp{[Undownloaded article #####]}. These are
19809placeholders for the missing headers. Aside from setting a mark,
19810there is not much that can be done with one of these placeholders.
19811When Gnus finally gets a chance to fetch the group's headers, the
19812placeholders will automatically be replaced by the actual headers.
19813You can configure the summary buffer's maneuvering to skip over the
19814placeholders if you care (See @code{gnus-auto-goto-ignores}).
19815
19816While it may be obvious to all, the only headers and articles
19817available while unplugged are those headers and articles that were
19818fetched into the Agent while previously plugged. To put it another
19819way, ``If you forget to fetch something while plugged, you might have a
19820less than satisfying unplugged session''. For this reason, the Agent
19821adds two visual effects to your summary buffer. These effects display
19822the download status of each article so that you always know which
19823articles will be available when unplugged.
19824
19825The first visual effect is the @samp{%O} spec. If you customize
19826@code{gnus-summary-line-format} to include this specifier, you will add
19827a single character field that indicates an article's download status.
19828Articles that have been fetched into either the Agent or the Cache,
19829will display @code{gnus-downloaded-mark} (defaults to @samp{+}). All
19830other articles will display @code{gnus-undownloaded-mark} (defaults to
19831@samp{-}). If you open a group that has not been agentized, a space
19832(@samp{ }) will be displayed.
19833
19834The second visual effect are the undownloaded faces. The faces, there
19835are three indicating the article's score (low, normal, high), seem to
19836result in a love/hate response from many Gnus users. The problem is
19837that the face selection is controlled by a list of condition tests and
19838face names (See @code{gnus-summary-highlight}). Each condition is
19839tested in the order in which it appears in the list so early
19840conditions have precedence over later conditions. All of this means
19841that, if you tick an undownloaded article, the article will continue
19842to be displayed in the undownloaded face rather than the ticked face.
19843
19844If you use the Agent as a cache (to avoid downloading the same article
19845each time you visit it or to minimize your connection time), the
19846undownloaded face will probably seem like a good idea. The reason
19847being that you do all of our work (marking, reading, deleting) with
01c52d31
MB
19848downloaded articles so the normal faces always appear. For those
19849users using the agent to improve online performance by caching the NOV
19850database (most users since 5.10.2), the undownloaded faces may appear
19851to be an absolutely horrible idea. The issue being that, since none
19852of their articles have been fetched into the Agent, all of the
19853normal faces will be obscured by the undownloaded faces.
19854
19855If you would like to use the undownloaded faces, you must enable the
19856undownloaded faces by setting the @code{agent-enable-undownloaded-faces}
19857group parameter to @code{t}. This parameter, like all other agent
19858parameters, may be set on an Agent Category (@pxref{Agent Categories}),
19859a Group Topic (@pxref{Topic Parameters}), or an individual group
19860(@pxref{Group Parameters}).
19861
19862The one problem common to all users using the agent is how quickly it
19863can consume disk space. If you using the agent on many groups, it is
19864even more difficult to effectively recover disk space. One solution
19865is the @samp{%F} format available in @code{gnus-group-line-format}.
19866This format will display the actual disk space used by articles
19867fetched into both the agent and cache. By knowing which groups use
19868the most space, users know where to focus their efforts when ``agent
19869expiring'' articles.
4009494e
GM
19870
19871@node Agent as Cache
19872@subsection Agent as Cache
19873
19874When Gnus is plugged, it is not efficient to download headers or
19875articles from the server again, if they are already stored in the
19876Agent. So, Gnus normally only downloads headers once, and stores them
19877in the Agent. These headers are later used when generating the summary
19878buffer, regardless of whether you are plugged or unplugged. Articles
19879are not cached in the Agent by default though (that would potentially
19880consume lots of disk space), but if you have already downloaded an
19881article into the Agent, Gnus will not download the article from the
19882server again but use the locally stored copy instead.
19883
19884If you so desire, you can configure the agent (see @code{gnus-agent-cache}
19885@pxref{Agent Variables}) to always download headers and articles while
19886plugged. Gnus will almost certainly be slower, but it will be kept
19887synchronized with the server. That last point probably won't make any
19888sense if you are using a nntp or nnimap back end.
19889
19890@node Agent Expiry
19891@subsection Agent Expiry
19892
19893@vindex gnus-agent-expire-days
19894@findex gnus-agent-expire
19895@kindex M-x gnus-agent-expire
19896@kindex M-x gnus-agent-expire-group
19897@findex gnus-agent-expire-group
19898@cindex agent expiry
19899@cindex Gnus agent expiry
19900@cindex expiry, in Gnus agent
19901
19902The Agent back end, @code{nnagent}, doesn't handle expiry. Well, at
19903least it doesn't handle it like other back ends. Instead, there are
19904special @code{gnus-agent-expire} and @code{gnus-agent-expire-group}
19905commands that will expire all read articles that are older than
19906@code{gnus-agent-expire-days} days. They can be run whenever you feel
19907that you're running out of space. Neither are particularly fast or
19908efficient, and it's not a particularly good idea to interrupt them (with
19909@kbd{C-g} or anything else) once you've started one of them.
19910
19911Note that other functions, e.g. @code{gnus-request-expire-articles},
19912might run @code{gnus-agent-expire} for you to keep the agent
19913synchronized with the group.
19914
19915The agent parameter @code{agent-enable-expiration} may be used to
19916prevent expiration in selected groups.
19917
19918@vindex gnus-agent-expire-all
19919If @code{gnus-agent-expire-all} is non-@code{nil}, the agent
19920expiration commands will expire all articles---unread, read, ticked
19921and dormant. If @code{nil} (which is the default), only read articles
19922are eligible for expiry, and unread, ticked and dormant articles will
19923be kept indefinitely.
19924
19925If you find that some articles eligible for expiry are never expired,
19926perhaps some Gnus Agent files are corrupted. There's are special
19927commands, @code{gnus-agent-regenerate} and
19928@code{gnus-agent-regenerate-group}, to fix possible problems.
19929
19930@node Agent Regeneration
19931@subsection Agent Regeneration
19932
19933@cindex agent regeneration
19934@cindex Gnus agent regeneration
19935@cindex regeneration
19936
19937The local data structures used by @code{nnagent} may become corrupted
19938due to certain exceptional conditions. When this happens,
19939@code{nnagent} functionality may degrade or even fail. The solution
19940to this problem is to repair the local data structures by removing all
19941internal inconsistencies.
19942
19943For example, if your connection to your server is lost while
19944downloaded articles into the agent, the local data structures will not
19945know about articles successfully downloaded prior to the connection
19946failure. Running @code{gnus-agent-regenerate} or
19947@code{gnus-agent-regenerate-group} will update the data structures
19948such that you don't need to download these articles a second time.
19949
19950@findex gnus-agent-regenerate
19951@kindex M-x gnus-agent-regenerate
19952The command @code{gnus-agent-regenerate} will perform
19953@code{gnus-agent-regenerate-group} on every agentized group. While
19954you can run @code{gnus-agent-regenerate} in any buffer, it is strongly
19955recommended that you first close all summary buffers.
19956
19957@findex gnus-agent-regenerate-group
19958@kindex M-x gnus-agent-regenerate-group
19959The command @code{gnus-agent-regenerate-group} uses the local copies
19960of individual articles to repair the local @acronym{NOV}(header) database. It
19961then updates the internal data structures that document which articles
19962are stored locally. An optional argument will mark articles in the
19963agent as unread.
19964
01c52d31
MB
19965@node Agent and flags
19966@subsection Agent and flags
4009494e 19967
01c52d31
MB
19968The Agent works with any Gnus back end including those, such as
19969nnimap, that store flags (read, ticked, etc) on the server. Sadly,
19970the Agent does not actually know which backends keep their flags in
19971the backend server rather than in @file{.newsrc}. This means that the
19972Agent, while unplugged or disconnected, will always record all changes
19973to the flags in its own files.
4009494e 19974
01c52d31
MB
19975When you plug back in, Gnus will then check to see if you have any
19976changed any flags and ask if you wish to synchronize these with the
19977server. This behavior is customizable by @code{gnus-agent-synchronize-flags}.
4009494e
GM
19978
19979@vindex gnus-agent-synchronize-flags
19980If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
19981never automatically synchronize flags. If it is @code{ask}, which is
19982the default, the Agent will check if you made any changes and if so
19983ask if you wish to synchronize these when you re-connect. If it has
19984any other value, all flags will be synchronized automatically.
19985
19986If you do not wish to synchronize flags automatically when you
19987re-connect, you can do it manually with the
19988@code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}
19989in the group buffer.
19990
01c52d31
MB
19991Technical note: the synchronization algorithm does not work by ``pushing''
19992all local flags to the server, but rather by incrementally updated the
19993server view of flags by changing only those flags that were changed by
19994the user. Thus, if you set one flag on an article, quit the group then
19995re-select the group and remove the flag; the flag will be set and
19996removed from the server when you ``synchronize''. The queued flag
19997operations can be found in the per-server @code{flags} file in the Agent
19998directory. It's emptied when you synchronize flags.
19999
20000@node Agent and IMAP
20001@subsection Agent and IMAP
20002
20003The Agent works with any Gnus back end, including nnimap. However,
20004since there are some conceptual differences between @acronym{NNTP} and
20005@acronym{IMAP}, this section (should) provide you with some information to
20006make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client.
20007
4009494e
GM
20008Some things are currently not implemented in the Agent that you'd might
20009expect from a disconnected @acronym{IMAP} client, including:
20010
20011@itemize @bullet
20012
20013@item
20014Copying/moving articles into nnimap groups when unplugged.
20015
20016@item
20017Creating/deleting nnimap groups when unplugged.
20018
20019@end itemize
20020
4009494e
GM
20021@node Outgoing Messages
20022@subsection Outgoing Messages
20023
01c52d31
MB
20024By default, when Gnus is unplugged, all outgoing messages (both mail
20025and news) are stored in the draft group ``queue'' (@pxref{Drafts}).
20026You can view them there after posting, and edit them at will.
4009494e 20027
01c52d31
MB
20028You can control the circumstances under which outgoing mail is queued
20029(see @code{gnus-agent-queue-mail}, @pxref{Agent Variables}). Outgoing
20030news is always queued when Gnus is unplugged, and never otherwise.
4009494e 20031
01c52d31
MB
20032You can send the messages either from the draft group with the special
20033commands available there, or you can use the @kbd{J S} command in the
20034group buffer to send all the sendable messages in the draft group.
20035Posting news will only work when Gnus is plugged, but you can send
20036mail at any time.
4009494e 20037
01c52d31
MB
20038If sending mail while unplugged does not work for you and you worry
20039about hitting @kbd{J S} by accident when unplugged, you can have Gnus
20040ask you to confirm your action (see
20041@code{gnus-agent-prompt-send-queue}, @pxref{Agent Variables}).
4009494e
GM
20042
20043@node Agent Variables
20044@subsection Agent Variables
20045
20046@table @code
01c52d31
MB
20047@item gnus-agent
20048@vindex gnus-agent
20049Is the agent enabled? The default is @code{t}. When first enabled,
20050the agent will use @code{gnus-agent-auto-agentize-methods} to
20051automatically mark some back ends as agentized. You may change which
20052back ends are agentized using the agent commands in the server buffer.
20053
20054To enter the server buffer, use the @kbd{^}
20055(@code{gnus-group-enter-server-mode}) command in the group buffer.
20056
20057
4009494e
GM
20058@item gnus-agent-directory
20059@vindex gnus-agent-directory
20060Where the Gnus Agent will store its files. The default is
20061@file{~/News/agent/}.
20062
20063@item gnus-agent-handle-level
20064@vindex gnus-agent-handle-level
20065Groups on levels (@pxref{Group Levels}) higher than this variable will
20066be ignored by the Agent. The default is @code{gnus-level-subscribed},
20067which means that only subscribed group will be considered by the Agent
20068by default.
20069
20070@item gnus-agent-plugged-hook
20071@vindex gnus-agent-plugged-hook
20072Hook run when connecting to the network.
20073
20074@item gnus-agent-unplugged-hook
20075@vindex gnus-agent-unplugged-hook
20076Hook run when disconnecting from the network.
20077
20078@item gnus-agent-fetched-hook
20079@vindex gnus-agent-fetched-hook
20080Hook run when finished fetching articles.
20081
20082@item gnus-agent-cache
20083@vindex gnus-agent-cache
20084Variable to control whether use the locally stored @acronym{NOV} and
20085articles when plugged, e.g. essentially using the Agent as a cache.
20086The default is non-@code{nil}, which means to use the Agent as a cache.
20087
20088@item gnus-agent-go-online
20089@vindex gnus-agent-go-online
20090If @code{gnus-agent-go-online} is @code{nil}, the Agent will never
20091automatically switch offline servers into online status. If it is
20092@code{ask}, the default, the Agent will ask if you wish to switch
20093offline servers into online status when you re-connect. If it has any
20094other value, all offline servers will be automatically switched into
20095online status.
20096
20097@item gnus-agent-mark-unread-after-downloaded
20098@vindex gnus-agent-mark-unread-after-downloaded
20099If @code{gnus-agent-mark-unread-after-downloaded} is non-@code{nil},
20100mark articles as unread after downloading. This is usually a safe
20101thing to do as the newly downloaded article has obviously not been
20102read. The default is @code{t}.
20103
01c52d31
MB
20104@item gnus-agent-synchronize-flags
20105@vindex gnus-agent-synchronize-flags
20106If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
20107never automatically synchronize flags. If it is @code{ask}, which is
20108the default, the Agent will check if you made any changes and if so
20109ask if you wish to synchronize these when you re-connect. If it has
20110any other value, all flags will be synchronized automatically.
20111
4009494e
GM
20112@item gnus-agent-consider-all-articles
20113@vindex gnus-agent-consider-all-articles
20114If @code{gnus-agent-consider-all-articles} is non-@code{nil}, the
20115agent will let the agent predicate decide whether articles need to be
20116downloaded or not, for all articles. When @code{nil}, the default,
20117the agent will only let the predicate decide whether unread articles
20118are downloaded or not. If you enable this, you may also want to look
20119into the agent expiry settings (@pxref{Category Variables}), so that
20120the agent doesn't download articles which the agent will later expire,
20121over and over again.
20122
20123@item gnus-agent-max-fetch-size
20124@vindex gnus-agent-max-fetch-size
20125The agent fetches articles into a temporary buffer prior to parsing
20126them into individual files. To avoid exceeding the max. buffer size,
20127the agent alternates between fetching and parsing until all articles
20128have been fetched. @code{gnus-agent-max-fetch-size} provides a size
20129limit to control how often the cycling occurs. A large value improves
20130performance. A small value minimizes the time lost should the
20131connection be lost while fetching (You may need to run
20132@code{gnus-agent-regenerate-group} to update the group's state.
20133However, all articles parsed prior to loosing the connection will be
20134available while unplugged). The default is 10M so it is unusual to
20135see any cycling.
20136
20137@item gnus-server-unopen-status
20138@vindex gnus-server-unopen-status
20139Perhaps not an Agent variable, but closely related to the Agent, this
20140variable says what will happen if Gnus cannot open a server. If the
20141Agent is enabled, the default, @code{nil}, makes Gnus ask the user
20142whether to deny the server or whether to unplug the agent. If the
20143Agent is disabled, Gnus always simply deny the server. Other choices
20144for this variable include @code{denied} and @code{offline} the latter
20145is only valid if the Agent is used.
20146
20147@item gnus-auto-goto-ignores
20148@vindex gnus-auto-goto-ignores
20149Another variable that isn't an Agent variable, yet so closely related
20150that most will look for it here, this variable tells the summary
20151buffer how to maneuver around undownloaded (only headers stored in the
20152agent) and unfetched (neither article nor headers stored) articles.
20153
20154The valid values are @code{nil} (maneuver to any article),
20155@code{undownloaded} (maneuvering while unplugged ignores articles that
20156have not been fetched), @code{always-undownloaded} (maneuvering always
20157ignores articles that have not been fetched), @code{unfetched}
20158(maneuvering ignores articles whose headers have not been fetched).
20159
01c52d31
MB
20160@item gnus-agent-queue-mail
20161@vindex gnus-agent-queue-mail
20162When @code{gnus-agent-queue-mail} is @code{always}, Gnus will always
20163queue mail rather than sending it straight away. When @code{t}, Gnus
20164will queue mail when unplugged only. When @code{nil}, never queue
20165mail. The default is @code{t}.
20166
20167@item gnus-agent-prompt-send-queue
20168@vindex gnus-agent-prompt-send-queue
20169When @code{gnus-agent-prompt-send-queue} is non-@code{nil} Gnus will
20170prompt you to confirm that you really wish to proceed if you hit
20171@kbd{J S} while unplugged. The default is @code{nil}.
20172
4009494e
GM
20173@item gnus-agent-auto-agentize-methods
20174@vindex gnus-agent-auto-agentize-methods
20175If you have never used the Agent before (or more technically, if
20176@file{~/News/agent/lib/servers} does not exist), Gnus will
20177automatically agentize a few servers for you. This variable control
01c52d31
MB
20178which back ends should be auto-agentized. It is typically only useful
20179to agentize remote back ends. The auto-agentizing has the same effect
4009494e
GM
20180as running @kbd{J a} on the servers (@pxref{Server Agent Commands}).
20181If the file exist, you must manage the servers manually by adding or
20182removing them, this variable is only applicable the first time you
20183start Gnus. The default is @samp{(nntp nnimap)}.
20184
20185@end table
20186
20187
20188@node Example Setup
20189@subsection Example Setup
20190
20191If you don't want to read this manual, and you have a fairly standard
20192setup, you may be able to use something like the following as your
20193@file{~/.gnus.el} file to get started.
20194
20195@lisp
20196;; @r{Define how Gnus is to fetch news. We do this over @acronym{NNTP}}
20197;; @r{from your ISP's server.}
20198(setq gnus-select-method '(nntp "news.your-isp.com"))
20199
20200;; @r{Define how Gnus is to read your mail. We read mail from}
20201;; @r{your ISP's @acronym{POP} server.}
20202(setq mail-sources '((pop :server "pop.your-isp.com")))
20203
20204;; @r{Say how Gnus is to store the mail. We use nnml groups.}
20205(setq gnus-secondary-select-methods '((nnml "")))
20206
20207;; @r{Make Gnus into an offline newsreader.}
20208;; (gnus-agentize) ; @r{The obsolete setting.}
20209;; (setq gnus-agent t) ; @r{Now the default.}
20210@end lisp
20211
20212That should be it, basically. Put that in your @file{~/.gnus.el} file,
20213edit to suit your needs, start up PPP (or whatever), and type @kbd{M-x
20214gnus}.
20215
20216If this is the first time you've run Gnus, you will be subscribed
20217automatically to a few default newsgroups. You'll probably want to
20218subscribe to more groups, and to do that, you have to query the
20219@acronym{NNTP} server for a complete list of groups with the @kbd{A A}
20220command. This usually takes quite a while, but you only have to do it
20221once.
20222
20223After reading and parsing a while, you'll be presented with a list of
20224groups. Subscribe to the ones you want to read with the @kbd{u}
20225command. @kbd{l} to make all the killed groups disappear after you've
20226subscribe to all the groups you want to read. (@kbd{A k} will bring
20227back all the killed groups.)
20228
20229You can now read the groups at once, or you can download the articles
20230with the @kbd{J s} command. And then read the rest of this manual to
20231find out which of the other gazillion things you want to customize.
20232
20233
20234@node Batching Agents
20235@subsection Batching Agents
20236@findex gnus-agent-batch
20237
20238Having the Gnus Agent fetch articles (and post whatever messages you've
20239written) is quite easy once you've gotten things set up properly. The
20240following shell script will do everything that is necessary:
20241
20242You can run a complete batch command from the command line with the
20243following incantation:
20244
20245@example
20246#!/bin/sh
20247emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-agent-batch >/dev/null 2>&1
20248@end example
20249
20250
20251@node Agent Caveats
20252@subsection Agent Caveats
20253
20254The Gnus Agent doesn't seem to work like most other offline
20255newsreaders. Here are some common questions that some imaginary people
20256may ask:
20257
20258@table @dfn
20259@item If I read an article while plugged, do they get entered into the Agent?
20260
20261@strong{No}. If you want this behavior, add
20262@code{gnus-agent-fetch-selected-article} to
20263@code{gnus-select-article-hook}.
20264
20265@item If I read an article while plugged, and the article already exists in
20266the Agent, will it get downloaded once more?
20267
20268@strong{No}, unless @code{gnus-agent-cache} is @code{nil}.
20269
20270@end table
20271
20272In short, when Gnus is unplugged, it only looks into the locally stored
20273articles; when it's plugged, it talks to your ISP and may also use the
20274locally stored articles.
20275
20276
20277@node Scoring
20278@chapter Scoring
20279@cindex scoring
20280
20281Other people use @dfn{kill files}, but we here at Gnus Towers like
20282scoring better than killing, so we'd rather switch than fight. They do
20283something completely different as well, so sit up straight and pay
20284attention!
20285
20286@vindex gnus-summary-mark-below
20287All articles have a default score (@code{gnus-summary-default-score}),
20288which is 0 by default. This score may be raised or lowered either
20289interactively or by score files. Articles that have a score lower than
20290@code{gnus-summary-mark-below} are marked as read.
20291
20292Gnus will read any @dfn{score files} that apply to the current group
20293before generating the summary buffer.
20294
20295There are several commands in the summary buffer that insert score
20296entries based on the current article. You can, for instance, ask Gnus to
20297lower or increase the score of all articles with a certain subject.
20298
20299There are two sorts of scoring entries: Permanent and temporary.
20300Temporary score entries are self-expiring entries. Any entries that are
20301temporary and have not been used for, say, a week, will be removed
20302silently to help keep the sizes of the score files down.
20303
20304@menu
20305* Summary Score Commands:: Adding score entries for the current group.
20306* Group Score Commands:: General score commands.
20307* Score Variables:: Customize your scoring. (My, what terminology).
20308* Score File Format:: What a score file may contain.
20309* Score File Editing:: You can edit score files by hand as well.
20310* Adaptive Scoring:: Big Sister Gnus knows what you read.
20311* Home Score File:: How to say where new score entries are to go.
20312* Followups To Yourself:: Having Gnus notice when people answer you.
20313* Scoring On Other Headers:: Scoring on non-standard headers.
20314* Scoring Tips:: How to score effectively.
20315* Reverse Scoring:: That problem child of old is not problem.
20316* Global Score Files:: Earth-spanning, ear-splitting score files.
20317* Kill Files:: They are still here, but they can be ignored.
20318* Converting Kill Files:: Translating kill files to score files.
4009494e
GM
20319* Advanced Scoring:: Using logical expressions to build score rules.
20320* Score Decays:: It can be useful to let scores wither away.
20321@end menu
20322
20323
20324@node Summary Score Commands
20325@section Summary Score Commands
20326@cindex score commands
20327
20328The score commands that alter score entries do not actually modify real
20329score files. That would be too inefficient. Gnus maintains a cache of
20330previously loaded score files, one of which is considered the
20331@dfn{current score file alist}. The score commands simply insert
20332entries into this list, and upon group exit, this list is saved.
20333
20334The current score file is by default the group's local score file, even
20335if no such score file actually exists. To insert score commands into
20336some other score file (e.g. @file{all.SCORE}), you must first make this
20337score file the current one.
20338
20339General score commands that don't actually change the score file:
20340
20341@table @kbd
20342
20343@item V s
20344@kindex V s (Summary)
20345@findex gnus-summary-set-score
20346Set the score of the current article (@code{gnus-summary-set-score}).
20347
20348@item V S
20349@kindex V S (Summary)
20350@findex gnus-summary-current-score
20351Display the score of the current article
20352(@code{gnus-summary-current-score}).
20353
20354@item V t
20355@kindex V t (Summary)
20356@findex gnus-score-find-trace
20357Display all score rules that have been used on the current article
20358(@code{gnus-score-find-trace}). In the @code{*Score Trace*} buffer, you
20359may type @kbd{e} to edit score file corresponding to the score rule on
20360current line and @kbd{f} to format (@code{gnus-score-pretty-print}) the
20361score file and edit it.
20362
20363@item V w
20364@kindex V w (Summary)
20365@findex gnus-score-find-favourite-words
20366List words used in scoring (@code{gnus-score-find-favourite-words}).
20367
20368@item V R
20369@kindex V R (Summary)
20370@findex gnus-summary-rescore
20371Run the current summary through the scoring process
20372(@code{gnus-summary-rescore}). This might be useful if you're playing
20373around with your score files behind Gnus' back and want to see the
20374effect you're having.
20375
20376@item V c
20377@kindex V c (Summary)
20378@findex gnus-score-change-score-file
20379Make a different score file the current
20380(@code{gnus-score-change-score-file}).
20381
20382@item V e
20383@kindex V e (Summary)
20384@findex gnus-score-edit-current-scores
20385Edit the current score file (@code{gnus-score-edit-current-scores}).
20386You will be popped into a @code{gnus-score-mode} buffer (@pxref{Score
20387File Editing}).
20388
20389@item V f
20390@kindex V f (Summary)
20391@findex gnus-score-edit-file
20392Edit a score file and make this score file the current one
20393(@code{gnus-score-edit-file}).
20394
20395@item V F
20396@kindex V F (Summary)
20397@findex gnus-score-flush-cache
20398Flush the score cache (@code{gnus-score-flush-cache}). This is useful
20399after editing score files.
20400
20401@item V C
20402@kindex V C (Summary)
20403@findex gnus-score-customize
20404Customize a score file in a visually pleasing manner
20405(@code{gnus-score-customize}).
20406
20407@end table
20408
20409The rest of these commands modify the local score file.
20410
20411@table @kbd
20412
20413@item V m
20414@kindex V m (Summary)
20415@findex gnus-score-set-mark-below
20416Prompt for a score, and mark all articles with a score below this as
20417read (@code{gnus-score-set-mark-below}).
20418
20419@item V x
20420@kindex V x (Summary)
20421@findex gnus-score-set-expunge-below
20422Prompt for a score, and add a score rule to the current score file to
20423expunge all articles below this score
20424(@code{gnus-score-set-expunge-below}).
20425@end table
20426
20427The keystrokes for actually making score entries follow a very regular
20428pattern, so there's no need to list all the commands. (Hundreds of
20429them.)
20430
20431@findex gnus-summary-increase-score
20432@findex gnus-summary-lower-score
20433
20434@enumerate
20435@item
20436The first key is either @kbd{I} (upper case i) for increasing the score
20437or @kbd{L} for lowering the score.
20438@item
20439The second key says what header you want to score on. The following
20440keys are available:
20441@table @kbd
20442
20443@item a
20444Score on the author name.
20445
20446@item s
20447Score on the subject line.
20448
20449@item x
20450Score on the @code{Xref} line---i.e., the cross-posting line.
20451
20452@item r
20453Score on the @code{References} line.
20454
20455@item d
20456Score on the date.
20457
20458@item l
20459Score on the number of lines.
20460
20461@item i
20462Score on the @code{Message-ID} header.
20463
20464@item e
20465Score on an ``extra'' header, that is, one of those in gnus-extra-headers,
20466if your @acronym{NNTP} server tracks additional header data in overviews.
20467
20468@item f
20469Score on followups---this matches the author name, and adds scores to
20470the followups to this author. (Using this key leads to the creation of
20471@file{ADAPT} files.)
20472
20473@item b
20474Score on the body.
20475
20476@item h
20477Score on the head.
20478
20479@item t
20480Score on thread. (Using this key leads to the creation of @file{ADAPT}
20481files.)
20482
20483@end table
20484
20485@item
20486The third key is the match type. Which match types are valid depends on
20487what headers you are scoring on.
20488
20489@table @code
20490
20491@item strings
20492
20493@table @kbd
20494
20495@item e
20496Exact matching.
20497
20498@item s
20499Substring matching.
20500
20501@item f
20502Fuzzy matching (@pxref{Fuzzy Matching}).
20503
20504@item r
20505Regexp matching
20506@end table
20507
20508@item date
20509@table @kbd
20510
20511@item b
20512Before date.
20513
20514@item a
20515After date.
20516
20517@item n
20518This date.
20519@end table
20520
20521@item number
20522@table @kbd
20523
20524@item <
20525Less than number.
20526
20527@item =
20528Equal to number.
20529
20530@item >
20531Greater than number.
20532@end table
20533@end table
20534
20535@item
20536The fourth and usually final key says whether this is a temporary (i.e.,
20537expiring) score entry, or a permanent (i.e., non-expiring) score entry,
20538or whether it is to be done immediately, without adding to the score
20539file.
20540@table @kbd
20541
20542@item t
20543Temporary score entry.
20544
20545@item p
20546Permanent score entry.
20547
20548@item i
20549Immediately scoring.
20550@end table
20551
20552@item
20553If you are scoring on `e' (extra) headers, you will then be prompted for
20554the header name on which you wish to score. This must be a header named
20555in gnus-extra-headers, and @samp{TAB} completion is available.
20556
20557@end enumerate
20558
20559So, let's say you want to increase the score on the current author with
20560exact matching permanently: @kbd{I a e p}. If you want to lower the
20561score based on the subject line, using substring matching, and make a
20562temporary score entry: @kbd{L s s t}. Pretty easy.
20563
20564To make things a bit more complicated, there are shortcuts. If you use
20565a capital letter on either the second or third keys, Gnus will use
20566defaults for the remaining one or two keystrokes. The defaults are
20567``substring'' and ``temporary''. So @kbd{I A} is the same as @kbd{I a s
20568t}, and @kbd{I a R} is the same as @kbd{I a r t}.
20569
20570These functions take both the numerical prefix and the symbolic prefix
20571(@pxref{Symbolic Prefixes}). A numerical prefix says how much to lower
20572(or increase) the score of the article. A symbolic prefix of @code{a}
20573says to use the @file{all.SCORE} file for the command instead of the
20574current score file.
20575
20576@vindex gnus-score-mimic-keymap
20577The @code{gnus-score-mimic-keymap} says whether these commands will
20578pretend they are keymaps or not.
20579
20580
20581@node Group Score Commands
20582@section Group Score Commands
20583@cindex group score commands
20584
20585There aren't many of these as yet, I'm afraid.
20586
20587@table @kbd
20588
01c52d31
MB
20589@item W e
20590@kindex W e (Group)
20591@findex gnus-score-edit-all-score
20592Edit the apply-to-all-groups all.SCORE file. You will be popped into
20593a @code{gnus-score-mode} buffer (@pxref{Score File Editing}).
20594
4009494e
GM
20595@item W f
20596@kindex W f (Group)
20597@findex gnus-score-flush-cache
20598Gnus maintains a cache of score alists to avoid having to reload them
20599all the time. This command will flush the cache
20600(@code{gnus-score-flush-cache}).
20601
20602@end table
20603
20604You can do scoring from the command line by saying something like:
20605
20606@findex gnus-batch-score
20607@cindex batch scoring
20608@example
20609$ emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
20610@end example
20611
20612
20613@node Score Variables
20614@section Score Variables
20615@cindex score variables
20616
20617@table @code
20618
20619@item gnus-use-scoring
20620@vindex gnus-use-scoring
20621If @code{nil}, Gnus will not check for score files, and will not, in
20622general, do any score-related work. This is @code{t} by default.
20623
20624@item gnus-kill-killed
20625@vindex gnus-kill-killed
20626If this variable is @code{nil}, Gnus will never apply score files to
20627articles that have already been through the kill process. While this
20628may save you lots of time, it also means that if you apply a kill file
20629to a group, and then change the kill file and want to run it over you
20630group again to kill more articles, it won't work. You have to set this
20631variable to @code{t} to do that. (It is @code{t} by default.)
20632
20633@item gnus-kill-files-directory
20634@vindex gnus-kill-files-directory
20635All kill and score files will be stored in this directory, which is
20636initialized from the @env{SAVEDIR} environment variable by default.
20637This is @file{~/News/} by default.
20638
20639@item gnus-score-file-suffix
20640@vindex gnus-score-file-suffix
20641Suffix to add to the group name to arrive at the score file name
20642(@file{SCORE} by default.)
20643
20644@item gnus-score-uncacheable-files
20645@vindex gnus-score-uncacheable-files
20646@cindex score cache
20647All score files are normally cached to avoid excessive re-loading of
bbbe940b 20648score files. However, this might make your Emacs grow big and
4009494e
GM
20649bloated, so this regexp can be used to weed out score files unlikely
20650to be needed again. It would be a bad idea to deny caching of
20651@file{all.SCORE}, while it might be a good idea to not cache
20652@file{comp.infosystems.www.authoring.misc.ADAPT}. In fact, this
20653variable is @samp{ADAPT$} by default, so no adaptive score files will
20654be cached.
20655
20656@item gnus-save-score
20657@vindex gnus-save-score
20658If you have really complicated score files, and do lots of batch
20659scoring, then you might set this variable to @code{t}. This will make
20660Gnus save the scores into the @file{.newsrc.eld} file.
20661
20662If you do not set this to @code{t}, then manual scores (like those set
20663with @kbd{V s} (@code{gnus-summary-set-score})) will not be preserved
20664across group visits.
20665
20666@item gnus-score-interactive-default-score
20667@vindex gnus-score-interactive-default-score
20668Score used by all the interactive raise/lower commands to raise/lower
20669score with. Default is 1000, which may seem excessive, but this is to
20670ensure that the adaptive scoring scheme gets enough room to play with.
20671We don't want the small changes from the adaptive scoring to overwrite
20672manually entered data.
20673
20674@item gnus-summary-default-score
20675@vindex gnus-summary-default-score
20676Default score of an article, which is 0 by default.
20677
20678@item gnus-summary-expunge-below
20679@vindex gnus-summary-expunge-below
20680Don't display the summary lines of articles that have scores lower than
20681this variable. This is @code{nil} by default, which means that no
20682articles will be hidden. This variable is local to the summary buffers,
20683and has to be set from @code{gnus-summary-mode-hook}.
20684
20685@item gnus-score-over-mark
20686@vindex gnus-score-over-mark
20687Mark (in the third column) used for articles with a score over the
20688default. Default is @samp{+}.
20689
20690@item gnus-score-below-mark
20691@vindex gnus-score-below-mark
20692Mark (in the third column) used for articles with a score below the
20693default. Default is @samp{-}.
20694
20695@item gnus-score-find-score-files-function
20696@vindex gnus-score-find-score-files-function
20697Function used to find score files for the current group. This function
20698is called with the name of the group as the argument.
20699
20700Predefined functions available are:
20701@table @code
20702
20703@item gnus-score-find-single
20704@findex gnus-score-find-single
20705Only apply the group's own score file.
20706
20707@item gnus-score-find-bnews
20708@findex gnus-score-find-bnews
20709Apply all score files that match, using bnews syntax. This is the
20710default. If the current group is @samp{gnu.emacs.gnus}, for instance,
20711@file{all.emacs.all.SCORE}, @file{not.alt.all.SCORE} and
20712@file{gnu.all.SCORE} would all apply. In short, the instances of
20713@samp{all} in the score file names are translated into @samp{.*}, and
20714then a regexp match is done.
20715
20716This means that if you have some score entries that you want to apply to
20717all groups, then you put those entries in the @file{all.SCORE} file.
20718
20719The score files are applied in a semi-random order, although Gnus will
20720try to apply the more general score files before the more specific score
20721files. It does this by looking at the number of elements in the score
20722file names---discarding the @samp{all} elements.
20723
20724@item gnus-score-find-hierarchical
20725@findex gnus-score-find-hierarchical
20726Apply all score files from all the parent groups. This means that you
20727can't have score files like @file{all.SCORE}, but you can have
20728@file{SCORE}, @file{comp.SCORE} and @file{comp.emacs.SCORE} for each
20729server.
20730
20731@end table
20732This variable can also be a list of functions. In that case, all
20733these functions will be called with the group name as argument, and
20734all the returned lists of score files will be applied. These
20735functions can also return lists of lists of score alists directly. In
20736that case, the functions that return these non-file score alists
20737should probably be placed before the ``real'' score file functions, to
20738ensure that the last score file returned is the local score file.
20739Phu.
20740
20741For example, to do hierarchical scoring but use a non-server-specific
20742overall score file, you could use the value
20743@example
20744(list (lambda (group) ("all.SCORE"))
20745 'gnus-score-find-hierarchical)
20746@end example
20747
20748@item gnus-score-expiry-days
20749@vindex gnus-score-expiry-days
20750This variable says how many days should pass before an unused score file
20751entry is expired. If this variable is @code{nil}, no score file entries
20752are expired. It's 7 by default.
20753
20754@item gnus-update-score-entry-dates
20755@vindex gnus-update-score-entry-dates
20756If this variable is non-@code{nil}, temporary score entries that have
20757been triggered (matched) will have their dates updated. (This is how Gnus
20758controls expiry---all non-matched-entries will become too old while
20759matched entries will stay fresh and young.) However, if you set this
20760variable to @code{nil}, even matched entries will grow old and will
20761have to face that oh-so grim reaper.
20762
20763@item gnus-score-after-write-file-function
20764@vindex gnus-score-after-write-file-function
20765Function called with the name of the score file just written.
20766
20767@item gnus-score-thread-simplify
20768@vindex gnus-score-thread-simplify
20769If this variable is non-@code{nil}, article subjects will be
20770simplified for subject scoring purposes in the same manner as with
20771threading---according to the current value of
20772@code{gnus-simplify-subject-functions}. If the scoring entry uses
20773@code{substring} or @code{exact} matching, the match will also be
20774simplified in this manner.
20775
20776@end table
20777
20778
20779@node Score File Format
20780@section Score File Format
20781@cindex score file format
20782
20783A score file is an @code{emacs-lisp} file that normally contains just a
20784single form. Casual users are not expected to edit these files;
20785everything can be changed from the summary buffer.
20786
20787Anyway, if you'd like to dig into it yourself, here's an example:
20788
20789@lisp
20790(("from"
20791 ("Lars Ingebrigtsen" -10000)
20792 ("Per Abrahamsen")
20793 ("larsi\\|lmi" -50000 nil R))
20794 ("subject"
20795 ("Ding is Badd" nil 728373))
20796 ("xref"
20797 ("alt.politics" -1000 728372 s))
20798 ("lines"
20799 (2 -100 nil <))
20800 (mark 0)
20801 (expunge -1000)
20802 (mark-and-expunge -10)
20803 (read-only nil)
20804 (orphan -10)
20805 (adapt t)
20806 (files "/hom/larsi/News/gnu.SCORE")
20807 (exclude-files "all.SCORE")
20808 (local (gnus-newsgroup-auto-expire t)
20809 (gnus-summary-make-false-root empty))
20810 (eval (ding)))
20811@end lisp
20812
20813This example demonstrates most score file elements. @xref{Advanced
20814Scoring}, for a different approach.
20815
20816Even though this looks much like Lisp code, nothing here is actually
20817@code{eval}ed. The Lisp reader is used to read this form, though, so it
20818has to be valid syntactically, if not semantically.
20819
20820Six keys are supported by this alist:
20821
20822@table @code
20823
20824@item STRING
20825If the key is a string, it is the name of the header to perform the
20826match on. Scoring can only be performed on these eight headers:
20827@code{From}, @code{Subject}, @code{References}, @code{Message-ID},
20828@code{Xref}, @code{Lines}, @code{Chars} and @code{Date}. In addition to
20829these headers, there are three strings to tell Gnus to fetch the entire
20830article and do the match on larger parts of the article: @code{Body}
20831will perform the match on the body of the article, @code{Head} will
20832perform the match on the head of the article, and @code{All} will
20833perform the match on the entire article. Note that using any of these
20834last three keys will slow down group entry @emph{considerably}. The
20835final ``header'' you can score on is @code{Followup}. These score
20836entries will result in new score entries being added for all follow-ups
20837to articles that matches these score entries.
20838
20839Following this key is an arbitrary number of score entries, where each
20840score entry has one to four elements.
20841@enumerate
20842
20843@item
20844The first element is the @dfn{match element}. On most headers this will
20845be a string, but on the Lines and Chars headers, this must be an
20846integer.
20847
20848@item
20849If the second element is present, it should be a number---the @dfn{score
20850element}. This number should be an integer in the neginf to posinf
20851interval. This number is added to the score of the article if the match
20852is successful. If this element is not present, the
20853@code{gnus-score-interactive-default-score} number will be used
20854instead. This is 1000 by default.
20855
20856@item
20857If the third element is present, it should be a number---the @dfn{date
20858element}. This date says when the last time this score entry matched,
20859which provides a mechanism for expiring the score entries. It this
20860element is not present, the score entry is permanent. The date is
20861represented by the number of days since December 31, 1 BCE.
20862
20863@item
20864If the fourth element is present, it should be a symbol---the @dfn{type
20865element}. This element specifies what function should be used to see
20866whether this score entry matches the article. What match types that can
20867be used depends on what header you wish to perform the match on.
20868@table @dfn
20869
20870@item From, Subject, References, Xref, Message-ID
20871For most header types, there are the @code{r} and @code{R} (regexp), as
20872well as @code{s} and @code{S} (substring) types, and @code{e} and
20873@code{E} (exact match), and @code{w} (word match) types. If this
20874element is not present, Gnus will assume that substring matching should
20875be used. @code{R}, @code{S}, and @code{E} differ from the others in
20876that the matches will be done in a case-sensitive manner. All these
20877one-letter types are really just abbreviations for the @code{regexp},
20878@code{string}, @code{exact}, and @code{word} types, which you can use
20879instead, if you feel like.
20880
20881@item Extra
20882Just as for the standard string overview headers, if you are using
20883gnus-extra-headers, you can score on these headers' values. In this
20884case, there is a 5th element in the score entry, being the name of the
20885header to be scored. The following entry is useful in your
20886@file{all.SCORE} file in case of spam attacks from a single origin
20887host, if your @acronym{NNTP} server tracks @samp{NNTP-Posting-Host} in
20888overviews:
20889
20890@lisp
20891("111.222.333.444" -1000 nil s
20892 "NNTP-Posting-Host")
20893@end lisp
20894
20895@item Lines, Chars
20896These two headers use different match types: @code{<}, @code{>},
20897@code{=}, @code{>=} and @code{<=}.
20898
20899These predicates are true if
20900
20901@example
20902(PREDICATE HEADER MATCH)
20903@end example
20904
20905evaluates to non-@code{nil}. For instance, the advanced match
20906@code{("lines" 4 <)} (@pxref{Advanced Scoring}) will result in the
20907following form:
20908
20909@lisp
20910(< header-value 4)
20911@end lisp
20912
20913Or to put it another way: When using @code{<} on @code{Lines} with 4 as
20914the match, we get the score added if the article has less than 4 lines.
20915(It's easy to get confused and think it's the other way around. But
20916it's not. I think.)
20917
20918When matching on @code{Lines}, be careful because some back ends (like
20919@code{nndir}) do not generate @code{Lines} header, so every article ends
20920up being marked as having 0 lines. This can lead to strange results if
20921you happen to lower score of the articles with few lines.
20922
20923@item Date
20924For the Date header we have three kinda silly match types:
20925@code{before}, @code{at} and @code{after}. I can't really imagine this
20926ever being useful, but, like, it would feel kinda silly not to provide
20927this function. Just in case. You never know. Better safe than sorry.
20928Once burnt, twice shy. Don't judge a book by its cover. Never not have
20929sex on a first date. (I have been told that at least one person, and I
20930quote, ``found this function indispensable'', however.)
20931
20932@cindex ISO8601
20933@cindex date
20934A more useful match type is @code{regexp}. With it, you can match the
20935date string using a regular expression. The date is normalized to
20936ISO8601 compact format first---@var{YYYYMMDD}@code{T}@var{HHMMSS}. If
20937you want to match all articles that have been posted on April 1st in
20938every year, you could use @samp{....0401.........} as a match string,
20939for instance. (Note that the date is kept in its original time zone, so
20940this will match articles that were posted when it was April 1st where
20941the article was posted from. Time zones are such wholesome fun for the
20942whole family, eh?)
20943
20944@item Head, Body, All
20945These three match keys use the same match types as the @code{From} (etc)
20946header uses.
20947
20948@item Followup
20949This match key is somewhat special, in that it will match the
20950@code{From} header, and affect the score of not only the matching
20951articles, but also all followups to the matching articles. This allows
20952you e.g. increase the score of followups to your own articles, or
20953decrease the score of followups to the articles of some known
20954trouble-maker. Uses the same match types as the @code{From} header
20955uses. (Using this match key will lead to creation of @file{ADAPT}
20956files.)
20957
20958@item Thread
20959This match key works along the same lines as the @code{Followup} match
20960key. If you say that you want to score on a (sub-)thread started by an
20961article with a @code{Message-ID} @var{x}, then you add a @samp{thread}
20962match. This will add a new @samp{thread} match for each article that
20963has @var{x} in its @code{References} header. (These new @samp{thread}
20964matches will use the @code{Message-ID}s of these matching articles.)
20965This will ensure that you can raise/lower the score of an entire thread,
20966even though some articles in the thread may not have complete
20967@code{References} headers. Note that using this may lead to
20968undeterministic scores of the articles in the thread. (Using this match
20969key will lead to creation of @file{ADAPT} files.)
20970@end table
20971@end enumerate
20972
20973@cindex score file atoms
20974@item mark
20975The value of this entry should be a number. Any articles with a score
20976lower than this number will be marked as read.
20977
20978@item expunge
20979The value of this entry should be a number. Any articles with a score
20980lower than this number will be removed from the summary buffer.
20981
20982@item mark-and-expunge
20983The value of this entry should be a number. Any articles with a score
20984lower than this number will be marked as read and removed from the
20985summary buffer.
20986
20987@item thread-mark-and-expunge
20988The value of this entry should be a number. All articles that belong to
20989a thread that has a total score below this number will be marked as read
20990and removed from the summary buffer. @code{gnus-thread-score-function}
20991says how to compute the total score for a thread.
20992
20993@item files
20994The value of this entry should be any number of file names. These files
20995are assumed to be score files as well, and will be loaded the same way
20996this one was.
20997
20998@item exclude-files
20999The clue of this entry should be any number of files. These files will
21000not be loaded, even though they would normally be so, for some reason or
21001other.
21002
21003@item eval
21004The value of this entry will be @code{eval}el. This element will be
21005ignored when handling global score files.
21006
21007@item read-only
21008Read-only score files will not be updated or saved. Global score files
21009should feature this atom (@pxref{Global Score Files}). (Note:
21010@dfn{Global} here really means @dfn{global}; not your personal
21011apply-to-all-groups score files.)
21012
21013@item orphan
21014The value of this entry should be a number. Articles that do not have
21015parents will get this number added to their scores. Imagine you follow
21016some high-volume newsgroup, like @samp{comp.lang.c}. Most likely you
21017will only follow a few of the threads, also want to see any new threads.
21018
21019You can do this with the following two score file entries:
21020
21021@example
21022 (orphan -500)
21023 (mark-and-expunge -100)
21024@end example
21025
21026When you enter the group the first time, you will only see the new
21027threads. You then raise the score of the threads that you find
21028interesting (with @kbd{I T} or @kbd{I S}), and ignore (@kbd{C y}) the
21029rest. Next time you enter the group, you will see new articles in the
21030interesting threads, plus any new threads.
21031
21032I.e.---the orphan score atom is for high-volume groups where a few
21033interesting threads which can't be found automatically by ordinary
21034scoring rules exist.
21035
21036@item adapt
21037This entry controls the adaptive scoring. If it is @code{t}, the
21038default adaptive scoring rules will be used. If it is @code{ignore}, no
21039adaptive scoring will be performed on this group. If it is a list, this
21040list will be used as the adaptive scoring rules. If it isn't present,
21041or is something other than @code{t} or @code{ignore}, the default
21042adaptive scoring rules will be used. If you want to use adaptive
21043scoring on most groups, you'd set @code{gnus-use-adaptive-scoring} to
21044@code{t}, and insert an @code{(adapt ignore)} in the groups where you do
21045not want adaptive scoring. If you only want adaptive scoring in a few
21046groups, you'd set @code{gnus-use-adaptive-scoring} to @code{nil}, and
21047insert @code{(adapt t)} in the score files of the groups where you want
21048it.
21049
21050@item adapt-file
21051All adaptive score entries will go to the file named by this entry. It
21052will also be applied when entering the group. This atom might be handy
21053if you want to adapt on several groups at once, using the same adaptive
21054file for a number of groups.
21055
21056@item local
21057@cindex local variables
21058The value of this entry should be a list of @code{(@var{var}
21059@var{value})} pairs. Each @var{var} will be made buffer-local to the
21060current summary buffer, and set to the value specified. This is a
21061convenient, if somewhat strange, way of setting variables in some
21062groups if you don't like hooks much. Note that the @var{value} won't
21063be evaluated.
21064@end table
21065
21066
21067@node Score File Editing
21068@section Score File Editing
21069
21070You normally enter all scoring commands from the summary buffer, but you
21071might feel the urge to edit them by hand as well, so we've supplied you
21072with a mode for that.
21073
21074It's simply a slightly customized @code{emacs-lisp} mode, with these
21075additional commands:
21076
21077@table @kbd
21078
21079@item C-c C-c
21080@kindex C-c C-c (Score)
87035689 21081@findex gnus-score-edit-exit
4009494e 21082Save the changes you have made and return to the summary buffer
87035689 21083(@code{gnus-score-edit-exit}).
4009494e
GM
21084
21085@item C-c C-d
21086@kindex C-c C-d (Score)
21087@findex gnus-score-edit-insert-date
21088Insert the current date in numerical format
21089(@code{gnus-score-edit-insert-date}). This is really the day number, if
21090you were wondering.
21091
21092@item C-c C-p
21093@kindex C-c C-p (Score)
21094@findex gnus-score-pretty-print
21095The adaptive score files are saved in an unformatted fashion. If you
21096intend to read one of these files, you want to @dfn{pretty print} it
21097first. This command (@code{gnus-score-pretty-print}) does that for
21098you.
21099
21100@end table
21101
21102Type @kbd{M-x gnus-score-mode} to use this mode.
21103
21104@vindex gnus-score-mode-hook
21105@code{gnus-score-menu-hook} is run in score mode buffers.
21106
21107In the summary buffer you can use commands like @kbd{V f}, @kbd{V e} and
21108@kbd{V t} to begin editing score files.
21109
21110
21111@node Adaptive Scoring
21112@section Adaptive Scoring
21113@cindex adaptive scoring
21114
21115If all this scoring is getting you down, Gnus has a way of making it all
21116happen automatically---as if by magic. Or rather, as if by artificial
21117stupidity, to be precise.
21118
21119@vindex gnus-use-adaptive-scoring
21120When you read an article, or mark an article as read, or kill an
21121article, you leave marks behind. On exit from the group, Gnus can sniff
21122these marks and add score elements depending on what marks it finds.
21123You turn on this ability by setting @code{gnus-use-adaptive-scoring} to
21124@code{t} or @code{(line)}. If you want score adaptively on separate
21125words appearing in the subjects, you should set this variable to
21126@code{(word)}. If you want to use both adaptive methods, set this
21127variable to @code{(word line)}.
21128
21129@vindex gnus-default-adaptive-score-alist
21130To give you complete control over the scoring process, you can customize
21131the @code{gnus-default-adaptive-score-alist} variable. For instance, it
21132might look something like this:
21133
21134@lisp
21135(setq gnus-default-adaptive-score-alist
21136 '((gnus-unread-mark)
21137 (gnus-ticked-mark (from 4))
21138 (gnus-dormant-mark (from 5))
21139 (gnus-del-mark (from -4) (subject -1))
21140 (gnus-read-mark (from 4) (subject 2))
21141 (gnus-expirable-mark (from -1) (subject -1))
21142 (gnus-killed-mark (from -1) (subject -3))
21143 (gnus-kill-file-mark)
21144 (gnus-ancient-mark)
21145 (gnus-low-score-mark)
21146 (gnus-catchup-mark (from -1) (subject -1))))
21147@end lisp
21148
21149As you see, each element in this alist has a mark as a key (either a
21150variable name or a ``real'' mark---a character). Following this key is
21151a arbitrary number of header/score pairs. If there are no header/score
21152pairs following the key, no adaptive scoring will be done on articles
21153that have that key as the article mark. For instance, articles with
21154@code{gnus-unread-mark} in the example above will not get adaptive score
21155entries.
21156
21157Each article can have only one mark, so just a single of these rules
21158will be applied to each article.
21159
21160To take @code{gnus-del-mark} as an example---this alist says that all
21161articles that have that mark (i.e., are marked with @samp{e}) will have a
21162score entry added to lower based on the @code{From} header by -4, and
21163lowered by @code{Subject} by -1. Change this to fit your prejudices.
21164
21165If you have marked 10 articles with the same subject with
21166@code{gnus-del-mark}, the rule for that mark will be applied ten times.
21167That means that that subject will get a score of ten times -1, which
21168should be, unless I'm much mistaken, -10.
21169
21170If you have auto-expirable (mail) groups (@pxref{Expiring Mail}), all
21171the read articles will be marked with the @samp{E} mark. This'll
21172probably make adaptive scoring slightly impossible, so auto-expiring and
21173adaptive scoring doesn't really mix very well.
21174
21175The headers you can score on are @code{from}, @code{subject},
21176@code{message-id}, @code{references}, @code{xref}, @code{lines},
21177@code{chars} and @code{date}. In addition, you can score on
21178@code{followup}, which will create an adaptive score entry that matches
21179on the @code{References} header using the @code{Message-ID} of the
21180current article, thereby matching the following thread.
21181
21182If you use this scheme, you should set the score file atom @code{mark}
21183to something small---like -300, perhaps, to avoid having small random
21184changes result in articles getting marked as read.
21185
21186After using adaptive scoring for a week or so, Gnus should start to
21187become properly trained and enhance the authors you like best, and kill
21188the authors you like least, without you having to say so explicitly.
21189
21190You can control what groups the adaptive scoring is to be performed on
21191by using the score files (@pxref{Score File Format}). This will also
21192let you use different rules in different groups.
21193
21194@vindex gnus-adaptive-file-suffix
21195The adaptive score entries will be put into a file where the name is the
21196group name with @code{gnus-adaptive-file-suffix} appended. The default
21197is @file{ADAPT}.
21198
01c52d31
MB
21199@vindex gnus-adaptive-pretty-print
21200Adaptive score files can get huge and are not meant to be edited by
21201human hands. If @code{gnus-adaptive-pretty-print} is @code{nil} (the
21202deafult) those files will not be written in a human readable way.
21203
4009494e
GM
21204@vindex gnus-score-exact-adapt-limit
21205When doing adaptive scoring, substring or fuzzy matching would probably
21206give you the best results in most cases. However, if the header one
21207matches is short, the possibility for false positives is great, so if
21208the length of the match is less than
21209@code{gnus-score-exact-adapt-limit}, exact matching will be used. If
21210this variable is @code{nil}, exact matching will always be used to avoid
21211this problem.
21212
21213@vindex gnus-default-adaptive-word-score-alist
21214As mentioned above, you can adapt either on individual words or entire
21215headers. If you adapt on words, the
21216@code{gnus-default-adaptive-word-score-alist} variable says what score
21217each instance of a word should add given a mark.
21218
21219@lisp
21220(setq gnus-default-adaptive-word-score-alist
21221 `((,gnus-read-mark . 30)
21222 (,gnus-catchup-mark . -10)
21223 (,gnus-killed-mark . -20)
21224 (,gnus-del-mark . -15)))
21225@end lisp
21226
21227This is the default value. If you have adaption on words enabled, every
21228word that appears in subjects of articles marked with
21229@code{gnus-read-mark} will result in a score rule that increase the
21230score with 30 points.
21231
21232@vindex gnus-default-ignored-adaptive-words
21233@vindex gnus-ignored-adaptive-words
21234Words that appear in the @code{gnus-default-ignored-adaptive-words} list
21235will be ignored. If you wish to add more words to be ignored, use the
21236@code{gnus-ignored-adaptive-words} list instead.
21237
21238@vindex gnus-adaptive-word-length-limit
21239Some may feel that short words shouldn't count when doing adaptive
21240scoring. If so, you may set @code{gnus-adaptive-word-length-limit} to
21241an integer. Words shorter than this number will be ignored. This
21242variable defaults to @code{nil}.
21243
21244@vindex gnus-adaptive-word-syntax-table
21245When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
21246syntax table in effect. It is similar to the standard syntax table, but
21247it considers numbers to be non-word-constituent characters.
21248
21249@vindex gnus-adaptive-word-minimum
21250If @code{gnus-adaptive-word-minimum} is set to a number, the adaptive
21251word scoring process will never bring down the score of an article to
21252below this number. The default is @code{nil}.
21253
21254@vindex gnus-adaptive-word-no-group-words
21255If @code{gnus-adaptive-word-no-group-words} is set to @code{t}, gnus
21256won't adaptively word score any of the words in the group name. Useful
21257for groups like @samp{comp.editors.emacs}, where most of the subject
21258lines contain the word @samp{emacs}.
21259
21260After using this scheme for a while, it might be nice to write a
21261@code{gnus-psychoanalyze-user} command to go through the rules and see
21262what words you like and what words you don't like. Or perhaps not.
21263
21264Note that the adaptive word scoring thing is highly experimental and is
21265likely to change in the future. Initial impressions seem to indicate
21266that it's totally useless as it stands. Some more work (involving more
21267rigorous statistical methods) will have to be done to make this useful.
21268
21269
21270@node Home Score File
21271@section Home Score File
21272
21273The score file where new score file entries will go is called the
21274@dfn{home score file}. This is normally (and by default) the score file
21275for the group itself. For instance, the home score file for
21276@samp{gnu.emacs.gnus} is @file{gnu.emacs.gnus.SCORE}.
21277
21278However, this may not be what you want. It is often convenient to share
21279a common home score file among many groups---all @samp{emacs} groups
21280could perhaps use the same home score file.
21281
21282@vindex gnus-home-score-file
21283The variable that controls this is @code{gnus-home-score-file}. It can
21284be:
21285
21286@enumerate
21287@item
21288A string. Then this file will be used as the home score file for all
21289groups.
21290
21291@item
21292A function. The result of this function will be used as the home score
21293file. The function will be called with the name of the group as the
21294parameter.
21295
21296@item
21297A list. The elements in this list can be:
21298
21299@enumerate
21300@item
21301@code{(@var{regexp} @var{file-name})}. If the @var{regexp} matches the
21302group name, the @var{file-name} will be used as the home score file.
21303
21304@item
21305A function. If the function returns non-@code{nil}, the result will
21306be used as the home score file. The function will be called with the
21307name of the group as the parameter.
21308
21309@item
21310A string. Use the string as the home score file.
21311@end enumerate
21312
21313The list will be traversed from the beginning towards the end looking
21314for matches.
21315
21316@end enumerate
21317
21318So, if you want to use just a single score file, you could say:
21319
21320@lisp
21321(setq gnus-home-score-file
21322 "my-total-score-file.SCORE")
21323@end lisp
21324
21325If you want to use @file{gnu.SCORE} for all @samp{gnu} groups and
21326@file{rec.SCORE} for all @samp{rec} groups (and so on), you can say:
21327
21328@findex gnus-hierarchial-home-score-file
21329@lisp
21330(setq gnus-home-score-file
21331 'gnus-hierarchial-home-score-file)
21332@end lisp
21333
21334This is a ready-made function provided for your convenience.
21335Other functions include
21336
21337@table @code
21338@item gnus-current-home-score-file
21339@findex gnus-current-home-score-file
21340Return the ``current'' regular score file. This will make scoring
21341commands add entry to the ``innermost'' matching score file.
21342
21343@end table
21344
21345If you want to have one score file for the @samp{emacs} groups and
21346another for the @samp{comp} groups, while letting all other groups use
21347their own home score files:
21348
21349@lisp
21350(setq gnus-home-score-file
21351 ;; @r{All groups that match the regexp @code{"\\.emacs"}}
21352 '(("\\.emacs" "emacs.SCORE")
21353 ;; @r{All the comp groups in one score file}
21354 ("^comp" "comp.SCORE")))
21355@end lisp
21356
21357@vindex gnus-home-adapt-file
21358@code{gnus-home-adapt-file} works exactly the same way as
21359@code{gnus-home-score-file}, but says what the home adaptive score file
21360is instead. All new adaptive file entries will go into the file
21361specified by this variable, and the same syntax is allowed.
21362
21363In addition to using @code{gnus-home-score-file} and
21364@code{gnus-home-adapt-file}, you can also use group parameters
21365(@pxref{Group Parameters}) and topic parameters (@pxref{Topic
21366Parameters}) to achieve much the same. Group and topic parameters take
21367precedence over this variable.
21368
21369
21370@node Followups To Yourself
21371@section Followups To Yourself
21372
21373Gnus offers two commands for picking out the @code{Message-ID} header in
21374the current buffer. Gnus will then add a score rule that scores using
21375this @code{Message-ID} on the @code{References} header of other
21376articles. This will, in effect, increase the score of all articles that
21377respond to the article in the current buffer. Quite useful if you want
21378to easily note when people answer what you've said.
21379
21380@table @code
21381
21382@item gnus-score-followup-article
21383@findex gnus-score-followup-article
21384This will add a score to articles that directly follow up your own
21385article.
21386
21387@item gnus-score-followup-thread
21388@findex gnus-score-followup-thread
21389This will add a score to all articles that appear in a thread ``below''
21390your own article.
21391@end table
21392
21393@vindex message-sent-hook
21394These two functions are both primarily meant to be used in hooks like
21395@code{message-sent-hook}, like this:
21396@lisp
21397(add-hook 'message-sent-hook 'gnus-score-followup-thread)
21398@end lisp
21399
21400
21401If you look closely at your own @code{Message-ID}, you'll notice that
21402the first two or three characters are always the same. Here's two of
21403mine:
21404
21405@example
21406<x6u3u47icf.fsf@@eyesore.no>
21407<x6sp9o7ibw.fsf@@eyesore.no>
21408@end example
21409
21410So ``my'' ident on this machine is @samp{x6}. This can be
21411exploited---the following rule will raise the score on all followups to
21412myself:
21413
21414@lisp
21415("references"
21416 ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore\\.no>"
21417 1000 nil r))
21418@end lisp
21419
21420Whether it's the first two or first three characters that are ``yours''
21421is system-dependent.
21422
21423
21424@node Scoring On Other Headers
21425@section Scoring On Other Headers
21426@cindex scoring on other headers
21427
21428Gnus is quite fast when scoring the ``traditional''
21429headers---@samp{From}, @samp{Subject} and so on. However, scoring
21430other headers requires writing a @code{head} scoring rule, which means
21431that Gnus has to request every single article from the back end to find
21432matches. This takes a long time in big groups.
21433
21434Now, there's not much you can do about this for news groups, but for
21435mail groups, you have greater control. In @ref{To From Newsgroups},
21436it's explained in greater detail what this mechanism does, but here's
21437a cookbook example for @code{nnml} on how to allow scoring on the
21438@samp{To} and @samp{Cc} headers.
21439
21440Put the following in your @file{~/.gnus.el} file.
21441
21442@lisp
21443(setq gnus-extra-headers '(To Cc Newsgroups Keywords)
21444 nnmail-extra-headers gnus-extra-headers)
21445@end lisp
21446
21447Restart Gnus and rebuild your @code{nnml} overview files with the
21448@kbd{M-x nnml-generate-nov-databases} command. This will take a long
21449time if you have much mail.
21450
21451Now you can score on @samp{To} and @samp{Cc} as ``extra headers'' like
21452so: @kbd{I e s p To RET <your name> RET}.
21453
21454See? Simple.
21455
01c52d31
MB
21456@vindex gnus-inhibit-slow-scoring
21457You can inhibit scoring the slow scoring on headers or body by setting
21458the variable @code{gnus-inhibit-slow-scoring}. If
21459@code{gnus-inhibit-slow-scoring} is regexp, slow scoring is inhibited if
21460the group matches the regexp. If it is t, slow scoring on it is
21461inhibited for all groups.
21462
4009494e
GM
21463
21464@node Scoring Tips
21465@section Scoring Tips
21466@cindex scoring tips
21467
21468@table @dfn
21469
21470@item Crossposts
21471@cindex crossposts
21472@cindex scoring crossposts
21473If you want to lower the score of crossposts, the line to match on is
21474the @code{Xref} header.
21475@lisp
21476("xref" (" talk.politics.misc:" -1000))
21477@end lisp
21478
21479@item Multiple crossposts
21480If you want to lower the score of articles that have been crossposted to
21481more than, say, 3 groups:
21482@lisp
21483("xref"
21484 ("[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+ +[^:\n]+:[0-9]+"
21485 -1000 nil r))
21486@end lisp
21487
21488@item Matching on the body
21489This is generally not a very good idea---it takes a very long time.
21490Gnus actually has to fetch each individual article from the server. But
21491you might want to anyway, I guess. Even though there are three match
21492keys (@code{Head}, @code{Body} and @code{All}), you should choose one
21493and stick with it in each score file. If you use any two, each article
21494will be fetched @emph{twice}. If you want to match a bit on the
21495@code{Head} and a bit on the @code{Body}, just use @code{All} for all
21496the matches.
21497
21498@item Marking as read
21499You will probably want to mark articles that have scores below a certain
21500number as read. This is most easily achieved by putting the following
21501in your @file{all.SCORE} file:
21502@lisp
21503((mark -100))
21504@end lisp
21505You may also consider doing something similar with @code{expunge}.
21506
21507@item Negated character classes
21508If you say stuff like @code{[^abcd]*}, you may get unexpected results.
21509That will match newlines, which might lead to, well, The Unknown. Say
21510@code{[^abcd\n]*} instead.
21511@end table
21512
21513
21514@node Reverse Scoring
21515@section Reverse Scoring
21516@cindex reverse scoring
21517
21518If you want to keep just articles that have @samp{Sex with Emacs} in the
21519subject header, and expunge all other articles, you could put something
21520like this in your score file:
21521
21522@lisp
21523(("subject"
21524 ("Sex with Emacs" 2))
21525 (mark 1)
21526 (expunge 1))
21527@end lisp
21528
21529So, you raise all articles that match @samp{Sex with Emacs} and mark the
21530rest as read, and expunge them to boot.
21531
21532
21533@node Global Score Files
21534@section Global Score Files
21535@cindex global score files
21536
21537Sure, other newsreaders have ``global kill files''. These are usually
21538nothing more than a single kill file that applies to all groups, stored
21539in the user's home directory. Bah! Puny, weak newsreaders!
21540
21541What I'm talking about here are Global Score Files. Score files from
21542all over the world, from users everywhere, uniting all nations in one
21543big, happy score file union! Ange-score! New and untested!
21544
21545@vindex gnus-global-score-files
21546All you have to do to use other people's score files is to set the
21547@code{gnus-global-score-files} variable. One entry for each score file,
21548or each score file directory. Gnus will decide by itself what score
21549files are applicable to which group.
21550
21551To use the score file
21552@file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE} and
21553all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory,
21554say this:
21555
21556@lisp
21557(setq gnus-global-score-files
21558 '("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
21559 "/ftp@@ftp.some-where:/pub/score/"))
21560@end lisp
21561
21562@findex gnus-score-search-global-directories
21563@noindent
21564Simple, eh? Directory names must end with a @samp{/}. These
21565directories are typically scanned only once during each Gnus session.
21566If you feel the need to manually re-scan the remote directories, you can
21567use the @code{gnus-score-search-global-directories} command.
21568
21569Note that, at present, using this option will slow down group entry
21570somewhat. (That is---a lot.)
21571
21572If you want to start maintaining score files for other people to use,
21573just put your score file up for anonymous ftp and announce it to the
21574world. Become a retro-moderator! Participate in the retro-moderator
21575wars sure to ensue, where retro-moderators battle it out for the
21576sympathy of the people, luring them to use their score files on false
21577premises! Yay! The net is saved!
21578
21579Here are some tips for the would-be retro-moderator, off the top of my
21580head:
21581
21582@itemize @bullet
21583
21584@item
21585Articles heavily crossposted are probably junk.
21586@item
21587To lower a single inappropriate article, lower by @code{Message-ID}.
21588@item
21589Particularly brilliant authors can be raised on a permanent basis.
21590@item
21591Authors that repeatedly post off-charter for the group can safely be
21592lowered out of existence.
21593@item
21594Set the @code{mark} and @code{expunge} atoms to obliterate the nastiest
21595articles completely.
21596
21597@item
21598Use expiring score entries to keep the size of the file down. You
21599should probably have a long expiry period, though, as some sites keep
21600old articles for a long time.
21601@end itemize
21602
21603@dots{} I wonder whether other newsreaders will support global score files
21604in the future. @emph{Snicker}. Yup, any day now, newsreaders like Blue
21605Wave, xrn and 1stReader are bound to implement scoring. Should we start
21606holding our breath yet?
21607
21608
21609@node Kill Files
21610@section Kill Files
21611@cindex kill files
21612
21613Gnus still supports those pesky old kill files. In fact, the kill file
21614entries can now be expiring, which is something I wrote before Daniel
21615Quinlan thought of doing score files, so I've left the code in there.
21616
21617In short, kill processing is a lot slower (and I do mean @emph{a lot})
21618than score processing, so it might be a good idea to rewrite your kill
21619files into score files.
21620
21621Anyway, a kill file is a normal @code{emacs-lisp} file. You can put any
21622forms into this file, which means that you can use kill files as some
21623sort of primitive hook function to be run on group entry, even though
21624that isn't a very good idea.
21625
21626Normal kill files look like this:
21627
21628@lisp
21629(gnus-kill "From" "Lars Ingebrigtsen")
21630(gnus-kill "Subject" "ding")
21631(gnus-expunge "X")
21632@end lisp
21633
21634This will mark every article written by me as read, and remove the
21635marked articles from the summary buffer. Very useful, you'll agree.
21636
21637Other programs use a totally different kill file syntax. If Gnus
21638encounters what looks like a @code{rn} kill file, it will take a stab at
21639interpreting it.
21640
21641Two summary functions for editing a @sc{gnus} kill file:
21642
21643@table @kbd
21644
21645@item M-k
21646@kindex M-k (Summary)
21647@findex gnus-summary-edit-local-kill
21648Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
21649
21650@item M-K
21651@kindex M-K (Summary)
21652@findex gnus-summary-edit-global-kill
21653Edit the general kill file (@code{gnus-summary-edit-global-kill}).
21654@end table
21655
21656Two group mode functions for editing the kill files:
21657
21658@table @kbd
21659
21660@item M-k
21661@kindex M-k (Group)
21662@findex gnus-group-edit-local-kill
21663Edit this group's kill file (@code{gnus-group-edit-local-kill}).
21664
21665@item M-K
21666@kindex M-K (Group)
21667@findex gnus-group-edit-global-kill
21668Edit the general kill file (@code{gnus-group-edit-global-kill}).
21669@end table
21670
21671Kill file variables:
21672
21673@table @code
21674@item gnus-kill-file-name
21675@vindex gnus-kill-file-name
21676A kill file for the group @samp{soc.motss} is normally called
21677@file{soc.motss.KILL}. The suffix appended to the group name to get
21678this file name is detailed by the @code{gnus-kill-file-name} variable.
21679The ``global'' kill file (not in the score file sense of ``global'', of
21680course) is just called @file{KILL}.
21681
21682@vindex gnus-kill-save-kill-file
21683@item gnus-kill-save-kill-file
21684If this variable is non-@code{nil}, Gnus will save the
21685kill file after processing, which is necessary if you use expiring
21686kills.
21687
21688@item gnus-apply-kill-hook
21689@vindex gnus-apply-kill-hook
21690@findex gnus-apply-kill-file-unless-scored
21691@findex gnus-apply-kill-file
21692A hook called to apply kill files to a group. It is
21693@code{(gnus-apply-kill-file)} by default. If you want to ignore the
21694kill file if you have a score file for the same group, you can set this
21695hook to @code{(gnus-apply-kill-file-unless-scored)}. If you don't want
21696kill files to be processed, you should set this variable to @code{nil}.
21697
21698@item gnus-kill-file-mode-hook
21699@vindex gnus-kill-file-mode-hook
21700A hook called in kill-file mode buffers.
21701
21702@end table
21703
21704
21705@node Converting Kill Files
21706@section Converting Kill Files
21707@cindex kill files
21708@cindex converting kill files
21709
21710If you have loads of old kill files, you may want to convert them into
21711score files. If they are ``regular'', you can use
21712the @file{gnus-kill-to-score.el} package; if not, you'll have to do it
21713by hand.
21714
21715The kill to score conversion package isn't included in Gnus by default.
21716You can fetch it from
21717@uref{http://www.stud.ifi.uio.no/~larsi/ding-various/gnus-kill-to-score.el}.
21718
21719If your old kill files are very complex---if they contain more
21720non-@code{gnus-kill} forms than not, you'll have to convert them by
21721hand. Or just let them be as they are. Gnus will still use them as
21722before.
21723
21724
4009494e
GM
21725@node Advanced Scoring
21726@section Advanced Scoring
21727
21728Scoring on Subjects and From headers is nice enough, but what if you're
21729really interested in what a person has to say only when she's talking
21730about a particular subject? Or what if you really don't want to
21731read what person A has to say when she's following up to person B, but
21732want to read what she says when she's following up to person C?
21733
21734By using advanced scoring rules you may create arbitrarily complex
21735scoring patterns.
21736
21737@menu
21738* Advanced Scoring Syntax:: A definition.
21739* Advanced Scoring Examples:: What they look like.
21740* Advanced Scoring Tips:: Getting the most out of it.
21741@end menu
21742
21743
21744@node Advanced Scoring Syntax
21745@subsection Advanced Scoring Syntax
21746
21747Ordinary scoring rules have a string as the first element in the rule.
21748Advanced scoring rules have a list as the first element. The second
21749element is the score to be applied if the first element evaluated to a
21750non-@code{nil} value.
21751
21752These lists may consist of three logical operators, one redirection
21753operator, and various match operators.
21754
21755Logical operators:
21756
21757@table @code
21758@item &
21759@itemx and
21760This logical operator will evaluate each of its arguments until it finds
21761one that evaluates to @code{false}, and then it'll stop. If all arguments
21762evaluate to @code{true} values, then this operator will return
21763@code{true}.
21764
21765@item |
21766@itemx or
21767This logical operator will evaluate each of its arguments until it finds
21768one that evaluates to @code{true}. If no arguments are @code{true},
21769then this operator will return @code{false}.
21770
21771@item !
21772@itemx not
21773