gnus-art.el (article-treat-non-ascii): Keep text properties.
[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 11@copying
e3e955fe 12Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
c57008f6 132003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4009494e
GM
14
15@quotation
16Permission is granted to copy, distribute and/or modify this document
6a2c4aec 17under the terms of the GNU Free Documentation License, Version 1.3 or
4009494e 18any later version published by the Free Software Foundation; with no
debf4439
GM
19Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
20and with the Back-Cover Texts as in (a) below. A copy of the license
21is included in the section entitled ``GNU Free Documentation License''.
4009494e 22
6f093307
GM
23(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
24modify this GNU manual. Buying copies from the FSF supports it in
25developing GNU and promoting software freedom.''
4009494e
GM
26@end quotation
27@end copying
28
29@iftex
30@iflatex
31\documentclass[twoside,a4paper,openright,11pt]{book}
32\usepackage[latin1]{inputenc}
33\usepackage{pagestyle}
34\usepackage{epsfig}
35\usepackage{pixidx}
36\input{gnusconfig.tex}
37
38\ifx\pdfoutput\undefined
39\else
40\usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
41\usepackage{thumbpdf}
42\pdfcompresslevel=9
43\fi
44
45\makeindex
46\begin{document}
47
48% Adjust ../Makefile.in if you change the following line:
c7ff939a 49\newcommand{\gnusversionname}{Gnus v5.13}
4009494e
GM
50\newcommand{\gnuschaptername}{}
51\newcommand{\gnussectionname}{}
52
53\newcommand{\gnusbackslash}{/}
54
55\newcommand{\gnusref}[1]{``#1'' on page \pageref{#1}}
56\ifx\pdfoutput\undefined
57\newcommand{\gnusuref}[1]{\gnustt{#1}}
58\else
59\newcommand{\gnusuref}[1]{\href{#1}{\gnustt{#1}}}
60\fi
61\newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
62\newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
63
64\newcommand{\gnuskindex}[1]{\index{#1}}
65\newcommand{\gnusindex}[1]{\index{#1}}
66
67\newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
68\newcommand{\gnuscode}[1]{\gnustt{#1}}
69\newcommand{\gnusasis}[1]{\gnustt{#1}}
70\newcommand{\gnusurl}[1]{\gnustt{#1}}
71\newcommand{\gnuscommand}[1]{\gnustt{#1}}
72\newcommand{\gnusenv}[1]{\gnustt{#1}}
73\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''}
74\newcommand{\gnuslisp}[1]{\gnustt{#1}}
75\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
76\newcommand{\gnuskey}[1]{`\gnustt{#1}'}
77\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
78\newcommand{\gnusdfn}[1]{\textit{#1}}
79\newcommand{\gnusi}[1]{\textit{#1}}
80\newcommand{\gnusr}[1]{\textrm{#1}}
81\newcommand{\gnusstrong}[1]{\textbf{#1}}
82\newcommand{\gnusemph}[1]{\textit{#1}}
83\newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
84\newcommand{\gnussc}[1]{\textsc{#1}}
85\newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
86\newcommand{\gnusversion}[1]{{\small\textit{#1}}}
87\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
88\newcommand{\gnusresult}[1]{\gnustt{=> #1}}
89\newcommand{\gnusacronym}[1]{\textsc{#1}}
90\newcommand{\gnusemail}[1]{\textit{#1}}
91
92\newcommand{\gnusbullet}{{${\bullet}$}}
93\newcommand{\gnusdollar}{\$}
94\newcommand{\gnusampersand}{\&}
95\newcommand{\gnuspercent}{\%}
96\newcommand{\gnushash}{\#}
97\newcommand{\gnushat}{\symbol{"5E}}
98\newcommand{\gnusunderline}{\symbol{"5F}}
99\newcommand{\gnusnot}{$\neg$}
100\newcommand{\gnustilde}{\symbol{"7E}}
101\newcommand{\gnusless}{{$<$}}
102\newcommand{\gnusgreater}{{$>$}}
103\newcommand{\gnusbraceleft}{{$>$}}
104\newcommand{\gnusbraceright}{{$>$}}
105
106\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head,height=1cm}}}
107\newcommand{\gnusinteresting}{
108\marginpar[\mbox{}\hfill\gnushead]{\gnushead}
109}
110
111\newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi}
112
113\newcommand{\gnuspagechapter}[1]{
114{\mbox{}}
115}
116
117\newdimen{\gnusdimen}
118\gnusdimen 0pt
119
120\newcommand{\gnuschapter}[2]{
121\gnuscleardoublepage
122\ifdim \gnusdimen = 0pt\setcounter{page}{1}\pagestyle{gnus}\pagenumbering{arabic} \gnusdimen 1pt\fi
123\chapter{#2}
124\renewcommand{\gnussectionname}{}
125\renewcommand{\gnuschaptername}{#2}
126\thispagestyle{empty}
127\hspace*{-2cm}
128\begin{picture}(500,500)(0,0)
129\put(480,350){\makebox(0,0)[tr]{#1}}
130\put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
131\end{picture}
132\clearpage
133}
134
135\newcommand{\gnusfigure}[3]{
136\begin{figure}
137\mbox{}\ifodd\count0\hspace*{-0.8cm}\else\hspace*{-3cm}\fi\begin{picture}(440,#2)
138#3
139\end{picture}
140\caption{#1}
141\end{figure}
142}
143
144\newcommand{\gnusicon}[1]{
145\marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=ps/#1-up,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=ps/#1-up,height=1cm}}}
146}
147
148\newcommand{\gnuspicon}[1]{
149\margindex{\epsfig{figure=#1,width=2cm}}
150}
151
152\newcommand{\gnusxface}[2]{
153\margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
154}
155
156\newcommand{\gnussmiley}[2]{
157\margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
158}
159
160\newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
161
162\newcommand{\gnussection}[1]{
163\renewcommand{\gnussectionname}{#1}
164\section{#1}
165}
166
167\newenvironment{codelist}%
168{\begin{list}{}{
169}
170}{\end{list}}
171
172\newenvironment{asislist}%
173{\begin{list}{}{
174}
175}{\end{list}}
176
177\newenvironment{kbdlist}%
178{\begin{list}{}{
179\labelwidth=0cm
180}
181}{\end{list}}
182
183\newenvironment{dfnlist}%
184{\begin{list}{}{
185}
186}{\end{list}}
187
188\newenvironment{stronglist}%
189{\begin{list}{}{
190}
191}{\end{list}}
192
193\newenvironment{samplist}%
194{\begin{list}{}{
195}
196}{\end{list}}
197
198\newenvironment{varlist}%
199{\begin{list}{}{
200}
201}{\end{list}}
202
203\newenvironment{emphlist}%
204{\begin{list}{}{
205}
206}{\end{list}}
207
208\newlength\gnusheadtextwidth
209\setlength{\gnusheadtextwidth}{\headtextwidth}
210\addtolength{\gnusheadtextwidth}{1cm}
211
212\newpagestyle{gnuspreamble}%
213{
214{
215\ifodd\count0
216{
217\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\mbox{}}\textbf{\hfill\roman{page}}}
218}
219\else
220{
221\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\roman{page}\hfill\mbox{}}}
222}
223}
224\fi
225}
226}
227{
228\ifodd\count0
229\mbox{} \hfill
230\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
231\else
232\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
233\hfill \mbox{}
234\fi
235}
236
237\newpagestyle{gnusindex}%
238{
239{
240\ifodd\count0
241{
242\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\gnuschaptername\hfill\arabic{page}}}}
243}
244\else
245{
246\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
247}
248\fi
249}
250}
251{
252\ifodd\count0
253\mbox{} \hfill
254\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
255\else
256\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
257\hfill \mbox{}
258\fi
259}
260
261\newpagestyle{gnus}%
262{
263{
264\ifodd\count0
265{
266\makebox[12cm]{\hspace*{3.1cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}}
267}
268\else
269{
270\makebox[12cm]{\hspace*{-2.95cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}}
271}
272\fi
273}
274}
275{
276\ifodd\count0
277\mbox{} \hfill
278\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
279\else
280\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
281\hfill \mbox{}
282\fi
283}
284
285\pagenumbering{roman}
286\pagestyle{gnuspreamble}
287
288@end iflatex
289@end iftex
290
291@iftex
292@iflatex
293
294\begin{titlepage}
295{
296
297%\addtolength{\oddsidemargin}{-5cm}
298%\addtolength{\evensidemargin}{-5cm}
299\parindent=0cm
300\addtolength{\textheight}{2cm}
301
302\gnustitle{\gnustitlename}\hfill\gnusversion{\gnusversionname}\\
303\rule{15cm}{1mm}\\
304\vfill
305\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo,height=15cm}
306\vfill
307\rule{15cm}{1mm}\\
308\gnusauthor{by Lars Magne Ingebrigtsen}
309\newpage
310}
311
312\mbox{}
313\vfill
314
315\thispagestyle{empty}
316
317@c @insertcopying
318\newpage
319\end{titlepage}
320@end iflatex
321@end iftex
322
4009494e
GM
323@dircategory Emacs
324@direntry
62e034c2 325* Gnus: (gnus). The newsreader Gnus.
4009494e
GM
326@end direntry
327@iftex
328@finalout
329@end iftex
4009494e
GM
330
331
332@titlepage
333@title Gnus Manual
334
335@author by Lars Magne Ingebrigtsen
336@page
337@vskip 0pt plus 1filll
338@insertcopying
339@end titlepage
340
5dc584b5
KB
341@summarycontents
342@contents
4009494e
GM
343
344@node Top
345@top The Gnus Newsreader
346
347@ifinfo
348
349You can read news (and mail) from within Emacs by using Gnus. The news
350can be gotten by any nefarious means you can think of---@acronym{NNTP}, local
351spool or your mbox file. All at the same time, if you want to push your
352luck.
353
354@c Adjust ../Makefile.in if you change the following line:
c7ff939a 355This manual corresponds to Gnus v5.13
4009494e 356
5dc584b5
KB
357@ifnottex
358@insertcopying
359@end ifnottex
360
4009494e
GM
361@end ifinfo
362
363@iftex
364
365@iflatex
366\tableofcontents
367\gnuscleardoublepage
368@end iflatex
369
370Gnus is the advanced, self-documenting, customizable, extensible
371unreal-time newsreader for GNU Emacs.
372
373Oops. That sounds oddly familiar, so let's start over again to avoid
374being accused of plagiarism:
375
376Gnus is a message-reading laboratory. It will let you look at just
377about anything as if it were a newsgroup. You can read mail with it,
378you can browse directories with it, you can @code{ftp} with it---you
379can even read news with it!
380
381Gnus tries to empower people who read news the same way Emacs empowers
382people who edit text. Gnus sets no limits to what the user should be
383allowed to do. Users are encouraged to extend Gnus to make it behave
384like they want it to behave. A program should not control people;
385people should be empowered to do what they want by using (or abusing)
386the program.
387
9b3ebcb6 388@c Adjust ../Makefile.in if you change the following line:
2e4089ab 389This manual corresponds to Gnus v5.13
9b3ebcb6
MB
390
391@heading Other related manuals
392@itemize
393@item Message manual: Composing messages
394@item Emacs-MIME: Composing messages; @acronym{MIME}-specific parts.
395@item Sieve: Managing Sieve scripts in Emacs.
396@item PGG: @acronym{PGP/MIME} with Gnus.
2e4089ab 397@item SASL: @acronym{SASL} authentication in Emacs.
9b3ebcb6
MB
398@end itemize
399
4009494e
GM
400@end iftex
401
402@menu
403* Starting Up:: Finding news can be a pain.
404* Group Buffer:: Selecting, subscribing and killing groups.
405* Summary Buffer:: Reading, saving and posting articles.
406* Article Buffer:: Displaying and handling articles.
407* Composing Messages:: Information on sending mail and news.
408* Select Methods:: Gnus reads all messages from various select methods.
409* Scoring:: Assigning values to articles.
410* Various:: General purpose settings.
411* The End:: Farewell and goodbye.
412* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals.
413* GNU Free Documentation License:: The license for this documentation.
414* Index:: Variable, function and concept index.
415* Key Index:: Key Index.
416
417Other related manuals
418
419* Message:(message). Composing messages.
420* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts.
421* Sieve:(sieve). Managing Sieve scripts in Emacs.
422* PGG:(pgg). @acronym{PGP/MIME} with Gnus.
01c52d31 423* SASL:(sasl). @acronym{SASL} authentication in Emacs.
4009494e
GM
424
425@detailmenu
426 --- The Detailed Node Listing ---
427
428Starting Gnus
429
430* Finding the News:: Choosing a method for getting news.
431* The First Time:: What does Gnus do the first time you start it?
432* The Server is Down:: How can I read my mail then?
433* Slave Gnusae:: You can have more than one Gnus active at a time.
434* Fetching a Group:: Starting Gnus just to read a group.
435* New Groups:: What is Gnus supposed to do with new groups?
436* Changing Servers:: You may want to move from one server to another.
437* Startup Files:: Those pesky startup files---@file{.newsrc}.
438* Auto Save:: Recovering from a crash.
439* The Active File:: Reading the active file over a slow line Takes Time.
440* Startup Variables:: Other variables you might change.
441
442New Groups
443
444* Checking New Groups:: Determining what groups are new.
445* Subscription Methods:: What Gnus should do with new groups.
446* Filtering New Groups:: Making Gnus ignore certain new groups.
447
448Group Buffer
449
450* Group Buffer Format:: Information listed and how you can change it.
451* Group Maneuvering:: Commands for moving in the group buffer.
452* Selecting a Group:: Actually reading news.
453* Subscription Commands:: Unsubscribing, killing, subscribing.
454* Group Data:: Changing the info for a group.
455* Group Levels:: Levels? What are those, then?
456* Group Score:: A mechanism for finding out what groups you like.
457* Marking Groups:: You can mark groups for later processing.
458* Foreign Groups:: Creating and editing groups.
459* Group Parameters:: Each group may have different parameters set.
460* Listing Groups:: Gnus can list various subsets of the groups.
461* Sorting Groups:: Re-arrange the group order.
462* Group Maintenance:: Maintaining a tidy @file{.newsrc} file.
463* Browse Foreign Server:: You can browse a server. See what it has to offer.
464* Exiting Gnus:: Stop reading news and get some work done.
465* Group Topics:: A folding group mode divided into topics.
01c52d31 466* Non-ASCII Group Names:: Accessing groups of non-English names.
4009494e
GM
467* Misc Group Stuff:: Other stuff that you can to do.
468
469Group Buffer Format
470
471* Group Line Specification:: Deciding how the group buffer is to look.
472* Group Mode Line Specification:: The group buffer mode line.
473* Group Highlighting:: Having nice colors in the group buffer.
474
475Group Topics
476
477* Topic Commands:: Interactive E-Z commands.
478* Topic Variables:: How to customize the topics the Lisp Way.
479* Topic Sorting:: Sorting each topic individually.
480* Topic Topology:: A map of the world.
481* Topic Parameters:: Parameters that apply to all groups in a topic.
482
483Misc Group Stuff
484
485* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
486* Group Information:: Information and help on groups and Gnus.
487* Group Timestamp:: Making Gnus keep track of when you last read a group.
488* File Commands:: Reading and writing the Gnus files.
489* Sieve Commands:: Managing Sieve scripts.
490
491Summary Buffer
492
493* Summary Buffer Format:: Deciding how the summary buffer is to look.
494* Summary Maneuvering:: Moving around the summary buffer.
495* Choosing Articles:: Reading articles.
496* Paging the Article:: Scrolling the current article.
497* Reply Followup and Post:: Posting articles.
498* Delayed Articles:: Send articles at a later time.
499* Marking Articles:: Marking articles as read, expirable, etc.
500* Limiting:: You can limit the summary buffer.
501* Threading:: How threads are made.
502* Sorting the Summary Buffer:: How articles and threads are sorted.
503* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
504* Article Caching:: You may store articles in a cache.
505* Persistent Articles:: Making articles expiry-resistant.
01c52d31 506* Sticky Articles:: Article buffers that are not reused.
4009494e
GM
507* Article Backlog:: Having already read articles hang around.
508* Saving Articles:: Ways of customizing article saving.
509* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
510* Article Treatment:: The article buffer can be mangled at will.
511* MIME Commands:: Doing MIMEy things with the articles.
512* Charsets:: Character set issues.
513* Article Commands:: Doing various things with the article buffer.
514* Summary Sorting:: Sorting the summary buffer in various ways.
515* Finding the Parent:: No child support? Get the parent.
516* Alternative Approaches:: Reading using non-default summaries.
517* Tree Display:: A more visual display of threads.
518* Mail Group Commands:: Some commands can only be used in mail groups.
519* Various Summary Stuff:: What didn't fit anywhere else.
520* Exiting the Summary Buffer:: Returning to the Group buffer,
521 or reselecting the current group.
522* Crosspost Handling:: How crossposted articles are dealt with.
523* Duplicate Suppression:: An alternative when crosspost handling fails.
524* Security:: Decrypt and Verify.
525* Mailing List:: Mailing list minor mode.
526
527Summary Buffer Format
528
529* Summary Buffer Lines:: You can specify how summary lines should look.
530* To From Newsgroups:: How to not display your own name.
531* Summary Buffer Mode Line:: You can say how the mode line should look.
532* Summary Highlighting:: Making the summary buffer all pretty and nice.
533
534Choosing Articles
535
536* Choosing Commands:: Commands for choosing articles.
537* Choosing Variables:: Variables that influence these commands.
538
539Reply, Followup and Post
540
541* Summary Mail Commands:: Sending mail.
542* Summary Post Commands:: Sending news.
543* Summary Message Commands:: Other Message-related commands.
544* Canceling and Superseding::
545
546Marking Articles
547
548* Unread Articles:: Marks for unread articles.
549* Read Articles:: Marks for read articles.
550* Other Marks:: Marks that do not affect readedness.
551* Setting Marks:: How to set and remove marks.
552* Generic Marking Commands:: How to customize the marking.
553* Setting Process Marks:: How to mark articles for later processing.
554
555Threading
556
557* Customizing Threading:: Variables you can change to affect the threading.
558* Thread Commands:: Thread based commands in the summary buffer.
559
560Customizing Threading
561
562* Loose Threads:: How Gnus gathers loose threads into bigger threads.
563* Filling In Threads:: Making the threads displayed look fuller.
564* More Threading:: Even more variables for fiddling with threads.
565* Low-Level Threading:: You thought it was over@dots{} but you were wrong!
566
567Decoding Articles
568
569* Uuencoded Articles:: Uudecode articles.
570* Shell Archives:: Unshar articles.
571* PostScript Files:: Split PostScript.
572* Other Files:: Plain save and binhex.
573* Decoding Variables:: Variables for a happy decoding.
574* Viewing Files:: You want to look at the result of the decoding?
575
576Decoding Variables
577
578* Rule Variables:: Variables that say how a file is to be viewed.
579* Other Decode Variables:: Other decode variables.
580* Uuencoding and Posting:: Variables for customizing uuencoding.
581
582Article Treatment
583
584* Article Highlighting:: You want to make the article look like fruit salad.
585* Article Fontisizing:: Making emphasized text look nice.
586* Article Hiding:: You also want to make certain info go away.
587* Article Washing:: Lots of way-neat functions to make life better.
588* Article Header:: Doing various header transformations.
589* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
590* Article Button Levels:: Controlling appearance of buttons.
591* Article Date:: Grumble, UT!
61b1af82 592* Article Display:: Display various stuff---X-Face, Picons, Smileys, Gravatars
4009494e
GM
593* Article Signature:: What is a signature?
594* Article Miscellanea:: Various other stuff.
595
596Alternative Approaches
597
598* Pick and Read:: First mark articles and then read them.
599* Binary Groups:: Auto-decode all articles.
600
601Various Summary Stuff
602
603* Summary Group Information:: Information oriented commands.
604* Searching for Articles:: Multiple article commands.
605* Summary Generation Commands::
606* Really Various Summary Commands:: Those pesky non-conformant commands.
607
608Article Buffer
609
610* Hiding Headers:: Deciding what headers should be displayed.
611* Using MIME:: Pushing articles through @acronym{MIME} before reading them.
612* Customizing Articles:: Tailoring the look of the articles.
613* Article Keymap:: Keystrokes available in the article buffer.
614* Misc Article:: Other stuff.
615
616Composing Messages
617
618* Mail:: Mailing and replying.
619* Posting Server:: What server should you post and mail via?
620* POP before SMTP:: You cannot send a mail unless you read a mail.
621* Mail and Post:: Mailing and posting at the same time.
622* Archived Messages:: Where Gnus stores the messages you've sent.
623* Posting Styles:: An easier way to specify who you are.
624* Drafts:: Postponing messages and rejected messages.
625* Rejected Articles:: What happens if the server doesn't like your article?
626* Signing and encrypting:: How to compose secure messages.
627
628Select Methods
629
630* Server Buffer:: Making and editing virtual servers.
631* Getting News:: Reading USENET news with Gnus.
229b59da 632* Using IMAP:: Reading mail from @acronym{IMAP}.
4009494e
GM
633* Getting Mail:: Reading your personal mail with Gnus.
634* Browsing the Web:: Getting messages from a plethora of Web sources.
c4d82de8 635* Other Sources:: Reading directories, files.
4009494e
GM
636* Combined Groups:: Combining groups into one group.
637* Email Based Diary:: Using mails to manage diary events in Gnus.
638* Gnus Unplugged:: Reading news and mail offline.
639
640Server Buffer
641
642* Server Buffer Format:: You can customize the look of this buffer.
643* Server Commands:: Commands to manipulate servers.
644* Example Methods:: Examples server specifications.
645* Creating a Virtual Server:: An example session.
646* Server Variables:: Which variables to set.
647* Servers and Methods:: You can use server names as select methods.
648* Unavailable Servers:: Some servers you try to contact may be down.
649
650Getting News
651
652* NNTP:: Reading news from an @acronym{NNTP} server.
653* News Spool:: Reading news from the local spool.
654
655@acronym{NNTP}
656
657* Direct Functions:: Connecting directly to the server.
658* Indirect Functions:: Connecting indirectly to the server.
659* Common Variables:: Understood by several connection functions.
01c52d31 660* NNTP marks:: Storing marks for @acronym{NNTP} servers.
4009494e
GM
661
662Getting Mail
663
664* Mail in a Newsreader:: Important introductory notes.
665* Getting Started Reading Mail:: A simple cookbook example.
666* Splitting Mail:: How to create mail groups.
667* Mail Sources:: How to tell Gnus where to get mail from.
668* Mail Back End Variables:: Variables for customizing mail handling.
669* Fancy Mail Splitting:: Gnus can do hairy splitting of incoming mail.
670* Group Mail Splitting:: Use group customize to drive mail splitting.
671* Incorporating Old Mail:: What about the old mail you have?
672* Expiring Mail:: Getting rid of unwanted mail.
673* Washing Mail:: Removing cruft from the mail you get.
674* Duplicates:: Dealing with duplicated mail.
675* Not Reading Mail:: Using mail back ends for reading other files.
676* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
677
678Mail Sources
679
680* Mail Source Specifiers:: How to specify what a mail source is.
681* Mail Source Customization:: Some variables that influence things.
682* Fetching Mail:: Using the mail source specifiers.
683
684Choosing a Mail Back End
685
686* Unix Mail Box:: Using the (quite) standard Un*x mbox.
bc79f9ab 687* Babyl:: Babyl was used by older versions of Rmail.
4009494e
GM
688* Mail Spool:: Store your mail in a private spool?
689* MH Spool:: An mhspool-like back end.
690* Maildir:: Another one-file-per-message format.
691* Mail Folders:: Having one file for each group.
692* Comparing Mail Back Ends:: An in-depth looks at pros and cons.
693
694Browsing the Web
695
696* Archiving Mail::
697* Web Searches:: Creating groups from articles that match a string.
4009494e
GM
698* RSS:: Reading RDF site summary.
699* Customizing W3:: Doing stuff to Emacs/W3 from Gnus.
700
4009494e
GM
701Other Sources
702
703* Directory Groups:: You can read a directory as if it was a newsgroup.
704* Anything Groups:: Dired? Who needs dired?
705* Document Groups:: Single files can be the basis of a group.
4009494e
GM
706* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
707
708Document Groups
709
710* Document Server Internals:: How to add your own document types.
711
4009494e
GM
712Combined Groups
713
714* Virtual Groups:: Combining articles from many groups.
4009494e
GM
715
716Email Based Diary
717
718* The NNDiary Back End:: Basic setup and usage.
719* The Gnus Diary Library:: Utility toolkit on top of nndiary.
720* Sending or Not Sending:: A final note on sending diary messages.
721
722The NNDiary Back End
723
724* Diary Messages:: What makes a message valid for nndiary.
725* Running NNDiary:: NNDiary has two modes of operation.
726* Customizing NNDiary:: Bells and whistles.
727
728The Gnus Diary Library
729
730* Diary Summary Line Format:: A nicer summary buffer line format.
731* Diary Articles Sorting:: A nicer way to sort messages.
732* Diary Headers Generation:: Not doing it manually.
733* Diary Group Parameters:: Not handling them manually.
734
735Gnus Unplugged
736
737* Agent Basics:: How it all is supposed to work.
738* Agent Categories:: How to tell the Gnus Agent what to download.
739* Agent Commands:: New commands for all the buffers.
740* Agent Visuals:: Ways that the agent may effect your summary buffer.
741* Agent as Cache:: The Agent is a big cache too.
742* Agent Expiry:: How to make old articles go away.
743* Agent Regeneration:: How to recover from lost connections and other accidents.
01c52d31 744* Agent and flags:: How the Agent maintains flags.
4009494e
GM
745* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
746* Outgoing Messages:: What happens when you post/mail something?
747* Agent Variables:: Customizing is fun.
748* Example Setup:: An example @file{~/.gnus.el} file for offline people.
749* Batching Agents:: How to fetch news from a @code{cron} job.
750* Agent Caveats:: What you think it'll do and what it does.
751
752Agent Categories
753
754* Category Syntax:: What a category looks like.
755* Category Buffer:: A buffer for maintaining categories.
756* Category Variables:: Customize'r'Us.
757
758Agent Commands
759
760* Group Agent Commands:: Configure groups and fetch their contents.
761* Summary Agent Commands:: Manually select then fetch specific articles.
762* Server Agent Commands:: Select the servers that are supported by the agent.
763
764Scoring
765
766* Summary Score Commands:: Adding score entries for the current group.
767* Group Score Commands:: General score commands.
768* Score Variables:: Customize your scoring. (My, what terminology).
769* Score File Format:: What a score file may contain.
770* Score File Editing:: You can edit score files by hand as well.
771* Adaptive Scoring:: Big Sister Gnus knows what you read.
772* Home Score File:: How to say where new score entries are to go.
773* Followups To Yourself:: Having Gnus notice when people answer you.
774* Scoring On Other Headers:: Scoring on non-standard headers.
775* Scoring Tips:: How to score effectively.
776* Reverse Scoring:: That problem child of old is not problem.
777* Global Score Files:: Earth-spanning, ear-splitting score files.
778* Kill Files:: They are still here, but they can be ignored.
779* Converting Kill Files:: Translating kill files to score files.
4009494e
GM
780* Advanced Scoring:: Using logical expressions to build score rules.
781* Score Decays:: It can be useful to let scores wither away.
782
4009494e
GM
783Advanced Scoring
784
785* Advanced Scoring Syntax:: A definition.
786* Advanced Scoring Examples:: What they look like.
787* Advanced Scoring Tips:: Getting the most out of it.
788
789Various
790
791* Process/Prefix:: A convention used by many treatment commands.
792* Interactive:: Making Gnus ask you many questions.
793* Symbolic Prefixes:: How to supply some Gnus functions with options.
794* Formatting Variables:: You can specify what buffers should look like.
795* Window Layout:: Configuring the Gnus buffer windows.
796* Faces and Fonts:: How to change how faces look.
797* Compilation:: How to speed Gnus up.
798* Mode Lines:: Displaying information in the mode lines.
799* Highlighting and Menus:: Making buffers look all nice and cozy.
4009494e 800* Daemons:: Gnus can do things behind your back.
4009494e
GM
801* Undo:: Some actions can be undone.
802* Predicate Specifiers:: Specifying predicates.
803* Moderation:: What to do if you're a moderator.
804* Image Enhancements:: Modern versions of Emacs/XEmacs can display images.
805* Fuzzy Matching:: What's the big fuzz?
806* Thwarting Email Spam:: Simple ways to avoid unsolicited commercial email.
807* Spam Package:: A package for filtering and processing spam.
64763fe3 808* The Gnus Registry:: A package for tracking messages by Message-ID.
4009494e
GM
809* Other modes:: Interaction with other modes.
810* Various Various:: Things that are really various.
811
812Formatting Variables
813
814* Formatting Basics:: A formatting variable is basically a format string.
815* Mode Line Formatting:: Some rules about mode line formatting variables.
816* Advanced Formatting:: Modifying output in various ways.
817* User-Defined Specs:: Having Gnus call your own functions.
818* Formatting Fonts:: Making the formatting look colorful and nice.
819* Positioning Point:: Moving point to a position after an operation.
820* Tabulation:: Tabulating your output.
821* Wide Characters:: Dealing with wide characters.
822
823Image Enhancements
824
825* X-Face:: Display a funky, teensy black-and-white image.
826* Face:: Display a funkier, teensier colored image.
827* Smileys:: Show all those happy faces the way they were
828 meant to be shown.
829* Picons:: How to display pictures of what you're reading.
fcf2d385 830* Gravatars:: Display the avatar of people you read.
4009494e
GM
831* XVarious:: Other XEmacsy Gnusey variables.
832
833Thwarting Email Spam
834
835* The problem of spam:: Some background, and some solutions
836* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
837* SpamAssassin:: How to use external anti-spam tools.
838* Hashcash:: Reduce spam by burning CPU time.
839
840Spam Package
841
842* Spam Package Introduction::
843* Filtering Incoming Mail::
844* Detecting Spam in Groups::
845* Spam and Ham Processors::
846* Spam Package Configuration Examples::
847* Spam Back Ends::
848* Extending the Spam package::
849* Spam Statistics Package::
850
851Spam Statistics Package
852
853* Creating a spam-stat dictionary::
854* Splitting mail using spam-stat::
855* Low-level interface to the spam-stat dictionary::
856
857Appendices
858
859* XEmacs:: Requirements for installing under XEmacs.
860* History:: How Gnus got where it is today.
861* On Writing Manuals:: Why this is not a beginner's guide.
862* Terminology:: We use really difficult, like, words here.
863* Customization:: Tailoring Gnus to your needs.
864* Troubleshooting:: What you might try if things do not work.
865* Gnus Reference Guide:: Rilly, rilly technical stuff.
866* Emacs for Heathens:: A short introduction to Emacsian terms.
867* Frequently Asked Questions:: The Gnus FAQ
868
869History
870
871* Gnus Versions:: What Gnus versions have been released.
872* Other Gnus Versions:: Other Gnus versions that also have been released.
873* Why?:: What's the point of Gnus?
874* Compatibility:: Just how compatible is Gnus with @sc{gnus}?
875* Conformity:: Gnus tries to conform to all standards.
876* Emacsen:: Gnus can be run on a few modern Emacsen.
877* Gnus Development:: How Gnus is developed.
878* Contributors:: Oodles of people.
879* New Features:: Pointers to some of the new stuff in Gnus.
880
881New Features
882
883* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
884* September Gnus:: The Thing Formally Known As Gnus 5.2/5.3.
885* Red Gnus:: Third time best---Gnus 5.4/5.5.
886* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
887* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
888* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
01c52d31 889* No Gnus:: Very punny.
4009494e
GM
890
891Customization
892
893* Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.
894* Slow Terminal Connection:: You run a remote Emacs.
895* Little Disk Space:: You feel that having large setup files is icky.
896* Slow Machine:: You feel like buying a faster machine.
897
898Gnus Reference Guide
899
900* Gnus Utility Functions:: Common functions and variable to use.
901* Back End Interface:: How Gnus communicates with the servers.
902* Score File Syntax:: A BNF definition of the score file standard.
903* Headers:: How Gnus stores headers internally.
904* Ranges:: A handy format for storing mucho numbers.
905* Group Info:: The group info format.
906* Extended Interactive:: Symbolic prefixes and stuff.
907* Emacs/XEmacs Code:: Gnus can be run under all modern Emacsen.
908* Various File Formats:: Formats of files that Gnus use.
909
910Back End Interface
911
912* Required Back End Functions:: Functions that must be implemented.
913* Optional Back End Functions:: Functions that need not be implemented.
914* Error Messaging:: How to get messages and report errors.
915* Writing New Back Ends:: Extending old back ends.
916* Hooking New Back Ends Into Gnus:: What has to be done on the Gnus end.
917* Mail-like Back Ends:: Some tips on mail back ends.
918
919Various File Formats
920
921* Active File Format:: Information on articles and groups available.
922* Newsgroups File Format:: Group descriptions.
923
924Emacs for Heathens
925
926* Keystrokes:: Entering text and executing commands.
927* Emacs Lisp:: The built-in Emacs programming language.
928
929@end detailmenu
930@end menu
931
932@node Starting Up
933@chapter Starting Gnus
934@cindex starting up
935
936If you haven't used Emacs much before using Gnus, read @ref{Emacs for
937Heathens} first.
938
939@kindex M-x gnus
940@findex gnus
941If your system administrator has set things up properly, starting Gnus
942and reading news is extremely easy---you just type @kbd{M-x gnus} in
943your Emacs. If not, you should customize the variable
944@code{gnus-select-method} as described in @ref{Finding the News}. For a
945minimal setup for posting should also customize the variables
946@code{user-full-name} and @code{user-mail-address}.
947
948@findex gnus-other-frame
949@kindex M-x gnus-other-frame
950If you want to start Gnus in a different frame, you can use the command
951@kbd{M-x gnus-other-frame} instead.
952
953If things do not go smoothly at startup, you have to twiddle some
954variables in your @file{~/.gnus.el} file. This file is similar to
955@file{~/.emacs}, but is read when Gnus starts.
956
957If you puzzle at any terms used in this manual, please refer to the
958terminology section (@pxref{Terminology}).
959
960@menu
961* Finding the News:: Choosing a method for getting news.
962* The First Time:: What does Gnus do the first time you start it?
963* The Server is Down:: How can I read my mail then?
964* Slave Gnusae:: You can have more than one Gnus active at a time.
965* New Groups:: What is Gnus supposed to do with new groups?
966* Changing Servers:: You may want to move from one server to another.
967* Startup Files:: Those pesky startup files---@file{.newsrc}.
968* Auto Save:: Recovering from a crash.
969* The Active File:: Reading the active file over a slow line Takes Time.
970* Startup Variables:: Other variables you might change.
971@end menu
972
973
974@node Finding the News
975@section Finding the News
976@cindex finding news
977
357e2d8e
KY
978First of all, you should know that there is a special buffer called
979@code{*Server*} that lists all the servers Gnus knows about. You can
980press @kbd{^} from the Group buffer to see it. In the Server buffer,
981you can press @kbd{RET} on a defined server to see all the groups it
982serves (subscribed or not!). You can also add or delete servers, edit
983a foreign server's definition, agentize or de-agentize a server, and
984do many other neat things. @xref{Server Buffer}.
985@xref{Foreign Groups}. @xref{Agent Basics}.
986
4009494e
GM
987@vindex gnus-select-method
988@c @head
989The @code{gnus-select-method} variable says where Gnus should look for
990news. This variable should be a list where the first element says
991@dfn{how} and the second element says @dfn{where}. This method is your
992native method. All groups not fetched with this method are
993foreign groups.
994
995For instance, if the @samp{news.somewhere.edu} @acronym{NNTP} server is where
996you want to get your daily dosage of news from, you'd say:
997
998@lisp
999(setq gnus-select-method '(nntp "news.somewhere.edu"))
1000@end lisp
1001
1002If you want to read directly from the local spool, say:
1003
1004@lisp
1005(setq gnus-select-method '(nnspool ""))
1006@end lisp
1007
1008If you can use a local spool, you probably should, as it will almost
1009certainly be much faster. But do not use the local spool if your
1010server is running Leafnode (which is a simple, standalone private news
1011server); in this case, use @code{(nntp "localhost")}.
1012
1013@vindex gnus-nntpserver-file
1014@cindex NNTPSERVER
1015@cindex @acronym{NNTP} server
1016If this variable is not set, Gnus will take a look at the
1017@env{NNTPSERVER} environment variable. If that variable isn't set,
1018Gnus will see whether @code{gnus-nntpserver-file}
1019(@file{/etc/nntpserver} by default) has any opinions on the matter.
1020If that fails as well, Gnus will try to use the machine running Emacs
1021as an @acronym{NNTP} server. That's a long shot, though.
1022
4009494e
GM
1023@findex gnus-group-browse-foreign-server
1024@kindex B (Group)
1025However, if you use one @acronym{NNTP} server regularly and are just
1026interested in a couple of groups from a different server, you would be
1027better served by using the @kbd{B} command in the group buffer. It will
1028let you have a look at what groups are available, and you can subscribe
1029to any of the groups you want to. This also makes @file{.newsrc}
1030maintenance much tidier. @xref{Foreign Groups}.
1031
1032@vindex gnus-secondary-select-methods
1033@c @head
1034A slightly different approach to foreign groups is to set the
1035@code{gnus-secondary-select-methods} variable. The select methods
1036listed in this variable are in many ways just as native as the
1037@code{gnus-select-method} server. They will also be queried for active
1038files during startup (if that's required), and new newsgroups that
1039appear on these servers will be subscribed (or not) just as native
1040groups are.
1041
1042For instance, if you use the @code{nnmbox} back end to read your mail,
1043you would typically set this variable to
1044
1045@lisp
1046(setq gnus-secondary-select-methods '((nnmbox "")))
1047@end lisp
1048
01c52d31
MB
1049Note: the @acronym{NNTP} back end stores marks in marks files
1050(@pxref{NNTP marks}). This feature makes it easy to share marks between
1051several Gnus installations, but may slow down things a bit when fetching
1052new articles. @xref{NNTP marks}, for more information.
1053
4009494e
GM
1054
1055@node The First Time
1056@section The First Time
1057@cindex first time usage
1058
1059If no startup files exist (@pxref{Startup Files}), Gnus will try to
1060determine what groups should be subscribed by default.
1061
1062@vindex gnus-default-subscribed-newsgroups
1063If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
1064will subscribe you to just those groups in that list, leaving the rest
1065killed. Your system administrator should have set this variable to
1066something useful.
1067
1068Since she hasn't, Gnus will just subscribe you to a few arbitrarily
1069picked groups (i.e., @samp{*.newusers}). (@dfn{Arbitrary} is defined
1070here as @dfn{whatever Lars thinks you should read}.)
1071
1072You'll also be subscribed to the Gnus documentation group, which should
1073help you with most common problems.
1074
1075If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
1076use the normal functions for handling new groups, and not do anything
1077special.
1078
1079
1080@node The Server is Down
1081@section The Server is Down
1082@cindex server errors
1083
1084If the default server is down, Gnus will understandably have some
1085problems starting. However, if you have some mail groups in addition to
1086the news groups, you may want to start Gnus anyway.
1087
1088Gnus, being the trusting sort of program, will ask whether to proceed
1089without a native select method if that server can't be contacted. This
1090will happen whether the server doesn't actually exist (i.e., you have
1091given the wrong address) or the server has just momentarily taken ill
1092for some reason or other. If you decide to continue and have no foreign
1093groups, you'll find it difficult to actually do anything in the group
1094buffer. But, hey, that's your problem. Blllrph!
1095
1096@findex gnus-no-server
1097@kindex M-x gnus-no-server
1098@c @head
1099If you know that the server is definitely down, or you just want to read
1100your mail without bothering with the server at all, you can use the
1101@code{gnus-no-server} command to start Gnus. That might come in handy
1102if you're in a hurry as well. This command will not attempt to contact
1103your primary server---instead, it will just activate all groups on level
11041 and 2. (You should preferably keep no native groups on those two
1105levels.) Also @pxref{Group Levels}.
1106
1107
1108@node Slave Gnusae
1109@section Slave Gnusae
1110@cindex slave
1111
1112You might want to run more than one Emacs with more than one Gnus at the
1113same time. If you are using different @file{.newsrc} files (e.g., if you
1114are using the two different Gnusae to read from two different servers),
1115that is no problem whatsoever. You just do it.
1116
1117The problem appears when you want to run two Gnusae that use the same
1118@file{.newsrc} file.
1119
1120To work around that problem some, we here at the Think-Tank at the Gnus
1121Towers have come up with a new concept: @dfn{Masters} and
1122@dfn{slaves}. (We have applied for a patent on this concept, and have
1123taken out a copyright on those words. If you wish to use those words in
1124conjunction with each other, you have to send $1 per usage instance to
1125me. Usage of the patent (@dfn{Master/Slave Relationships In Computer
1126Applications}) will be much more expensive, of course.)
1127
1128@findex gnus-slave
1129Anyway, you start one Gnus up the normal way with @kbd{M-x gnus} (or
1130however you do it). Each subsequent slave Gnusae should be started with
1131@kbd{M-x gnus-slave}. These slaves won't save normal @file{.newsrc}
1132files, but instead save @dfn{slave files} that contain information only
1133on what groups have been read in the slave session. When a master Gnus
1134starts, it will read (and delete) these slave files, incorporating all
1135information from them. (The slave files will be read in the sequence
1136they were created, so the latest changes will have precedence.)
1137
1138Information from the slave files has, of course, precedence over the
1139information in the normal (i.e., master) @file{.newsrc} file.
1140
1141If the @file{.newsrc*} files have not been saved in the master when the
1142slave starts, you may be prompted as to whether to read an auto-save
1143file. If you answer ``yes'', the unsaved changes to the master will be
1144incorporated into the slave. If you answer ``no'', the slave may see some
1145messages as unread that have been read in the master.
1146
1147
1148
1149@node New Groups
1150@section New Groups
1151@cindex new groups
1152@cindex subscription
1153
1154@vindex gnus-check-new-newsgroups
1155If you are satisfied that you really never want to see any new groups,
1156you can set @code{gnus-check-new-newsgroups} to @code{nil}. This will
1157also save you some time at startup. Even if this variable is
1158@code{nil}, you can always subscribe to the new groups just by pressing
1159@kbd{U} in the group buffer (@pxref{Group Maintenance}). This variable
1160is @code{ask-server} by default. If you set this variable to
1161@code{always}, then Gnus will query the back ends for new groups even
1162when you do the @kbd{g} command (@pxref{Scanning New Messages}).
1163
1164@menu
1165* Checking New Groups:: Determining what groups are new.
1166* Subscription Methods:: What Gnus should do with new groups.
1167* Filtering New Groups:: Making Gnus ignore certain new groups.
1168@end menu
1169
1170
1171@node Checking New Groups
1172@subsection Checking New Groups
1173
1174Gnus normally determines whether a group is new or not by comparing the
1175list of groups from the active file(s) with the lists of subscribed and
1176dead groups. This isn't a particularly fast method. If
1177@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
1178server for new groups since the last time. This is both faster and
1179cheaper. This also means that you can get rid of the list of killed
1180groups altogether, so you may set @code{gnus-save-killed-list} to
1181@code{nil}, which will save time both at startup, at exit, and all over.
1182Saves disk space, too. Why isn't this the default, then?
1183Unfortunately, not all servers support this command.
1184
1185I bet I know what you're thinking now: How do I find out whether my
1186server supports @code{ask-server}? No? Good, because I don't have a
1187fail-safe answer. I would suggest just setting this variable to
1188@code{ask-server} and see whether any new groups appear within the next
1189few days. If any do, then it works. If none do, then it doesn't
1190work. I could write a function to make Gnus guess whether the server
1191supports @code{ask-server}, but it would just be a guess. So I won't.
1192You could @code{telnet} to the server and say @code{HELP} and see
1193whether it lists @samp{NEWGROUPS} among the commands it understands. If
1194it does, then it might work. (But there are servers that lists
1195@samp{NEWGROUPS} without supporting the function properly.)
1196
1197This variable can also be a list of select methods. If so, Gnus will
1198issue an @code{ask-server} command to each of the select methods, and
1199subscribe them (or not) using the normal methods. This might be handy
1200if you are monitoring a few servers for new groups. A side effect is
1201that startup will take much longer, so you can meditate while waiting.
1202Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
1203
1204
1205@node Subscription Methods
1206@subsection Subscription Methods
1207
1208@vindex gnus-subscribe-newsgroup-method
1209What Gnus does when it encounters a new group is determined by the
1210@code{gnus-subscribe-newsgroup-method} variable.
1211
1212This variable should contain a function. This function will be called
1213with the name of the new group as the only parameter.
1214
1215Some handy pre-fab functions are:
1216
1217@table @code
1218
1219@item gnus-subscribe-zombies
1220@vindex gnus-subscribe-zombies
1221Make all new groups zombies. This is the default. You can browse the
1222zombies later (with @kbd{A z}) and either kill them all off properly
1223(with @kbd{S z}), or subscribe to them (with @kbd{u}).
1224
1225@item gnus-subscribe-randomly
1226@vindex gnus-subscribe-randomly
1227Subscribe all new groups in arbitrary order. This really means that all
1228new groups will be added at ``the top'' of the group buffer.
1229
1230@item gnus-subscribe-alphabetically
1231@vindex gnus-subscribe-alphabetically
1232Subscribe all new groups in alphabetical order.
1233
1234@item gnus-subscribe-hierarchically
1235@vindex gnus-subscribe-hierarchically
1236Subscribe all new groups hierarchically. The difference between this
1237function and @code{gnus-subscribe-alphabetically} is slight.
1238@code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
1239alphabetical fashion, while this function will enter groups into its
1240hierarchy. So if you want to have the @samp{rec} hierarchy before the
1241@samp{comp} hierarchy, this function will not mess that configuration
1242up. Or something like that.
1243
1244@item gnus-subscribe-interactively
1245@vindex gnus-subscribe-interactively
1246Subscribe new groups interactively. This means that Gnus will ask
1247you about @strong{all} new groups. The groups you choose to subscribe
1248to will be subscribed hierarchically.
1249
1250@item gnus-subscribe-killed
1251@vindex gnus-subscribe-killed
1252Kill all new groups.
1253
1254@item gnus-subscribe-topics
1255@vindex gnus-subscribe-topics
1256Put the groups into the topic that has a matching @code{subscribe} topic
1257parameter (@pxref{Topic Parameters}). For instance, a @code{subscribe}
1258topic parameter that looks like
1259
1260@example
77ae8989 1261"nnml"
4009494e
GM
1262@end example
1263
1264will mean that all groups that match that regex will be subscribed under
1265that topic.
1266
1267If no topics match the groups, the groups will be subscribed in the
1268top-level topic.
1269
1270@end table
1271
1272@vindex gnus-subscribe-hierarchical-interactive
1273A closely related variable is
1274@code{gnus-subscribe-hierarchical-interactive}. (That's quite a
1275mouthful.) If this variable is non-@code{nil}, Gnus will ask you in a
1276hierarchical fashion whether to subscribe to new groups or not. Gnus
1277will ask you for each sub-hierarchy whether you want to descend the
1278hierarchy or not.
1279
1280One common mistake is to set the variable a few paragraphs above
1281(@code{gnus-subscribe-newsgroup-method}) to
1282@code{gnus-subscribe-hierarchical-interactive}. This is an error. This
1283will not work. This is ga-ga. So don't do it.
1284
1285
1286@node Filtering New Groups
1287@subsection Filtering New Groups
1288
1289A nice and portable way to control which new newsgroups should be
1290subscribed (or ignored) is to put an @dfn{options} line at the start of
1291the @file{.newsrc} file. Here's an example:
1292
1293@example
1294options -n !alt.all !rec.all sci.all
1295@end example
1296
1297@vindex gnus-subscribe-options-newsgroup-method
1298This line obviously belongs to a serious-minded intellectual scientific
1299person (or she may just be plain old boring), because it says that all
1300groups that have names beginning with @samp{alt} and @samp{rec} should
1301be ignored, and all groups with names beginning with @samp{sci} should
1302be subscribed. Gnus will not use the normal subscription method for
1303subscribing these groups.
1304@code{gnus-subscribe-options-newsgroup-method} is used instead. This
1305variable defaults to @code{gnus-subscribe-alphabetically}.
1306
1307@vindex gnus-options-not-subscribe
1308@vindex gnus-options-subscribe
1309If you don't want to mess with your @file{.newsrc} file, you can just
1310set the two variables @code{gnus-options-subscribe} and
1311@code{gnus-options-not-subscribe}. These two variables do exactly the
1312same as the @file{.newsrc} @samp{options -n} trick. Both are regexps,
1313and if the new group matches the former, it will be unconditionally
1314subscribed, and if it matches the latter, it will be ignored.
1315
1316@vindex gnus-auto-subscribed-groups
1317Yet another variable that meddles here is
1318@code{gnus-auto-subscribed-groups}. It works exactly like
1319@code{gnus-options-subscribe}, and is therefore really superfluous,
1320but I thought it would be nice to have two of these. This variable is
1321more meant for setting some ground rules, while the other variable is
1322used more for user fiddling. By default this variable makes all new
1323groups that come from mail back ends (@code{nnml}, @code{nnbabyl},
1324@code{nnfolder}, @code{nnmbox}, @code{nnmh}, and @code{nnmaildir})
1325subscribed. If you don't like that, just set this variable to
1326@code{nil}.
1327
1328New groups that match this regexp are subscribed using
1329@code{gnus-subscribe-options-newsgroup-method}.
1330
1331
1332@node Changing Servers
1333@section Changing Servers
1334@cindex changing servers
1335
1336Sometimes it is necessary to move from one @acronym{NNTP} server to another.
1337This happens very rarely, but perhaps you change jobs, or one server is
1338very flaky and you want to use another.
1339
1340Changing the server is pretty easy, right? You just change
1341@code{gnus-select-method} to point to the new server?
1342
1343@emph{Wrong!}
1344
1345Article numbers are not (in any way) kept synchronized between different
1346@acronym{NNTP} servers, and the only way Gnus keeps track of what articles
1347you have read is by keeping track of article numbers. So when you
1348change @code{gnus-select-method}, your @file{.newsrc} file becomes
1349worthless.
1350
4009494e
GM
1351@kindex M-x gnus-group-clear-data-on-native-groups
1352@findex gnus-group-clear-data-on-native-groups
f02566ce
KY
1353You can use the @kbd{M-x gnus-group-clear-data-on-native-groups}
1354command to clear out all data that you have on your native groups.
1355Use with caution.
4009494e
GM
1356
1357@kindex M-x gnus-group-clear-data
1358@findex gnus-group-clear-data
1359Clear the data from the current group only---nix out marks and the
1360list of read articles (@code{gnus-group-clear-data}).
1361
1362After changing servers, you @strong{must} move the cache hierarchy away,
1363since the cached articles will have wrong article numbers, which will
1364affect which articles Gnus thinks are read.
1365@code{gnus-group-clear-data-on-native-groups} will ask you if you want
1366to have it done automatically; for @code{gnus-group-clear-data}, you
1367can use @kbd{M-x gnus-cache-move-cache} (but beware, it will move the
1368cache for all groups).
1369
1370
1371@node Startup Files
1372@section Startup Files
1373@cindex startup files
1374@cindex .newsrc
1375@cindex .newsrc.el
1376@cindex .newsrc.eld
1377
1378Most common Unix news readers use a shared startup file called
1379@file{.newsrc}. This file contains all the information about what
1380groups are subscribed, and which articles in these groups have been
1381read.
1382
1383Things got a bit more complicated with @sc{gnus}. In addition to
1384keeping the @file{.newsrc} file updated, it also used a file called
1385@file{.newsrc.el} for storing all the information that didn't fit into
1386the @file{.newsrc} file. (Actually, it also duplicated everything in
1387the @file{.newsrc} file.) @sc{gnus} would read whichever one of these
1388files was the most recently saved, which enabled people to swap between
1389@sc{gnus} and other newsreaders.
1390
1391That was kinda silly, so Gnus went one better: In addition to the
1392@file{.newsrc} and @file{.newsrc.el} files, Gnus also has a file called
1393@file{.newsrc.eld}. It will read whichever of these files that are most
1394recent, but it will never write a @file{.newsrc.el} file. You should
1395never delete the @file{.newsrc.eld} file---it contains much information
1396not stored in the @file{.newsrc} file.
1397
1398@vindex gnus-save-newsrc-file
1399@vindex gnus-read-newsrc-file
1400You can turn off writing the @file{.newsrc} file by setting
1401@code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
1402the file and save some space, as well as exiting from Gnus faster.
1403However, this will make it impossible to use other newsreaders than
1404Gnus. But hey, who would want to, right? Similarly, setting
1405@code{gnus-read-newsrc-file} to @code{nil} makes Gnus ignore the
1406@file{.newsrc} file and any @file{.newsrc-SERVER} files, which can be
1407convenient if you use a different news reader occasionally, and you
1408want to read a different subset of the available groups with that
1409news reader.
1410
1411@vindex gnus-save-killed-list
1412If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
1413will not save the list of killed groups to the startup file. This will
1414save both time (when starting and quitting) and space (on disk). It
1415will also mean that Gnus has no record of what groups are new or old,
1416so the automatic new groups subscription methods become meaningless.
1417You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
1418@code{ask-server} if you set this variable to @code{nil} (@pxref{New
1419Groups}). This variable can also be a regular expression. If that's
1420the case, remove all groups that do not match this regexp before
1421saving. This can be useful in certain obscure situations that involve
1422several servers where not all servers support @code{ask-server}.
1423
1424@vindex gnus-startup-file
1425@vindex gnus-backup-startup-file
1426@vindex version-control
1427The @code{gnus-startup-file} variable says where the startup files are.
1428The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1429file being whatever that one is, with a @samp{.eld} appended.
1430If you want version control for this file, set
1431@code{gnus-backup-startup-file}. It respects the same values as the
1432@code{version-control} variable.
1433
1434@vindex gnus-save-newsrc-hook
1435@vindex gnus-save-quick-newsrc-hook
1436@vindex gnus-save-standard-newsrc-hook
1437@code{gnus-save-newsrc-hook} is called before saving any of the newsrc
1438files, while @code{gnus-save-quick-newsrc-hook} is called just before
1439saving the @file{.newsrc.eld} file, and
1440@code{gnus-save-standard-newsrc-hook} is called just before saving the
1441@file{.newsrc} file. The latter two are commonly used to turn version
1442control on or off. Version control is on by default when saving the
1443startup files. If you want to turn backup creation off, say something like:
1444
1445@lisp
1446(defun turn-off-backup ()
1447 (set (make-local-variable 'backup-inhibited) t))
1448
1449(add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
1450(add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
1451@end lisp
1452
1453@vindex gnus-init-file
1454@vindex gnus-site-init-file
1455When Gnus starts, it will read the @code{gnus-site-init-file}
1456(@file{.../site-lisp/gnus-init} by default) and @code{gnus-init-file}
1457(@file{~/.gnus} by default) files. These are normal Emacs Lisp files
1458and can be used to avoid cluttering your @file{~/.emacs} and
1459@file{site-init} files with Gnus stuff. Gnus will also check for files
1460with the same names as these, but with @file{.elc} and @file{.el}
1461suffixes. In other words, if you have set @code{gnus-init-file} to
1462@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
1463and finally @file{~/.gnus} (in this order). If Emacs was invoked with
1464the @option{-q} or @option{--no-init-file} options (@pxref{Initial
1465Options, ,Initial Options, emacs, The Emacs Manual}), Gnus doesn't read
1466@code{gnus-init-file}.
1467
1468
1469@node Auto Save
1470@section Auto Save
1471@cindex dribble file
1472@cindex auto-save
1473
1474Whenever you do something that changes the Gnus data (reading articles,
1475catching up, killing/subscribing groups), the change is added to a
1476special @dfn{dribble buffer}. This buffer is auto-saved the normal
1477Emacs way. If your Emacs should crash before you have saved the
1478@file{.newsrc} files, all changes you have made can be recovered from
1479this file.
1480
1481If Gnus detects this file at startup, it will ask the user whether to
1482read it. The auto save file is deleted whenever the real startup file is
1483saved.
1484
1485@vindex gnus-use-dribble-file
1486If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
1487maintain a dribble buffer. The default is @code{t}.
1488
1489@vindex gnus-dribble-directory
1490Gnus will put the dribble file(s) in @code{gnus-dribble-directory}. If
1491this variable is @code{nil}, which it is by default, Gnus will dribble
1492into the directory where the @file{.newsrc} file is located. (This is
1493normally the user's home directory.) The dribble file will get the same
1494file permissions as the @file{.newsrc} file.
1495
1496@vindex gnus-always-read-dribble-file
1497If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
1498read the dribble file on startup without querying the user.
1499
1500
1501@node The Active File
1502@section The Active File
1503@cindex active file
1504@cindex ignored groups
1505
1506When Gnus starts, or indeed whenever it tries to determine whether new
1507articles have arrived, it reads the active file. This is a very large
1508file that lists all the active groups and articles on the server.
1509
1510@vindex gnus-ignored-newsgroups
1511Before examining the active file, Gnus deletes all lines that match the
1512regexp @code{gnus-ignored-newsgroups}. This is done primarily to reject
1513any groups with bogus names, but you can use this variable to make Gnus
1514ignore hierarchies you aren't ever interested in. However, this is not
1515recommended. In fact, it's highly discouraged. Instead, @pxref{New
1516Groups} for an overview of other variables that can be used instead.
1517
1518@c This variable is
1519@c @code{nil} by default, and will slow down active file handling somewhat
1520@c if you set it to anything else.
1521
1522@vindex gnus-read-active-file
1523@c @head
1524The active file can be rather Huge, so if you have a slow network, you
1525can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
1526reading the active file. This variable is @code{some} by default.
1527
1528Gnus will try to make do by getting information just on the groups that
1529you actually subscribe to.
1530
1531Note that if you subscribe to lots and lots of groups, setting this
1532variable to @code{nil} will probably make Gnus slower, not faster. At
1533present, having this variable @code{nil} will slow Gnus down
1534considerably, unless you read news over a 2400 baud modem.
1535
1536This variable can also have the value @code{some}. Gnus will then
1537attempt to read active info only on the subscribed groups. On some
1538servers this is quite fast (on sparkling, brand new INN servers that
1539support the @code{LIST ACTIVE group} command), on others this isn't fast
1540at all. In any case, @code{some} should be faster than @code{nil}, and
1541is certainly faster than @code{t} over slow lines.
1542
1543Some news servers (old versions of Leafnode and old versions of INN, for
1544instance) do not support the @code{LIST ACTIVE group}. For these
1545servers, @code{nil} is probably the most efficient value for this
1546variable.
1547
1548If this variable is @code{nil}, Gnus will ask for group info in total
1549lock-step, which isn't very fast. If it is @code{some} and you use an
1550@acronym{NNTP} server, Gnus will pump out commands as fast as it can, and
1551read all the replies in one swoop. This will normally result in better
1552performance, but if the server does not support the aforementioned
1553@code{LIST ACTIVE group} command, this isn't very nice to the server.
1554
1555If you think that starting up Gnus takes too long, try all the three
1556different values for this variable and see what works best for you.
1557
1558In any case, if you use @code{some} or @code{nil}, you should definitely
1559kill all groups that you aren't interested in to speed things up.
1560
1561Note that this variable also affects active file retrieval from
1562secondary select methods.
1563
1564
1565@node Startup Variables
1566@section Startup Variables
1567
1568@table @code
1569
1570@item gnus-load-hook
1571@vindex gnus-load-hook
1572A hook run while Gnus is being loaded. Note that this hook will
1573normally be run just once in each Emacs session, no matter how many
1574times you start Gnus.
1575
1576@item gnus-before-startup-hook
1577@vindex gnus-before-startup-hook
e3e955fe 1578A hook called as the first thing when Gnus is started.
4009494e
GM
1579
1580@item gnus-startup-hook
1581@vindex gnus-startup-hook
1582A hook run as the very last thing after starting up Gnus
1583
1584@item gnus-started-hook
1585@vindex gnus-started-hook
1586A hook that is run as the very last thing after starting up Gnus
1587successfully.
1588
1589@item gnus-setup-news-hook
1590@vindex gnus-setup-news-hook
1591A hook that is run after reading the @file{.newsrc} file(s), but before
1592generating the group buffer.
1593
1594@item gnus-check-bogus-newsgroups
1595@vindex gnus-check-bogus-newsgroups
1596If non-@code{nil}, Gnus will check for and delete all bogus groups at
1597startup. A @dfn{bogus group} is a group that you have in your
1598@file{.newsrc} file, but doesn't exist on the news server. Checking for
1599bogus groups can take quite a while, so to save time and resources it's
1600best to leave this option off, and do the checking for bogus groups once
1601in a while from the group buffer instead (@pxref{Group Maintenance}).
1602
1603@item gnus-inhibit-startup-message
1604@vindex gnus-inhibit-startup-message
1605If non-@code{nil}, the startup message won't be displayed. That way,
1606your boss might not notice as easily that you are reading news instead
1607of doing your job. Note that this variable is used before
1608@file{~/.gnus.el} is loaded, so it should be set in @file{.emacs} instead.
1609
1610@item gnus-no-groups-message
1611@vindex gnus-no-groups-message
1612Message displayed by Gnus when no groups are available.
1613
b1ae92ba
G
1614@item gnus-use-backend-marks
1615@vindex gnus-use-backend-marks
1616If non-@code{nil}, Gnus will store article marks both in the
1617@file{.newsrc.eld} file and in the backends. This will slow down
1618group operation some.
1619
4009494e
GM
1620@end table
1621
1622
1623@node Group Buffer
1624@chapter Group Buffer
1625@cindex group buffer
1626
1627@c Alex Schroeder suggests to rearrange this as follows:
1628@c
1629@c <kensanata> ok, just save it for reference. I'll go to bed in a minute.
1630@c 1. Selecting a Group, 2. (new) Finding a Group, 3. Group Levels,
1631@c 4. Subscription Commands, 5. Group Maneuvering, 6. Group Data,
1632@c 7. Group Score, 8. Group Buffer Format
1633@c <kensanata> Group Levels should have more information on levels 5 to 9. I
1634@c suggest to split the 4th paragraph ("Gnus considers groups...") as follows:
1635@c <kensanata> First, "Gnus considers groups... (default 9)."
1636@c <kensanata> New, a table summarizing what levels 1 to 9 mean.
1637@c <kensanata> Third, "Gnus treats subscribed ... reasons of efficiency"
1638@c <kensanata> Then expand the next paragraph or add some more to it.
1639@c This short one sentence explains levels 1 and 2, therefore I understand
1640@c that I should keep important news at 3 and boring news at 4.
1641@c Say so! Then go on to explain why I should bother with levels 6 to 9.
1642@c Maybe keep those that you don't want to read temporarily at 6,
1643@c those that you never want to read at 8, those that offend your
1644@c human rights at 9...
1645
1646
1647The @dfn{group buffer} lists all (or parts) of the available groups. It
1648is the first buffer shown when Gnus starts, and will never be killed as
1649long as Gnus is active.
1650
1651@iftex
1652@iflatex
1653\gnusfigure{The Group Buffer}{320}{
1654\put(75,50){\epsfig{figure=ps/group,height=9cm}}
1655\put(120,37){\makebox(0,0)[t]{Buffer name}}
1656\put(120,38){\vector(1,2){10}}
1657\put(40,60){\makebox(0,0)[r]{Mode line}}
1658\put(40,58){\vector(1,0){30}}
1659\put(200,28){\makebox(0,0)[t]{Native select method}}
1660\put(200,26){\vector(-1,2){15}}
1661}
1662@end iflatex
1663@end iftex
1664
1665@menu
1666* Group Buffer Format:: Information listed and how you can change it.
1667* Group Maneuvering:: Commands for moving in the group buffer.
1668* Selecting a Group:: Actually reading news.
1669* Subscription Commands:: Unsubscribing, killing, subscribing.
1670* Group Data:: Changing the info for a group.
1671* Group Levels:: Levels? What are those, then?
1672* Group Score:: A mechanism for finding out what groups you like.
1673* Marking Groups:: You can mark groups for later processing.
1674* Foreign Groups:: Creating and editing groups.
1675* Group Parameters:: Each group may have different parameters set.
1676* Listing Groups:: Gnus can list various subsets of the groups.
1677* Sorting Groups:: Re-arrange the group order.
1678* Group Maintenance:: Maintaining a tidy @file{.newsrc} file.
1679* Browse Foreign Server:: You can browse a server. See what it has to offer.
1680* Exiting Gnus:: Stop reading news and get some work done.
1681* Group Topics:: A folding group mode divided into topics.
01c52d31 1682* Non-ASCII Group Names:: Accessing groups of non-English names.
e6d2d263 1683* Searching:: Mail search engines.
4009494e
GM
1684* Misc Group Stuff:: Other stuff that you can to do.
1685@end menu
1686
1687
1688@node Group Buffer Format
1689@section Group Buffer Format
1690
1691@menu
1692* Group Line Specification:: Deciding how the group buffer is to look.
1693* Group Mode Line Specification:: The group buffer mode line.
1694* Group Highlighting:: Having nice colors in the group buffer.
1695@end menu
1696
1697You can customize the Group Mode tool bar, see @kbd{M-x
1698customize-apropos RET gnus-group-tool-bar}. This feature is only
1699available in Emacs.
1700
1701The tool bar icons are now (de)activated correctly depending on the
1702cursor position. Therefore, moving around in the Group Buffer is
1703slower. You can disable this via the variable
1704@code{gnus-group-update-tool-bar}. Its default value depends on your
1705Emacs version.
1706
1707@node Group Line Specification
1708@subsection Group Line Specification
1709@cindex group buffer format
1710
1711The default format of the group buffer is nice and dull, but you can
1712make it as exciting and ugly as you feel like.
1713
1714Here's a couple of example group lines:
1715
1716@example
1717 25: news.announce.newusers
1718 * 0: alt.fan.andrea-dworkin
1719@end example
1720
1721Quite simple, huh?
1722
1723You can see that there are 25 unread articles in
1724@samp{news.announce.newusers}. There are no unread articles, but some
1725ticked articles, in @samp{alt.fan.andrea-dworkin} (see that little
1726asterisk at the beginning of the line?).
1727
1728@vindex gnus-group-line-format
1729You can change that format to whatever you want by fiddling with the
1730@code{gnus-group-line-format} variable. This variable works along the
1731lines of a @code{format} specification, which is pretty much the same as
1732a @code{printf} specifications, for those of you who use (feh!) C.
1733@xref{Formatting Variables}.
1734
1735@samp{%M%S%5y:%B%(%g%)\n} is the value that produced those lines above.
1736
1737There should always be a colon on the line; the cursor always moves to
1738the colon after performing an operation. @xref{Positioning
1739Point}. Nothing else is required---not even the group name. All
1740displayed text is just window dressing, and is never examined by Gnus.
1741Gnus stores all real information it needs using text properties.
1742
1743(Note that if you make a really strange, wonderful, spreadsheet-like
1744layout, everybody will believe you are hard at work with the accounting
1745instead of wasting time reading news.)
1746
1747Here's a list of all available format characters:
1748
1749@table @samp
1750
1751@item M
1752An asterisk if the group only has marked articles.
1753
1754@item S
1755Whether the group is subscribed.
1756
1757@item L
1758Level of subscribedness.
1759
1760@item N
1761Number of unread articles.
1762
1763@item I
1764Number of dormant articles.
1765
1766@item T
1767Number of ticked articles.
1768
1769@item R
1770Number of read articles.
1771
1772@item U
1773Number of unseen articles.
1774
1775@item t
1776Estimated total number of articles. (This is really @var{max-number}
1777minus @var{min-number} plus 1.)
1778
1779Gnus uses this estimation because the @acronym{NNTP} protocol provides
1780efficient access to @var{max-number} and @var{min-number} but getting
1781the true unread message count is not possible efficiently. For
1782hysterical raisins, even the mail back ends, where the true number of
1783unread messages might be available efficiently, use the same limited
1784interface. To remove this restriction from Gnus means that the back
01c52d31
MB
1785end interface has to be changed, which is not an easy job.
1786
1787The nnml backend (@pxref{Mail Spool}) has a feature called ``group
1788compaction'' which circumvents this deficiency: the idea is to
1789renumber all articles from 1, removing all gaps between numbers, hence
1790getting a correct total count. Other backends may support this in the
1791future. In order to keep your total article count relatively up to
1792date, you might want to compact your groups (or even directly your
1793server) from time to time. @xref{Misc Group Stuff}, @xref{Server Commands}.
4009494e
GM
1794
1795@item y
1796Number of unread, unticked, non-dormant articles.
1797
1798@item i
1799Number of ticked and dormant articles.
1800
1801@item g
1802Full group name.
1803
1804@item G
1805Group name.
1806
1807@item C
1808Group comment (@pxref{Group Parameters}) or group name if there is no
1809comment element in the group parameters.
1810
1811@item D
1812Newsgroup description. You need to read the group descriptions
1813before these will appear, and to do that, you either have to set
1814@code{gnus-read-active-file} or use the group buffer @kbd{M-d}
1815command.
1816
1817@item o
1818@samp{m} if moderated.
1819
1820@item O
1821@samp{(m)} if moderated.
1822
1823@item s
1824Select method.
1825
1826@item B
1827If the summary buffer for the group is open or not.
1828
1829@item n
1830Select from where.
1831
1832@item z
1833A string that looks like @samp{<%s:%n>} if a foreign select method is
1834used.
1835
1836@item P
1837Indentation based on the level of the topic (@pxref{Group Topics}).
1838
1839@item c
1840@vindex gnus-group-uncollapsed-levels
1841Short (collapsed) group name. The @code{gnus-group-uncollapsed-levels}
1842variable says how many levels to leave at the end of the group name.
1843The default is 1---this will mean that group names like
1844@samp{gnu.emacs.gnus} will be shortened to @samp{g.e.gnus}.
1845
1846@item m
1847@vindex gnus-new-mail-mark
1848@cindex %
1849@samp{%} (@code{gnus-new-mail-mark}) if there has arrived new mail to
1850the group lately.
1851
1852@item p
1853@samp{#} (@code{gnus-process-mark}) if the group is process marked.
1854
1855@item d
1856A string that says when you last read the group (@pxref{Group
1857Timestamp}).
1858
01c52d31
MB
1859@item F
1860The disk space used by the articles fetched by both the cache and
1861agent. The value is automatically scaled to bytes(B), kilobytes(K),
1862megabytes(M), or gigabytes(G) to minimize the column width. A format
1863of %7F is sufficient for a fixed-width column.
1864
4009494e
GM
1865@item u
1866User defined specifier. The next character in the format string should
1867be a letter. Gnus will call the function
1868@code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
1869following @samp{%u}. The function will be passed a single dummy
1870parameter as argument. The function should return a string, which will
1871be inserted into the buffer just like information from any other
1872specifier.
1873@end table
1874
1875@cindex *
1876All the ``number-of'' specs will be filled with an asterisk (@samp{*})
1877if no info is available---for instance, if it is a non-activated foreign
1878group, or a bogus native group.
1879
1880
1881@node Group Mode Line Specification
1882@subsection Group Mode Line Specification
1883@cindex group mode line
1884
1885@vindex gnus-group-mode-line-format
1886The mode line can be changed by setting
1887@code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}). It
1888doesn't understand that many format specifiers:
1889
1890@table @samp
1891@item S
1892The native news server.
1893@item M
1894The native select method.
1895@end table
1896
1897
1898@node Group Highlighting
1899@subsection Group Highlighting
1900@cindex highlighting
1901@cindex group highlighting
1902
1903@vindex gnus-group-highlight
1904Highlighting in the group buffer is controlled by the
1905@code{gnus-group-highlight} variable. This is an alist with elements
1906that look like @code{(@var{form} . @var{face})}. If @var{form} evaluates to
1907something non-@code{nil}, the @var{face} will be used on the line.
1908
1909Here's an example value for this variable that might look nice if the
1910background is dark:
1911
1912@lisp
1913(cond (window-system
1914 (setq custom-background-mode 'light)
1915 (defface my-group-face-1
1916 '((t (:foreground "Red" :bold t))) "First group face")
1917 (defface my-group-face-2
1918 '((t (:foreground "DarkSeaGreen4" :bold t)))
1919 "Second group face")
1920 (defface my-group-face-3
1921 '((t (:foreground "Green4" :bold t))) "Third group face")
1922 (defface my-group-face-4
1923 '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
1924 (defface my-group-face-5
1925 '((t (:foreground "Blue" :bold t))) "Fifth group face")))
1926
1927(setq gnus-group-highlight
1928 '(((> unread 200) . my-group-face-1)
1929 ((and (< level 3) (zerop unread)) . my-group-face-2)
1930 ((< level 3) . my-group-face-3)
1931 ((zerop unread) . my-group-face-4)
1932 (t . my-group-face-5)))
1933@end lisp
1934
1935Also @pxref{Faces and Fonts}.
1936
1937Variables that are dynamically bound when the forms are evaluated
1938include:
1939
1940@table @code
1941@item group
1942The group name.
1943@item unread
1944The number of unread articles in the group.
1945@item method
1946The select method.
1947@item mailp
1948Whether the group is a mail group.
1949@item level
1950The level of the group.
1951@item score
1952The score of the group.
1953@item ticked
1954The number of ticked articles in the group.
1955@item total
1956The total number of articles in the group. Or rather,
1957@var{max-number} minus @var{min-number} plus one.
1958@item topic
1959When using the topic minor mode, this variable is bound to the current
1960topic being inserted.
1961@end table
1962
1963When the forms are @code{eval}ed, point is at the beginning of the line
1964of the group in question, so you can use many of the normal Gnus
1965functions for snarfing info on the group.
1966
1967@vindex gnus-group-update-hook
1968@findex gnus-group-highlight-line
1969@code{gnus-group-update-hook} is called when a group line is changed.
b069e5a6 1970It will not be called when @code{gnus-visual} is @code{nil}.
4009494e
GM
1971
1972
1973@node Group Maneuvering
1974@section Group Maneuvering
1975@cindex group movement
1976
1977All movement commands understand the numeric prefix and will behave as
1978expected, hopefully.
1979
1980@table @kbd
1981
1982@item n
1983@kindex n (Group)
1984@findex gnus-group-next-unread-group
1985Go to the next group that has unread articles
1986(@code{gnus-group-next-unread-group}).
1987
1988@item p
1989@itemx DEL
1990@kindex DEL (Group)
1991@kindex p (Group)
1992@findex gnus-group-prev-unread-group
1993Go to the previous group that has unread articles
1994(@code{gnus-group-prev-unread-group}).
1995
1996@item N
1997@kindex N (Group)
1998@findex gnus-group-next-group
1999Go to the next group (@code{gnus-group-next-group}).
2000
2001@item P
2002@kindex P (Group)
2003@findex gnus-group-prev-group
2004Go to the previous group (@code{gnus-group-prev-group}).
2005
2006@item M-n
2007@kindex M-n (Group)
2008@findex gnus-group-next-unread-group-same-level
2009Go to the next unread group on the same (or lower) level
2010(@code{gnus-group-next-unread-group-same-level}).
2011
2012@item M-p
2013@kindex M-p (Group)
2014@findex gnus-group-prev-unread-group-same-level
2015Go to the previous unread group on the same (or lower) level
2016(@code{gnus-group-prev-unread-group-same-level}).
2017@end table
2018
2019Three commands for jumping to groups:
2020
2021@table @kbd
2022
2023@item j
2024@kindex j (Group)
2025@findex gnus-group-jump-to-group
2026Jump to a group (and make it visible if it isn't already)
2027(@code{gnus-group-jump-to-group}). Killed groups can be jumped to, just
2028like living groups.
2029
2030@item ,
2031@kindex , (Group)
2032@findex gnus-group-best-unread-group
2033Jump to the unread group with the lowest level
2034(@code{gnus-group-best-unread-group}).
2035
2036@item .
2037@kindex . (Group)
2038@findex gnus-group-first-unread-group
2039Jump to the first group with unread articles
2040(@code{gnus-group-first-unread-group}).
2041@end table
2042
2043@vindex gnus-group-goto-unread
2044If @code{gnus-group-goto-unread} is @code{nil}, all the movement
2045commands will move to the next group, not the next unread group. Even
2046the commands that say they move to the next unread group. The default
2047is @code{t}.
2048
01c52d31
MB
2049@vindex gnus-summary-next-group-on-exit
2050If @code{gnus-summary-next-group-on-exit} is @code{t}, when a summary is
2051exited, the point in the group buffer is moved to the next unread group.
2052Otherwise, the point is set to the group just exited. The default is
2053@code{t}.
4009494e
GM
2054
2055@node Selecting a Group
2056@section Selecting a Group
2057@cindex group selection
2058
2059@table @kbd
2060
2061@item SPACE
2062@kindex SPACE (Group)
2063@findex gnus-group-read-group
2064Select the current group, switch to the summary buffer and display the
2065first unread article (@code{gnus-group-read-group}). If there are no
2066unread articles in the group, or if you give a non-numerical prefix to
2067this command, Gnus will offer to fetch all the old articles in this
2068group from the server. If you give a numerical prefix @var{n}, @var{n}
2069determines the number of articles Gnus will fetch. If @var{n} is
2070positive, Gnus fetches the @var{n} newest articles, if @var{n} is
2071negative, Gnus fetches the @code{abs(@var{n})} oldest articles.
2072
2073Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old
2074articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u
2075- 4 2 SPC} fetches the 42 oldest ones.
2076
2077When you are in the group (in the Summary buffer), you can type
2078@kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old
2079ones.
2080
2081@item RET
2082@kindex RET (Group)
2083@findex gnus-group-select-group
2084Select the current group and switch to the summary buffer
2085(@code{gnus-group-select-group}). Takes the same arguments as
2086@code{gnus-group-read-group}---the only difference is that this command
2087does not display the first unread article automatically upon group
2088entry.
2089
2090@item M-RET
2091@kindex M-RET (Group)
2092@findex gnus-group-quick-select-group
2093This does the same as the command above, but tries to do it with the
2094minimum amount of fuzz (@code{gnus-group-quick-select-group}). No
2095scoring/killing will be performed, there will be no highlights and no
2096expunging. This might be useful if you're in a real hurry and have to
2097enter some humongous group. If you give a 0 prefix to this command
2098(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
2099which is useful if you want to toggle threading before generating the
2100summary buffer (@pxref{Summary Generation Commands}).
2101
2102@item M-SPACE
2103@kindex M-SPACE (Group)
2104@findex gnus-group-visible-select-group
2105This is yet one more command that does the same as the @kbd{RET}
2106command, but this one does it without expunging and hiding dormants
2107(@code{gnus-group-visible-select-group}).
2108
2109@item C-M-RET
2110@kindex C-M-RET (Group)
2111@findex gnus-group-select-group-ephemerally
2112Finally, this command selects the current group ephemerally without
2113doing any processing of its contents
2114(@code{gnus-group-select-group-ephemerally}). Even threading has been
2115turned off. Everything you do in the group after selecting it in this
2116manner will have no permanent effects.
2117
2118@end table
2119
2120@vindex gnus-large-newsgroup
2121The @code{gnus-large-newsgroup} variable says what Gnus should
2122consider to be a big group. If it is @code{nil}, no groups are
2123considered big. The default value is 200. If the group has more
2124(unread and/or ticked) articles than this, Gnus will query the user
2125before entering the group. The user can then specify how many
2126articles should be fetched from the server. If the user specifies a
2127negative number (@var{-n}), the @var{n} oldest articles will be
2128fetched. If it is positive, the @var{n} articles that have arrived
2129most recently will be fetched.
2130
2131@vindex gnus-large-ephemeral-newsgroup
2132@code{gnus-large-ephemeral-newsgroup} is the same as
2133@code{gnus-large-newsgroup}, but is only used for ephemeral
2134newsgroups.
2135
4b70e299 2136@vindex gnus-newsgroup-maximum-articles
4009494e
GM
2137In groups in some news servers, there might be a big gap between a few
2138very old articles that will never be expired and the recent ones. In
2139such a case, the server will return the data like @code{(1 . 30000000)}
2140for the @code{LIST ACTIVE group} command, for example. Even if there
2141are actually only the articles 1-10 and 29999900-30000000, Gnus doesn't
2142know it at first and prepares for getting 30000000 articles. However,
2143it will consume hundreds megabytes of memories and might make Emacs get
2144stuck as the case may be. If you use such news servers, set the
4b70e299
MB
2145variable @code{gnus-newsgroup-maximum-articles} to a positive number.
2146The value means that Gnus ignores articles other than this number of the
2147latest ones in every group. For instance, the value 10000 makes Gnus
2148get only the articles 29990001-30000000 (if the latest article number is
214930000000 in a group). Note that setting this variable to a number might
2150prevent you from reading very old articles. The default value of the
2151variable @code{gnus-newsgroup-maximum-articles} is @code{nil}, which
2152means Gnus never ignores old articles.
4009494e
GM
2153
2154@vindex gnus-select-group-hook
2155@vindex gnus-auto-select-first
2156@vindex gnus-auto-select-subject
2157If @code{gnus-auto-select-first} is non-@code{nil}, select an article
2158automatically when entering a group with the @kbd{SPACE} command.
867d4bb3 2159Which article this is controlled by the
4009494e
GM
2160@code{gnus-auto-select-subject} variable. Valid values for this
2161variable are:
2162
2163@table @code
2164
2165@item unread
2166Place point on the subject line of the first unread article.
2167
2168@item first
2169Place point on the subject line of the first article.
2170
2171@item unseen
2172Place point on the subject line of the first unseen article.
2173
2174@item unseen-or-unread
2175Place point on the subject line of the first unseen article, and if
2176there is no such article, place point on the subject line of the first
2177unread article.
2178
2179@item best
2180Place point on the subject line of the highest-scored unread article.
2181
2182@end table
2183
2184This variable can also be a function. In that case, that function
2185will be called to place point on a subject line.
2186
2187If you want to prevent automatic selection in some group (say, in a
2188binary group with Huge articles) you can set the
2189@code{gnus-auto-select-first} variable to @code{nil} in
2190@code{gnus-select-group-hook}, which is called when a group is
2191selected.
2192
2193
2194@node Subscription Commands
2195@section Subscription Commands
2196@cindex subscription
2197
280f417b
G
2198The following commands allow for managing your subscriptions in the
2199Group buffer. If you want to subscribe to many groups, it's probably
2200more convenient to go to the @ref{Server Buffer}, and choose the
2201server there using @kbd{RET} or @kbd{SPC}. Then you'll have the
2202commands listed in @ref{Browse Foreign Server} at hand.
2203
4009494e
GM
2204@table @kbd
2205
2206@item S t
2207@itemx u
2208@kindex S t (Group)
2209@kindex u (Group)
2210@findex gnus-group-unsubscribe-current-group
2211@c @icon{gnus-group-unsubscribe}
2212Toggle subscription to the current group
2213(@code{gnus-group-unsubscribe-current-group}).
2214
2215@item S s
2216@itemx U
2217@kindex S s (Group)
2218@kindex U (Group)
2219@findex gnus-group-unsubscribe-group
2220Prompt for a group to subscribe, and then subscribe it. If it was
2221subscribed already, unsubscribe it instead
2222(@code{gnus-group-unsubscribe-group}).
2223
2224@item S k
2225@itemx C-k
2226@kindex S k (Group)
2227@kindex C-k (Group)
2228@findex gnus-group-kill-group
2229@c @icon{gnus-group-kill-group}
2230Kill the current group (@code{gnus-group-kill-group}).
2231
2232@item S y
2233@itemx C-y
2234@kindex S y (Group)
2235@kindex C-y (Group)
2236@findex gnus-group-yank-group
2237Yank the last killed group (@code{gnus-group-yank-group}).
2238
2239@item C-x C-t
2240@kindex C-x C-t (Group)
2241@findex gnus-group-transpose-groups
2242Transpose two groups (@code{gnus-group-transpose-groups}). This isn't
2243really a subscription command, but you can use it instead of a
2244kill-and-yank sequence sometimes.
2245
2246@item S w
2247@itemx C-w
2248@kindex S w (Group)
2249@kindex C-w (Group)
2250@findex gnus-group-kill-region
2251Kill all groups in the region (@code{gnus-group-kill-region}).
2252
2253@item S z
2254@kindex S z (Group)
2255@findex gnus-group-kill-all-zombies
2256Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
2257
2258@item S C-k
2259@kindex S C-k (Group)
2260@findex gnus-group-kill-level
2261Kill all groups on a certain level (@code{gnus-group-kill-level}).
2262These groups can't be yanked back after killing, so this command should
2263be used with some caution. The only time where this command comes in
2264really handy is when you have a @file{.newsrc} with lots of unsubscribed
2265groups that you want to get rid off. @kbd{S C-k} on level 7 will
2266kill off all unsubscribed groups that do not have message numbers in the
2267@file{.newsrc} file.
2268
2269@end table
2270
2271Also @pxref{Group Levels}.
2272
2273
2274@node Group Data
2275@section Group Data
2276
2277@table @kbd
2278
2279@item c
2280@kindex c (Group)
2281@findex gnus-group-catchup-current
2282@vindex gnus-group-catchup-group-hook
2283@c @icon{gnus-group-catchup-current}
2284Mark all unticked articles in this group as read
2285(@code{gnus-group-catchup-current}).
2286@code{gnus-group-catchup-group-hook} is called when catching up a group from
2287the group buffer.
2288
2289@item C
2290@kindex C (Group)
2291@findex gnus-group-catchup-current-all
2292Mark all articles in this group, even the ticked ones, as read
2293(@code{gnus-group-catchup-current-all}).
2294
2295@item M-c
2296@kindex M-c (Group)
2297@findex gnus-group-clear-data
2298Clear the data from the current group---nix out marks and the list of
2299read articles (@code{gnus-group-clear-data}).
2300
2301@item M-x gnus-group-clear-data-on-native-groups
2302@kindex M-x gnus-group-clear-data-on-native-groups
2303@findex gnus-group-clear-data-on-native-groups
2304If you have switched from one @acronym{NNTP} server to another, all your marks
2305and read ranges have become worthless. You can use this command to
2306clear out all data that you have on your native groups. Use with
2307caution.
2308
2309@end table
2310
2311
2312@node Group Levels
2313@section Group Levels
2314@cindex group level
2315@cindex level
2316
2317All groups have a level of @dfn{subscribedness}. For instance, if a
2318group is on level 2, it is more subscribed than a group on level 5. You
2319can ask Gnus to just list groups on a given level or lower
2320(@pxref{Listing Groups}), or to just check for new articles in groups on
2321a given level or lower (@pxref{Scanning New Messages}).
2322
2323Remember: The higher the level of the group, the less important it is.
2324
2325@table @kbd
2326
2327@item S l
2328@kindex S l (Group)
2329@findex gnus-group-set-current-level
2330Set the level of the current group. If a numeric prefix is given, the
2331next @var{n} groups will have their levels set. The user will be
2332prompted for a level.
2333@end table
2334
2335@vindex gnus-level-killed
2336@vindex gnus-level-zombie
2337@vindex gnus-level-unsubscribed
2338@vindex gnus-level-subscribed
2339Gnus considers groups from levels 1 to
2340@code{gnus-level-subscribed} (inclusive) (default 5) to be subscribed,
2341@code{gnus-level-subscribed} (exclusive) and
2342@code{gnus-level-unsubscribed} (inclusive) (default 7) to be
2343unsubscribed, @code{gnus-level-zombie} to be zombies (walking dead)
2344(default 8) and @code{gnus-level-killed} to be killed (completely dead)
2345(default 9). Gnus treats subscribed and unsubscribed groups exactly the
2346same, but zombie and killed groups have no information on what articles
2347you have read, etc, stored. This distinction between dead and living
2348groups isn't done because it is nice or clever, it is done purely for
2349reasons of efficiency.
2350
2351It is recommended that you keep all your mail groups (if any) on quite
2352low levels (e.g. 1 or 2).
2353
2354Maybe the following description of the default behavior of Gnus helps to
2355understand what these levels are all about. By default, Gnus shows you
2356subscribed nonempty groups, but by hitting @kbd{L} you can have it show
2357empty subscribed groups and unsubscribed groups, too. Type @kbd{l} to
2358go back to showing nonempty subscribed groups again. Thus, unsubscribed
2359groups are hidden, in a way.
2360
2361Zombie and killed groups are similar to unsubscribed groups in that they
2362are hidden by default. But they are different from subscribed and
2363unsubscribed groups in that Gnus doesn't ask the news server for
2364information (number of messages, number of unread messages) on zombie
2365and killed groups. Normally, you use @kbd{C-k} to kill the groups you
2366aren't interested in. If most groups are killed, Gnus is faster.
2367
2368Why does Gnus distinguish between zombie and killed groups? Well, when
2369a new group arrives on the server, Gnus by default makes it a zombie
2370group. This means that you are normally not bothered with new groups,
2371but you can type @kbd{A z} to get a list of all new groups. Subscribe
2372the ones you like and kill the ones you don't want. (@kbd{A k} shows a
2373list of killed groups.)
2374
2375If you want to play with the level variables, you should show some care.
2376Set them once, and don't touch them ever again. Better yet, don't touch
2377them at all unless you know exactly what you're doing.
2378
2379@vindex gnus-level-default-unsubscribed
2380@vindex gnus-level-default-subscribed
2381Two closely related variables are @code{gnus-level-default-subscribed}
2382(default 3) and @code{gnus-level-default-unsubscribed} (default 6),
2383which are the levels that new groups will be put on if they are
2384(un)subscribed. These two variables should, of course, be inside the
2385relevant valid ranges.
2386
2387@vindex gnus-keep-same-level
2388If @code{gnus-keep-same-level} is non-@code{nil}, some movement commands
2389will only move to groups of the same level (or lower). In
2390particular, going from the last article in one group to the next group
2391will go to the next group of the same level (or lower). This might be
2392handy if you want to read the most important groups before you read the
2393rest.
2394
2395If this variable is @code{best}, Gnus will make the next newsgroup the
2396one with the best level.
2397
2398@vindex gnus-group-default-list-level
2399All groups with a level less than or equal to
2400@code{gnus-group-default-list-level} will be listed in the group buffer
2401by default.
11a5db4a
JD
2402This variable can also be a function. In that case, that function will
2403be called and the result will be used as value.
2404
4009494e
GM
2405
2406@vindex gnus-group-list-inactive-groups
2407If @code{gnus-group-list-inactive-groups} is non-@code{nil}, non-active
2408groups will be listed along with the unread groups. This variable is
2409@code{t} by default. If it is @code{nil}, inactive groups won't be
2410listed.
2411
2412@vindex gnus-group-use-permanent-levels
2413If @code{gnus-group-use-permanent-levels} is non-@code{nil}, once you
2414give a level prefix to @kbd{g} or @kbd{l}, all subsequent commands will
2415use this level as the ``work'' level.
2416
2417@vindex gnus-activate-level
2418Gnus will normally just activate (i. e., query the server about) groups
2419on level @code{gnus-activate-level} or less. If you don't want to
2420activate unsubscribed groups, for instance, you might set this variable
2421to 5. The default is 6.
2422
2423
2424@node Group Score
2425@section Group Score
2426@cindex group score
2427@cindex group rank
2428@cindex rank
2429
2430You would normally keep important groups on high levels, but that scheme
2431is somewhat restrictive. Don't you wish you could have Gnus sort the
2432group buffer according to how often you read groups, perhaps? Within
2433reason?
2434
2435This is what @dfn{group score} is for. You can have Gnus assign a score
2436to each group through the mechanism described below. You can then sort
2437the group buffer based on this score. Alternatively, you can sort on
2438score and then level. (Taken together, the level and the score is
2439called the @dfn{rank} of the group. A group that is on level 4 and has
2440a score of 1 has a higher rank than a group on level 5 that has a score
2441of 300. (The level is the most significant part and the score is the
2442least significant part.))
2443
2444@findex gnus-summary-bubble-group
2445If you want groups you read often to get higher scores than groups you
2446read seldom you can add the @code{gnus-summary-bubble-group} function to
2447the @code{gnus-summary-exit-hook} hook. This will result (after
2448sorting) in a bubbling sort of action. If you want to see that in
2449action after each summary exit, you can add
2450@code{gnus-group-sort-groups-by-rank} or
2451@code{gnus-group-sort-groups-by-score} to the same hook, but that will
2452slow things down somewhat.
2453
2454
2455@node Marking Groups
2456@section Marking Groups
2457@cindex marking groups
2458
2459If you want to perform some command on several groups, and they appear
2460subsequently in the group buffer, you would normally just give a
2461numerical prefix to the command. Most group commands will then do your
2462bidding on those groups.
2463
2464However, if the groups are not in sequential order, you can still
2465perform a command on several groups. You simply mark the groups first
2466with the process mark and then execute the command.
2467
2468@table @kbd
2469
2470@item #
2471@kindex # (Group)
2472@itemx M m
2473@kindex M m (Group)
2474@findex gnus-group-mark-group
2475Set the mark on the current group (@code{gnus-group-mark-group}).
2476
2477@item M-#
2478@kindex M-# (Group)
2479@itemx M u
2480@kindex M u (Group)
2481@findex gnus-group-unmark-group
2482Remove the mark from the current group
2483(@code{gnus-group-unmark-group}).
2484
2485@item M U
2486@kindex M U (Group)
2487@findex gnus-group-unmark-all-groups
2488Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
2489
2490@item M w
2491@kindex M w (Group)
2492@findex gnus-group-mark-region
2493Mark all groups between point and mark (@code{gnus-group-mark-region}).
2494
2495@item M b
2496@kindex M b (Group)
2497@findex gnus-group-mark-buffer
2498Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
2499
2500@item M r
2501@kindex M r (Group)
2502@findex gnus-group-mark-regexp
2503Mark all groups that match some regular expression
2504(@code{gnus-group-mark-regexp}).
2505@end table
2506
2507Also @pxref{Process/Prefix}.
2508
2509@findex gnus-group-universal-argument
2510If you want to execute some command on all groups that have been marked
2511with the process mark, you can use the @kbd{M-&}
2512(@code{gnus-group-universal-argument}) command. It will prompt you for
2513the command to be executed.
2514
2515
2516@node Foreign Groups
2517@section Foreign Groups
2518@cindex foreign groups
2519
2520Below are some group mode commands for making and editing general foreign
2521groups, as well as commands to ease the creation of a few
2522special-purpose groups. All these commands insert the newly created
2523groups under point---@code{gnus-subscribe-newsgroup-method} is not
2524consulted.
2525
2526Changes from the group editing commands are stored in
2527@file{~/.newsrc.eld} (@code{gnus-startup-file}). An alternative is the
2528variable @code{gnus-parameters}, @xref{Group Parameters}.
2529
2530@table @kbd
2531
2532@item G m
2533@kindex G m (Group)
2534@findex gnus-group-make-group
2535@cindex making groups
2536Make a new group (@code{gnus-group-make-group}). Gnus will prompt you
2537for a name, a method and possibly an @dfn{address}. For an easier way
2538to subscribe to @acronym{NNTP} groups (@pxref{Browse Foreign Server}).
2539
2540@item G M
2541@kindex G M (Group)
2542@findex gnus-group-read-ephemeral-group
2543Make an ephemeral group (@code{gnus-group-read-ephemeral-group}). Gnus
2544will prompt you for a name, a method and an @dfn{address}.
2545
2546@item G r
2547@kindex G r (Group)
2548@findex gnus-group-rename-group
2549@cindex renaming groups
2550Rename the current group to something else
2551(@code{gnus-group-rename-group}). This is valid only on some
2552groups---mail groups mostly. This command might very well be quite slow
2553on some back ends.
2554
2555@item G c
2556@kindex G c (Group)
2557@cindex customizing
2558@findex gnus-group-customize
2559Customize the group parameters (@code{gnus-group-customize}).
2560
2561@item G e
2562@kindex G e (Group)
2563@findex gnus-group-edit-group-method
2564@cindex renaming groups
2565Enter a buffer where you can edit the select method of the current
2566group (@code{gnus-group-edit-group-method}).
2567
2568@item G p
2569@kindex G p (Group)
2570@findex gnus-group-edit-group-parameters
2571Enter a buffer where you can edit the group parameters
2572(@code{gnus-group-edit-group-parameters}).
2573
2574@item G E
2575@kindex G E (Group)
2576@findex gnus-group-edit-group
2577Enter a buffer where you can edit the group info
2578(@code{gnus-group-edit-group}).
2579
2580@item G d
2581@kindex G d (Group)
2582@findex gnus-group-make-directory-group
2583@cindex nndir
2584Make a directory group (@pxref{Directory Groups}). You will be prompted
2585for a directory name (@code{gnus-group-make-directory-group}).
2586
2587@item G h
2588@kindex G h (Group)
2589@cindex help group
2590@findex gnus-group-make-help-group
2591Make the Gnus help group (@code{gnus-group-make-help-group}).
2592
4009494e
GM
2593@item G D
2594@kindex G D (Group)
2595@findex gnus-group-enter-directory
2596@cindex nneething
2597Read an arbitrary directory as if it were a newsgroup with the
2598@code{nneething} back end (@code{gnus-group-enter-directory}).
2599@xref{Anything Groups}.
2600
2601@item G f
2602@kindex G f (Group)
2603@findex gnus-group-make-doc-group
2604@cindex ClariNet Briefs
2605@cindex nndoc
2606Make a group based on some file or other
2607(@code{gnus-group-make-doc-group}). If you give a prefix to this
2608command, you will be prompted for a file name and a file type.
2609Currently supported types are @code{mbox}, @code{babyl},
2610@code{digest}, @code{news}, @code{rnews}, @code{mmdf}, @code{forward},
2611@code{rfc934}, @code{rfc822-forward}, @code{mime-parts},
2612@code{standard-digest}, @code{slack-digest}, @code{clari-briefs},
2613@code{nsmail}, @code{outlook}, @code{oe-dbx}, and @code{mailman}. If
2614you run this command without a prefix, Gnus will guess at the file
2615type. @xref{Document Groups}.
2616
2617@item G u
2618@kindex G u (Group)
2619@vindex gnus-useful-groups
2620@findex gnus-group-make-useful-group
2621Create one of the groups mentioned in @code{gnus-useful-groups}
2622(@code{gnus-group-make-useful-group}).
2623
2624@item G w
2625@kindex G w (Group)
2626@findex gnus-group-make-web-group
2627@cindex Google
2628@cindex nnweb
2629@cindex gmane
2630Make an ephemeral group based on a web search
2631(@code{gnus-group-make-web-group}). If you give a prefix to this
2632command, make a solid group instead. You will be prompted for the
2633search engine type and the search string. Valid search engine types
2634include @code{google}, @code{dejanews}, and @code{gmane}.
2635@xref{Web Searches}.
2636
2637If you use the @code{google} search engine, you can limit the search
2638to a particular group by using a match string like
2639@samp{shaving group:alt.sysadmin.recovery}.
2640
2641@item G R
2642@kindex G R (Group)
2643@findex gnus-group-make-rss-group
2644Make a group based on an @acronym{RSS} feed
2645(@code{gnus-group-make-rss-group}). You will be prompted for an URL.
2646@xref{RSS}.
2647
2648@item G DEL
2649@kindex G DEL (Group)
2650@findex gnus-group-delete-group
2651This function will delete the current group
2652(@code{gnus-group-delete-group}). If given a prefix, this function will
2653actually delete all the articles in the group, and forcibly remove the
2654group itself from the face of the Earth. Use a prefix only if you are
2655absolutely sure of what you are doing. This command can't be used on
2656read-only groups (like @code{nntp} groups), though.
2657
2658@item G V
2659@kindex G V (Group)
2660@findex gnus-group-make-empty-virtual
2661Make a new, fresh, empty @code{nnvirtual} group
2662(@code{gnus-group-make-empty-virtual}). @xref{Virtual Groups}.
2663
2664@item G v
2665@kindex G v (Group)
2666@findex gnus-group-add-to-virtual
2667Add the current group to an @code{nnvirtual} group
2668(@code{gnus-group-add-to-virtual}). Uses the process/prefix convention.
2669@end table
2670
2671@xref{Select Methods}, for more information on the various select
2672methods.
2673
2674@vindex gnus-activate-foreign-newsgroups
2675If @code{gnus-activate-foreign-newsgroups} is a positive number,
2676Gnus will check all foreign groups with this level or lower at startup.
2677This might take quite a while, especially if you subscribe to lots of
2678groups from different @acronym{NNTP} servers. Also @pxref{Group Levels};
2679@code{gnus-activate-level} also affects activation of foreign
2680newsgroups.
2681
2682
9b3ebcb6
MB
2683The following commands create ephemeral groups. They can be called not
2684only from the Group buffer, but in any Gnus buffer.
2685
2686@table @code
2687@item gnus-read-ephemeral-gmane-group
2688@findex gnus-read-ephemeral-gmane-group
2689@vindex gnus-gmane-group-download-format
2690Read an ephemeral group on Gmane.org. The articles are downloaded via
2691HTTP using the URL specified by @code{gnus-gmane-group-download-format}.
2692Gnus will prompt you for a group name, the start article number and an
2693the article range.
2694
2695@item gnus-read-ephemeral-gmane-group-url
2696@findex gnus-read-ephemeral-gmane-group-url
2697This command is similar to @code{gnus-read-ephemeral-gmane-group}, but
2698the group name and the article number and range are constructed from a
2699given @acronym{URL}. Supported @acronym{URL} formats include e.g.
2700@url{http://thread.gmane.org/gmane.foo.bar/12300/focus=12399},
2701@url{http://thread.gmane.org/gmane.foo.bar/12345/},
2702@url{http://article.gmane.org/gmane.foo.bar/12345/},
2703@url{http://permalink.gmane.org/gmane.foo.bar/12345/}, and
2704@url{http://news.gmane.org/group/gmane.foo.bar/thread=12345}.
2705
2706@item gnus-read-ephemeral-emacs-bug-group
2707@findex gnus-read-ephemeral-emacs-bug-group
2708Read an Emacs bug report in an ephemeral group. Gnus will prompt for a
2709bug number. The default is the number at point. The @acronym{URL} is
2710specified in @code{gnus-bug-group-download-format-alist}.
2711
2712@item gnus-read-ephemeral-debian-bug-group
2713@findex gnus-read-ephemeral-debian-bug-group
2714Read a Debian bug report in an ephemeral group. Analog to
2715@code{gnus-read-ephemeral-emacs-bug-group}.
2716@end table
2717
2718Some of these command are also useful for article buttons, @xref{Article
2719Buttons}.
2720
2721Here is an example:
2722@lisp
2723(require 'gnus-art)
2724(add-to-list
2725 'gnus-button-alist
2726 '("#\\([0-9]+\\)\\>" 1
2727 (string-match "\\<emacs\\>" (or gnus-newsgroup-name ""))
2728 gnus-read-ephemeral-emacs-bug-group 1))
2729@end lisp
2730
2731
4009494e
GM
2732@node Group Parameters
2733@section Group Parameters
2734@cindex group parameters
2735
2736The group parameters store information local to a particular group.
87035689
MB
2737
2738Use the @kbd{G p} or the @kbd{G c} command to edit group parameters of a
2739group. (@kbd{G p} presents you with a Lisp-based interface, @kbd{G c}
2740presents you with a Customize-like interface. The latter helps avoid
2741silly Lisp errors.) You might also be interested in reading about topic
2742parameters (@pxref{Topic Parameters}).
2743Additionally, you can set group parameters via the
2744@code{gnus-parameters} variable, see below.
2745
4009494e
GM
2746Here's an example group parameter list:
2747
2748@example
2749((to-address . "ding@@gnus.org")
2750 (auto-expire . t))
2751@end example
2752
2753We see that each element consists of a ``dotted pair''---the thing before
2754the dot is the key, while the thing after the dot is the value. All the
2755parameters have this form @emph{except} local variable specs, which are
2756not dotted pairs, but proper lists.
2757
2758Some parameters have correspondent customizable variables, each of which
2759is an alist of regexps and values.
2760
2761The following group parameters can be used:
2762
2763@table @code
2764@item to-address
2765@cindex to-address
2766Address used by when doing followups and new posts.
2767
2768@example
2769(to-address . "some@@where.com")
2770@end example
2771
2772This is primarily useful in mail groups that represent closed mailing
2773lists---mailing lists where it's expected that everybody that writes to
2774the mailing list is subscribed to it. Since using this parameter
2775ensures that the mail only goes to the mailing list itself, it means
2776that members won't receive two copies of your followups.
2777
2778Using @code{to-address} will actually work whether the group is foreign
2779or not. Let's say there's a group on the server that is called
2780@samp{fa.4ad-l}. This is a real newsgroup, but the server has gotten
2781the articles from a mail-to-news gateway. Posting directly to this
2782group is therefore impossible---you have to send mail to the mailing
2783list address instead.
2784
2785See also @code{gnus-parameter-to-address-alist}.
2786
2787@item to-list
2788@cindex to-list
2789Address used when doing @kbd{a} in that group.
2790
2791@example
2792(to-list . "some@@where.com")
2793@end example
2794
2795It is totally ignored
2796when doing a followup---except that if it is present in a news group,
2797you'll get mail group semantics when doing @kbd{f}.
2798
2799If you do an @kbd{a} command in a mail group and you have neither a
2800@code{to-list} group parameter nor a @code{to-address} group parameter,
2801then a @code{to-list} group parameter will be added automatically upon
2802sending the message if @code{gnus-add-to-list} is set to @code{t}.
2803@vindex gnus-add-to-list
2804
2805@findex gnus-mailing-list-mode
2806@cindex mail list groups
2807If this variable is set, @code{gnus-mailing-list-mode} is turned on when
2808entering summary buffer.
2809
2810See also @code{gnus-parameter-to-list-alist}.
2811
2812@anchor{subscribed}
2813@item subscribed
2814@cindex subscribed
2815@cindex Mail-Followup-To
2816@findex gnus-find-subscribed-addresses
2817If this parameter is set to @code{t}, Gnus will consider the
2818to-address and to-list parameters for this group as addresses of
2819mailing lists you are subscribed to. Giving Gnus this information is
2820(only) a first step in getting it to generate correct Mail-Followup-To
2821headers for your posts to these lists. The second step is to put the
2822following in your @file{.gnus.el}
2823
2824@lisp
2825(setq message-subscribed-address-functions
2826 '(gnus-find-subscribed-addresses))
2827@end lisp
2828
2829@xref{Mailing Lists, ,Mailing Lists, message, The Message Manual}, for
2830a complete treatment of available MFT support.
2831
2832@item visible
2833@cindex visible
2834If the group parameter list has the element @code{(visible . t)},
2835that group will always be visible in the Group buffer, regardless
2836of whether it has any unread articles.
2837
2838This parameter cannot be set via @code{gnus-parameters}. See
2839@code{gnus-permanently-visible-groups} as an alternative.
2840
2841@item broken-reply-to
2842@cindex broken-reply-to
2843Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
2844headers in this group are to be ignored, and for the header to be hidden
2845if @code{reply-to} is part of @code{gnus-boring-article-headers}. This
2846can be useful if you're reading a mailing list group where the listserv
2847has inserted @code{Reply-To} headers that point back to the listserv
2848itself. That is broken behavior. So there!
2849
2850@item to-group
2851@cindex to-group
2852Elements like @code{(to-group . "some.group.name")} means that all
2853posts in that group will be sent to @code{some.group.name}.
2854
2855@item newsgroup
2856@cindex newsgroup
2857If you have @code{(newsgroup . t)} in the group parameter list, Gnus
2858will treat all responses as if they were responses to news articles.
2859This can be useful if you have a mail group that's really a mirror of a
2860news group.
2861
2862@item gcc-self
2863@cindex gcc-self
2864If @code{(gcc-self . t)} is present in the group parameter list, newly
2865composed messages will be @code{Gcc}'d to the current group. If
2866@code{(gcc-self . none)} is present, no @code{Gcc:} header will be
2867generated, if @code{(gcc-self . "string")} is present, this string will
2868be inserted literally as a @code{gcc} header. This parameter takes
2869precedence over any default @code{Gcc} rules as described later
2870(@pxref{Archived Messages}).
2871
2872@strong{Caveat}: Adding @code{(gcc-self . t)} to the parameter list of
2873@code{nntp} groups (or the like) isn't valid. An @code{nntp} server
2874doesn't accept articles.
2875
2876@item auto-expire
2877@cindex auto-expire
2878@cindex expiring mail
2879If the group parameter has an element that looks like @code{(auto-expire
2880. t)}, all articles read will be marked as expirable. For an
2881alternative approach, @pxref{Expiring Mail}.
2882
2883See also @code{gnus-auto-expirable-newsgroups}.
2884
2885@item total-expire
2886@cindex total-expire
2887@cindex expiring mail
2888If the group parameter has an element that looks like
2889@code{(total-expire . t)}, all read articles will be put through the
2890expiry process, even if they are not marked as expirable. Use with
2891caution. Unread, ticked and dormant articles are not eligible for
2892expiry.
2893
2894See also @code{gnus-total-expirable-newsgroups}.
2895
2896@item expiry-wait
2897@cindex expiry-wait
2898@vindex nnmail-expiry-wait-function
2899If the group parameter has an element that looks like
2900@code{(expiry-wait . 10)}, this value will override any
2901@code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function}
2902(@pxref{Expiring Mail}) when expiring expirable messages. The value
2903can either be a number of days (not necessarily an integer) or the
2904symbols @code{never} or @code{immediate}.
2905
2906@item expiry-target
2907@cindex expiry-target
2908Where expired messages end up. This parameter overrides
2909@code{nnmail-expiry-target}.
2910
2911@item score-file
2912@cindex score file group parameter
2913Elements that look like @code{(score-file . "file")} will make
2914@file{file} into the current score file for the group in question. All
2915interactive score entries will be put into this file.
2916
2917@item adapt-file
2918@cindex adapt file group parameter
2919Elements that look like @code{(adapt-file . "file")} will make
2920@file{file} into the current adaptive file for the group in question.
2921All adaptive score entries will be put into this file.
2922
2923@item admin-address
2924@cindex admin-address
2925When unsubscribing from a mailing list you should never send the
2926unsubscription notice to the mailing list itself. Instead, you'd send
2927messages to the administrative address. This parameter allows you to
2928put the admin address somewhere convenient.
2929
2930@item display
2931@cindex display
2932Elements that look like @code{(display . MODE)} say which articles to
2933display on entering the group. Valid values are:
2934
2935@table @code
2936@item all
2937Display all articles, both read and unread.
2938
2939@item an integer
2940Display the last @var{integer} articles in the group. This is the same as
2941entering the group with @kbd{C-u @var{integer}}.
2942
2943@item default
2944Display the default visible articles, which normally includes unread and
2945ticked articles.
2946
2947@item an array
2948Display articles that satisfy a predicate.
2949
2950Here are some examples:
2951
2952@table @code
2953@item [unread]
2954Display only unread articles.
2955
2956@item [not expire]
2957Display everything except expirable articles.
2958
2959@item [and (not reply) (not expire)]
2960Display everything except expirable and articles you've already
2961responded to.
2962@end table
2963
2964The available operators are @code{not}, @code{and} and @code{or}.
2965Predicates include @code{tick}, @code{unsend}, @code{undownload},
2966@code{unread}, @code{dormant}, @code{expire}, @code{reply},
2967@code{killed}, @code{bookmark}, @code{score}, @code{save},
2968@code{cache}, @code{forward}, @code{unseen} and @code{recent}.
2969
2970@end table
2971
2972The @code{display} parameter works by limiting the summary buffer to
2973the subset specified. You can pop the limit by using the @kbd{/ w}
2974command (@pxref{Limiting}).
2975
2976@item comment
2977@cindex comment
2978Elements that look like @code{(comment . "This is a comment")} are
2979arbitrary comments on the group. You can display comments in the
2980group line (@pxref{Group Line Specification}).
2981
2982@item charset
2983@cindex charset
2984Elements that look like @code{(charset . iso-8859-1)} will make
2985@code{iso-8859-1} the default charset; that is, the charset that will be
2986used for all articles that do not specify a charset.
2987
2988See also @code{gnus-group-charset-alist}.
2989
2990@item ignored-charsets
2991@cindex ignored-charset
2992Elements that look like @code{(ignored-charsets x-unknown iso-8859-1)}
2993will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
2994default charset will be used for decoding articles.
2995
2996See also @code{gnus-group-ignored-charsets-alist}.
2997
2998@item posting-style
2999@cindex posting-style
3000You can store additional posting style information for this group
3001here (@pxref{Posting Styles}). The format is that of an entry in the
3002@code{gnus-posting-styles} alist, except that there's no regexp matching
3003the group name (of course). Style elements in this group parameter will
3004take precedence over the ones found in @code{gnus-posting-styles}.
3005
3006For instance, if you want a funky name and signature in this group only,
3007instead of hacking @code{gnus-posting-styles}, you could put something
3008like this in the group parameters:
3009
3010@example
3011(posting-style
3012 (name "Funky Name")
3013 ("X-My-Header" "Funky Value")
3014 (signature "Funky Signature"))
3015@end example
3016
01c52d31
MB
3017If you're using topics to organize your group buffer
3018(@pxref{Group Topics}), note that posting styles can also be set in
3019the topics parameters. Posting styles in topic parameters apply to all
3020groups in this topic. More precisely, the posting-style settings for a
3021group result from the hierarchical merging of all posting-style
3022entries in the parameters of this group and all the topics it belongs
3023to.
3024
3025
4009494e
GM
3026@item post-method
3027@cindex post-method
3028If it is set, the value is used as the method for posting message
3029instead of @code{gnus-post-method}.
3030
a1da1e37
MB
3031@item mail-source
3032@cindex mail-source
3033If it is set, and the setting of @code{mail-sources} includes a
3034@code{group} mail source (@pxref{Mail Sources}), the value is a
3035mail source for this group.
3036
4009494e
GM
3037@item banner
3038@cindex banner
3039An item like @code{(banner . @var{regexp})} causes any part of an article
3040that matches the regular expression @var{regexp} to be stripped. Instead of
3041@var{regexp}, you can also use the symbol @code{signature} which strips the
3042last signature or any of the elements of the alist
3043@code{gnus-article-banner-alist}.
3044
3045@item sieve
3046@cindex sieve
3047This parameter contains a Sieve test that should match incoming mail
3048that should be placed in this group. From this group parameter, a
3049Sieve @samp{IF} control structure is generated, having the test as the
3050condition and @samp{fileinto "group.name";} as the body.
3051
3052For example, if the @samp{INBOX.list.sieve} group has the @code{(sieve
3053address "sender" "sieve-admin@@extundo.com")} group parameter, when
3054translating the group parameter into a Sieve script (@pxref{Sieve
3055Commands}) the following Sieve code is generated:
3056
3057@example
01c52d31
MB
3058if address "sender" "sieve-admin@@extundo.com" @{
3059 fileinto "INBOX.list.sieve";
3060@}
3061@end example
3062
3063To generate tests for multiple email-addresses use a group parameter
3064like @code{(sieve address "sender" ("name@@one.org" else@@two.org"))}.
3065When generating a sieve script (@pxref{Sieve Commands}) Sieve code
3066like the following is generated:
3067
3068@example
3069if address "sender" ["name@@one.org", "else@@two.org"] @{
3070 fileinto "INBOX.list.sieve";
4009494e
GM
3071@}
3072@end example
3073
01c52d31
MB
3074See @pxref{Sieve Commands} for commands and variables that might be of
3075interest in relation to the sieve parameter.
3076
4009494e
GM
3077The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve,
3078Top, sieve, Emacs Sieve}.
3079
3080@item (agent parameters)
88dbda51
JB
3081If the agent has been enabled, you can set any of its parameters to
3082control the behavior of the agent in individual groups. See Agent
4009494e
GM
3083Parameters in @ref{Category Syntax}. Most users will choose to set
3084agent parameters in either an agent category or group topic to
3085minimize the configuration effort.
3086
3087@item (@var{variable} @var{form})
3088You can use the group parameters to set variables local to the group you
3089are entering. If you want to turn threading off in @samp{news.answers},
3090you could put @code{(gnus-show-threads nil)} in the group parameters of
3091that group. @code{gnus-show-threads} will be made into a local variable
3092in the summary buffer you enter, and the form @code{nil} will be
3093@code{eval}ed there.
3094
e3e955fe
MB
3095Note that this feature sets the variable locally to the summary buffer
3096if and only if @var{variable} has been bound as a variable. Otherwise,
3097only evaluating the form will take place. So, you may want to bind the
3098variable in advance using @code{defvar} or other if the result of the
3099form needs to be set to it.
3100
4009494e
GM
3101But some variables are evaluated in the article buffer, or in the
3102message buffer (of a reply or followup or otherwise newly created
3103message). As a workaround, it might help to add the variable in
3104question to @code{gnus-newsgroup-variables}. @xref{Various Summary
3105Stuff}. So if you want to set @code{message-from-style} via the group
3106parameters, then you may need the following statement elsewhere in your
e6d2d263 3107@file{~/.gnus.el} file:
4009494e
GM
3108
3109@lisp
3110(add-to-list 'gnus-newsgroup-variables 'message-from-style)
3111@end lisp
3112
3113@vindex gnus-list-identifiers
3114A use for this feature is to remove a mailing list identifier tag in
3115the subject fields of articles. E.g. if the news group
3116
3117@example
3118nntp+news.gnus.org:gmane.text.docbook.apps
3119@end example
3120
3121has the tag @samp{DOC-BOOK-APPS:} in the subject of all articles, this
3122tag can be removed from the article subjects in the summary buffer for
3123the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")}
3124into the group parameters for the group.
3125
3126This can also be used as a group-specific hook function. If you want to
3127hear a beep when you enter a group, you could put something like
e3e955fe
MB
3128@code{(dummy-variable (ding))} in the parameters of that group. If
3129@code{dummy-variable} has been bound (see above), it will be set to the
3130(meaningless) result of the @code{(ding)} form.
4009494e
GM
3131
3132Alternatively, since the VARIABLE becomes local to the group, this
3133pattern can be used to temporarily change a hook. For example, if the
3134following is added to a group parameter
3135
3136@lisp
3137(gnus-summary-prepared-hook
3138 '(lambda nil (local-set-key "d" (local-key-binding "n"))))
3139@end lisp
3140
3141when the group is entered, the 'd' key will not mark the article as
3142expired.
3143
3144@end table
3145
4009494e
GM
3146@vindex gnus-parameters
3147Group parameters can be set via the @code{gnus-parameters} variable too.
3148But some variables, such as @code{visible}, have no effect (For this
3149case see @code{gnus-permanently-visible-groups} as an alternative.).
3150For example:
3151
3152@lisp
3153(setq gnus-parameters
3154 '(("mail\\..*"
3155 (gnus-show-threads nil)
3156 (gnus-use-scoring nil)
3157 (gnus-summary-line-format
3158 "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
3159 (gcc-self . t)
3160 (display . all))
3161
3162 ("^nnimap:\\(foo.bar\\)$"
3163 (to-group . "\\1"))
3164
3165 ("mail\\.me"
3166 (gnus-use-scoring t))
3167
3168 ("list\\..*"
3169 (total-expire . t)
3170 (broken-reply-to . t))))
3171@end lisp
3172
3173String value of parameters will be subjected to regexp substitution, as
3174the @code{to-group} example shows.
3175
3176@vindex gnus-parameters-case-fold-search
3177By default, whether comparing the group name and one of those regexps
3178specified in @code{gnus-parameters} is done in a case-sensitive manner
3179or a case-insensitive manner depends on the value of
3180@code{case-fold-search} at the time when the comparison is done. The
3181value of @code{case-fold-search} is typically @code{t}; it means, for
3182example, the element @code{("INBOX\\.FOO" (total-expire . t))} might be
3183applied to both the @samp{INBOX.FOO} group and the @samp{INBOX.foo}
3184group. If you want to make those regexps always case-sensitive, set the
3185value of the @code{gnus-parameters-case-fold-search} variable to
3186@code{nil}. Otherwise, set it to @code{t} if you want to compare them
3187always in a case-insensitive manner.
3188
01c52d31
MB
3189You can define different sorting to different groups via
3190@code{gnus-parameters}. Here is an example to sort an @acronym{NNTP}
3191group by reverse date to see the latest news at the top and an
3192@acronym{RSS} group by subject. In this example, the first group is the
3193Debian daily news group @code{gmane.linux.debian.user.news} from
3194news.gmane.org. The @acronym{RSS} group corresponds to the Debian
3195weekly news RSS feed
3196@url{http://packages.debian.org/unstable/newpkg_main.en.rdf},
3197@xref{RSS}.
3198
3199@lisp
3200(setq
3201 gnus-parameters
3202 '(("nntp.*gmane\\.debian\\.user\\.news"
3203 (gnus-show-threads nil)
3204 (gnus-article-sort-functions '((not gnus-article-sort-by-date)))
3205 (gnus-use-adaptive-scoring nil)
3206 (gnus-use-scoring nil))
3207 ("nnrss.*debian"
3208 (gnus-show-threads nil)
3209 (gnus-article-sort-functions 'gnus-article-sort-by-subject)
3210 (gnus-use-adaptive-scoring nil)
3211 (gnus-use-scoring t)
3212 (gnus-score-find-score-files-function 'gnus-score-find-single)
3213 (gnus-summary-line-format "%U%R%z%d %I%(%[ %s %]%)\n"))))
3214@end lisp
3215
4009494e
GM
3216
3217@node Listing Groups
3218@section Listing Groups
3219@cindex group listing
3220
3221These commands all list various slices of the groups available.
3222
3223@table @kbd
3224
3225@item l
3226@itemx A s
3227@kindex A s (Group)
3228@kindex l (Group)
3229@findex gnus-group-list-groups
3230List all groups that have unread articles
3231(@code{gnus-group-list-groups}). If the numeric prefix is used, this
3232command will list only groups of level ARG and lower. By default, it
3233only lists groups of level five (i.e.,
3234@code{gnus-group-default-list-level}) or lower (i.e., just subscribed
3235groups).
3236
3237@item L
3238@itemx A u
3239@kindex A u (Group)
3240@kindex L (Group)
3241@findex gnus-group-list-all-groups
3242List all groups, whether they have unread articles or not
3243(@code{gnus-group-list-all-groups}). If the numeric prefix is used,
3244this command will list only groups of level ARG and lower. By default,
3245it lists groups of level seven or lower (i.e., just subscribed and
3246unsubscribed groups).
3247
3248@item A l
3249@kindex A l (Group)
3250@findex gnus-group-list-level
3251List all unread groups on a specific level
3252(@code{gnus-group-list-level}). If given a prefix, also list the groups
3253with no unread articles.
3254
3255@item A k
3256@kindex A k (Group)
3257@findex gnus-group-list-killed
3258List all killed groups (@code{gnus-group-list-killed}). If given a
3259prefix argument, really list all groups that are available, but aren't
3260currently (un)subscribed. This could entail reading the active file
3261from the server.
3262
3263@item A z
3264@kindex A z (Group)
3265@findex gnus-group-list-zombies
3266List all zombie groups (@code{gnus-group-list-zombies}).
3267
3268@item A m
3269@kindex A m (Group)
3270@findex gnus-group-list-matching
3271List all unread, subscribed groups with names that match a regexp
3272(@code{gnus-group-list-matching}).
3273
3274@item A M
3275@kindex A M (Group)
3276@findex gnus-group-list-all-matching
3277List groups that match a regexp (@code{gnus-group-list-all-matching}).
3278
3279@item A A
3280@kindex A A (Group)
3281@findex gnus-group-list-active
3282List absolutely all groups in the active file(s) of the
3283server(s) you are connected to (@code{gnus-group-list-active}). This
3284might very well take quite a while. It might actually be a better idea
3285to do a @kbd{A M} to list all matching, and just give @samp{.} as the
3286thing to match on. Also note that this command may list groups that
3287don't exist (yet)---these will be listed as if they were killed groups.
3288Take the output with some grains of salt.
3289
3290@item A a
3291@kindex A a (Group)
3292@findex gnus-group-apropos
3293List all groups that have names that match a regexp
3294(@code{gnus-group-apropos}).
3295
3296@item A d
3297@kindex A d (Group)
3298@findex gnus-group-description-apropos
3299List all groups that have names or descriptions that match a regexp
3300(@code{gnus-group-description-apropos}).
3301
3302@item A c
3303@kindex A c (Group)
3304@findex gnus-group-list-cached
3305List all groups with cached articles (@code{gnus-group-list-cached}).
3306
3307@item A ?
3308@kindex A ? (Group)
3309@findex gnus-group-list-dormant
3310List all groups with dormant articles (@code{gnus-group-list-dormant}).
3311
3312@item A /
3313@kindex A / (Group)
3314@findex gnus-group-list-limit
3315List groups limited within the current selection
3316(@code{gnus-group-list-limit}).
3317
3318@item A f
3319@kindex A f (Group)
3320@findex gnus-group-list-flush
3321Flush groups from the current selection (@code{gnus-group-list-flush}).
3322
3323@item A p
3324@kindex A p (Group)
3325@findex gnus-group-list-plus
3326List groups plus the current selection (@code{gnus-group-list-plus}).
3327
3328@end table
3329
3330@vindex gnus-permanently-visible-groups
3331@cindex visible group parameter
3332Groups that match the @code{gnus-permanently-visible-groups} regexp will
3333always be shown, whether they have unread articles or not. You can also
3334add the @code{visible} element to the group parameters in question to
3335get the same effect.
3336
3337@vindex gnus-list-groups-with-ticked-articles
3338Groups that have just ticked articles in it are normally listed in the
3339group buffer. If @code{gnus-list-groups-with-ticked-articles} is
3340@code{nil}, these groups will be treated just like totally empty
3341groups. It is @code{t} by default.
3342
3343
3344@node Sorting Groups
3345@section Sorting Groups
3346@cindex sorting groups
3347
3348@kindex C-c C-s (Group)
3349@findex gnus-group-sort-groups
3350@vindex gnus-group-sort-function
3351The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
3352group buffer according to the function(s) given by the
3353@code{gnus-group-sort-function} variable. Available sorting functions
3354include:
3355
3356@table @code
3357
3358@item gnus-group-sort-by-alphabet
3359@findex gnus-group-sort-by-alphabet
3360Sort the group names alphabetically. This is the default.
3361
3362@item gnus-group-sort-by-real-name
3363@findex gnus-group-sort-by-real-name
3364Sort the group alphabetically on the real (unprefixed) group names.
3365
3366@item gnus-group-sort-by-level
3367@findex gnus-group-sort-by-level
3368Sort by group level.
3369
3370@item gnus-group-sort-by-score
3371@findex gnus-group-sort-by-score
3372Sort by group score. @xref{Group Score}.
3373
3374@item gnus-group-sort-by-rank
3375@findex gnus-group-sort-by-rank
3376Sort by group score and then the group level. The level and the score
3377are, when taken together, the group's @dfn{rank}. @xref{Group Score}.
3378
3379@item gnus-group-sort-by-unread
3380@findex gnus-group-sort-by-unread
3381Sort by number of unread articles.
3382
3383@item gnus-group-sort-by-method
3384@findex gnus-group-sort-by-method
3385Sort alphabetically on the select method.
3386
3387@item gnus-group-sort-by-server
3388@findex gnus-group-sort-by-server
3389Sort alphabetically on the Gnus server name.
3390
3391
3392@end table
3393
3394@code{gnus-group-sort-function} can also be a list of sorting
3395functions. In that case, the most significant sort key function must be
3396the last one.
3397
3398
3399There are also a number of commands for sorting directly according to
3400some sorting criteria:
3401
3402@table @kbd
3403@item G S a
3404@kindex G S a (Group)
3405@findex gnus-group-sort-groups-by-alphabet
3406Sort the group buffer alphabetically by group name
3407(@code{gnus-group-sort-groups-by-alphabet}).
3408
3409@item G S u
3410@kindex G S u (Group)
3411@findex gnus-group-sort-groups-by-unread
3412Sort the group buffer by the number of unread articles
3413(@code{gnus-group-sort-groups-by-unread}).
3414
3415@item G S l
3416@kindex G S l (Group)
3417@findex gnus-group-sort-groups-by-level
3418Sort the group buffer by group level
3419(@code{gnus-group-sort-groups-by-level}).
3420
3421@item G S v
3422@kindex G S v (Group)
3423@findex gnus-group-sort-groups-by-score
3424Sort the group buffer by group score
3425(@code{gnus-group-sort-groups-by-score}). @xref{Group Score}.
3426
3427@item G S r
3428@kindex G S r (Group)
3429@findex gnus-group-sort-groups-by-rank
3430Sort the group buffer by group rank
3431(@code{gnus-group-sort-groups-by-rank}). @xref{Group Score}.
3432
3433@item G S m
3434@kindex G S m (Group)
3435@findex gnus-group-sort-groups-by-method
3436Sort the group buffer alphabetically by back end name@*
3437(@code{gnus-group-sort-groups-by-method}).
3438
3439@item G S n
3440@kindex G S n (Group)
3441@findex gnus-group-sort-groups-by-real-name
3442Sort the group buffer alphabetically by real (unprefixed) group name
3443(@code{gnus-group-sort-groups-by-real-name}).
3444
3445@end table
3446
3447All the commands below obey the process/prefix convention
3448(@pxref{Process/Prefix}).
3449
3450When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
3451commands will sort in reverse order.
3452
3453You can also sort a subset of the groups:
3454
3455@table @kbd
3456@item G P a
3457@kindex G P a (Group)
3458@findex gnus-group-sort-selected-groups-by-alphabet
3459Sort the groups alphabetically by group name
3460(@code{gnus-group-sort-selected-groups-by-alphabet}).
3461
3462@item G P u
3463@kindex G P u (Group)
3464@findex gnus-group-sort-selected-groups-by-unread
3465Sort the groups by the number of unread articles
3466(@code{gnus-group-sort-selected-groups-by-unread}).
3467
3468@item G P l
3469@kindex G P l (Group)
3470@findex gnus-group-sort-selected-groups-by-level
3471Sort the groups by group level
3472(@code{gnus-group-sort-selected-groups-by-level}).
3473
3474@item G P v
3475@kindex G P v (Group)
3476@findex gnus-group-sort-selected-groups-by-score
3477Sort the groups by group score
3478(@code{gnus-group-sort-selected-groups-by-score}). @xref{Group Score}.
3479
3480@item G P r
3481@kindex G P r (Group)
3482@findex gnus-group-sort-selected-groups-by-rank
3483Sort the groups by group rank
3484(@code{gnus-group-sort-selected-groups-by-rank}). @xref{Group Score}.
3485
3486@item G P m
3487@kindex G P m (Group)
3488@findex gnus-group-sort-selected-groups-by-method
3489Sort the groups alphabetically by back end name@*
3490(@code{gnus-group-sort-selected-groups-by-method}).
3491
3492@item G P n
3493@kindex G P n (Group)
3494@findex gnus-group-sort-selected-groups-by-real-name
3495Sort the groups alphabetically by real (unprefixed) group name
3496(@code{gnus-group-sort-selected-groups-by-real-name}).
3497
3498@item G P s
3499@kindex G P s (Group)
3500@findex gnus-group-sort-selected-groups
3501Sort the groups according to @code{gnus-group-sort-function}.
3502
3503@end table
3504
3505And finally, note that you can use @kbd{C-k} and @kbd{C-y} to manually
3506move groups around.
3507
3508
3509@node Group Maintenance
3510@section Group Maintenance
3511@cindex bogus groups
3512
3513@table @kbd
3514@item b
3515@kindex b (Group)
3516@findex gnus-group-check-bogus-groups
3517Find bogus groups and delete them
3518(@code{gnus-group-check-bogus-groups}).
3519
3520@item F
3521@kindex F (Group)
3522@findex gnus-group-find-new-groups
3523Find new groups and process them (@code{gnus-group-find-new-groups}).
3524With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
3525for new groups. With 2 @kbd{C-u}'s, use most complete method possible
3526to query the server for new groups, and subscribe the new groups as
3527zombies.
3528
3529@item C-c C-x
3530@kindex C-c C-x (Group)
3531@findex gnus-group-expire-articles
3532@cindex expiring mail
3533Run all expirable articles in the current group through the expiry
3534process (if any) (@code{gnus-group-expire-articles}). That is, delete
3535all expirable articles in the group that have been around for a while.
3536(@pxref{Expiring Mail}).
3537
3538@item C-c C-M-x
3539@kindex C-c C-M-x (Group)
3540@findex gnus-group-expire-all-groups
3541@cindex expiring mail
3542Run all expirable articles in all groups through the expiry process
3543(@code{gnus-group-expire-all-groups}).
3544
3545@end table
3546
3547
3548@node Browse Foreign Server
3549@section Browse Foreign Server
3550@cindex foreign servers
3551@cindex browsing servers
3552
3553@table @kbd
3554@item B
3555@kindex B (Group)
3556@findex gnus-group-browse-foreign-server
3557You will be queried for a select method and a server name. Gnus will
3558then attempt to contact this server and let you browse the groups there
3559(@code{gnus-group-browse-foreign-server}).
3560@end table
3561
3562@findex gnus-browse-mode
3563A new buffer with a list of available groups will appear. This buffer
3564will use the @code{gnus-browse-mode}. This buffer looks a bit (well,
3565a lot) like a normal group buffer.
3566
3567Here's a list of keystrokes available in the browse mode:
3568
3569@table @kbd
3570@item n
3571@kindex n (Browse)
3572@findex gnus-group-next-group
3573Go to the next group (@code{gnus-group-next-group}).
3574
3575@item p
3576@kindex p (Browse)
3577@findex gnus-group-prev-group
3578Go to the previous group (@code{gnus-group-prev-group}).
3579
3580@item SPACE
3581@kindex SPACE (Browse)
3582@findex gnus-browse-read-group
3583Enter the current group and display the first article
3584(@code{gnus-browse-read-group}).
3585
3586@item RET
3587@kindex RET (Browse)
3588@findex gnus-browse-select-group
3589Enter the current group (@code{gnus-browse-select-group}).
3590
3591@item u
3592@kindex u (Browse)
3593@findex gnus-browse-unsubscribe-current-group
8ccbef23 3594@vindex gnus-browse-subscribe-newsgroup-method
4009494e 3595Unsubscribe to the current group, or, as will be the case here,
8ccbef23
G
3596subscribe to it (@code{gnus-browse-unsubscribe-current-group}). You
3597can affect the way the new group is entered into the Group buffer
3598using the variable @code{gnus-browse-subscribe-newsgroup-method}. See
3599@pxref{Subscription Methods} for available options.
4009494e
GM
3600
3601@item l
3602@itemx q
3603@kindex q (Browse)
3604@kindex l (Browse)
3605@findex gnus-browse-exit
3606Exit browse mode (@code{gnus-browse-exit}).
3607
3608@item d
3609@kindex d (Browse)
3610@findex gnus-browse-describe-group
3611Describe the current group (@code{gnus-browse-describe-group}).
3612
3613@item ?
3614@kindex ? (Browse)
3615@findex gnus-browse-describe-briefly
3616Describe browse mode briefly (well, there's not much to describe, is
3617there) (@code{gnus-browse-describe-briefly}).
3618@end table
3619
3620
3621@node Exiting Gnus
3622@section Exiting Gnus
3623@cindex exiting Gnus
3624
3625Yes, Gnus is ex(c)iting.
3626
3627@table @kbd
3628@item z
3629@kindex z (Group)
3630@findex gnus-group-suspend
3631Suspend Gnus (@code{gnus-group-suspend}). This doesn't really exit Gnus,
3632but it kills all buffers except the Group buffer. I'm not sure why this
3633is a gain, but then who am I to judge?
3634
3635@item q
3636@kindex q (Group)
3637@findex gnus-group-exit
3638@c @icon{gnus-group-exit}
3639Quit Gnus (@code{gnus-group-exit}).
3640
3641@item Q
3642@kindex Q (Group)
3643@findex gnus-group-quit
3644Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
3645The dribble file will be saved, though (@pxref{Auto Save}).
3646@end table
3647
3648@vindex gnus-exit-gnus-hook
3649@vindex gnus-suspend-gnus-hook
3650@vindex gnus-after-exiting-gnus-hook
3651@code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3652@code{gnus-exit-gnus-hook} is called when you quit Gnus, while
3653@code{gnus-after-exiting-gnus-hook} is called as the final item when
3654exiting Gnus.
3655
3656Note:
3657
3658@quotation
3659Miss Lisa Cannifax, while sitting in English class, felt her feet go
3660numbly heavy and herself fall into a hazy trance as the boy sitting
3661behind her drew repeated lines with his pencil across the back of her
3662plastic chair.
3663@end quotation
3664
3665
3666@node Group Topics
3667@section Group Topics
3668@cindex topics
3669
3670If you read lots and lots of groups, it might be convenient to group
3671them hierarchically according to topics. You put your Emacs groups over
3672here, your sex groups over there, and the rest (what, two groups or so?)
3673you put in some misc section that you never bother with anyway. You can
3674even group the Emacs sex groups as a sub-topic to either the Emacs
3675groups or the sex groups---or both! Go wild!
3676
3677@iftex
3678@iflatex
3679\gnusfigure{Group Topics}{400}{
3680\put(75,50){\epsfig{figure=ps/group-topic,height=9cm}}
3681}
3682@end iflatex
3683@end iftex
3684
3685Here's an example:
3686
3687@example
3688Gnus
3689 Emacs -- I wuw it!
3690 3: comp.emacs
3691 2: alt.religion.emacs
3692 Naughty Emacs
3693 452: alt.sex.emacs
3694 0: comp.talk.emacs.recovery
3695 Misc
3696 8: comp.binaries.fractals
3697 13: comp.sources.unix
3698@end example
3699
3700@findex gnus-topic-mode
3701@kindex t (Group)
3702To get this @emph{fab} functionality you simply turn on (ooh!) the
3703@code{gnus-topic} minor mode---type @kbd{t} in the group buffer. (This
3704is a toggling command.)
3705
3706Go ahead, just try it. I'll still be here when you get back. La de
3707dum@dots{} Nice tune, that@dots{} la la la@dots{} What, you're back?
3708Yes, and now press @kbd{l}. There. All your groups are now listed
3709under @samp{misc}. Doesn't that make you feel all warm and fuzzy?
3710Hot and bothered?
3711
3712If you want this permanently enabled, you should add that minor mode to
3713the hook for the group mode. Put the following line in your
3714@file{~/.gnus.el} file:
3715
3716@lisp
3717(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3718@end lisp
3719
3720@menu
3721* Topic Commands:: Interactive E-Z commands.
3722* Topic Variables:: How to customize the topics the Lisp Way.
3723* Topic Sorting:: Sorting each topic individually.
3724* Topic Topology:: A map of the world.
3725* Topic Parameters:: Parameters that apply to all groups in a topic.
3726@end menu
3727
3728
3729@node Topic Commands
3730@subsection Topic Commands
3731@cindex topic commands
3732
3733When the topic minor mode is turned on, a new @kbd{T} submap will be
3734available. In addition, a few of the standard keys change their
3735definitions slightly.
3736
3737In general, the following kinds of operations are possible on topics.
3738First of all, you want to create topics. Secondly, you want to put
3739groups in topics and to move them around until you have an order you
3740like. The third kind of operation is to show/hide parts of the whole
3741shebang. You might want to hide a topic including its subtopics and
3742groups, to get a better overview of the other groups.
3743
3744Here is a list of the basic keys that you might need to set up topics
3745the way you like.
3746
3747@table @kbd
3748
3749@item T n
3750@kindex T n (Topic)
3751@findex gnus-topic-create-topic
3752Prompt for a new topic name and create it
3753(@code{gnus-topic-create-topic}).
3754
3755@item T TAB
3756@itemx TAB
3757@kindex T TAB (Topic)
3758@kindex TAB (Topic)
3759@findex gnus-topic-indent
3760``Indent'' the current topic so that it becomes a sub-topic of the
3761previous topic (@code{gnus-topic-indent}). If given a prefix,
3762``un-indent'' the topic instead.
3763
3764@item M-TAB
3765@kindex M-TAB (Topic)
3766@findex gnus-topic-unindent
3767``Un-indent'' the current topic so that it becomes a sub-topic of the
3768parent of its current parent (@code{gnus-topic-unindent}).
3769
3770@end table
3771
3772The following two keys can be used to move groups and topics around.
3773They work like the well-known cut and paste. @kbd{C-k} is like cut and
3774@kbd{C-y} is like paste. Of course, this being Emacs, we use the terms
3775kill and yank rather than cut and paste.
3776
3777@table @kbd
3778
3779@item C-k
3780@kindex C-k (Topic)
3781@findex gnus-topic-kill-group
3782Kill a group or topic (@code{gnus-topic-kill-group}). All groups in the
3783topic will be removed along with the topic.
3784
3785@item C-y
3786@kindex C-y (Topic)
3787@findex gnus-topic-yank-group
3788Yank the previously killed group or topic
3789(@code{gnus-topic-yank-group}). Note that all topics will be yanked
3790before all groups.
3791
3792So, to move a topic to the beginning of the list of topics, just hit
3793@kbd{C-k} on it. This is like the ``cut'' part of cut and paste. Then,
3794move the cursor to the beginning of the buffer (just below the ``Gnus''
3795topic) and hit @kbd{C-y}. This is like the ``paste'' part of cut and
3796paste. Like I said -- E-Z.
3797
3798You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics. So
3799you can move topics around as well as groups.
3800
3801@end table
3802
3803After setting up the topics the way you like them, you might wish to
3804hide a topic, or to show it again. That's why we have the following
3805key.
3806
3807@table @kbd
3808
3809@item RET
3810@kindex RET (Topic)
3811@findex gnus-topic-select-group
3812@itemx SPACE
3813Either select a group or fold a topic (@code{gnus-topic-select-group}).
3814When you perform this command on a group, you'll enter the group, as
3815usual. When done on a topic line, the topic will be folded (if it was
3816visible) or unfolded (if it was folded already). So it's basically a
3817toggling command on topics. In addition, if you give a numerical
3818prefix, group on that level (and lower) will be displayed.
3819
3820@end table
3821
3822Now for a list of other commands, in no particular order.
3823
3824@table @kbd
3825
3826@item T m
3827@kindex T m (Topic)
3828@findex gnus-topic-move-group
3829Move the current group to some other topic
3830(@code{gnus-topic-move-group}). This command uses the process/prefix
3831convention (@pxref{Process/Prefix}).
3832
3833@item T j
3834@kindex T j (Topic)
3835@findex gnus-topic-jump-to-topic
3836Go to a topic (@code{gnus-topic-jump-to-topic}).
3837
3838@item T c
3839@kindex T c (Topic)
3840@findex gnus-topic-copy-group
3841Copy the current group to some other topic
3842(@code{gnus-topic-copy-group}). This command uses the process/prefix
3843convention (@pxref{Process/Prefix}).
3844
3845@item T h
3846@kindex T h (Topic)
3847@findex gnus-topic-hide-topic
3848Hide the current topic (@code{gnus-topic-hide-topic}). If given
3849a prefix, hide the topic permanently.
3850
3851@item T s
3852@kindex T s (Topic)
3853@findex gnus-topic-show-topic
3854Show the current topic (@code{gnus-topic-show-topic}). If given
3855a prefix, show the topic permanently.
3856
3857@item T D
3858@kindex T D (Topic)
3859@findex gnus-topic-remove-group
3860Remove a group from the current topic (@code{gnus-topic-remove-group}).
3861This command is mainly useful if you have the same group in several
3862topics and wish to remove it from one of the topics. You may also
3863remove a group from all topics, but in that case, Gnus will add it to
3864the root topic the next time you start Gnus. In fact, all new groups
3865(which, naturally, don't belong to any topic) will show up in the root
3866topic.
3867
3868This command uses the process/prefix convention
3869(@pxref{Process/Prefix}).
3870
3871@item T M
3872@kindex T M (Topic)
3873@findex gnus-topic-move-matching
3874Move all groups that match some regular expression to a topic
3875(@code{gnus-topic-move-matching}).
3876
3877@item T C
3878@kindex T C (Topic)
3879@findex gnus-topic-copy-matching
3880Copy all groups that match some regular expression to a topic
3881(@code{gnus-topic-copy-matching}).
3882
3883@item T H
3884@kindex T H (Topic)
3885@findex gnus-topic-toggle-display-empty-topics
3886Toggle hiding empty topics
3887(@code{gnus-topic-toggle-display-empty-topics}).
3888
3889@item T #
3890@kindex T # (Topic)
3891@findex gnus-topic-mark-topic
3892Mark all groups in the current topic with the process mark
3893(@code{gnus-topic-mark-topic}). This command works recursively on
3894sub-topics unless given a prefix.
3895
3896@item T M-#
3897@kindex T M-# (Topic)
3898@findex gnus-topic-unmark-topic
3899Remove the process mark from all groups in the current topic
3900(@code{gnus-topic-unmark-topic}). This command works recursively on
3901sub-topics unless given a prefix.
3902
3903@item C-c C-x
3904@kindex C-c C-x (Topic)
3905@findex gnus-topic-expire-articles
3906@cindex expiring mail
3907Run all expirable articles in the current group or topic through the
3908expiry process (if any)
3909(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
3910
3911@item T r
3912@kindex T r (Topic)
3913@findex gnus-topic-rename
3914Rename a topic (@code{gnus-topic-rename}).
3915
3916@item T DEL
3917@kindex T DEL (Topic)
3918@findex gnus-topic-delete
3919Delete an empty topic (@code{gnus-topic-delete}).
3920
3921@item A T
3922@kindex A T (Topic)
3923@findex gnus-topic-list-active
3924List all groups that Gnus knows about in a topics-ified way
3925(@code{gnus-topic-list-active}).
3926
3927@item T M-n
3928@kindex T M-n (Topic)
3929@findex gnus-topic-goto-next-topic
3930Go to the next topic (@code{gnus-topic-goto-next-topic}).
3931
3932@item T M-p
3933@kindex T M-p (Topic)
3934@findex gnus-topic-goto-previous-topic
01c52d31 3935Go to the previous topic (@code{gnus-topic-goto-previous-topic}).
4009494e
GM
3936
3937@item G p
3938@kindex G p (Topic)
3939@findex gnus-topic-edit-parameters
3940@cindex group parameters
3941@cindex topic parameters
3942@cindex parameters
3943Edit the topic parameters (@code{gnus-topic-edit-parameters}).
3944@xref{Topic Parameters}.
3945
3946@end table
3947
3948
3949@node Topic Variables
3950@subsection Topic Variables
3951@cindex topic variables
3952
3953The previous section told you how to tell Gnus which topics to display.
3954This section explains how to tell Gnus what to display about each topic.
3955
3956@vindex gnus-topic-line-format
3957The topic lines themselves are created according to the
3958@code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
3959Valid elements are:
3960
3961@table @samp
3962@item i
3963Indentation.
3964@item n
3965Topic name.
3966@item v
3967Visibility.
3968@item l
3969Level.
3970@item g
3971Number of groups in the topic.
3972@item a
3973Number of unread articles in the topic.
3974@item A
3975Number of unread articles in the topic and all its subtopics.
3976@end table
3977
3978@vindex gnus-topic-indent-level
3979Each sub-topic (and the groups in the sub-topics) will be indented with
3980@code{gnus-topic-indent-level} times the topic level number of spaces.
3981The default is 2.
3982
3983@vindex gnus-topic-mode-hook
3984@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
3985
3986@vindex gnus-topic-display-empty-topics
3987The @code{gnus-topic-display-empty-topics} says whether to display even
3988topics that have no unread articles in them. The default is @code{t}.
3989
3990
3991@node Topic Sorting
3992@subsection Topic Sorting
3993@cindex topic sorting
3994
3995You can sort the groups in each topic individually with the following
3996commands:
3997
3998
3999@table @kbd
4000@item T S a
4001@kindex T S a (Topic)
4002@findex gnus-topic-sort-groups-by-alphabet
4003Sort the current topic alphabetically by group name
4004(@code{gnus-topic-sort-groups-by-alphabet}).
4005
4006@item T S u
4007@kindex T S u (Topic)
4008@findex gnus-topic-sort-groups-by-unread
4009Sort the current topic by the number of unread articles
4010(@code{gnus-topic-sort-groups-by-unread}).
4011
4012@item T S l
4013@kindex T S l (Topic)
4014@findex gnus-topic-sort-groups-by-level
4015Sort the current topic by group level
4016(@code{gnus-topic-sort-groups-by-level}).
4017
4018@item T S v
4019@kindex T S v (Topic)
4020@findex gnus-topic-sort-groups-by-score
4021Sort the current topic by group score
4022(@code{gnus-topic-sort-groups-by-score}). @xref{Group Score}.
4023
4024@item T S r
4025@kindex T S r (Topic)
4026@findex gnus-topic-sort-groups-by-rank
4027Sort the current topic by group rank
4028(@code{gnus-topic-sort-groups-by-rank}). @xref{Group Score}.
4029
4030@item T S m
4031@kindex T S m (Topic)
4032@findex gnus-topic-sort-groups-by-method
4033Sort the current topic alphabetically by back end name
4034(@code{gnus-topic-sort-groups-by-method}).
4035
4036@item T S e
4037@kindex T S e (Topic)
4038@findex gnus-topic-sort-groups-by-server
4039Sort the current topic alphabetically by server name
4040(@code{gnus-topic-sort-groups-by-server}).
4041
4042@item T S s
4043@kindex T S s (Topic)
4044@findex gnus-topic-sort-groups
4045Sort the current topic according to the function(s) given by the
4046@code{gnus-group-sort-function} variable
4047(@code{gnus-topic-sort-groups}).
4048
4049@end table
4050
4051When given a prefix argument, all these commands will sort in reverse
4052order. @xref{Sorting Groups}, for more information about group
4053sorting.
4054
4055
4056@node Topic Topology
4057@subsection Topic Topology
4058@cindex topic topology
4059@cindex topology
4060
4061So, let's have a look at an example group buffer:
4062
4063@example
4064@group
4065Gnus
4066 Emacs -- I wuw it!
4067 3: comp.emacs
4068 2: alt.religion.emacs
4069 Naughty Emacs
4070 452: alt.sex.emacs
4071 0: comp.talk.emacs.recovery
4072 Misc
4073 8: comp.binaries.fractals
4074 13: comp.sources.unix
4075@end group
4076@end example
4077
4078So, here we have one top-level topic (@samp{Gnus}), two topics under
4079that, and one sub-topic under one of the sub-topics. (There is always
4080just one (1) top-level topic). This topology can be expressed as
4081follows:
4082
4083@lisp
4084(("Gnus" visible)
4085 (("Emacs -- I wuw it!" visible)
4086 (("Naughty Emacs" visible)))
4087 (("Misc" visible)))
4088@end lisp
4089
4090@vindex gnus-topic-topology
4091This is in fact how the variable @code{gnus-topic-topology} would look
4092for the display above. That variable is saved in the @file{.newsrc.eld}
4093file, and shouldn't be messed with manually---unless you really want
4094to. Since this variable is read from the @file{.newsrc.eld} file,
4095setting it in any other startup files will have no effect.
4096
4097This topology shows what topics are sub-topics of what topics (right),
4098and which topics are visible. Two settings are currently
4099allowed---@code{visible} and @code{invisible}.
4100
4101
4102@node Topic Parameters
4103@subsection Topic Parameters
4104@cindex topic parameters
4105
4106All groups in a topic will inherit group parameters from the parent
4107(and ancestor) topic parameters. All valid group parameters are valid
4108topic parameters (@pxref{Group Parameters}). When the agent is
4109enabled, all agent parameters (See Agent Parameters in @ref{Category
4110Syntax}) are also valid topic parameters.
4111
4112In addition, the following parameters are only valid as topic
4113parameters:
4114
4115@table @code
4116@item subscribe
4117When subscribing new groups by topic (@pxref{Subscription Methods}), the
4118@code{subscribe} topic parameter says what groups go in what topic. Its
4119value should be a regexp to match the groups that should go in that
4120topic.
4121
4122@item subscribe-level
4123When subscribing new groups by topic (see the @code{subscribe} parameter),
4124the group will be subscribed with the level specified in the
4125@code{subscribe-level} instead of @code{gnus-level-default-subscribed}.
4126
4127@end table
4128
4129Group parameters (of course) override topic parameters, and topic
4130parameters in sub-topics override topic parameters in super-topics. You
4131know. Normal inheritance rules. (@dfn{Rules} is here a noun, not a
4132verb, although you may feel free to disagree with me here.)
4133
4134@example
4135@group
4136Gnus
4137 Emacs
4138 3: comp.emacs
4139 2: alt.religion.emacs
4140 452: alt.sex.emacs
4141 Relief
4142 452: alt.sex.emacs
4143 0: comp.talk.emacs.recovery
4144 Misc
4145 8: comp.binaries.fractals
4146 13: comp.sources.unix
4147 452: alt.sex.emacs
4148@end group
4149@end example
4150
4151The @samp{Emacs} topic has the topic parameter @code{(score-file
4152. "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
4153@code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
4154topic parameter @code{(score-file . "emacs.SCORE")}. In addition,
4155@* @samp{alt.religion.emacs} has the group parameter @code{(score-file
4156. "religion.SCORE")}.
4157
4158Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
4159will get the @file{relief.SCORE} home score file. If you enter the same
4160group in the @samp{Emacs} topic, you'll get the @file{emacs.SCORE} home
4161score file. If you enter the group @samp{alt.religion.emacs}, you'll
4162get the @file{religion.SCORE} home score file.
4163
4164This seems rather simple and self-evident, doesn't it? Well, yes. But
4165there are some problems, especially with the @code{total-expiry}
4166parameter. Say you have a mail group in two topics; one with
4167@code{total-expiry} and one without. What happens when you do @kbd{M-x
4168gnus-expire-all-expirable-groups}? Gnus has no way of telling which one
4169of these topics you mean to expire articles from, so anything may
4170happen. In fact, I hereby declare that it is @dfn{undefined} what
4171happens. You just have to be careful if you do stuff like that.
4172
4173
01c52d31
MB
4174@node Non-ASCII Group Names
4175@section Accessing groups of non-English names
4176@cindex non-ascii group names
4177
4178There are some news servers that provide groups of which the names are
4179expressed with their native languages in the world. For instance, in a
4180certain news server there are some newsgroups of which the names are
4181spelled in Chinese, where people are talking in Chinese. You can, of
4182course, subscribe to such news groups using Gnus. Currently Gnus
4183supports non-@acronym{ASCII} group names not only with the @code{nntp}
4184back end but also with the @code{nnml} back end and the @code{nnrss}
4185back end.
4186
4187Every such group name is encoded by a certain charset in the server
4188side (in an @acronym{NNTP} server its administrator determines the
4189charset, but for groups in the other back ends it is determined by you).
4190Gnus has to display the decoded ones for you in the group buffer and the
4191article buffer, and needs to use the encoded ones when communicating
4192with servers. However, Gnus doesn't know what charset is used for each
4193non-@acronym{ASCII} group name. The following two variables are just
4194the ones for telling Gnus what charset should be used for each group:
4195
4196@table @code
4197@item gnus-group-name-charset-method-alist
4198@vindex gnus-group-name-charset-method-alist
4199An alist of select methods and charsets. The default value is
4200@code{nil}. The names of groups in the server specified by that select
4201method are all supposed to use the corresponding charset. For example:
4202
4203@lisp
4204(setq gnus-group-name-charset-method-alist
4205 '(((nntp "news.com.cn") . cn-gb-2312)))
4206@end lisp
4207
4208Charsets specified for groups with this variable are preferred to the
4209ones specified for the same groups with the
4210@code{gnus-group-name-charset-group-alist} variable (see below).
4211
4212A select method can be very long, like:
4213
4214@lisp
4215(nntp "gmane"
4216 (nntp-address "news.gmane.org")
4217 (nntp-end-of-line "\n")
4218 (nntp-open-connection-function
4219 nntp-open-via-rlogin-and-telnet)
4220 (nntp-via-rlogin-command "ssh")
4221 (nntp-via-rlogin-command-switches
4222 ("-C" "-t" "-e" "none"))
4223 (nntp-via-address @dots{}))
4224@end lisp
4225
4226In that case, you can truncate it into @code{(nntp "gmane")} in this
4227variable. That is, it is enough to contain only the back end name and
4228the server name.
4229
4230@item gnus-group-name-charset-group-alist
4231@cindex UTF-8 group names
4232@vindex gnus-group-name-charset-group-alist
4233An alist of regexp of group name and the charset for group names.
4234@code{((".*" . utf-8))} is the default value if UTF-8 is supported,
4235otherwise the default is @code{nil}. For example:
4236
4237@lisp
4238(setq gnus-group-name-charset-group-alist
4239 '(("\\.com\\.cn:" . cn-gb-2312)
4240 (".*" . utf-8)))
4241@end lisp
4242
4243Note that this variable is ignored if the match is made with
4244@code{gnus-group-name-charset-method-alist}.
4245@end table
4246
4247Those two variables are used also to determine the charset for encoding
4248and decoding non-@acronym{ASCII} group names that are in the back ends
4249other than @code{nntp}. It means that it is you who determine it. If
4250you do nothing, the charset used for group names in those back ends will
4251all be @code{utf-8} because of the last element of
4252@code{gnus-group-name-charset-group-alist}.
4253
4254There is one more important variable for non-@acronym{ASCII} group
26b9f88d 4255names:
01c52d31
MB
4256
4257@table @code
4258@item nnmail-pathname-coding-system
26b9f88d
MB
4259@vindex nnmail-pathname-coding-system
4260The value of this variable should be a coding system or @code{nil}. The
4261default is @code{nil} in Emacs, or is the aliasee of the coding system
4262named @code{file-name} (a certain coding system of which an alias is
4263@code{file-name}) in XEmacs.
4264
4265The @code{nnml} back end, the @code{nnrss} back end, the @acronym{NNTP}
4266marks feature (@pxref{NNTP marks}), the agent, and the cache use
4267non-@acronym{ASCII} group names in those files and directories. This
4268variable overrides the value of @code{file-name-coding-system} which
4269specifies the coding system used when encoding and decoding those file
4270names and directory names.
01c52d31
MB
4271
4272In XEmacs (with the @code{mule} feature), @code{file-name-coding-system}
4273is the only means to specify the coding system used to encode and decode
26b9f88d 4274file names. On the other hand, Emacs uses the value of
01c52d31 4275@code{default-file-name-coding-system} if @code{file-name-coding-system}
26b9f88d
MB
4276is @code{nil} or it is bound to the value of
4277@code{nnmail-pathname-coding-system} which is @code{nil}.
4278
4279Normally the value of @code{default-file-name-coding-system} in Emacs or
4280@code{nnmail-pathname-coding-system} in XEmacs is initialized according
4281to the locale, so you will need to do nothing if the value is suitable
4282to encode and decode non-@acronym{ASCII} group names.
01c52d31
MB
4283
4284The value of this variable (or @code{default-file-name-coding-system})
4285does not necessarily need to be the same value that is determined by
4286@code{gnus-group-name-charset-method-alist} and
4287@code{gnus-group-name-charset-group-alist}.
4288
26b9f88d
MB
4289If @code{default-file-name-coding-system} or this variable is
4290initialized by default to @code{iso-latin-1} for example, although you
4291want to subscribe to the groups spelled in Chinese, that is the most
4292typical case where you have to customize
4293@code{nnmail-pathname-coding-system}. The @code{utf-8} coding system is
4294a good candidate for it. Otherwise, you may change the locale in your
4295system so that @code{default-file-name-coding-system} or this variable
4296may be initialized to an appropriate value.
01c52d31
MB
4297@end table
4298
4299Note that when you copy or move articles from a non-@acronym{ASCII}
4300group to another group, the charset used to encode and decode group
4301names should be the same in both groups. Otherwise the Newsgroups
4302header will be displayed incorrectly in the article buffer.
4303
4304
e6d2d263
MB
4305@node Searching
4306@section Searching
4307
4308@menu
4309* nnir:: Searching on IMAP, with swish, namazu, etc.
4310* nnmairix:: Searching maildir, MH or mbox with Mairix.
4311@end menu
4312
4313@cindex Searching
4314
4315FIXME: This node is a stub.
4316
4317FIXME: Add a brief overview of Gnus search capabilities. A brief
4318comparison of nnir, nnmairix, contrib/gnus-namazu would be nice
4319as well.
4320
4321FIXME: Explain difference to @ref{Searching for Articles}, add reference
4322and back-reference.
4323
4324@node nnir
4325@subsection nnir
4326
4327FIXME: As a first step, convert the commentary of @file{nnir} to texi.
4328@cindex nnir
4329
4330@node nnmairix
4331@subsection nnmairix
4332
867d4bb3 4333@cindex mairix
e6d2d263
MB
4334@cindex nnmairix
4335This paragraph describes how to set up mairix and the back end
4336@code{nnmairix} for indexing and searching your mail from within
4337Gnus. Additionally, you can create permanent ``smart'' groups which are
4338bound to mairix searches and are automatically updated.
4339
4340@menu
4341* About mairix:: About the mairix mail search engine
4342* nnmairix requirements:: What you will need for using nnmairix
4343* What nnmairix does:: What does nnmairix actually do?
4344* Setting up mairix:: Set up your mairix installation
4345* Configuring nnmairix:: Set up the nnmairix back end
4346* nnmairix keyboard shortcuts:: List of available keyboard shortcuts
4347* Propagating marks:: How to propagate marks from nnmairix groups
4348* nnmairix tips and tricks:: Some tips, tricks and examples
4349* nnmairix caveats:: Some more stuff you might want to know
4350@end menu
4351
2b968687
MB
4352@c FIXME: The markup in this section might need improvement.
4353@c E.g. adding @samp, @var, @file, @command, etc.
4354@c Cf. (info "(texinfo)Indicating")
e6d2d263
MB
4355
4356@node About mairix
4357@subsubsection About mairix
4358
4359Mairix is a tool for indexing and searching words in locally stored
4360mail. It was written by Richard Curnow and is licensed under the
4361GPL. Mairix comes with most popular GNU/Linux distributions, but it also
4362runs under Windows (with cygwin), Mac OS X and Solaris. The homepage can
4363be found at
4364@uref{http://www.rpcurnow.force9.co.uk/mairix/index.html}
4365
4366Though mairix might not be as flexible as other search tools like
4367swish++ or namazu, which you can use via the @code{nnir} back end, it
4368has the prime advantage of being incredibly fast. On current systems, it
4369can easily search through headers and message bodies of thousands and
4370thousands of mails in well under a second. Building the database
4371necessary for searching might take a minute or two, but only has to be
4372done once fully. Afterwards, the updates are done incrementally and
4373therefore are really fast, too. Additionally, mairix is very easy to set
4374up.
4375
4376For maximum speed though, mairix should be used with mails stored in
4377@code{Maildir} or @code{MH} format (this includes the @code{nnml} back
4378end), although it also works with mbox. Mairix presents the search
4379results by populating a @emph{virtual} maildir/MH folder with symlinks
4380which point to the ``real'' message files (if mbox is used, copies are
4381made). Since mairix already presents search results in such a virtual
4382mail folder, it is very well suited for using it as an external program
4383for creating @emph{smart} mail folders, which represent certain mail
f7362445 4384searches.
e6d2d263
MB
4385
4386@node nnmairix requirements
4387@subsubsection nnmairix requirements
4388
2b968687 4389Mairix searches local mail---that means, mairix absolutely must have
e6d2d263
MB
4390direct access to your mail folders. If your mail resides on another
4391server (e.g. an @acronym{IMAP} server) and you happen to have shell
4392access, @code{nnmairix} supports running mairix remotely, e.g. via ssh.
4393
4394Additionally, @code{nnmairix} only supports the following Gnus back
2b968687
MB
4395ends: @code{nnml}, @code{nnmaildir}, and @code{nnimap}. You must use
4396one of these back ends for using @code{nnmairix}. Other back ends, like
4397@code{nnmbox}, @code{nnfolder} or @code{nnmh}, won't work.
e6d2d263
MB
4398
4399If you absolutely must use mbox and still want to use @code{nnmairix},
4400you can set up a local @acronym{IMAP} server, which you then access via
4401@code{nnimap}. This is a rather massive setup for accessing some mbox
030cca00
MB
4402files, so just change to MH or Maildir already... However, if you're
4403really, really passionate about using mbox, you might want to look into
4404the package @file{mairix.el}, which comes with Emacs 23.
e6d2d263
MB
4405
4406@node What nnmairix does
4407@subsubsection What nnmairix does
4408
4409The back end @code{nnmairix} enables you to call mairix from within Gnus,
4410either to query mairix with a search term or to update the
4411database. While visiting a message in the summary buffer, you can use
4412several pre-defined shortcuts for calling mairix, e.g. to quickly
4413search for all mails from the sender of the current message or to
4414display the whole thread associated with the message, even if the
4415mails are in different folders.
4416
4417Additionally, you can create permanent @code{nnmairix} groups which are bound
4418to certain mairix searches. This way, you can easily create a group
4419containing mails from a certain sender, with a certain subject line or
4420even for one specific thread based on the Message-ID. If you check for
4421new mail in these folders (e.g. by pressing @kbd{g} or @kbd{M-g}), they
867d4bb3 4422automatically update themselves by calling mairix.
e6d2d263
MB
4423
4424You might ask why you need @code{nnmairix} at all, since mairix already
4425creates the group, populates it with links to the mails so that you can
030cca00 4426then access it with Gnus, right? Well, this @emph{might} work, but often
2b968687 4427does not---at least not without problems. Most probably you will get
e6d2d263
MB
4428strange article counts, and sometimes you might see mails which Gnus
4429claims have already been canceled and are inaccessible. This is due to
4430the fact that Gnus isn't really amused when things are happening behind
4431its back. Another problem can be the mail back end itself, e.g. if you
4432use mairix with an @acronym{IMAP} server (I had Dovecot complaining
4433about corrupt index files when mairix changed the contents of the search
4434group). Using @code{nnmairix} should circumvent these problems.
4435
030cca00
MB
4436@code{nnmairix} is not really a mail back end---it's actually more like
4437a wrapper, sitting between a ``real'' mail back end where mairix stores
4438the searches and the Gnus front end. You can choose between three
4439different mail back ends for the mairix folders: @code{nnml},
4440@code{nnmaildir} or @code{nnimap}. @code{nnmairix} will call the mairix
4441binary so that the search results are stored in folders named
e6d2d263 4442@code{zz_mairix-<NAME>-<NUMBER>} on this mail back end, but it will
030cca00
MB
4443present these folders in the Gnus front end only with @code{<NAME>}.
4444You can use an existing mail back end where you already store your mail,
4445but if you're uncomfortable with @code{nnmairix} creating new mail
4446groups alongside your other mail, you can also create e.g. a new
4447@code{nnmaildir} or @code{nnml} server exclusively for mairix, but then
4448make sure those servers do not accidentally receive your new mail
4449(@pxref{nnmairix caveats}). A special case exists if you want to use
4450mairix remotely on an IMAP server with @code{nnimap}---here the mairix
4451folders and your other mail must be on the same @code{nnimap} back end.
e6d2d263
MB
4452
4453@node Setting up mairix
4454@subsubsection Setting up mairix
4455
4456First: create a backup of your mail folders (@pxref{nnmairix caveats}).
4457
4458Setting up mairix is easy: simply create a @file{.mairixrc} file with
4459(at least) the following entries:
4460
4461@example
4462# Your Maildir/MH base folder
4463base=~/Maildir
4464@end example
4465
2b968687
MB
4466This is the base folder for your mails. All the following directories
4467are relative to this base folder. If you want to use @code{nnmairix}
4468with @code{nnimap}, this base directory has to point to the mail
4469directory where the @acronym{IMAP} server stores the mail folders!
e6d2d263 4470
e6d2d263
MB
4471@example
4472maildir= ... your maildir folders which should be indexed ...
4473mh= ... your nnml/mh folders which should be indexed ...
4474mbox = ... your mbox files which should be indexed ...
4475@end example
4476
9e601b8d
MB
4477This specifies all your mail folders and mbox files (relative to the
4478base directory!) you want to index with mairix. Note that the
4479@code{nnml} back end saves mails in MH format, so you have to put those
4480directories in the @code{mh} line. See the example at the end of this
4481section and mairixrc's man-page for further details.
e6d2d263
MB
4482
4483@example
4484omit=zz_mairix-*
4485@end example
4486
4487@vindex nnmairix-group-prefix
4488This should make sure that you don't accidentally index the mairix
4489search results. You can change the prefix of these folders with the
4490variable @code{nnmairix-group-prefix}.
4491
e6d2d263
MB
4492@example
4493mformat= ... 'maildir' or 'mh' ...
4494database= ... location of database file ...
4495@end example
4496
4497The @code{format} setting specifies the output format for the mairix
4498search folder. Set this to @code{mh} if you want to access search results
4499with @code{nnml}. Otherwise choose @code{maildir}.
4500
2b968687
MB
4501To summarize, here is my shortened @file{.mairixrc} file as an example:
4502
4503@example
4504base=~/Maildir
4505maildir=.personal:.work:.logcheck:.sent
4506mh=../Mail/nnml/*...
4507mbox=../mboxmail/mailarchive_year*
4508mformat=maildir
4509omit=zz_mairix-*
4510database=~/.mairixdatabase
4511@end example
4512
4513In this case, the base directory is @file{~/Maildir}, where all my Maildir
4514folders are stored. As you can see, the folders are separated by
4515colons. If you wonder why every folder begins with a dot: this is
4516because I use Dovecot as @acronym{IMAP} server, which again uses
4517@code{Maildir++} folders. For testing nnmairix, I also have some
4518@code{nnml} mail, which is saved in @file{~/Mail/nnml}. Since this has
4519to be specified relative to the @code{base} directory, the @code{../Mail}
4520notation is needed. Note that the line ends in @code{*...}, which means
4521to recursively scan all files under this directory. Without the three
4522dots, the wildcard @code{*} will not work recursively. I also have some
4523old mbox files with archived mail lying around in @file{~/mboxmail}.
4524The other lines should be obvious.
4525
4526See the man page for @code{mairixrc} for details and further options,
4527especially regarding wildcard usage, which may be a little different
4528than you are used to.
4529
4530Now simply call @code{mairix} to create the index for the first time.
4531Note that this may take a few minutes, but every following index will do
4532the updates incrementally and hence is very fast.
e6d2d263
MB
4533
4534@node Configuring nnmairix
4535@subsubsection Configuring nnmairix
4536
4537In group mode, type @kbd{G b c}
4538(@code{nnmairix-create-server-and-default-group}). This will ask you for all
4539necessary information and create a @code{nnmairix} server as a foreign
4540server. You will have to specify the following:
4541
4542@itemize @bullet
4543
4544@item
2b968687 4545The @strong{name} of the @code{nnmairix} server---choose whatever you
e6d2d263
MB
4546want.
4547
4548@item
9e601b8d
MB
4549The name of the @strong{back end server} where mairix should store its
4550searches. This must be a full server name, like @code{nnml:mymail}.
4551Just hit @kbd{TAB} to see the available servers. Currently, servers
4552which are accessed through @code{nnmaildir}, @code{nnimap} and
4553@code{nnml} are supported. As explained above, for locally stored
4554mails, this can be an existing server where you store your mails.
030cca00
MB
4555However, you can also create e.g. a new @code{nnmaildir} or @code{nnml}
4556server exclusively for @code{nnmairix} in your secondary select methods
4557(@pxref{Finding the News}). If you use a secondary @code{nnml} server
4558just for mairix, make sure that you explicitly set the server variable
d7619e3b 4559@code{nnml-get-new-mail} to @code{nil}, or you might lose mail
030cca00 4560(@pxref{nnmairix caveats}). If you want to use mairix remotely on an
9e601b8d
MB
4561@acronym{IMAP} server, you have to choose the corresponding
4562@code{nnimap} server here.
e6d2d263
MB
4563
4564@item
4565@vindex nnmairix-mairix-search-options
4566The @strong{command} to call the mairix binary. This will usually just
4567be @code{mairix}, but you can also choose something like @code{ssh
4568SERVER mairix} if you want to call mairix remotely, e.g. on your
4569@acronym{IMAP} server. If you want to add some default options to
4570mairix, you could do this here, but better use the variable
4571@code{nnmairix-mairix-search-options} instead.
4572
4573@item
4574The name of the @strong{default search group}. This will be the group
4575where all temporary mairix searches are stored, i.e. all searches which
4576are not bound to permanent @code{nnmairix} groups. Choose whatever you
4577like.
4578
4579@item
4580If the mail back end is @code{nnimap} or @code{nnmaildir}, you will be
4581asked if you work with @strong{Maildir++}, i.e. with hidden maildir
4582folders (=beginning with a dot). For example, you have to answer
4583@samp{yes} here if you work with the Dovecot @acronym{IMAP}
4584server. Otherwise, you should answer @samp{no} here.
4585
4586@end itemize
4587
4588@node nnmairix keyboard shortcuts
4589@subsubsection nnmairix keyboard shortcuts
4590
4591In group mode:
4592
4593@table @kbd
4594
4595@item G b c
4596@kindex G b c (Group)
4597@findex nnmairix-create-server-and-default-group
4598Creates @code{nnmairix} server and default search group for this server
4599(@code{nnmairix-create-server-and-default-group}). You should have done
4600this by now (@pxref{Configuring nnmairix}).
4601
4602@item G b s
4603@kindex G b s (Group)
4604@findex nnmairix-search
4605Prompts for query which is then sent to the mairix binary. Search
4606results are put into the default search group which is automatically
4607displayed (@code{nnmairix-search}).
4608
4609@item G b m
4610@kindex G b m (Group)
4611@findex nnmairix-widget-search
4612Allows you to create a mairix search or a permanent group more
4613comfortably using graphical widgets, similar to a customization
4614group. Just try it to see how it works (@code{nnmairix-widget-search}).
4615
4616@item G b i
4617@kindex G b i (Group)
4618@findex nnmairix-search-interactive
4619Another command for creating a mairix query more comfortably, but uses
4620only the minibuffer (@code{nnmairix-search-interactive}).
4621
4622@item G b g
4623@kindex G b g (Group)
4624@findex nnmairix-create-search-group
4625Creates a permanent group which is associated with a search query
4626(@code{nnmairix-create-search-group}). The @code{nnmairix} back end
4627automatically calls mairix when you update this group with @kbd{g} or
4628@kbd{M-g}.
4629
4630@item G b q
4631@kindex G b q (Group)
4632@findex nnmairix-group-change-query-this-group
4633Changes the search query for the @code{nnmairix} group under cursor
4634(@code{nnmairix-group-change-query-this-group}).
4635
4636@item G b t
4637@kindex G b t (Group)
4638@findex nnmairix-group-toggle-threads-this-group
4639Toggles the 'threads' parameter for the @code{nnmairix} group under cursor,
4640i.e. if you want see the whole threads of the found messages
4641(@code{nnmairix-group-toggle-threads-this-group}).
4642
4643@item G b u
4644@kindex G b u (Group)
4645@findex nnmairix-update-database
4646@vindex nnmairix-mairix-update-options
4647Calls mairix binary for updating the database
4648(@code{nnmairix-update-database}). The default parameters are @code{-F}
4649and @code{-Q} for making this as fast as possible (see variable
4650@code{nnmairix-mairix-update-options} for defining these default
4651options).
4652
4653@item G b r
4654@kindex G b r (Group)
4655@findex nnmairix-group-toggle-readmarks-this-group
4656Keep articles in this @code{nnmairix} group always read or unread, or leave the
4657marks unchanged (@code{nnmairix-group-toggle-readmarks-this-group}).
4658
4659@item G b d
4660@kindex G b d (Group)
4661@findex nnmairix-group-delete-recreate-this-group
4662Recreate @code{nnmairix} group on the ``real'' mail back end
4663(@code{nnmairix-group-delete-recreate-this-group}). You can do this if
4664you always get wrong article counts with a @code{nnmairix} group.
4665
4666@item G b a
4667@kindex G b a (Group)
4668@findex nnmairix-group-toggle-allowfast-this-group
4669Toggles the @code{allow-fast} parameters for group under cursor
4670(@code{nnmairix-group-toggle-allowfast-this-group}). The default
4671behavior of @code{nnmairix} is to do a mairix search every time you
4672update or enter the group. With the @code{allow-fast} parameter set,
4673mairix will only be called when you explicitly update the group, but not
4674upon entering. This makes entering the group faster, but it may also
4675lead to dangling symlinks if something changed between updating and
4676entering the group which is not yet in the mairix database.
4677
4678@item G b p
4679@kindex G b p (Group)
4680@findex nnmairix-group-toggle-propmarks-this-group
4681Toggle marks propagation for this group
4682(@code{nnmairix-group-toggle-propmarks-this-group}). (@pxref{Propagating
4683marks}).
4684
4685@item G b o
4686@kindex G b o (Group)
4687@findex nnmairix-propagate-marks
4688Manually propagate marks (@code{nnmairix-propagate-marks}); needed only when
4689@code{nnmairix-propagate-marks-upon-close} is set to @code{nil}.
4690
4691@end table
4692
4693In summary mode:
4694
4695@table @kbd
4696
4697@item $ m
4698@kindex $ m (Summary)
4699@findex nnmairix-widget-search-from-this-article
4700Allows you to create a mairix query or group based on the current
4701message using graphical widgets (same as @code{nnmairix-widget-search})
4702(@code{nnmairix-widget-search-from-this-article}).
4703
4704@item $ g
4705@kindex $ g (Summary)
4706@findex nnmairix-create-search-group-from-message
4707Interactively creates a new search group with query based on the current
4708message, but uses the minibuffer instead of graphical widgets
4709(@code{nnmairix-create-search-group-from-message}).
4710
4711@item $ t
4712@kindex $ t (Summary)
4713@findex nnmairix-search-thread-this-article
4714Searches thread for the current article
4715(@code{nnmairix-search-thread-this-article}). This is effectively a
4716shortcut for calling @code{nnmairix-search} with @samp{m:msgid} of the
4717current article and enabled threads.
4718
4719@item $ f
4720@kindex $ f (Summary)
4721@findex nnmairix-search-from-this-article
4722Searches all messages from sender of the current article
4723(@code{nnmairix-search-from-this-article}). This is a shortcut for
4724calling @code{nnmairix-search} with @samp{f:From}.
4725
4726@item $ o
4727@kindex $ o (Summary)
4728@findex nnmairix-goto-original-article
4729(Only in @code{nnmairix} groups!) Tries determine the group this article
4730originally came from and displays the article in this group, so that
4731e.g. replying to this article the correct posting styles/group
4732parameters are applied (@code{nnmairix-goto-original-article}). This
4733function will use the registry if available, but can also parse the
2b968687 4734article file name as a fallback method.
e6d2d263
MB
4735
4736@item $ u
4737@kindex $ u (Summary)
4738@findex nnmairix-remove-tick-mark-original-article
4739Remove possibly existing tick mark from original article
4740(@code{nnmairix-remove-tick-mark-original-article}). (@pxref{nnmairix
4741tips and tricks}).
4742
4743@end table
4744
4745@node Propagating marks
4746@subsubsection Propagating marks
4747
4748First of: you really need a patched mairix binary for using the marks
4749propagation feature efficiently. Otherwise, you would have to update
4750the mairix database all the time. You can get the patch at
4751
030cca00 4752@uref{http://www.randomsample.de/mairix-maildir-patch.tar}
e6d2d263
MB
4753
4754You need the mairix v0.21 source code for this patch; everything else
4755is explained in the accompanied readme file. If you don't want to use
4756marks propagation, you don't have to apply these patches, but they also
4757fix some annoyances regarding changing maildir flags, so it might still
4758be useful to you.
4759
4760With the patched mairix binary, you can use @code{nnmairix} as an
4761alternative to mail splitting (@pxref{Fancy Mail Splitting}). For
4762example, instead of splitting all mails from @samp{david@@foobar.com}
4763into a group, you can simply create a search group with the query
4764@samp{f:david@@foobar.com}. This is actually what ``smart folders'' are
4765all about: simply put everything in one mail folder and dynamically
4766create searches instead of splitting. This is more flexible, since you
4767can dynamically change your folders any time you want to. This also
4768implies that you will usually read your mails in the @code{nnmairix}
4769groups instead of your ``real'' mail groups.
4770
4771There is one problem, though: say you got a new mail from
2b968687 4772@samp{david@@foobar.com}; it will now show up in two groups, the
e6d2d263
MB
4773``real'' group (your INBOX, for example) and in the @code{nnmairix}
4774search group (provided you have updated the mairix database). Now you
4775enter the @code{nnmairix} group and read the mail. The mail will be
2b968687 4776marked as read, but only in the @code{nnmairix} group---in the ``real''
e6d2d263
MB
4777mail group it will be still shown as unread.
4778
4779You could now catch up the mail group (@pxref{Group Data}), but this is
4780tedious and error prone, since you may overlook mails you don't have
4781created @code{nnmairix} groups for. Of course, you could first use
4782@code{nnmairix-goto-original-article} (@pxref{nnmairix keyboard
4783shortcuts}) and then read the mail in the original group, but that's
4784even more cumbersome.
4785
4786Clearly, the easiest way would be if marks could somehow be
4787automatically set for the original article. This is exactly what
4788@emph{marks propagation} is about.
4789
4790Marks propagation is deactivated by default. You can activate it for a
4791certain @code{nnmairix} group with
4792@code{nnmairix-group-toggle-propmarks-this-group} (bound to @kbd{G b
4793p}). This function will warn you if you try to use it with your default
4794search group; the reason is that the default search group is used for
4795temporary searches, and it's easy to accidentally propagate marks from
4796this group. However, you can ignore this warning if you really want to.
4797
4798With marks propagation enabled, all the marks you set in a @code{nnmairix}
4799group should now be propagated to the original article. For example,
4800you can now tick an article (by default with @kbd{!}) and this mark should
4801magically be set for the original article, too.
4802
4803A few more remarks which you may or may not want to know:
4804
4805@vindex nnmairix-propagate-marks-upon-close
4806Marks will not be set immediately, but only upon closing a group. This
4807not only makes marks propagation faster, it also avoids problems with
4808dangling symlinks when dealing with maildir files (since changing flags
4809will change the file name). You can also control when to propagate marks
4810via @code{nnmairix-propagate-marks-upon-close} (see the doc-string for
4811details).
4812
4813Obviously, @code{nnmairix} will have to look up the original group for every
4814article you want to set marks for. If available, @code{nnmairix} will first use
4815the registry for determining the original group. The registry is very
4816fast, hence you should really, really enable the registry when using
4817marks propagation. If you don't have to worry about RAM and disc space,
4818set @code{gnus-registry-max-entries} to a large enough value; to be on
4819the safe side, choose roughly the amount of mails you index with mairix.
4820
4821@vindex nnmairix-only-use-registry
4822If you don't want to use the registry or the registry hasn't seen the
2b968687
MB
4823original article yet, @code{nnmairix} will use an additional mairix
4824search for determining the file name of the article. This, of course, is
4825way slower than the registry---if you set hundreds or even thousands of
4826marks this way, it might take some time. You can avoid this situation by
4827setting @code{nnmairix-only-use-registry} to t.
e6d2d263
MB
4828
4829Maybe you also want to propagate marks the other way round, i.e. if you
4830tick an article in a "real" mail group, you'd like to have the same
4831article in a @code{nnmairix} group ticked, too. For several good
4832reasons, this can only be done efficiently if you use maildir. To
4833immediately contradict myself, let me mention that it WON'T work with
4834@code{nnmaildir}, since @code{nnmaildir} stores the marks externally and
4835not in the file name. Therefore, propagating marks to @code{nnmairix}
4836groups will usually only work if you use an IMAP server which uses
4837maildir as its file format.
4838
4839@vindex nnmairix-propagate-marks-to-nnmairix-groups
4840If you work with this setup, just set
4841@code{nnmairix-propagate-marks-to-nnmairix-groups} to @code{t} and see what
4842happens. If you don't like what you see, just set it to @code{nil} again. One
4843problem might be that you get a wrong number of unread articles; this
4844usually happens when you delete or expire articles in the original
4845groups. When this happens, you can recreate the @code{nnmairix} group on the
4846back end using @kbd{G b d}.
4847
4848@node nnmairix tips and tricks
4849@subsubsection nnmairix tips and tricks
4850
4851@itemize
4852@item
4853Checking Mail
4854
4855@findex nnmairix-update-groups
4856I put all my important mail groups at group level 1. The mairix groups
4857have group level 5, so they do not get checked at start up (@pxref{Group
4858Levels}).
4859
4860I use the following to check for mails:
4861
4862@lisp
4863(defun my-check-mail-mairix-update (level)
4864 (interactive "P")
4865 ;; if no prefix given, set level=1
4866 (gnus-group-get-new-news (or level 1))
4867 (nnmairix-update-groups "mairixsearch" t t)
4868 (gnus-group-list-groups))
4869
4870(define-key gnus-group-mode-map "g" 'my-check-mail-mairix-update)
4871@end lisp
4872
4873Instead of @samp{"mairixsearch"} use the name of your @code{nnmairix}
4874server. See the doc string for @code{nnmairix-update-groups} for
4875details.
4876
4877@item
4878Example: search group for ticked articles
4879
4880For example, you can create a group for all ticked articles, where the
4881articles always stay unread:
4882
4883Hit @kbd{G b g}, enter group name (e.g. @samp{important}), use
4884@samp{F:f} as query and do not include threads.
4885
4886Now activate marks propagation for this group by using @kbd{G b p}. Then
4887activate the always-unread feature by using @kbd{G b r} twice.
4888
2b968687 4889So far so good---but how do you remove the tick marks in the @code{nnmairix}
e6d2d263
MB
4890group? There are two options: You may simply use
4891@code{nnmairix-remove-tick-mark-original-article} (bound to @kbd{$ u}) to remove
4892tick marks from the original article. The other possibility is to set
4893@code{nnmairix-propagate-marks-to-nnmairix-groups} to @code{t}, but see the above
4894comments about this option. If it works for you, the tick marks should
4895also exist in the @code{nnmairix} group and you can remove them as usual,
4896e.g. by marking an article as read.
4897
4898When you have removed a tick mark from the original article, this
4899article should vanish from the @code{nnmairix} group after you have updated the
4900mairix database and updated the group. Fortunately, there is a function
4901for doing exactly that: @code{nnmairix-update-groups}. See the previous code
4902snippet and the doc string for details.
4903
4904@item
4905Dealing with auto-subscription of mail groups
4906
4907As described before, all @code{nnmairix} groups are in fact stored on
4908the mail back end in the form @samp{zz_mairix-<NAME>-<NUMBER>}. You can
4909see them when you enter the back end server in the server buffer. You
4910should not subscribe these groups! Unfortunately, these groups will
2b968687 4911usually get @emph{auto-subscribed} when you use @code{nnmaildir} or
e6d2d263
MB
4912@code{nnml}, i.e. you will suddenly see groups of the form
4913@samp{zz_mairix*} pop up in your group buffer. If this happens to you,
4914simply kill these groups with C-k. For avoiding this, turn off
4915auto-subscription completely by setting the variable
4916@code{gnus-auto-subscribed-groups} to @code{nil} (@pxref{Filtering New
4917Groups}), or if you like to keep this feature use the following kludge
4918for turning it off for all groups beginning with @samp{zz_}:
4919
4920@lisp
4921(setq gnus-auto-subscribed-groups
4922 "^\\(nnml\\|nnfolder\\|nnmbox\\|nnmh\\|nnbabyl\\|nnmaildir\\).*:\\([^z]\\|z$\\|\\z[^z]\\|zz$\\|zz[^_]\\|zz_$\\).*")
4923@end lisp
4924
4925@end itemize
4926
4927@node nnmairix caveats
4928@subsubsection nnmairix caveats
4929
4930@itemize
4931@item
030cca00
MB
4932You can create a secondary @code{nnml} server just for nnmairix, but then
4933you have to explicitly set the corresponding server variable
4934@code{nnml-get-new-mail} to @code{nil}. Otherwise, new mail might get
4935put into this secondary server (and would never show up again). Here's
4936an example server definition:
4937
4938@lisp
4939(nnml "mairix" (nnml-directory "mairix") (nnml-get-new-mail nil))
4940@end lisp
4941
4942(The @code{nnmaildir} back end also has a server variabe
4943@code{get-new-mail}, but its default value is @code{nil}, so you don't
4944have to explicitly set it if you use a @code{nnmaildir} server just for
4945mairix.)
e6d2d263
MB
4946
4947@item
4948If you use the Gnus registry: don't use the registry with
4949@code{nnmairix} groups (put them in
2b968687
MB
4950@code{gnus-registry-unfollowed-groups}). Be @emph{extra careful} if
4951you use @code{gnus-registry-split-fancy-with-parent}; mails which are
e6d2d263
MB
4952split into @code{nnmairix} groups are usually gone for good as soon as
4953you check the group for new mail (yes, it has happened to me...).
4954
4955@item
2b968687 4956Therefore: @emph{Never ever} put ``real'' mails into @code{nnmairix}
e6d2d263
MB
4957groups (you shouldn't be able to, anyway).
4958
030cca00
MB
4959@item
4960If you use the Gnus agent (@pxref{Gnus Unplugged}): don't agentize
4961@code{nnmairix} groups (though I have no idea what happens if you do).
4962
e6d2d263
MB
4963@item
4964mairix does only support us-ascii characters.
4965
4966@item
4967@code{nnmairix} uses a rather brute force method to force Gnus to
4968completely reread the group on the mail back end after mairix was
2b968687 4969called---it simply deletes and re-creates the group on the mail
e6d2d263
MB
4970back end. So far, this has worked for me without any problems, and I
4971don't see how @code{nnmairix} could delete other mail groups than its
4972own, but anyway: you really should have a backup of your mail
4973folders.
4974
4975@item
4976All necessary information is stored in the group parameters
4977(@pxref{Group Parameters}). This has the advantage that no active file
4978is needed, but also implies that when you kill a @code{nnmairix} group,
4979it is gone for good.
4980
4981@item
4982@findex nnmairix-purge-old-groups
4983If you create and kill a lot of @code{nnmairix} groups, the
4984``zz_mairix-*'' groups will accumulate on the mail back end server. To
4985delete old groups which are no longer needed, call
4986@code{nnmairix-purge-old-groups}. Note that this assumes that you don't
4987save any ``real'' mail in folders of the form
4988@code{zz_mairix-<NAME>-<NUMBER>}. You can change the prefix of
4989@code{nnmairix} groups by changing the variable
4990@code{nnmairix-group-prefix}.
4991
4992@item
2b968687 4993The following only applies if you @emph{don't} use the mentioned patch
e6d2d263
MB
4994for mairix (@pxref{Propagating marks}):
4995
4996A problem can occur when using @code{nnmairix} with maildir folders and
4997comes with the fact that maildir stores mail flags like @samp{Seen} or
4998@samp{Replied} by appending chars @samp{S} and @samp{R} to the message
4999file name, respectively. This implies that currently you would have to
5000update the mairix database not only when new mail arrives, but also when
5001mail flags are changing. The same applies to new mails which are indexed
5002while they are still in the @samp{new} folder but then get moved to
5003@samp{cur} when Gnus has seen the mail. If you don't update the database
5004after this has happened, a mairix query can lead to symlinks pointing to
5005non-existing files. In Gnus, these messages will usually appear with
5006``(none)'' entries in the header and can't be accessed. If this happens
5007to you, using @kbd{G b u} and updating the group will usually fix this.
5008
5009@end itemize
5010
4009494e
GM
5011@node Misc Group Stuff
5012@section Misc Group Stuff
5013
5014@menu
5015* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
5016* Group Information:: Information and help on groups and Gnus.
5017* Group Timestamp:: Making Gnus keep track of when you last read a group.
5018* File Commands:: Reading and writing the Gnus files.
5019* Sieve Commands:: Managing Sieve scripts.
5020@end menu
5021
5022@table @kbd
5023
5024@item v
5025@kindex v (Group)
5026@cindex keys, reserved for users (Group)
5027The key @kbd{v} is reserved for users. You can bind it to some
5028command or better use it as a prefix key. For example:
5029
5030@lisp
5031(define-key gnus-group-mode-map (kbd "v j d")
5032 (lambda ()
5033 (interactive)
5034 (gnus-group-jump-to-group "nndraft:drafts")))
5035@end lisp
5036
5037On keys reserved for users in Emacs and on keybindings in general
5038@xref{Keymaps, Keymaps, , emacs, The Emacs Editor}.
5039
5040@item ^
5041@kindex ^ (Group)
5042@findex gnus-group-enter-server-mode
5043Enter the server buffer (@code{gnus-group-enter-server-mode}).
5044@xref{Server Buffer}.
5045
5046@item a
5047@kindex a (Group)
5048@findex gnus-group-post-news
5049Start composing a message (a news by default)
5050(@code{gnus-group-post-news}). If given a prefix, post to the group
5051under the point. If the prefix is 1, prompt for a group to post to.
5052Contrary to what the name of this function suggests, the prepared
5053article might be a mail instead of a news, if a mail group is specified
5054with the prefix argument. @xref{Composing Messages}.
5055
5056@item m
5057@kindex m (Group)
5058@findex gnus-group-mail
5059Mail a message somewhere (@code{gnus-group-mail}). If given a prefix,
5060use the posting style of the group under the point. If the prefix is 1,
5061prompt for a group name to find the posting style.
5062@xref{Composing Messages}.
5063
5064@item i
5065@kindex i (Group)
5066@findex gnus-group-news
5067Start composing a news (@code{gnus-group-news}). If given a prefix,
5068post to the group under the point. If the prefix is 1, prompt
5069for group to post to. @xref{Composing Messages}.
5070
5071This function actually prepares a news even when using mail groups.
5072This is useful for ``posting'' messages to mail groups without actually
5073sending them over the network: they're just saved directly to the group
5074in question. The corresponding back end must have a request-post method
5075for this to work though.
5076
01c52d31
MB
5077@item G z
5078@kindex G z (Group)
5079@findex gnus-group-compact-group
5080
5081Compact the group under point (@code{gnus-group-compact-group}).
5082Currently implemented only in nnml (@pxref{Mail Spool}). This removes
5083gaps between article numbers, hence getting a correct total article
5084count.
5085
4009494e
GM
5086@end table
5087
5088Variables for the group buffer:
5089
5090@table @code
5091
5092@item gnus-group-mode-hook
5093@vindex gnus-group-mode-hook
5094is called after the group buffer has been
5095created.
5096
5097@item gnus-group-prepare-hook
5098@vindex gnus-group-prepare-hook
5099is called after the group buffer is
5100generated. It may be used to modify the buffer in some strange,
5101unnatural way.
5102
5103@item gnus-group-prepared-hook
5104@vindex gnus-group-prepare-hook
5105is called as the very last thing after the group buffer has been
5106generated. It may be used to move point around, for instance.
5107
5108@item gnus-permanently-visible-groups
5109@vindex gnus-permanently-visible-groups
5110Groups matching this regexp will always be listed in the group buffer,
5111whether they are empty or not.
5112
4009494e
GM
5113@end table
5114
5115@node Scanning New Messages
5116@subsection Scanning New Messages
5117@cindex new messages
5118@cindex scanning new news
5119
5120@table @kbd
5121
5122@item g
5123@kindex g (Group)
5124@findex gnus-group-get-new-news
5125@c @icon{gnus-group-get-new-news}
5126Check the server(s) for new articles. If the numerical prefix is used,
5127this command will check only groups of level @var{arg} and lower
5128(@code{gnus-group-get-new-news}). If given a non-numerical prefix, this
5129command will force a total re-reading of the active file(s) from the
5130back end(s).
5131
5132@item M-g
5133@kindex M-g (Group)
5134@findex gnus-group-get-new-news-this-group
5135@vindex gnus-goto-next-group-when-activating
5136@c @icon{gnus-group-get-new-news-this-group}
5137Check whether new articles have arrived in the current group
5138(@code{gnus-group-get-new-news-this-group}).
5139@code{gnus-goto-next-group-when-activating} says whether this command is
5140to move point to the next group or not. It is @code{t} by default.
5141
5142@findex gnus-activate-all-groups
5143@cindex activating groups
5144@item C-c M-g
5145@kindex C-c M-g (Group)
5146Activate absolutely all groups (@code{gnus-activate-all-groups}).
5147
5148@item R
5149@kindex R (Group)
5150@cindex restarting
5151@findex gnus-group-restart
5152Restart Gnus (@code{gnus-group-restart}). This saves the @file{.newsrc}
5153file(s), closes the connection to all servers, clears up all run-time
5154Gnus variables, and then starts Gnus all over again.
5155
5156@end table
5157
5158@vindex gnus-get-new-news-hook
5159@code{gnus-get-new-news-hook} is run just before checking for new news.
5160
5161@vindex gnus-after-getting-new-news-hook
5162@code{gnus-after-getting-new-news-hook} is run after checking for new
5163news.
5164
5165
5166@node Group Information
5167@subsection Group Information
5168@cindex group information
5169@cindex information on groups
5170
5171@table @kbd
5172
5173
5174@item H f
5175@kindex H f (Group)
5176@findex gnus-group-fetch-faq
5177@vindex gnus-group-faq-directory
5178@cindex FAQ
5179@cindex ange-ftp
5180Try to fetch the @acronym{FAQ} for the current group
5181(@code{gnus-group-fetch-faq}). Gnus will try to get the @acronym{FAQ}
5182from @code{gnus-group-faq-directory}, which is usually a directory on
5183a remote machine. This variable can also be a list of directories.
5184In that case, giving a prefix to this command will allow you to choose
5185between the various sites. @code{ange-ftp} (or @code{efs}) will be
5186used for fetching the file.
5187
5188If fetching from the first site is unsuccessful, Gnus will attempt to go
5189through @code{gnus-group-faq-directory} and try to open them one by one.
5190
4009494e
GM
5191@item H d
5192@itemx C-c C-d
5193@c @icon{gnus-group-describe-group}
5194@kindex H d (Group)
5195@kindex C-c C-d (Group)
5196@cindex describing groups
5197@cindex group description
5198@findex gnus-group-describe-group
5199Describe the current group (@code{gnus-group-describe-group}). If given
5200a prefix, force Gnus to re-read the description from the server.
5201
5202@item M-d
5203@kindex M-d (Group)
5204@findex gnus-group-describe-all-groups
5205Describe all groups (@code{gnus-group-describe-all-groups}). If given a
5206prefix, force Gnus to re-read the description file from the server.
5207
5208@item H v
5209@itemx V
5210@kindex V (Group)
5211@kindex H v (Group)
5212@cindex version
5213@findex gnus-version
5214Display current Gnus version numbers (@code{gnus-version}).
5215
5216@item ?
5217@kindex ? (Group)
5218@findex gnus-group-describe-briefly
5219Give a very short help message (@code{gnus-group-describe-briefly}).
5220
5221@item C-c C-i
5222@kindex C-c C-i (Group)
5223@cindex info
5224@cindex manual
5225@findex gnus-info-find-node
5226Go to the Gnus info node (@code{gnus-info-find-node}).
5227@end table
5228
5229
5230@node Group Timestamp
5231@subsection Group Timestamp
5232@cindex timestamps
5233@cindex group timestamps
5234
5235It can be convenient to let Gnus keep track of when you last read a
5236group. To set the ball rolling, you should add
5237@code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
5238
5239@lisp
5240(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
5241@end lisp
5242
5243After doing this, each time you enter a group, it'll be recorded.
5244
5245This information can be displayed in various ways---the easiest is to
5246use the @samp{%d} spec in the group line format:
5247
5248@lisp
5249(setq gnus-group-line-format
5250 "%M\%S\%p\%P\%5y: %(%-40,40g%) %d\n")
5251@end lisp
5252
5253This will result in lines looking like:
5254
5255@example
5256* 0: mail.ding 19961002T012943
5257 0: custom 19961002T012713
5258@end example
5259
5260As you can see, the date is displayed in compact ISO 8601 format. This
5261may be a bit too much, so to just display the date, you could say
5262something like:
5263
5264@lisp
5265(setq gnus-group-line-format
5266 "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
5267@end lisp
5268
5269If you would like greater control of the time format, you can use a
5270user-defined format spec. Something like the following should do the
5271trick:
5272
5273@lisp
5274(setq gnus-group-line-format
5275 "%M\%S\%p\%P\%5y: %(%-40,40g%) %ud\n")
5276(defun gnus-user-format-function-d (headers)
5277 (let ((time (gnus-group-timestamp gnus-tmp-group)))
5278 (if time
5279 (format-time-string "%b %d %H:%M" time)
5280 "")))
5281@end lisp
5282
5283
5284@node File Commands
5285@subsection File Commands
5286@cindex file commands
5287
5288@table @kbd
5289
5290@item r
5291@kindex r (Group)
5292@findex gnus-group-read-init-file
5293@vindex gnus-init-file
5294@cindex reading init file
5295Re-read the init file (@code{gnus-init-file}, which defaults to
5296@file{~/.gnus.el}) (@code{gnus-group-read-init-file}).
5297
5298@item s
5299@kindex s (Group)
5300@findex gnus-group-save-newsrc
5301@cindex saving .newsrc
5302Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
5303(@code{gnus-group-save-newsrc}). If given a prefix, force saving the
5304file(s) whether Gnus thinks it is necessary or not.
5305
5306@c @item Z
5307@c @kindex Z (Group)
5308@c @findex gnus-group-clear-dribble
5309@c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
5310
5311@end table
5312
5313
5314@node Sieve Commands
5315@subsection Sieve Commands
5316@cindex group sieve commands
5317
5318Sieve is a server-side mail filtering language. In Gnus you can use
5319the @code{sieve} group parameter (@pxref{Group Parameters}) to specify
5320sieve rules that should apply to each group. Gnus provides two
5321commands to translate all these group parameters into a proper Sieve
5322script that can be transfered to the server somehow.
5323
5324@vindex gnus-sieve-file
5325@vindex gnus-sieve-region-start
5326@vindex gnus-sieve-region-end
5327The generated Sieve script is placed in @code{gnus-sieve-file} (by
5328default @file{~/.sieve}). The Sieve code that Gnus generate is placed
5329between two delimiters, @code{gnus-sieve-region-start} and
5330@code{gnus-sieve-region-end}, so you may write additional Sieve code
5331outside these delimiters that will not be removed the next time you
5332regenerate the Sieve script.
5333
5334@vindex gnus-sieve-crosspost
5335The variable @code{gnus-sieve-crosspost} controls how the Sieve script
5336is generated. If it is non-@code{nil} (the default) articles is
5337placed in all groups that have matching rules, otherwise the article
5338is only placed in the group with the first matching rule. For
5339example, the group parameter @samp{(sieve address "sender"
5340"owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
5341code if @code{gnus-sieve-crosspost} is @code{nil}. (When
5342@code{gnus-sieve-crosspost} is non-@code{nil}, it looks the same
5343except that the line containing the call to @code{stop} is removed.)
5344
5345@example
5346if address "sender" "owner-ding@@hpc.uh.edu" @{
5347 fileinto "INBOX.ding";
5348 stop;
5349@}
5350@end example
5351
5352@xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}.
5353
5354@table @kbd
5355
5356@item D g
5357@kindex D g (Group)
5358@findex gnus-sieve-generate
5359@vindex gnus-sieve-file
5360@cindex generating sieve script
5361Regenerate a Sieve script from the @code{sieve} group parameters and
5362put you into the @code{gnus-sieve-file} without saving it.
5363
5364@item D u
5365@kindex D u (Group)
5366@findex gnus-sieve-update
5367@vindex gnus-sieve-file
5368@cindex updating sieve script
5369Regenerates the Gnus managed part of @code{gnus-sieve-file} using the
5370@code{sieve} group parameters, save the file and upload it to the
5371server using the @code{sieveshell} program.
5372
5373@end table
5374
5375
5376@node Summary Buffer
5377@chapter Summary Buffer
5378@cindex summary buffer
5379
5380A line for each article is displayed in the summary buffer. You can
5381move around, read articles, post articles and reply to articles.
5382
5383The most common way to a summary buffer is to select a group from the
5384group buffer (@pxref{Selecting a Group}).
5385
5386You can have as many summary buffers open as you wish.
5387
5388You can customize the Summary Mode tool bar, see @kbd{M-x
5389customize-apropos RET gnus-summary-tool-bar}. This feature is only
5390available in Emacs.
5391
5392@kindex v (Summary)
5393@cindex keys, reserved for users (Summary)
5394The key @kbd{v} is reserved for users. You can bind it to some
5395command or better use it as a prefix key. For example:
5396@lisp
5397(define-key gnus-summary-mode-map (kbd "v -") "LrS") ;; lower subthread
5398@end lisp
5399
5400@menu
5401* Summary Buffer Format:: Deciding how the summary buffer is to look.
5402* Summary Maneuvering:: Moving around the summary buffer.
5403* Choosing Articles:: Reading articles.
5404* Paging the Article:: Scrolling the current article.
5405* Reply Followup and Post:: Posting articles.
5406* Delayed Articles:: Send articles at a later time.
5407* Marking Articles:: Marking articles as read, expirable, etc.
5408* Limiting:: You can limit the summary buffer.
5409* Threading:: How threads are made.
5410* Sorting the Summary Buffer:: How articles and threads are sorted.
5411* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
5412* Article Caching:: You may store articles in a cache.
5413* Persistent Articles:: Making articles expiry-resistant.
01c52d31 5414* Sticky Articles:: Article buffers that are not reused.
4009494e
GM
5415* Article Backlog:: Having already read articles hang around.
5416* Saving Articles:: Ways of customizing article saving.
5417* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
5418* Article Treatment:: The article buffer can be mangled at will.
5419* MIME Commands:: Doing MIMEy things with the articles.
5420* Charsets:: Character set issues.
5421* Article Commands:: Doing various things with the article buffer.
5422* Summary Sorting:: Sorting the summary buffer in various ways.
5423* Finding the Parent:: No child support? Get the parent.
5424* Alternative Approaches:: Reading using non-default summaries.
5425* Tree Display:: A more visual display of threads.
5426* Mail Group Commands:: Some commands can only be used in mail groups.
5427* Various Summary Stuff:: What didn't fit anywhere else.
5428* Exiting the Summary Buffer:: Returning to the Group buffer,
5429 or reselecting the current group.
5430* Crosspost Handling:: How crossposted articles are dealt with.
5431* Duplicate Suppression:: An alternative when crosspost handling fails.
5432* Security:: Decrypt and Verify.
5433* Mailing List:: Mailing list minor mode.
5434@end menu
5435
5436
5437@node Summary Buffer Format
5438@section Summary Buffer Format
5439@cindex summary buffer format
5440
5441@iftex
5442@iflatex
5443\gnusfigure{The Summary Buffer}{180}{
5444\put(0,0){\epsfig{figure=ps/summary,width=7.5cm}}
5445\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-article,width=7.5cm}}}
5446}
5447@end iflatex
5448@end iftex
5449
5450@menu
5451* Summary Buffer Lines:: You can specify how summary lines should look.
5452* To From Newsgroups:: How to not display your own name.
5453* Summary Buffer Mode Line:: You can say how the mode line should look.
5454* Summary Highlighting:: Making the summary buffer all pretty and nice.
5455@end menu
5456
5457@findex mail-extract-address-components
5458@findex gnus-extract-address-components
5459@vindex gnus-extract-address-components
5460Gnus will use the value of the @code{gnus-extract-address-components}
5461variable as a function for getting the name and address parts of a
5462@code{From} header. Two pre-defined functions exist:
5463@code{gnus-extract-address-components}, which is the default, quite
5464fast, and too simplistic solution; and
5465@code{mail-extract-address-components}, which works very nicely, but is
5466slower. The default function will return the wrong answer in 5% of the
5467cases. If this is unacceptable to you, use the other function instead:
5468
5469@lisp
5470(setq gnus-extract-address-components
5471 'mail-extract-address-components)
5472@end lisp
5473
5474@vindex gnus-summary-same-subject
5475@code{gnus-summary-same-subject} is a string indicating that the current
5476article has the same subject as the previous. This string will be used
5477with those specs that require it. The default is @code{""}.
5478
5479
5480@node Summary Buffer Lines
5481@subsection Summary Buffer Lines
5482
5483@vindex gnus-summary-line-format
5484You can change the format of the lines in the summary buffer by changing
5485the @code{gnus-summary-line-format} variable. It works along the same
5486lines as a normal @code{format} string, with some extensions
5487(@pxref{Formatting Variables}).
5488
5489There should always be a colon or a point position marker on the line;
5490the cursor always moves to the point position marker or the colon after
5491performing an operation. (Of course, Gnus wouldn't be Gnus if it wasn't
5492possible to change this. Just write a new function
5493@code{gnus-goto-colon} which does whatever you like with the cursor.)
5494@xref{Positioning Point}.
5495
5496The default string is @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n}.
5497
5498The following format specification characters and extended format
5499specification(s) are understood:
5500
5501@table @samp
5502@item N
5503Article number.
5504@item S
5505Subject string. List identifiers stripped,
5506@code{gnus-list-identifiers}. @xref{Article Hiding}.
5507@item s
5508Subject if the article is the root of the thread or the previous article
5509had a different subject, @code{gnus-summary-same-subject} otherwise.
5510(@code{gnus-summary-same-subject} defaults to @code{""}.)
5511@item F
5512Full @code{From} header.
5513@item n
5514The name (from the @code{From} header).
5515@item f
5516The name, @code{To} header or the @code{Newsgroups} header (@pxref{To
5517From Newsgroups}).
5518@item a
5519The name (from the @code{From} header). This differs from the @code{n}
5520spec in that it uses the function designated by the
5521@code{gnus-extract-address-components} variable, which is slower, but
5522may be more thorough.
5523@item A
5524The address (from the @code{From} header). This works the same way as
5525the @code{a} spec.
5526@item L
5527Number of lines in the article.
5528@item c
5529Number of characters in the article. This specifier is not supported
5530in some methods (like nnfolder).
5531@item k
5532Pretty-printed version of the number of characters in the article;
5533for example, @samp{1.2k} or @samp{0.4M}.
5534@item I
5535Indentation based on thread level (@pxref{Customizing Threading}).
5536@item B
5537A complex trn-style thread tree, showing response-connecting trace
5538lines. A thread could be drawn like this:
5539
5540@example
5541>
5542+->
5543| +->
5544| | \->
5545| | \->
5546| \->
5547+->
5548\->
5549@end example
5550
5551You can customize the appearance with the following options. Note
5552that it is possible to make the thread display look really neat by
5553replacing the default @acronym{ASCII} characters with graphic
5554line-drawing glyphs.
5555@table @code
5556@item gnus-sum-thread-tree-root
5557@vindex gnus-sum-thread-tree-root
5558Used for the root of a thread. If @code{nil}, use subject
5559instead. The default is @samp{> }.
5560
5561@item gnus-sum-thread-tree-false-root
5562@vindex gnus-sum-thread-tree-false-root
5563Used for the false root of a thread (@pxref{Loose Threads}). If
5564@code{nil}, use subject instead. The default is @samp{> }.
5565
5566@item gnus-sum-thread-tree-single-indent
5567@vindex gnus-sum-thread-tree-single-indent
5568Used for a thread with just one message. If @code{nil}, use subject
5569instead. The default is @samp{}.
5570
5571@item gnus-sum-thread-tree-vertical
5572@vindex gnus-sum-thread-tree-vertical
5573Used for drawing a vertical line. The default is @samp{| }.
5574
5575@item gnus-sum-thread-tree-indent
5576@vindex gnus-sum-thread-tree-indent
5577Used for indenting. The default is @samp{ }.
5578
5579@item gnus-sum-thread-tree-leaf-with-other
5580@vindex gnus-sum-thread-tree-leaf-with-other
5581Used for a leaf with brothers. The default is @samp{+-> }.
5582
5583@item gnus-sum-thread-tree-single-leaf
5584@vindex gnus-sum-thread-tree-single-leaf
5585Used for a leaf without brothers. The default is @samp{\-> }
5586
5587@end table
5588
5589@item T
5590Nothing if the article is a root and lots of spaces if it isn't (it
5591pushes everything after it off the screen).
5592@item [
5593Opening bracket, which is normally @samp{[}, but can also be @samp{<}
5594for adopted articles (@pxref{Customizing Threading}).
5595@item ]
5596Closing bracket, which is normally @samp{]}, but can also be @samp{>}
5597for adopted articles.
5598@item >
5599One space for each thread level.
5600@item <
5601Twenty minus thread level spaces.
5602@item U
5603Unread. @xref{Read Articles}.
5604
5605@item R
5606This misleadingly named specifier is the @dfn{secondary mark}. This
5607mark will say whether the article has been replied to, has been cached,
5608or has been saved. @xref{Other Marks}.
5609
5610@item i
5611Score as a number (@pxref{Scoring}).
5612@item z
5613@vindex gnus-summary-zcore-fuzz
5614Zcore, @samp{+} if above the default level and @samp{-} if below the
5615default level. If the difference between
5616@code{gnus-summary-default-score} and the score is less than
5617@code{gnus-summary-zcore-fuzz}, this spec will not be used.
5618@item V
5619Total thread score.
5620@item x
5621@code{Xref}.
5622@item D
5623@code{Date}.
5624@item d
5625The @code{Date} in @code{DD-MMM} format.
5626@item o
5627The @code{Date} in @var{YYYYMMDD}@code{T}@var{HHMMSS} format.
5628@item M
5629@code{Message-ID}.
5630@item r
5631@code{References}.
5632@item t
5633Number of articles in the current sub-thread. Using this spec will slow
5634down summary buffer generation somewhat.
5635@item e
5636An @samp{=} (@code{gnus-not-empty-thread-mark}) will be displayed if the
5637article has any children.
5638@item P
5639The line number.
5640@item O
5641Download mark.
5642@item *
5643Desired cursor position (instead of after first colon).
5644@item &user-date;
5645Age sensitive date format. Various date format is defined in
5646@code{gnus-user-date-format-alist}.
5647@item u
5648User defined specifier. The next character in the format string should
5649be a letter. Gnus will call the function
5650@code{gnus-user-format-function-@var{x}}, where @var{x} is the letter
5651following @samp{%u}. The function will be passed the current header as
5652argument. The function should return a string, which will be inserted
5653into the summary just like information from any other summary specifier.
5654@end table
5655
5656Text between @samp{%(} and @samp{%)} will be highlighted with
5657@code{gnus-mouse-face} when the mouse point is placed inside the area.
5658There can only be one such area.
5659
5660The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
5661have to be handled with care. For reasons of efficiency, Gnus will
5662compute what column these characters will end up in, and ``hard-code''
5663that. This means that it is invalid to have these specs after a
5664variable-length spec. Well, you might not be arrested, but your summary
5665buffer will look strange, which is bad enough.
5666
5667The smart choice is to have these specs as far to the left as possible.
5668(Isn't that the case with everything, though? But I digress.)
5669
5670This restriction may disappear in later versions of Gnus.
5671
5672
5673@node To From Newsgroups
5674@subsection To From Newsgroups
5675@cindex To
5676@cindex Newsgroups
5677
5678In some groups (particularly in archive groups), the @code{From} header
5679isn't very interesting, since all the articles there are written by
5680you. To display the information in the @code{To} or @code{Newsgroups}
5681headers instead, you need to decide three things: What information to
5682gather; where to display it; and when to display it.
5683
5684@enumerate
5685@item
5686@vindex gnus-extra-headers
5687The reading of extra header information is controlled by the
5688@code{gnus-extra-headers}. This is a list of header symbols. For
5689instance:
5690
5691@lisp
5692(setq gnus-extra-headers
5693 '(To Newsgroups X-Newsreader))
5694@end lisp
5695
5696This will result in Gnus trying to obtain these three headers, and
5697storing it in header structures for later easy retrieval.
5698
5699@item
5700@findex gnus-extra-header
5701The value of these extra headers can be accessed via the
5702@code{gnus-extra-header} function. Here's a format line spec that will
5703access the @code{X-Newsreader} header:
5704
5705@example
5706"%~(form (gnus-extra-header 'X-Newsreader))@@"
5707@end example
5708
5709@item
5710@vindex gnus-ignored-from-addresses
5711The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
5712summary line spec returns the @code{To}, @code{Newsreader} or
5713@code{From} header. If this regexp matches the contents of the
5714@code{From} header, the value of the @code{To} or @code{Newsreader}
5715headers are used instead.
5716
01c52d31
MB
5717To distinguish regular articles from those where the @code{From} field
5718has been swapped, a string is prefixed to the @code{To} or
5719@code{Newsgroups} header in the summary line. By default the string is
5720@samp{-> } for @code{To} and @samp{=> } for @code{Newsgroups}, you can
5721customize these strings with @code{gnus-summary-to-prefix} and
5722@code{gnus-summary-newsgroup-prefix}.
5723
4009494e
GM
5724@end enumerate
5725
5726@vindex nnmail-extra-headers
5727A related variable is @code{nnmail-extra-headers}, which controls when
5728to include extra headers when generating overview (@acronym{NOV}) files.
5729If you have old overview files, you should regenerate them after
5730changing this variable, by entering the server buffer using @kbd{^},
5731and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause
5732regeneration.
5733
5734@vindex gnus-summary-line-format
5735You also have to instruct Gnus to display the data by changing the
5736@code{%n} spec to the @code{%f} spec in the
5737@code{gnus-summary-line-format} variable.
5738
5739In summary, you'd typically put something like the following in
5740@file{~/.gnus.el}:
5741
5742@lisp
5743(setq gnus-extra-headers
5744 '(To Newsgroups))
5745(setq nnmail-extra-headers gnus-extra-headers)
5746(setq gnus-summary-line-format
5747 "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n")
5748(setq gnus-ignored-from-addresses
5749 "Your Name Here")
5750@end lisp
5751
5752(The values listed above are the default values in Gnus. Alter them
5753to fit your needs.)
5754
5755A note for news server administrators, or for users who wish to try to
5756convince their news server administrator to provide some additional
5757support:
5758
5759The above is mostly useful for mail groups, where you have control over
5760the @acronym{NOV} files that are created. However, if you can persuade your
5761nntp admin to add (in the usual implementation, notably INN):
5762
5763@example
5764Newsgroups:full
5765@end example
5766
5767to the end of her @file{overview.fmt} file, then you can use that just
5768as you would the extra headers from the mail groups.
5769
5770
5771@node Summary Buffer Mode Line
5772@subsection Summary Buffer Mode Line
5773
5774@vindex gnus-summary-mode-line-format
5775You can also change the format of the summary mode bar (@pxref{Mode Line
5776Formatting}). Set @code{gnus-summary-mode-line-format} to whatever you
5777like. The default is @samp{Gnus: %%b [%A] %Z}.
5778
5779Here are the elements you can play with:
5780
5781@table @samp
5782@item G
5783Group name.
5784@item p
5785Unprefixed group name.
5786@item A
5787Current article number.
5788@item z
5789Current article score.
5790@item V
5791Gnus version.
5792@item U
5793Number of unread articles in this group.
5794@item e
5795Number of unread articles in this group that aren't displayed in the
5796summary buffer.
5797@item Z
5798A string with the number of unread and unselected articles represented
5799either as @samp{<%U(+%e) more>} if there are both unread and unselected
5800articles, and just as @samp{<%U more>} if there are just unread articles
5801and no unselected ones.
5802@item g
5803Shortish group name. For instance, @samp{rec.arts.anime} will be
5804shortened to @samp{r.a.anime}.
5805@item S
5806Subject of the current article.
5807@item u
5808User-defined spec (@pxref{User-Defined Specs}).
5809@item s
5810Name of the current score file (@pxref{Scoring}).
5811@item d
5812Number of dormant articles (@pxref{Unread Articles}).
5813@item t
5814Number of ticked articles (@pxref{Unread Articles}).
5815@item r
5816Number of articles that have been marked as read in this session.
5817@item E
5818Number of articles expunged by the score files.
5819@end table
5820
5821
5822@node Summary Highlighting
5823@subsection Summary Highlighting
5824
5825@table @code
5826
5827@item gnus-visual-mark-article-hook
5828@vindex gnus-visual-mark-article-hook
5829This hook is run after selecting an article. It is meant to be used for
5830highlighting the article in some way. It is not run if
5831@code{gnus-visual} is @code{nil}.
5832
5833@item gnus-summary-update-hook
5834@vindex gnus-summary-update-hook
5835This hook is called when a summary line is changed. It is not run if
5836@code{gnus-visual} is @code{nil}.
5837
5838@item gnus-summary-selected-face
5839@vindex gnus-summary-selected-face
5840This is the face (or @dfn{font} as some people call it) used to
5841highlight the current article in the summary buffer.
5842
5843@item gnus-summary-highlight
5844@vindex gnus-summary-highlight
5845Summary lines are highlighted according to this variable, which is a
5846list where the elements are of the format @code{(@var{form}
5847. @var{face})}. If you would, for instance, like ticked articles to be
5848italic and high-scored articles to be bold, you could set this variable
5849to something like
5850@lisp
5851(((eq mark gnus-ticked-mark) . italic)
5852 ((> score default) . bold))
5853@end lisp
5854As you may have guessed, if @var{form} returns a non-@code{nil} value,
5855@var{face} will be applied to the line.
5856@end table
5857
5858
5859@node Summary Maneuvering
5860@section Summary Maneuvering
5861@cindex summary movement
5862
5863All the straight movement commands understand the numeric prefix and
5864behave pretty much as you'd expect.
5865
5866None of these commands select articles.
5867
5868@table @kbd
5869@item G M-n
5870@itemx M-n
5871@kindex M-n (Summary)
5872@kindex G M-n (Summary)
5873@findex gnus-summary-next-unread-subject
5874Go to the next summary line of an unread article
5875(@code{gnus-summary-next-unread-subject}).
5876
5877@item G M-p
5878@itemx M-p
5879@kindex M-p (Summary)
5880@kindex G M-p (Summary)
5881@findex gnus-summary-prev-unread-subject
5882Go to the previous summary line of an unread article
5883(@code{gnus-summary-prev-unread-subject}).
5884
5885@item G g
5886@kindex G g (Summary)
5887@findex gnus-summary-goto-subject
5888Ask for an article number and then go to the summary line of that article
5889without displaying the article (@code{gnus-summary-goto-subject}).
5890@end table
5891
5892If Gnus asks you to press a key to confirm going to the next group, you
5893can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
5894buffer, searching for the next group to read without actually returning
5895to the group buffer.
5896
5897Variables related to summary movement:
5898
5899@table @code
5900
5901@vindex gnus-auto-select-next
5902@item gnus-auto-select-next
5903If you issue one of the movement commands (like @kbd{n}) and there are
5904no more unread articles after the current one, Gnus will offer to go to
5905the next group. If this variable is @code{t} and the next group is
5906empty, Gnus will exit summary mode and return to the group buffer. If
5907this variable is neither @code{t} nor @code{nil}, Gnus will select the
5908next group with unread articles. As a special case, if this variable
5909is @code{quietly}, Gnus will select the next group without asking for
5910confirmation. If this variable is @code{almost-quietly}, the same
5911will happen only if you are located on the last article in the group.
5912Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
5913command will go to the next group without confirmation. Also
5914@pxref{Group Levels}.
5915
5916@item gnus-auto-select-same
5917@vindex gnus-auto-select-same
5918If non-@code{nil}, all the movement commands will try to go to the next
5919article with the same subject as the current. (@dfn{Same} here might
5920mean @dfn{roughly equal}. See @code{gnus-summary-gather-subject-limit}
5921for details (@pxref{Customizing Threading}).) If there are no more
5922articles with the same subject, go to the first unread article.
5923
5924This variable is not particularly useful if you use a threaded display.
5925
5926@item gnus-summary-check-current
5927@vindex gnus-summary-check-current
5928If non-@code{nil}, all the ``unread'' movement commands will not proceed
5929to the next (or previous) article if the current article is unread.
5930Instead, they will choose the current article.
5931
5932@item gnus-auto-center-summary
5933@vindex gnus-auto-center-summary
5934If non-@code{nil}, Gnus will keep the point in the summary buffer
5935centered at all times. This makes things quite tidy, but if you have a
5936slow network connection, or simply do not like this un-Emacsism, you can
5937set this variable to @code{nil} to get the normal Emacs scrolling
5938action. This will also inhibit horizontal re-centering of the summary
5939buffer, which might make it more inconvenient to read extremely long
5940threads.
5941
5942This variable can also be a number. In that case, center the window at
5943the given number of lines from the top.
5944
85115796
KY
5945@item gnus-summary-stop-at-end-of-message
5946@vindex gnus-summary-stop-at-end-of-message
5947If non-@code{nil}, don't go to the next article when hitting
5948@kbd{SPC}, and you're at the end of the article.
5949
4009494e
GM
5950@end table
5951
5952
5953@node Choosing Articles
5954@section Choosing Articles
5955@cindex selecting articles
5956
5957@menu
5958* Choosing Commands:: Commands for choosing articles.
5959* Choosing Variables:: Variables that influence these commands.
5960@end menu
5961
5962
5963@node Choosing Commands
5964@subsection Choosing Commands
5965
5966None of the following movement commands understand the numeric prefix,
5967and they all select and display an article.
5968
5969If you want to fetch new articles or redisplay the group, see
5970@ref{Exiting the Summary Buffer}.
5971
5972@table @kbd
5973@item SPACE
5974@kindex SPACE (Summary)
5975@findex gnus-summary-next-page
5976Select the current article, or, if that one's read already, the next
5977unread article (@code{gnus-summary-next-page}).
5978
5979If you have an article window open already and you press @kbd{SPACE}
5980again, the article will be scrolled. This lets you conveniently
5981@kbd{SPACE} through an entire newsgroup. @xref{Paging the Article}.
5982
5983@item G n
5984@itemx n
5985@kindex n (Summary)
5986@kindex G n (Summary)
5987@findex gnus-summary-next-unread-article
5988@c @icon{gnus-summary-next-unread}
5989Go to next unread article (@code{gnus-summary-next-unread-article}).
5990
5991@item G p
5992@itemx p
5993@kindex p (Summary)
5994@findex gnus-summary-prev-unread-article
5995@c @icon{gnus-summary-prev-unread}
5996Go to previous unread article (@code{gnus-summary-prev-unread-article}).
5997
5998@item G N
5999@itemx N
6000@kindex N (Summary)
6001@kindex G N (Summary)
6002@findex gnus-summary-next-article
6003Go to the next article (@code{gnus-summary-next-article}).
6004
6005@item G P
6006@itemx P
6007@kindex P (Summary)
6008@kindex G P (Summary)
6009@findex gnus-summary-prev-article
6010Go to the previous article (@code{gnus-summary-prev-article}).
6011
6012@item G C-n
6013@kindex G C-n (Summary)
6014@findex gnus-summary-next-same-subject
6015Go to the next article with the same subject
6016(@code{gnus-summary-next-same-subject}).
6017
6018@item G C-p
6019@kindex G C-p (Summary)
6020@findex gnus-summary-prev-same-subject
6021Go to the previous article with the same subject
6022(@code{gnus-summary-prev-same-subject}).
6023
6024@item G f
6025@itemx .
6026@kindex G f (Summary)
6027@kindex . (Summary)
6028@findex gnus-summary-first-unread-article
6029Go to the first unread article
6030(@code{gnus-summary-first-unread-article}).
6031
6032@item G b
6033@itemx ,
6034@kindex G b (Summary)
6035@kindex , (Summary)
6036@findex gnus-summary-best-unread-article
6037Go to the unread article with the highest score
6038(@code{gnus-summary-best-unread-article}). If given a prefix argument,
6039go to the first unread article that has a score over the default score.
6040
6041@item G l
6042@itemx l
6043@kindex l (Summary)
6044@kindex G l (Summary)
6045@findex gnus-summary-goto-last-article
6046Go to the previous article read (@code{gnus-summary-goto-last-article}).
6047
6048@item G o
6049@kindex G o (Summary)
6050@findex gnus-summary-pop-article
6051@cindex history
6052@cindex article history
6053Pop an article off the summary history and go to this article
6054(@code{gnus-summary-pop-article}). This command differs from the
6055command above in that you can pop as many previous articles off the
6056history as you like, while @kbd{l} toggles the two last read articles.
6057For a somewhat related issue (if you use these commands a lot),
6058@pxref{Article Backlog}.
6059
6060@item G j
6061@itemx j
6062@kindex j (Summary)
6063@kindex G j (Summary)
6064@findex gnus-summary-goto-article
6065Ask for an article number or @code{Message-ID}, and then go to that
6066article (@code{gnus-summary-goto-article}).
6067
6068@end table
6069
6070
6071@node Choosing Variables
6072@subsection Choosing Variables
6073
6074Some variables relevant for moving and selecting articles:
6075
6076@table @code
6077@item gnus-auto-extend-newsgroup
6078@vindex gnus-auto-extend-newsgroup
6079All the movement commands will try to go to the previous (or next)
6080article, even if that article isn't displayed in the Summary buffer if
6081this variable is non-@code{nil}. Gnus will then fetch the article from
6082the server and display it in the article buffer.
6083
6084@item gnus-select-article-hook
6085@vindex gnus-select-article-hook
6086This hook is called whenever an article is selected. The default is
6087@code{nil}. If you would like each article to be saved in the Agent as
6088you read it, putting @code{gnus-agent-fetch-selected-article} on this
6089hook will do so.
6090
6091@item gnus-mark-article-hook
6092@vindex gnus-mark-article-hook
6093@findex gnus-summary-mark-unread-as-read
6094@findex gnus-summary-mark-read-and-unread-as-read
6095@findex gnus-unread-mark
6096This hook is called whenever an article is selected. It is intended to
6097be used for marking articles as read. The default value is
6098@code{gnus-summary-mark-read-and-unread-as-read}, and will change the
6099mark of almost any article you read to @code{gnus-read-mark}. The only
6100articles not affected by this function are ticked, dormant, and
6101expirable articles. If you'd instead like to just have unread articles
6102marked as read, you can use @code{gnus-summary-mark-unread-as-read}
6103instead. It will leave marks like @code{gnus-low-score-mark},
6104@code{gnus-del-mark} (and so on) alone.
6105
6106@end table
6107
6108
6109@node Paging the Article
6110@section Scrolling the Article
6111@cindex article scrolling
6112
6113@table @kbd
6114
6115@item SPACE
6116@kindex SPACE (Summary)
6117@findex gnus-summary-next-page
6118Pressing @kbd{SPACE} will scroll the current article forward one page,
6119or, if you have come to the end of the current article, will choose the
6120next article (@code{gnus-summary-next-page}).
6121
6122@vindex gnus-article-boring-faces
6123@vindex gnus-article-skip-boring
6124If @code{gnus-article-skip-boring} is non-@code{nil} and the rest of
6125the article consists only of citations and signature, then it will be
6126skipped; the next article will be shown instead. You can customize
6127what is considered uninteresting with
6128@code{gnus-article-boring-faces}. You can manually view the article's
6129pages, no matter how boring, using @kbd{C-M-v}.
6130
6131@item DEL
6132@kindex DEL (Summary)
6133@findex gnus-summary-prev-page
6134Scroll the current article back one page (@code{gnus-summary-prev-page}).
6135
6136@item RET
6137@kindex RET (Summary)
6138@findex gnus-summary-scroll-up
6139Scroll the current article one line forward
6140(@code{gnus-summary-scroll-up}).
6141
6142@item M-RET
6143@kindex M-RET (Summary)
6144@findex gnus-summary-scroll-down
6145Scroll the current article one line backward
6146(@code{gnus-summary-scroll-down}).
6147
6148@item A g
6149@itemx g
6150@kindex A g (Summary)
6151@kindex g (Summary)
6152@findex gnus-summary-show-article
6153@vindex gnus-summary-show-article-charset-alist
6154(Re)fetch the current article (@code{gnus-summary-show-article}). If
6155given a prefix, fetch the current article, but don't run any of the
389b76fa
G
6156article treatment functions. If given a prefix twice (i.e., @kbd{C-u
6157C-u g'}), show a completely ``raw'' article, just the way it came from
6158the server.
4009494e 6159
e3e955fe 6160@cindex charset, view article with different charset
4009494e
GM
6161If given a numerical prefix, you can do semi-manual charset stuff.
6162@kbd{C-u 0 g cn-gb-2312 RET} will decode the message as if it were
6163encoded in the @code{cn-gb-2312} charset. If you have
6164
6165@lisp
6166(setq gnus-summary-show-article-charset-alist
6167 '((1 . cn-gb-2312)
6168 (2 . big5)))
6169@end lisp
6170
6171then you can say @kbd{C-u 1 g} to get the same effect.
6172
6173@item A <
6174@itemx <
6175@kindex < (Summary)
6176@kindex A < (Summary)
6177@findex gnus-summary-beginning-of-article
6178Scroll to the beginning of the article
6179(@code{gnus-summary-beginning-of-article}).
6180
6181@item A >
6182@itemx >
6183@kindex > (Summary)
6184@kindex A > (Summary)
6185@findex gnus-summary-end-of-article
6186Scroll to the end of the article (@code{gnus-summary-end-of-article}).
6187
6188@item A s
6189@itemx s
6190@kindex A s (Summary)
6191@kindex s (Summary)
6192@findex gnus-summary-isearch-article
6193Perform an isearch in the article buffer
6194(@code{gnus-summary-isearch-article}).
6195
6196@item h
6197@kindex h (Summary)
6198@findex gnus-summary-select-article-buffer
6199Select the article buffer (@code{gnus-summary-select-article-buffer}).
6200
6201@end table
6202
6203
6204@node Reply Followup and Post
6205@section Reply, Followup and Post
6206
6207@menu
6208* Summary Mail Commands:: Sending mail.
6209* Summary Post Commands:: Sending news.
6210* Summary Message Commands:: Other Message-related commands.
6211* Canceling and Superseding::
6212@end menu
6213
6214
6215@node Summary Mail Commands
6216@subsection Summary Mail Commands
6217@cindex mail
6218@cindex composing mail
6219
6220Commands for composing a mail message:
6221
6222@table @kbd
6223
6224@item S r
6225@itemx r
6226@kindex S r (Summary)
6227@kindex r (Summary)
6228@findex gnus-summary-reply
6229@c @icon{gnus-summary-mail-reply}
6230@c @icon{gnus-summary-reply}
6231Mail a reply to the author of the current article
6232(@code{gnus-summary-reply}).
6233
6234@item S R
6235@itemx R
6236@kindex R (Summary)
6237@kindex S R (Summary)
6238@findex gnus-summary-reply-with-original
6239@c @icon{gnus-summary-reply-with-original}
6240Mail a reply to the author of the current article and include the
6241original message (@code{gnus-summary-reply-with-original}). This
6242command uses the process/prefix convention.
6243
6244@item S w
6245@kindex S w (Summary)
6246@findex gnus-summary-wide-reply
6247Mail a wide reply to the author of the current article
6248(@code{gnus-summary-wide-reply}). A @dfn{wide reply} is a reply that
6249goes out to all people listed in the @code{To}, @code{From} (or
6250@code{Reply-to}) and @code{Cc} headers. If @code{Mail-Followup-To} is
6251present, that's used instead.
6252
6253@item S W
6254@kindex S W (Summary)
6255@findex gnus-summary-wide-reply-with-original
6256Mail a wide reply to the current article and include the original
6257message (@code{gnus-summary-wide-reply-with-original}). This command uses
b0e4f3fc
KY
6258the process/prefix convention, but only uses the headers from the
6259first article to determine the recipients.
4009494e
GM
6260
6261@item S v
6262@kindex S v (Summary)
6263@findex gnus-summary-very-wide-reply
6264Mail a very wide reply to the author of the current article
6265(@code{gnus-summary-wide-reply}). A @dfn{very wide reply} is a reply
6266that goes out to all people listed in the @code{To}, @code{From} (or
6267@code{Reply-to}) and @code{Cc} headers in all the process/prefixed
6268articles. This command uses the process/prefix convention.
6269
6270@item S V
6271@kindex S V (Summary)
6272@findex gnus-summary-very-wide-reply-with-original
6273Mail a very wide reply to the author of the current article and include the
6274original message (@code{gnus-summary-very-wide-reply-with-original}). This
6275command uses the process/prefix convention.
6276
6277@item S B r
6278@kindex S B r (Summary)
6279@findex gnus-summary-reply-broken-reply-to
6280Mail a reply to the author of the current article but ignore the
6281@code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}).
6282If you need this because a mailing list incorrectly sets a
6283@code{Reply-To} header pointing to the list, you probably want to set
6284the @code{broken-reply-to} group parameter instead, so things will work
6285correctly. @xref{Group Parameters}.
6286
6287@item S B R
6288@kindex S B R (Summary)
6289@findex gnus-summary-reply-broken-reply-to-with-original
6290Mail a reply to the author of the current article and include the
6291original message but ignore the @code{Reply-To} field
6292(@code{gnus-summary-reply-broken-reply-to-with-original}).
6293
6294@item S o m
6295@itemx C-c C-f
6296@kindex S o m (Summary)
6297@kindex C-c C-f (Summary)
6298@findex gnus-summary-mail-forward
6299@c @icon{gnus-summary-mail-forward}
6300Forward the current article to some other person
6301(@code{gnus-summary-mail-forward}). If no prefix is given, the message
6302is forwarded according to the value of (@code{message-forward-as-mime})
6303and (@code{message-forward-show-mml}); if the prefix is 1, decode the
6304message and forward directly inline; if the prefix is 2, forward message
6305as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
6306forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
6307directly inline; otherwise, the message is forwarded as no prefix given
6308but use the flipped value of (@code{message-forward-as-mime}). By
6309default, the message is decoded and forwarded as an rfc822 @acronym{MIME}
6310section.
6311
6312@item S m
6313@itemx m
6314@kindex m (Summary)
6315@kindex S m (Summary)
6316@findex gnus-summary-mail-other-window
6317@c @icon{gnus-summary-mail-originate}
6318Prepare a mail (@code{gnus-summary-mail-other-window}). By default, use
6319the posting style of the current group. If given a prefix, disable that.
6320If the prefix is 1, prompt for a group name to find the posting style.
6321
6322@item S i
4009494e
GM
6323@kindex S i (Summary)
6324@findex gnus-summary-news-other-window
6325Prepare a news (@code{gnus-summary-news-other-window}). By default,
6326post to the current group. If given a prefix, disable that. If the
6327prefix is 1, prompt for a group to post to.
6328
6329This function actually prepares a news even when using mail groups.
6330This is useful for ``posting'' messages to mail groups without actually
6331sending them over the network: they're just saved directly to the group
6332in question. The corresponding back end must have a request-post method
6333for this to work though.
6334
6335@item S D b
6336@kindex S D b (Summary)
6337@findex gnus-summary-resend-bounced-mail
6338@cindex bouncing mail
6339If you have sent a mail, but the mail was bounced back to you for some
6340reason (wrong address, transient failure), you can use this command to
6341resend that bounced mail (@code{gnus-summary-resend-bounced-mail}). You
6342will be popped into a mail buffer where you can edit the headers before
6343sending the mail off again. If you give a prefix to this command, and
6344the bounced mail is a reply to some other mail, Gnus will try to fetch
6345that mail and display it for easy perusal of its headers. This might
6346very well fail, though.
6347
6348@item S D r
6349@kindex S D r (Summary)
6350@findex gnus-summary-resend-message
6351Not to be confused with the previous command,
6352@code{gnus-summary-resend-message} will prompt you for an address to
6353send the current message off to, and then send it to that place. The
6354headers of the message won't be altered---but lots of headers that say
6355@code{Resent-To}, @code{Resent-From} and so on will be added. This
6356means that you actually send a mail to someone that has a @code{To}
6357header that (probably) points to yourself. This will confuse people.
6358So, natcherly you'll only do that if you're really eVIl.
6359
6360This command is mainly used if you have several accounts and want to
6361ship a mail to a different account of yours. (If you're both
6362@code{root} and @code{postmaster} and get a mail for @code{postmaster}
6363to the @code{root} account, you may want to resend it to
6364@code{postmaster}. Ordnung muss sein!
6365
6366This command understands the process/prefix convention
6367(@pxref{Process/Prefix}).
6368
6369@item S D e
6370@kindex S D e (Summary)
6371@findex gnus-summary-resend-message-edit
6372
6373Like the previous command, but will allow you to edit the message as
6374if it were a new message before resending.
6375
6376@item S O m
6377@kindex S O m (Summary)
6378@findex gnus-uu-digest-mail-forward
6379Digest the current series (@pxref{Decoding Articles}) and forward the
6380result using mail (@code{gnus-uu-digest-mail-forward}). This command
6381uses the process/prefix convention (@pxref{Process/Prefix}).
6382
6383@item S M-c
6384@kindex S M-c (Summary)
6385@findex gnus-summary-mail-crosspost-complaint
6386@cindex crossposting
6387@cindex excessive crossposting
6388Send a complaint about excessive crossposting to the author of the
6389current article (@code{gnus-summary-mail-crosspost-complaint}).
6390
6391@findex gnus-crosspost-complaint
6392This command is provided as a way to fight back against the current
6393crossposting pandemic that's sweeping Usenet. It will compose a reply
6394using the @code{gnus-crosspost-complaint} variable as a preamble. This
6395command understands the process/prefix convention
6396(@pxref{Process/Prefix}) and will prompt you before sending each mail.
6397
6398@end table
6399
6400Also @xref{Header Commands, ,Header Commands, message, The Message
6401Manual}, for more information.
6402
6403
6404@node Summary Post Commands
6405@subsection Summary Post Commands
6406@cindex post
6407@cindex composing news
6408
6409Commands for posting a news article:
6410
6411@table @kbd
6412@item S p
6413@itemx a
6414@kindex a (Summary)
6415@kindex S p (Summary)
6416@findex gnus-summary-post-news
6417@c @icon{gnus-summary-post-news}
6418Prepare for posting an article (@code{gnus-summary-post-news}). By
6419default, post to the current group. If given a prefix, disable that.
6420If the prefix is 1, prompt for another group instead.
6421
6422@item S f
6423@itemx f
6424@kindex f (Summary)
6425@kindex S f (Summary)
6426@findex gnus-summary-followup
6427@c @icon{gnus-summary-followup}
6428Post a followup to the current article (@code{gnus-summary-followup}).
6429
6430@item S F
6431@itemx F
6432@kindex S F (Summary)
6433@kindex F (Summary)
6434@c @icon{gnus-summary-followup-with-original}
6435@findex gnus-summary-followup-with-original
6436Post a followup to the current article and include the original message
6437(@code{gnus-summary-followup-with-original}). This command uses the
6438process/prefix convention.
6439
6440@item S n
6441@kindex S n (Summary)
6442@findex gnus-summary-followup-to-mail
6443Post a followup to the current article via news, even if you got the
6444message through mail (@code{gnus-summary-followup-to-mail}).
6445
6446@item S N
6447@kindex S N (Summary)
6448@findex gnus-summary-followup-to-mail-with-original
6449Post a followup to the current article via news, even if you got the
6450message through mail and include the original message
6451(@code{gnus-summary-followup-to-mail-with-original}). This command uses
6452the process/prefix convention.
6453
6454@item S o p
6455@kindex S o p (Summary)
6456@findex gnus-summary-post-forward
6457Forward the current article to a newsgroup
6458(@code{gnus-summary-post-forward}).
6459 If no prefix is given, the message is forwarded according to the value
6460of (@code{message-forward-as-mime}) and
6461(@code{message-forward-show-mml}); if the prefix is 1, decode the
6462message and forward directly inline; if the prefix is 2, forward message
6463as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
6464forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
6465directly inline; otherwise, the message is forwarded as no prefix given
6466but use the flipped value of (@code{message-forward-as-mime}). By
6467default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section.
6468
6469@item S O p
6470@kindex S O p (Summary)
6471@findex gnus-uu-digest-post-forward
6472@cindex digests
6473@cindex making digests
6474Digest the current series and forward the result to a newsgroup
6475(@code{gnus-uu-digest-post-forward}). This command uses the
6476process/prefix convention.
6477
6478@item S u
6479@kindex S u (Summary)
6480@findex gnus-uu-post-news
6481@c @icon{gnus-uu-post-news}
6482Uuencode a file, split it into parts, and post it as a series
6483(@code{gnus-uu-post-news}). (@pxref{Uuencoding and Posting}).
6484@end table
6485
6486Also @xref{Header Commands, ,Header Commands, message, The Message
6487Manual}, for more information.
6488
6489
6490@node Summary Message Commands
6491@subsection Summary Message Commands
6492
6493@table @kbd
6494@item S y
6495@kindex S y (Summary)
6496@findex gnus-summary-yank-message
6497Yank the current article into an already existing Message composition
6498buffer (@code{gnus-summary-yank-message}). This command prompts for
6499what message buffer you want to yank into, and understands the
6500process/prefix convention (@pxref{Process/Prefix}).
6501
6502@end table
6503
6504
6505@node Canceling and Superseding
6506@subsection Canceling Articles
6507@cindex canceling articles
6508@cindex superseding articles
6509
6510Have you ever written something, and then decided that you really,
6511really, really wish you hadn't posted that?
6512
6513Well, you can't cancel mail, but you can cancel posts.
6514
6515@findex gnus-summary-cancel-article
6516@kindex C (Summary)
6517@c @icon{gnus-summary-cancel-article}
6518Find the article you wish to cancel (you can only cancel your own
6519articles, so don't try any funny stuff). Then press @kbd{C} or @kbd{S
6520c} (@code{gnus-summary-cancel-article}). Your article will be
6521canceled---machines all over the world will be deleting your article.
6522This command uses the process/prefix convention (@pxref{Process/Prefix}).
6523
6524Be aware, however, that not all sites honor cancels, so your article may
6525live on here and there, while most sites will delete the article in
6526question.
6527
6528Gnus will use the ``current'' select method when canceling. If you
6529want to use the standard posting method, use the @samp{a} symbolic
6530prefix (@pxref{Symbolic Prefixes}).
6531
6532Gnus ensures that only you can cancel your own messages using a
6533@code{Cancel-Lock} header (@pxref{Canceling News, Canceling News, ,
6534message, Message Manual}).
6535
6536If you discover that you have made some mistakes and want to do some
6537corrections, you can post a @dfn{superseding} article that will replace
6538your original article.
6539
6540@findex gnus-summary-supersede-article
6541@kindex S (Summary)
6542Go to the original article and press @kbd{S s}
6543(@code{gnus-summary-supersede-article}). You will be put in a buffer
6544where you can edit the article all you want before sending it off the
6545usual way.
6546
6547The same goes for superseding as for canceling, only more so: Some
6548sites do not honor superseding. On those sites, it will appear that you
6549have posted almost the same article twice.
6550
6551If you have just posted the article, and change your mind right away,
6552there is a trick you can use to cancel/supersede the article without
6553waiting for the article to appear on your site first. You simply return
6554to the post buffer (which is called @code{*sent ...*}). There you will
6555find the article you just posted, with all the headers intact. Change
6556the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
6557header by substituting one of those words for the word
6558@code{Message-ID}. Then just press @kbd{C-c C-c} to send the article as
6559you would do normally. The previous article will be
6560canceled/superseded.
6561
6562Just remember, kids: There is no 'c' in 'supersede'.
6563
6564@node Delayed Articles
6565@section Delayed Articles
6566@cindex delayed sending
6567@cindex send delayed
6568
6569Sometimes, you might wish to delay the sending of a message. For
6570example, you might wish to arrange for a message to turn up just in time
6571to remind your about the birthday of your Significant Other. For this,
6572there is the @code{gnus-delay} package. Setup is simple:
6573
6574@lisp
6575(gnus-delay-initialize)
6576@end lisp
6577
6578@findex gnus-delay-article
6579Normally, to send a message you use the @kbd{C-c C-c} command from
6580Message mode. To delay a message, use @kbd{C-c C-j}
6581(@code{gnus-delay-article}) instead. This will ask you for how long the
6582message should be delayed. Possible answers are:
6583
6584@itemize @bullet
6585@item
6586A time span. Consists of an integer and a letter. For example,
6587@code{42d} means to delay for 42 days. Available letters are @code{m}
6588(minutes), @code{h} (hours), @code{d} (days), @code{w} (weeks), @code{M}
6589(months) and @code{Y} (years).
6590
6591@item
6592A specific date. Looks like @code{YYYY-MM-DD}. The message will be
6593delayed until that day, at a specific time (eight o'clock by default).
6594See also @code{gnus-delay-default-hour}.
6595
6596@item
6597A specific time of day. Given in @code{hh:mm} format, 24h, no am/pm
6598stuff. The deadline will be at that time today, except if that time has
6599already passed, then it's at the given time tomorrow. So if it's ten
6600o'clock in the morning and you specify @code{11:15}, then the deadline
6601is one hour and fifteen minutes hence. But if you specify @code{9:20},
6602that means a time tomorrow.
6603@end itemize
6604
6605The action of the @code{gnus-delay-article} command is influenced by a
6606couple of variables:
6607
6608@table @code
6609@item gnus-delay-default-hour
6610@vindex gnus-delay-default-hour
6611When you specify a specific date, the message will be due on that hour
6612on the given date. Possible values are integers 0 through 23.
6613
6614@item gnus-delay-default-delay
6615@vindex gnus-delay-default-delay
6616This is a string and gives the default delay. It can be of any of the
6617formats described above.
6618
6619@item gnus-delay-group
6620@vindex gnus-delay-group
6621Delayed articles will be kept in this group on the drafts server until
6622they are due. You probably don't need to change this. The default
6623value is @code{"delayed"}.
6624
6625@item gnus-delay-header
6626@vindex gnus-delay-header
6627The deadline for each article will be stored in a header. This variable
6628is a string and gives the header name. You probably don't need to
6629change this. The default value is @code{"X-Gnus-Delayed"}.
6630@end table
6631
6632The way delaying works is like this: when you use the
6633@code{gnus-delay-article} command, you give a certain delay. Gnus
6634calculates the deadline of the message and stores it in the
6635@code{X-Gnus-Delayed} header and puts the message in the
6636@code{nndraft:delayed} group.
6637
6638@findex gnus-delay-send-queue
6639And whenever you get new news, Gnus looks through the group for articles
6640which are due and sends them. It uses the @code{gnus-delay-send-queue}
6641function for this. By default, this function is added to the hook
6642@code{gnus-get-new-news-hook}. But of course, you can change this.
6643Maybe you want to use the demon to send drafts? Just tell the demon to
6644execute the @code{gnus-delay-send-queue} function.
6645
6646@table @code
6647@item gnus-delay-initialize
6648@findex gnus-delay-initialize
6649By default, this function installs @code{gnus-delay-send-queue} in
6650@code{gnus-get-new-news-hook}. But it accepts the optional second
6651argument @code{no-check}. If it is non-@code{nil},
6652@code{gnus-get-new-news-hook} is not changed. The optional first
6653argument is ignored.
6654
6655For example, @code{(gnus-delay-initialize nil t)} means to do nothing.
6656Presumably, you want to use the demon for sending due delayed articles.
6657Just don't forget to set that up :-)
6658@end table
6659
e7842e69
KY
6660When delaying an article with @kbd{C-c C-j}, Message mode will
6661automatically add a @code{"Date"} header with the current time. In
6662many cases you probably want the @code{"Date"} header to reflect the
6663time the message is sent instead. To do this, you have to delete
6664@code{Date} from @code{message-draft-headers}.
6665
4009494e
GM
6666
6667@node Marking Articles
6668@section Marking Articles
6669@cindex article marking
6670@cindex article ticking
6671@cindex marks
6672
6673There are several marks you can set on an article.
6674
6675You have marks that decide the @dfn{readedness} (whoo, neato-keano
6676neologism ohoy!) of the article. Alphabetic marks generally mean
6677@dfn{read}, while non-alphabetic characters generally mean @dfn{unread}.
6678
6679In addition, you also have marks that do not affect readedness.
6680
6681@ifinfo
6682There's a plethora of commands for manipulating these marks.
6683@end ifinfo
6684
6685@menu
6686* Unread Articles:: Marks for unread articles.
6687* Read Articles:: Marks for read articles.
6688* Other Marks:: Marks that do not affect readedness.
6689* Setting Marks:: How to set and remove marks.
6690* Generic Marking Commands:: How to customize the marking.
6691* Setting Process Marks:: How to mark articles for later processing.
6692@end menu
6693
6694
6695@node Unread Articles
6696@subsection Unread Articles
6697
6698The following marks mark articles as (kinda) unread, in one form or
6699other.
6700
6701@table @samp
6702@item !
6703@vindex gnus-ticked-mark
6704Marked as ticked (@code{gnus-ticked-mark}).
6705
6706@dfn{Ticked articles} are articles that will remain visible always. If
6707you see an article that you find interesting, or you want to put off
6708reading it, or replying to it, until sometime later, you'd typically
6709tick it. However, articles can be expired (from news servers by the
6710news server software, Gnus itself never expires ticked messages), so if
6711you want to keep an article forever, you'll have to make it persistent
6712(@pxref{Persistent Articles}).
6713
6714@item ?
6715@vindex gnus-dormant-mark
6716Marked as dormant (@code{gnus-dormant-mark}).
6717
6718@dfn{Dormant articles} will only appear in the summary buffer if there
6719are followups to it. If you want to see them even if they don't have
6720followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
6721Otherwise (except for the visibility issue), they are just like ticked
6722messages.
6723
6724@item SPACE
6725@vindex gnus-unread-mark
6726Marked as unread (@code{gnus-unread-mark}).
6727
6728@dfn{Unread articles} are articles that haven't been read at all yet.
6729@end table
6730
6731
6732@node Read Articles
6733@subsection Read Articles
6734@cindex expirable mark
6735
6736All the following marks mark articles as read.
6737
6738@table @samp
6739
6740@item r
6741@vindex gnus-del-mark
6742These are articles that the user has marked as read with the @kbd{d}
6743command manually, more or less (@code{gnus-del-mark}).
6744
6745@item R
6746@vindex gnus-read-mark
6747Articles that have actually been read (@code{gnus-read-mark}).
6748
6749@item O
6750@vindex gnus-ancient-mark
6751Articles that were marked as read in previous sessions and are now
6752@dfn{old} (@code{gnus-ancient-mark}).
6753
6754@item K
6755@vindex gnus-killed-mark
6756Marked as killed (@code{gnus-killed-mark}).
6757
6758@item X
6759@vindex gnus-kill-file-mark
6760Marked as killed by kill files (@code{gnus-kill-file-mark}).
6761
6762@item Y
6763@vindex gnus-low-score-mark
6764Marked as read by having too low a score (@code{gnus-low-score-mark}).
6765
6766@item C
6767@vindex gnus-catchup-mark
6768Marked as read by a catchup (@code{gnus-catchup-mark}).
6769
6770@item G
6771@vindex gnus-canceled-mark
6772Canceled article (@code{gnus-canceled-mark})
6773
4009494e
GM
6774@item Q
6775@vindex gnus-sparse-mark
6776Sparsely reffed article (@code{gnus-sparse-mark}). @xref{Customizing
6777Threading}.
6778
6779@item M
6780@vindex gnus-duplicate-mark
6781Article marked as read by duplicate suppression
6782(@code{gnus-duplicate-mark}). @xref{Duplicate Suppression}.
6783
6784@end table
6785
6786All these marks just mean that the article is marked as read, really.
6787They are interpreted differently when doing adaptive scoring, though.
6788
6789One more special mark, though:
6790
6791@table @samp
6792@item E
6793@vindex gnus-expirable-mark
6794Marked as expirable (@code{gnus-expirable-mark}).
6795
6796Marking articles as @dfn{expirable} (or have them marked as such
6797automatically) doesn't make much sense in normal groups---a user doesn't
6798control expiring of news articles, but in mail groups, for instance,
6799articles marked as @dfn{expirable} can be deleted by Gnus at
6800any time.
6801@end table
6802
6803
6804@node Other Marks
6805@subsection Other Marks
6806@cindex process mark
6807@cindex bookmarks
6808
6809There are some marks that have nothing to do with whether the article is
6810read or not.
6811
6812@itemize @bullet
6813
6814@item
6815You can set a bookmark in the current article. Say you are reading a
6816long thesis on cats' urinary tracts, and have to go home for dinner
6817before you've finished reading the thesis. You can then set a bookmark
6818in the article, and Gnus will jump to this bookmark the next time it
6819encounters the article. @xref{Setting Marks}.
6820
6821@item
6822@vindex gnus-replied-mark
6823All articles that you have replied to or made a followup to (i.e., have
6824answered) will be marked with an @samp{A} in the second column
6825(@code{gnus-replied-mark}).
6826
6827@item
6828@vindex gnus-forwarded-mark
6829All articles that you have forwarded will be marked with an @samp{F} in
6830the second column (@code{gnus-forwarded-mark}).
6831
6832@item
6833@vindex gnus-cached-mark
6834Articles stored in the article cache will be marked with an @samp{*} in
6835the second column (@code{gnus-cached-mark}). @xref{Article Caching}.
6836
6837@item
6838@vindex gnus-saved-mark
6839Articles ``saved'' (in some manner or other; not necessarily
6840religiously) are marked with an @samp{S} in the second column
6841(@code{gnus-saved-mark}).
6842
6843@item
6844@vindex gnus-recent-mark
6845Articles that according to the server haven't been shown to the user
6846before are marked with a @samp{N} in the second column
6847(@code{gnus-recent-mark}). Note that not all servers support this
6848mark, in which case it simply never appears. Compare with
6849@code{gnus-unseen-mark}.
6850
6851@item
6852@vindex gnus-unseen-mark
6853Articles that haven't been seen before in Gnus by the user are marked
6854with a @samp{.} in the second column (@code{gnus-unseen-mark}).
6855Compare with @code{gnus-recent-mark}.
6856
6857@item
6858@vindex gnus-downloaded-mark
6859When using the Gnus agent (@pxref{Agent Basics}), articles may be
6860downloaded for unplugged (offline) viewing. If you are using the
6861@samp{%O} spec, these articles get the @samp{+} mark in that spec.
6862(The variable @code{gnus-downloaded-mark} controls which character to
6863use.)
6864
6865@item
6866@vindex gnus-undownloaded-mark
6867When using the Gnus agent (@pxref{Agent Basics}), some articles might
6868not have been downloaded. Such articles cannot be viewed while you
6869are unplugged (offline). If you are using the @samp{%O} spec, these
6870articles get the @samp{-} mark in that spec. (The variable
6871@code{gnus-undownloaded-mark} controls which character to use.)
6872
6873@item
6874@vindex gnus-downloadable-mark
6875The Gnus agent (@pxref{Agent Basics}) downloads some articles
6876automatically, but it is also possible to explicitly mark articles for
6877download, even if they would not be downloaded automatically. Such
6878explicitly-marked articles get the @samp{%} mark in the first column.
6879(The variable @code{gnus-downloadable-mark} controls which character to
6880use.)
6881
6882@item
6883@vindex gnus-not-empty-thread-mark
6884@vindex gnus-empty-thread-mark
6885If the @samp{%e} spec is used, the presence of threads or not will be
6886marked with @code{gnus-not-empty-thread-mark} and
6887@code{gnus-empty-thread-mark} in the third column, respectively.
6888
6889@item
6890@vindex gnus-process-mark
6891Finally we have the @dfn{process mark} (@code{gnus-process-mark}). A
6892variety of commands react to the presence of the process mark. For
6893instance, @kbd{X u} (@code{gnus-uu-decode-uu}) will uudecode and view
6894all articles that have been marked with the process mark. Articles
6895marked with the process mark have a @samp{#} in the second column.
6896
6897@end itemize
6898
6899You might have noticed that most of these ``non-readedness'' marks
6900appear in the second column by default. So if you have a cached, saved,
6901replied article that you have process-marked, what will that look like?
6902
6903Nothing much. The precedence rules go as follows: process -> cache ->
6904replied -> saved. So if the article is in the cache and is replied,
6905you'll only see the cache mark and not the replied mark.
6906
6907
6908@node Setting Marks
6909@subsection Setting Marks
6910@cindex setting marks
6911
6912All the marking commands understand the numeric prefix.
6913
6914@table @kbd
6915@item M c
6916@itemx M-u
6917@kindex M c (Summary)
6918@kindex M-u (Summary)
6919@findex gnus-summary-clear-mark-forward
6920@cindex mark as unread
6921Clear all readedness-marks from the current article
6922(@code{gnus-summary-clear-mark-forward}). In other words, mark the
6923article as unread.
6924
6925@item M t
6926@itemx !
6927@kindex ! (Summary)
6928@kindex M t (Summary)
6929@findex gnus-summary-tick-article-forward
6930Tick the current article (@code{gnus-summary-tick-article-forward}).
6931@xref{Article Caching}.
6932
6933@item M ?
6934@itemx ?
6935@kindex ? (Summary)
6936@kindex M ? (Summary)
6937@findex gnus-summary-mark-as-dormant
6938Mark the current article as dormant
6939(@code{gnus-summary-mark-as-dormant}). @xref{Article Caching}.
6940
6941@item M d
6942@itemx d
6943@kindex M d (Summary)
6944@kindex d (Summary)
6945@findex gnus-summary-mark-as-read-forward
6946Mark the current article as read
6947(@code{gnus-summary-mark-as-read-forward}).
6948
6949@item D
6950@kindex D (Summary)
6951@findex gnus-summary-mark-as-read-backward
6952Mark the current article as read and move point to the previous line
6953(@code{gnus-summary-mark-as-read-backward}).
6954
6955@item M k
6956@itemx k
6957@kindex k (Summary)
6958@kindex M k (Summary)
6959@findex gnus-summary-kill-same-subject-and-select
6960Mark all articles that have the same subject as the current one as read,
6961and then select the next unread article
6962(@code{gnus-summary-kill-same-subject-and-select}).
6963
6964@item M K
6965@itemx C-k
6966@kindex M K (Summary)
6967@kindex C-k (Summary)
6968@findex gnus-summary-kill-same-subject
6969Mark all articles that have the same subject as the current one as read
6970(@code{gnus-summary-kill-same-subject}).
6971
6972@item M C
6973@kindex M C (Summary)
6974@findex gnus-summary-catchup
6975@c @icon{gnus-summary-catchup}
6976Mark all unread articles as read (@code{gnus-summary-catchup}).
6977
6978@item M C-c
6979@kindex M C-c (Summary)
6980@findex gnus-summary-catchup-all
6981Mark all articles in the group as read---even the ticked and dormant
6982articles (@code{gnus-summary-catchup-all}).
6983
6984@item M H
6985@kindex M H (Summary)
6986@findex gnus-summary-catchup-to-here
6987Catchup the current group to point (before the point)
6988(@code{gnus-summary-catchup-to-here}).
6989
6990@item M h
6991@kindex M h (Summary)
6992@findex gnus-summary-catchup-from-here
6993Catchup the current group from point (after the point)
6994(@code{gnus-summary-catchup-from-here}).
6995
6996@item C-w
6997@kindex C-w (Summary)
6998@findex gnus-summary-mark-region-as-read
6999Mark all articles between point and mark as read
7000(@code{gnus-summary-mark-region-as-read}).
7001
7002@item M V k
7003@kindex M V k (Summary)
7004@findex gnus-summary-kill-below
7005Kill all articles with scores below the default score (or below the
7006numeric prefix) (@code{gnus-summary-kill-below}).
7007
7008@item M e
7009@itemx E
7010@kindex M e (Summary)
7011@kindex E (Summary)
7012@findex gnus-summary-mark-as-expirable
7013Mark the current article as expirable
7014(@code{gnus-summary-mark-as-expirable}).
7015
7016@item M b
7017@kindex M b (Summary)
7018@findex gnus-summary-set-bookmark
7019Set a bookmark in the current article
7020(@code{gnus-summary-set-bookmark}).
7021
7022@item M B
7023@kindex M B (Summary)
7024@findex gnus-summary-remove-bookmark
7025Remove the bookmark from the current article
7026(@code{gnus-summary-remove-bookmark}).
7027
7028@item M V c
7029@kindex M V c (Summary)
7030@findex gnus-summary-clear-above
7031Clear all marks from articles with scores over the default score (or
7032over the numeric prefix) (@code{gnus-summary-clear-above}).
7033
7034@item M V u
7035@kindex M V u (Summary)
7036@findex gnus-summary-tick-above
7037Tick all articles with scores over the default score (or over the
7038numeric prefix) (@code{gnus-summary-tick-above}).
7039
7040@item M V m
7041@kindex M V m (Summary)
7042@findex gnus-summary-mark-above
7043Prompt for a mark, and mark all articles with scores over the default
7044score (or over the numeric prefix) with this mark
7045(@code{gnus-summary-clear-above}).
7046@end table
7047
7048@vindex gnus-summary-goto-unread
7049The @code{gnus-summary-goto-unread} variable controls what action should
7050be taken after setting a mark. If non-@code{nil}, point will move to
7051the next/previous unread article. If @code{nil}, point will just move
7052one line up or down. As a special case, if this variable is
7053@code{never}, all the marking commands as well as other commands (like
7054@kbd{SPACE}) will move to the next article, whether it is unread or not.
7055The default is @code{t}.
7056
7057
7058@node Generic Marking Commands
7059@subsection Generic Marking Commands
7060
7061Some people would like the command that ticks an article (@kbd{!}) go to
7062the next article. Others would like it to go to the next unread
7063article. Yet others would like it to stay on the current article. And
7064even though I haven't heard of anybody wanting it to go to the
7065previous (unread) article, I'm sure there are people that want that as
7066well.
7067
7068Multiply these five behaviors with five different marking commands, and
7069you get a potentially complex set of variable to control what each
7070command should do.
7071
7072To sidestep that mess, Gnus provides commands that do all these
7073different things. They can be found on the @kbd{M M} map in the summary
7074buffer. Type @kbd{M M C-h} to see them all---there are too many of them
7075to list in this manual.
7076
7077While you can use these commands directly, most users would prefer
7078altering the summary mode keymap. For instance, if you would like the
7079@kbd{!} command to go to the next article instead of the next unread
7080article, you could say something like:
7081
7082@lisp
7083@group
7084(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
7085(defun my-alter-summary-map ()
7086 (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
7087@end group
7088@end lisp
7089
7090@noindent
7091or
7092
7093@lisp
7094(defun my-alter-summary-map ()
7095 (local-set-key "!" "MM!n"))
7096@end lisp
7097
7098
7099@node Setting Process Marks
7100@subsection Setting Process Marks
7101@cindex setting process marks
7102
7103Process marks are displayed as @code{#} in the summary buffer, and are
7104used for marking articles in such a way that other commands will
7105process these articles. For instance, if you process mark four
7106articles and then use the @kbd{*} command, Gnus will enter these four
7107articles into the cache. For more information,
7108@pxref{Process/Prefix}.
7109
7110@table @kbd
7111
7112@item M P p
7113@itemx #
7114@kindex # (Summary)
7115@kindex M P p (Summary)
7116@findex gnus-summary-mark-as-processable
7117Mark the current article with the process mark
7118(@code{gnus-summary-mark-as-processable}).
7119@findex gnus-summary-unmark-as-processable
7120
7121@item M P u
7122@itemx M-#
7123@kindex M P u (Summary)
7124@kindex M-# (Summary)
7125Remove the process mark, if any, from the current article
7126(@code{gnus-summary-unmark-as-processable}).
7127
7128@item M P U
7129@kindex M P U (Summary)
7130@findex gnus-summary-unmark-all-processable
7131Remove the process mark from all articles
7132(@code{gnus-summary-unmark-all-processable}).
7133
7134@item M P i
7135@kindex M P i (Summary)
7136@findex gnus-uu-invert-processable
7137Invert the list of process marked articles
7138(@code{gnus-uu-invert-processable}).
7139
7140@item M P R
7141@kindex M P R (Summary)
7142@findex gnus-uu-mark-by-regexp
7143Mark articles that have a @code{Subject} header that matches a regular
7144expression (@code{gnus-uu-mark-by-regexp}).
7145
7146@item M P G
7147@kindex M P G (Summary)
7148@findex gnus-uu-unmark-by-regexp
7149Unmark articles that have a @code{Subject} header that matches a regular
7150expression (@code{gnus-uu-unmark-by-regexp}).
7151
7152@item M P r
7153@kindex M P r (Summary)
7154@findex gnus-uu-mark-region
7155Mark articles in region (@code{gnus-uu-mark-region}).
7156
7157@item M P g
7158@kindex M P g (Summary)
7159@findex gnus-uu-unmark-region
7160Unmark articles in region (@code{gnus-uu-unmark-region}).
7161
7162@item M P t
7163@kindex M P t (Summary)
7164@findex gnus-uu-mark-thread
7165Mark all articles in the current (sub)thread
7166(@code{gnus-uu-mark-thread}).
7167
7168@item M P T
7169@kindex M P T (Summary)
7170@findex gnus-uu-unmark-thread
7171Unmark all articles in the current (sub)thread
7172(@code{gnus-uu-unmark-thread}).
7173
7174@item M P v
7175@kindex M P v (Summary)
7176@findex gnus-uu-mark-over
7177Mark all articles that have a score above the prefix argument
7178(@code{gnus-uu-mark-over}).
7179
7180@item M P s
7181@kindex M P s (Summary)
7182@findex gnus-uu-mark-series
7183Mark all articles in the current series (@code{gnus-uu-mark-series}).
7184
7185@item M P S
7186@kindex M P S (Summary)
7187@findex gnus-uu-mark-sparse
7188Mark all series that have already had some articles marked
7189(@code{gnus-uu-mark-sparse}).
7190
7191@item M P a
7192@kindex M P a (Summary)
7193@findex gnus-uu-mark-all
7194Mark all articles in series order (@code{gnus-uu-mark-all}).
7195
7196@item M P b
7197@kindex M P b (Summary)
7198@findex gnus-uu-mark-buffer
7199Mark all articles in the buffer in the order they appear
7200(@code{gnus-uu-mark-buffer}).
7201
7202@item M P k
7203@kindex M P k (Summary)
7204@findex gnus-summary-kill-process-mark
7205Push the current process mark set onto the stack and unmark all articles
7206(@code{gnus-summary-kill-process-mark}).
7207
7208@item M P y
7209@kindex M P y (Summary)
7210@findex gnus-summary-yank-process-mark
7211Pop the previous process mark set from the stack and restore it
7212(@code{gnus-summary-yank-process-mark}).
7213
7214@item M P w
7215@kindex M P w (Summary)
7216@findex gnus-summary-save-process-mark
7217Push the current process mark set onto the stack
7218(@code{gnus-summary-save-process-mark}).
7219
7220@end table
7221
7222Also see the @kbd{&} command in @ref{Searching for Articles}, for how to
7223set process marks based on article body contents.
7224
7225
7226@node Limiting
7227@section Limiting
7228@cindex limiting
7229
7230It can be convenient to limit the summary buffer to just show some
7231subset of the articles currently in the group. The effect most limit
7232commands have is to remove a few (or many) articles from the summary
7233buffer.
7234
26b9f88d
MB
7235Limiting commands work on subsets of the articles already fetched from
7236the servers. These commands don't query the server for additional
7237articles.
4009494e
GM
7238
7239@table @kbd
7240
7241@item / /
7242@itemx / s
7243@kindex / / (Summary)
7244@findex gnus-summary-limit-to-subject
7245Limit the summary buffer to articles that match some subject
7246(@code{gnus-summary-limit-to-subject}). If given a prefix, exclude
7247matching articles.
7248
7249@item / a
7250@kindex / a (Summary)
7251@findex gnus-summary-limit-to-author
7252Limit the summary buffer to articles that match some author
7253(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
7254matching articles.
7255
01c52d31
MB
7256@item / R
7257@kindex / R (Summary)
7258@findex gnus-summary-limit-to-recipient
7259Limit the summary buffer to articles that match some recipient
7260(@code{gnus-summary-limit-to-recipient}). If given a prefix, exclude
7261matching articles.
7262
7263@item / A
7264@kindex / A (Summary)
7265@findex gnus-summary-limit-to-address
7266Limit the summary buffer to articles in which contents of From, To or Cc
7267header match a given address (@code{gnus-summary-limit-to-address}). If
7268given a prefix, exclude matching articles.
7269
7270@item / S
7271@kindex / S (Summary)
7272@findex gnus-summary-limit-to-singletons
7273Limit the summary buffer to articles that aren't part of any displayed
7274threads (@code{gnus-summary-limit-to-singletons}). If given a prefix,
7275limit to articles that are part of displayed threads.
7276
4009494e
GM
7277@item / x
7278@kindex / x (Summary)
7279@findex gnus-summary-limit-to-extra
7280Limit the summary buffer to articles that match one of the ``extra''
7281headers (@pxref{To From Newsgroups})
7282(@code{gnus-summary-limit-to-extra}). If given a prefix, exclude
7283matching articles.
7284
7285@item / u
7286@itemx x
7287@kindex / u (Summary)
7288@kindex x (Summary)
7289@findex gnus-summary-limit-to-unread
7290Limit the summary buffer to articles not marked as read
7291(@code{gnus-summary-limit-to-unread}). If given a prefix, limit the
7292buffer to articles strictly unread. This means that ticked and
7293dormant articles will also be excluded.
7294
7295@item / m
7296@kindex / m (Summary)
7297@findex gnus-summary-limit-to-marks
7298Ask for a mark and then limit to all articles that have been marked
7299with that mark (@code{gnus-summary-limit-to-marks}).
7300
7301@item / t
7302@kindex / t (Summary)
7303@findex gnus-summary-limit-to-age
7304Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
7305(@code{gnus-summary-limit-to-age}). If given a prefix, limit to
7306articles younger than that number of days.
7307
7308@item / n
7309@kindex / n (Summary)
7310@findex gnus-summary-limit-to-articles
7311With prefix @samp{n}, limit the summary buffer to the next @samp{n}
7312articles. If not given a prefix, use the process marked articles
7313instead. (@code{gnus-summary-limit-to-articles}).
7314
7315@item / w
7316@kindex / w (Summary)
7317@findex gnus-summary-pop-limit
7318Pop the previous limit off the stack and restore it
7319(@code{gnus-summary-pop-limit}). If given a prefix, pop all limits off
7320the stack.
7321
7322@item / .
7323@kindex / . (Summary)
7324@findex gnus-summary-limit-to-unseen
7325Limit the summary buffer to the unseen articles
7326(@code{gnus-summary-limit-to-unseen}).
7327
7328@item / v
7329@kindex / v (Summary)
7330@findex gnus-summary-limit-to-score
7331Limit the summary buffer to articles that have a score at or above some
7332score (@code{gnus-summary-limit-to-score}).
7333
7334@item / p
7335@kindex / p (Summary)
7336@findex gnus-summary-limit-to-display-predicate
7337Limit the summary buffer to articles that satisfy the @code{display}
7338group parameter predicate
7339(@code{gnus-summary-limit-to-display-predicate}). @xref{Group
7340Parameters}, for more on this predicate.
7341
01c52d31
MB
7342@item / r
7343@kindex / r (Summary)
7344@findex gnus-summary-limit-to-replied
7345Limit the summary buffer to replied articles
7346(@code{gnus-summary-limit-to-replied}). If given a prefix, exclude
7347replied articles.
7348
4009494e
GM
7349@item / E
7350@itemx M S
7351@kindex M S (Summary)
7352@kindex / E (Summary)
7353@findex gnus-summary-limit-include-expunged
7354Include all expunged articles in the limit
7355(@code{gnus-summary-limit-include-expunged}).
7356
7357@item / D
7358@kindex / D (Summary)
7359@findex gnus-summary-limit-include-dormant
7360Include all dormant articles in the limit
7361(@code{gnus-summary-limit-include-dormant}).
7362
7363@item / *
7364@kindex / * (Summary)
7365@findex gnus-summary-limit-include-cached
7366Include all cached articles in the limit
7367(@code{gnus-summary-limit-include-cached}).
7368
7369@item / d
7370@kindex / d (Summary)
7371@findex gnus-summary-limit-exclude-dormant
7372Exclude all dormant articles from the limit
7373(@code{gnus-summary-limit-exclude-dormant}).
7374
7375@item / M
7376@kindex / M (Summary)
7377@findex gnus-summary-limit-exclude-marks
7378Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
7379
7380@item / T
7381@kindex / T (Summary)
7382@findex gnus-summary-limit-include-thread
7383Include all the articles in the current thread in the limit.
7384
7385@item / c
7386@kindex / c (Summary)
7387@findex gnus-summary-limit-exclude-childless-dormant
7388Exclude all dormant articles that have no children from the limit@*
7389(@code{gnus-summary-limit-exclude-childless-dormant}).
7390
7391@item / C
7392@kindex / C (Summary)
7393@findex gnus-summary-limit-mark-excluded-as-read
7394Mark all excluded unread articles as read
7395(@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix,
7396also mark excluded ticked and dormant articles as read.
7397
01c52d31
MB
7398@item / b
7399@kindex / b (Summary)
7400@findex gnus-summary-limit-to-bodies
7401Limit the summary buffer to articles that have bodies that match a
7402certain regexp (@code{gnus-summary-limit-to-bodies}). If given a
7403prefix, reverse the limit. This command is quite slow since it
7404requires selecting each article to find the matches.
7405
7406@item / h
7407@kindex / h (Summary)
7408@findex gnus-summary-limit-to-headers
7409Like the previous command, only limit to headers instead
7410(@code{gnus-summary-limit-to-headers}).
7411
4009494e
GM
7412@end table
7413
7414
26b9f88d
MB
7415The following commands aren't limiting commands, but use the @kbd{/}
7416prefix as well.
7417
7418@table @kbd
7419@item / N
7420@kindex / N (Summary)
7421@findex gnus-summary-insert-new-articles
7422Insert all new articles in the summary buffer. It scans for new emails
7423if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
7424
7425@item / o
7426@kindex / o (Summary)
7427@findex gnus-summary-insert-old-articles
7428Insert all old articles in the summary buffer. If given a numbered
7429prefix, fetch this number of articles.
7430
7431@end table
7432
7433
4009494e
GM
7434@node Threading
7435@section Threading
7436@cindex threading
7437@cindex article threading
7438
7439Gnus threads articles by default. @dfn{To thread} is to put responses
7440to articles directly after the articles they respond to---in a
7441hierarchical fashion.
7442
7443Threading is done by looking at the @code{References} headers of the
7444articles. In a perfect world, this would be enough to build pretty
7445trees, but unfortunately, the @code{References} header is often broken
7446or simply missing. Weird news propagation exacerbates the problem,
7447so one has to employ other heuristics to get pleasing results. A
7448plethora of approaches exists, as detailed in horrible detail in
7449@ref{Customizing Threading}.
7450
7451First, a quick overview of the concepts:
7452
7453@table @dfn
7454@item root
7455The top-most article in a thread; the first article in the thread.
7456
7457@item thread
7458A tree-like article structure.
7459
7460@item sub-thread
7461A small(er) section of this tree-like structure.
7462
7463@item loose threads
7464Threads often lose their roots due to article expiry, or due to the root
7465already having been read in a previous session, and not displayed in the
7466summary buffer. We then typically have many sub-threads that really
7467belong to one thread, but are without connecting roots. These are
7468called loose threads.
7469
7470@item thread gathering
7471An attempt to gather loose threads into bigger threads.
7472
7473@item sparse threads
7474A thread where the missing articles have been ``guessed'' at, and are
7475displayed as empty lines in the summary buffer.
7476
7477@end table
7478
7479
7480@menu
7481* Customizing Threading:: Variables you can change to affect the threading.
7482* Thread Commands:: Thread based commands in the summary buffer.
7483@end menu
7484
7485
7486@node Customizing Threading
7487@subsection Customizing Threading
7488@cindex customizing threading
7489
7490@menu
7491* Loose Threads:: How Gnus gathers loose threads into bigger threads.
7492* Filling In Threads:: Making the threads displayed look fuller.
7493* More Threading:: Even more variables for fiddling with threads.
7494* Low-Level Threading:: You thought it was over@dots{} but you were wrong!
7495@end menu
7496
7497
7498@node Loose Threads
7499@subsubsection Loose Threads
7500@cindex <
7501@cindex >
7502@cindex loose threads
7503
7504@table @code
7505@item gnus-summary-make-false-root
7506@vindex gnus-summary-make-false-root
7507If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
7508and create a dummy root at the top. (Wait a minute. Root at the top?
7509Yup.) Loose subtrees occur when the real root has expired, or you've
7510read or killed the root in a previous session.
7511
7512When there is no real root of a thread, Gnus will have to fudge
7513something. This variable says what fudging method Gnus should use.
7514There are four possible values:
7515
7516@iftex
7517@iflatex
7518\gnusfigure{The Summary Buffer}{390}{
7519\put(0,0){\epsfig{figure=ps/summary-adopt,width=7.5cm}}
7520\put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-empty,width=7.5cm}}}
7521\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=ps/summary-none,width=7.5cm}}}
7522\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=ps/summary-dummy,width=7.5cm}}}
7523}
7524@end iflatex
7525@end iftex
7526
7527@cindex adopting articles
7528
7529@table @code
7530
7531@item adopt
7532Gnus will make the first of the orphaned articles the parent. This
7533parent will adopt all the other articles. The adopted articles will be
7534marked as such by pointy brackets (@samp{<>}) instead of the standard
7535square brackets (@samp{[]}). This is the default method.
7536
7537@item dummy
7538@vindex gnus-summary-dummy-line-format
7539@vindex gnus-summary-make-false-root-always
7540Gnus will create a dummy summary line that will pretend to be the
7541parent. This dummy line does not correspond to any real article, so
7542selecting it will just select the first real article after the dummy
7543article. @code{gnus-summary-dummy-line-format} is used to specify the
7544format of the dummy roots. It accepts only one format spec: @samp{S},
7545which is the subject of the article. @xref{Formatting Variables}.
7546If you want all threads to have a dummy root, even the non-gathered
7547ones, set @code{gnus-summary-make-false-root-always} to @code{t}.
7548
7549@item empty
7550Gnus won't actually make any article the parent, but simply leave the
7551subject field of all orphans except the first empty. (Actually, it will
7552use @code{gnus-summary-same-subject} as the subject (@pxref{Summary
7553Buffer Format}).)
7554
7555@item none
7556Don't make any article parent at all. Just gather the threads and
7557display them after one another.
7558
7559@item nil
7560Don't gather loose threads.
7561@end table
7562
7563@item gnus-summary-gather-subject-limit
7564@vindex gnus-summary-gather-subject-limit
7565Loose threads are gathered by comparing subjects of articles. If this
7566variable is @code{nil}, Gnus requires an exact match between the
7567subjects of the loose threads before gathering them into one big
7568super-thread. This might be too strict a requirement, what with the
7569presence of stupid newsreaders that chop off long subject lines. If
7570you think so, set this variable to, say, 20 to require that only the
7571first 20 characters of the subjects have to match. If you set this
7572variable to a really low number, you'll find that Gnus will gather
7573everything in sight into one thread, which isn't very helpful.
7574
7575@cindex fuzzy article gathering
7576If you set this variable to the special value @code{fuzzy}, Gnus will
7577use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
7578Matching}).
7579
7580@item gnus-simplify-subject-fuzzy-regexp
7581@vindex gnus-simplify-subject-fuzzy-regexp
7582This can either be a regular expression or list of regular expressions
7583that match strings that will be removed from subjects if fuzzy subject
7584simplification is used.
7585
7586@item gnus-simplify-ignored-prefixes
7587@vindex gnus-simplify-ignored-prefixes
7588If you set @code{gnus-summary-gather-subject-limit} to something as low
7589as 10, you might consider setting this variable to something sensible:
7590
7591@c Written by Michael Ernst <mernst@cs.rice.edu>
7592@lisp
7593(setq gnus-simplify-ignored-prefixes
7594 (concat
7595 "\\`\\[?\\("
7596 (mapconcat
7597 'identity
7598 '("looking"
7599 "wanted" "followup" "summary\\( of\\)?"
7600 "help" "query" "problem" "question"
7601 "answer" "reference" "announce"
7602 "How can I" "How to" "Comparison of"
7603 ;; ...
7604 )
7605 "\\|")
7606 "\\)\\s *\\("
7607 (mapconcat 'identity
7608 '("for" "for reference" "with" "about")
7609 "\\|")
7610 "\\)?\\]?:?[ \t]*"))
7611@end lisp
7612
7613All words that match this regexp will be removed before comparing two
7614subjects.
7615
7616@item gnus-simplify-subject-functions
7617@vindex gnus-simplify-subject-functions
7618If non-@code{nil}, this variable overrides
7619@code{gnus-summary-gather-subject-limit}. This variable should be a
7620list of functions to apply to the @code{Subject} string iteratively to
7621arrive at the simplified version of the string.
7622
7623Useful functions to put in this list include:
7624
7625@table @code
7626@item gnus-simplify-subject-re
7627@findex gnus-simplify-subject-re
7628Strip the leading @samp{Re:}.
7629
7630@item gnus-simplify-subject-fuzzy
7631@findex gnus-simplify-subject-fuzzy
7632Simplify fuzzily.
7633
7634@item gnus-simplify-whitespace
7635@findex gnus-simplify-whitespace
7636Remove excessive whitespace.
7637
7638@item gnus-simplify-all-whitespace
7639@findex gnus-simplify-all-whitespace
7640Remove all whitespace.
7641@end table
7642
7643You may also write your own functions, of course.
7644
7645
7646@item gnus-summary-gather-exclude-subject
7647@vindex gnus-summary-gather-exclude-subject
7648Since loose thread gathering is done on subjects only, that might lead
7649to many false hits, especially with certain common subjects like
7650@samp{} and @samp{(none)}. To make the situation slightly better,
7651you can use the regexp @code{gnus-summary-gather-exclude-subject} to say
7652what subjects should be excluded from the gathering process.@*
7653The default is @samp{^ *$\\|^(none)$}.
7654
7655@item gnus-summary-thread-gathering-function
7656@vindex gnus-summary-thread-gathering-function
7657Gnus gathers threads by looking at @code{Subject} headers. This means
7658that totally unrelated articles may end up in the same ``thread'', which
7659is confusing. An alternate approach is to look at all the
7660@code{Message-ID}s in all the @code{References} headers to find matches.
7661This will ensure that no gathered threads ever include unrelated
7662articles, but it also means that people who have posted with broken
7663newsreaders won't be gathered properly. The choice is yours---plague or
7664cholera:
7665
7666@table @code
7667@item gnus-gather-threads-by-subject
7668@findex gnus-gather-threads-by-subject
7669This function is the default gathering function and looks at
7670@code{Subject}s exclusively.
7671
7672@item gnus-gather-threads-by-references
7673@findex gnus-gather-threads-by-references
7674This function looks at @code{References} headers exclusively.
7675@end table
7676
7677If you want to test gathering by @code{References}, you could say
7678something like:
7679
7680@lisp
7681(setq gnus-summary-thread-gathering-function
7682 'gnus-gather-threads-by-references)
7683@end lisp
7684
7685@end table
7686
7687
7688@node Filling In Threads
7689@subsubsection Filling In Threads
7690
7691@table @code
7692@item gnus-fetch-old-headers
7693@vindex gnus-fetch-old-headers
7694If non-@code{nil}, Gnus will attempt to build old threads by fetching
7695more old headers---headers to articles marked as read. If you would
7696like to display as few summary lines as possible, but still connect as
7697many loose threads as possible, you should set this variable to
7698@code{some} or a number. If you set it to a number, no more than that
7699number of extra old headers will be fetched. In either case, fetching
7700old headers only works if the back end you are using carries overview
7701files---this would normally be @code{nntp}, @code{nnspool},
7702@code{nnml}, and @code{nnmaildir}. Also remember that if the root of
7703the thread has been expired by the server, there's not much Gnus can
7704do about that.
7705
7706This variable can also be set to @code{invisible}. This won't have any
7707visible effects, but is useful if you use the @kbd{A T} command a lot
7708(@pxref{Finding the Parent}).
7709
f394fa25
MB
7710The server has to support @acronym{NOV} for any of this to work.
7711
7712@cindex Gmane, gnus-fetch-old-headers
7713This feature can seriously impact performance it ignores all locally
7714cached header entries. Setting it to @code{t} for groups for a server
7715that doesn't expire articles (such as news.gmane.org), leads to very
7716slow summary generation.
7717
4009494e
GM
7718@item gnus-fetch-old-ephemeral-headers
7719@vindex gnus-fetch-old-ephemeral-headers
7720Same as @code{gnus-fetch-old-headers}, but only used for ephemeral
7721newsgroups.
7722
7723@item gnus-build-sparse-threads
7724@vindex gnus-build-sparse-threads
7725Fetching old headers can be slow. A low-rent similar effect can be
7726gotten by setting this variable to @code{some}. Gnus will then look at
7727the complete @code{References} headers of all articles and try to string
7728together articles that belong in the same thread. This will leave
7729@dfn{gaps} in the threading display where Gnus guesses that an article
7730is missing from the thread. (These gaps appear like normal summary
7731lines. If you select a gap, Gnus will try to fetch the article in
7732question.) If this variable is @code{t}, Gnus will display all these
7733``gaps'' without regard for whether they are useful for completing the
7734thread or not. Finally, if this variable is @code{more}, Gnus won't cut
7735off sparse leaf nodes that don't lead anywhere. This variable is
7736@code{nil} by default.
7737
7738@item gnus-read-all-available-headers
7739@vindex gnus-read-all-available-headers
7740This is a rather obscure variable that few will find useful. It's
7741intended for those non-news newsgroups where the back end has to fetch
7742quite a lot to present the summary buffer, and where it's impossible to
7743go back to parents of articles. This is mostly the case in the
c4d82de8 7744web-based groups.
4009494e
GM
7745
7746If you don't use those, then it's safe to leave this as the default
7747@code{nil}. If you want to use this variable, it should be a regexp
7748that matches the group name, or @code{t} for all groups.
7749
7750@end table
7751
7752
7753@node More Threading
7754@subsubsection More Threading
7755
7756@table @code
7757@item gnus-show-threads
7758@vindex gnus-show-threads
7759If this variable is @code{nil}, no threading will be done, and all of
7760the rest of the variables here will have no effect. Turning threading
7761off will speed group selection up a bit, but it is sure to make reading
7762slower and more awkward.
7763
7764@item gnus-thread-hide-subtree
7765@vindex gnus-thread-hide-subtree
7766If non-@code{nil}, all threads will be hidden when the summary buffer is
7767generated.
7768
7769This can also be a predicate specifier (@pxref{Predicate Specifiers}).
7770Available predicates are @code{gnus-article-unread-p} and
7771@code{gnus-article-unseen-p}.
7772
7773Here's an example:
7774
7775@lisp
7776(setq gnus-thread-hide-subtree
7777 '(or gnus-article-unread-p
7778 gnus-article-unseen-p))
7779@end lisp
7780
7781(It's a pretty nonsensical example, since all unseen articles are also
7782unread, but you get my drift.)
7783
7784
7785@item gnus-thread-expunge-below
7786@vindex gnus-thread-expunge-below
7787All threads that have a total score (as defined by
7788@code{gnus-thread-score-function}) less than this number will be
7789expunged. This variable is @code{nil} by default, which means that no
7790threads are expunged.
7791
7792@item gnus-thread-hide-killed
7793@vindex gnus-thread-hide-killed
7794if you kill a thread and this variable is non-@code{nil}, the subtree
7795will be hidden.
7796
7797@item gnus-thread-ignore-subject
7798@vindex gnus-thread-ignore-subject
7799Sometimes somebody changes the subject in the middle of a thread. If
7800this variable is non-@code{nil}, which is the default, the subject
7801change is ignored. If it is @code{nil}, a change in the subject will
7802result in a new thread.
7803
7804@item gnus-thread-indent-level
7805@vindex gnus-thread-indent-level
7806This is a number that says how much each sub-thread should be indented.
7807The default is 4.
7808
7809@item gnus-sort-gathered-threads-function
7810@vindex gnus-sort-gathered-threads-function
7811Sometimes, particularly with mailing lists, the order in which mails
7812arrive locally is not necessarily the same as the order in which they
7813arrived on the mailing list. Consequently, when sorting sub-threads
7814using the default @code{gnus-thread-sort-by-number}, responses can end
7815up appearing before the article to which they are responding to.
7816Setting this variable to an alternate value
7817(e.g. @code{gnus-thread-sort-by-date}), in a group's parameters or in an
7818appropriate hook (e.g. @code{gnus-summary-generate-hook}) can produce a
7819more logical sub-thread ordering in such instances.
7820
7821@end table
7822
7823
7824@node Low-Level Threading
7825@subsubsection Low-Level Threading
7826
7827@table @code
7828
7829@item gnus-parse-headers-hook
7830@vindex gnus-parse-headers-hook
7831Hook run before parsing any headers.
7832
7833@item gnus-alter-header-function
7834@vindex gnus-alter-header-function
7835If non-@code{nil}, this function will be called to allow alteration of
7836article header structures. The function is called with one parameter,
7837the article header vector, which it may alter in any way. For instance,
7838if you have a mail-to-news gateway which alters the @code{Message-ID}s
7839in systematic ways (by adding prefixes and such), you can use this
7840variable to un-scramble the @code{Message-ID}s so that they are more
7841meaningful. Here's one example:
7842
7843@lisp
7844(setq gnus-alter-header-function 'my-alter-message-id)
7845
7846(defun my-alter-message-id (header)
7847 (let ((id (mail-header-id header)))
7848 (when (string-match
7849 "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
7850 (mail-header-set-id
7851 (concat (match-string 1 id) "@@" (match-string 2 id))
7852 header))))
7853@end lisp
7854
7855@end table
7856
7857
7858@node Thread Commands
7859@subsection Thread Commands
7860@cindex thread commands
7861
7862@table @kbd
7863
7864@item T k
7865@itemx C-M-k
7866@kindex T k (Summary)
7867@kindex C-M-k (Summary)
7868@findex gnus-summary-kill-thread
7869Mark all articles in the current (sub-)thread as read
7870(@code{gnus-summary-kill-thread}). If the prefix argument is positive,
7871remove all marks instead. If the prefix argument is negative, tick
7872articles instead.
7873
7874@item T l
7875@itemx C-M-l
7876@kindex T l (Summary)
7877@kindex C-M-l (Summary)
7878@findex gnus-summary-lower-thread
7879Lower the score of the current (sub-)thread
7880(@code{gnus-summary-lower-thread}).
7881
7882@item T i
7883@kindex T i (Summary)
7884@findex gnus-summary-raise-thread
7885Increase the score of the current (sub-)thread
7886(@code{gnus-summary-raise-thread}).
7887
7888@item T #
7889@kindex T # (Summary)
7890@findex gnus-uu-mark-thread
7891Set the process mark on the current (sub-)thread
7892(@code{gnus-uu-mark-thread}).
7893
7894@item T M-#
7895@kindex T M-# (Summary)
7896@findex gnus-uu-unmark-thread
7897Remove the process mark from the current (sub-)thread
7898(@code{gnus-uu-unmark-thread}).
7899
7900@item T T
7901@kindex T T (Summary)
7902@findex gnus-summary-toggle-threads
7903Toggle threading (@code{gnus-summary-toggle-threads}).
7904
7905@item T s
7906@kindex T s (Summary)
7907@findex gnus-summary-show-thread
7908Expose the (sub-)thread hidden under the current article, if any@*
7909(@code{gnus-summary-show-thread}).
7910
7911@item T h
7912@kindex T h (Summary)
7913@findex gnus-summary-hide-thread
7914Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
7915
7916@item T S
7917@kindex T S (Summary)
7918@findex gnus-summary-show-all-threads
7919Expose all hidden threads (@code{gnus-summary-show-all-threads}).
7920
7921@item T H
7922@kindex T H (Summary)
7923@findex gnus-summary-hide-all-threads
7924Hide all threads (@code{gnus-summary-hide-all-threads}).
7925
7926@item T t
7927@kindex T t (Summary)
7928@findex gnus-summary-rethread-current
7929Re-thread the current article's thread
7930(@code{gnus-summary-rethread-current}). This works even when the
7931summary buffer is otherwise unthreaded.
7932
7933@item T ^
7934@kindex T ^ (Summary)
7935@findex gnus-summary-reparent-thread
7936Make the current article the child of the marked (or previous) article
7937(@code{gnus-summary-reparent-thread}).
7938
01c52d31
MB
7939@item T M-^
7940@kindex T M-^ (Summary)
7941@findex gnus-summary-reparent-children
7942Make the current article the parent of the marked articles
7943(@code{gnus-summary-reparent-children}).
7944
4009494e
GM
7945@end table
7946
7947The following commands are thread movement commands. They all
7948understand the numeric prefix.
7949
7950@table @kbd
7951
7952@item T n
7953@kindex T n (Summary)
7954@itemx C-M-f
7955@kindex C-M-n (Summary)
7956@itemx M-down
7957@kindex M-down (Summary)
7958@findex gnus-summary-next-thread
7959Go to the next thread (@code{gnus-summary-next-thread}).
7960
7961@item T p
7962@kindex T p (Summary)
7963@itemx C-M-b
7964@kindex C-M-p (Summary)
7965@itemx M-up
7966@kindex M-up (Summary)
7967@findex gnus-summary-prev-thread
7968Go to the previous thread (@code{gnus-summary-prev-thread}).
7969
7970@item T d
7971@kindex T d (Summary)
7972@findex gnus-summary-down-thread
7973Descend the thread (@code{gnus-summary-down-thread}).
7974
7975@item T u
7976@kindex T u (Summary)
7977@findex gnus-summary-up-thread
7978Ascend the thread (@code{gnus-summary-up-thread}).
7979
7980@item T o
7981@kindex T o (Summary)
7982@findex gnus-summary-top-thread
7983Go to the top of the thread (@code{gnus-summary-top-thread}).
7984@end table
7985
7986@vindex gnus-thread-operation-ignore-subject
7987If you ignore subject while threading, you'll naturally end up with
7988threads that have several different subjects in them. If you then issue
7989a command like @kbd{T k} (@code{gnus-summary-kill-thread}) you might not
7990wish to kill the entire thread, but just those parts of the thread that
7991have the same subject as the current article. If you like this idea,
7992you can fiddle with @code{gnus-thread-operation-ignore-subject}. If it
7993is non-@code{nil} (which it is by default), subjects will be ignored
7994when doing thread commands. If this variable is @code{nil}, articles in
7995the same thread with different subjects will not be included in the
7996operation in question. If this variable is @code{fuzzy}, only articles
7997that have subjects fuzzily equal will be included (@pxref{Fuzzy
7998Matching}).
7999
8000
8001@node Sorting the Summary Buffer
8002@section Sorting the Summary Buffer
8003
8004@findex gnus-thread-sort-by-total-score
8005@findex gnus-thread-sort-by-date
8006@findex gnus-thread-sort-by-score
8007@findex gnus-thread-sort-by-subject
8008@findex gnus-thread-sort-by-author
01c52d31 8009@findex gnus-thread-sort-by-recipient
4009494e
GM
8010@findex gnus-thread-sort-by-number
8011@findex gnus-thread-sort-by-random
8012@vindex gnus-thread-sort-functions
8013@findex gnus-thread-sort-by-most-recent-number
8014@findex gnus-thread-sort-by-most-recent-date
8015If you are using a threaded summary display, you can sort the threads by
8016setting @code{gnus-thread-sort-functions}, which can be either a single
8017function, a list of functions, or a list containing functions and
8018@code{(not some-function)} elements.
8019
8020By default, sorting is done on article numbers. Ready-made sorting
8021predicate functions include @code{gnus-thread-sort-by-number},
01c52d31
MB
8022@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-recipient},
8023@code{gnus-thread-sort-by-subject},
8024@code{gnus-thread-sort-by-date},
8025@code{gnus-thread-sort-by-score},
4009494e
GM
8026@code{gnus-thread-sort-by-most-recent-number},
8027@code{gnus-thread-sort-by-most-recent-date},
8028@code{gnus-thread-sort-by-random} and
8029@code{gnus-thread-sort-by-total-score}.
8030
8031Each function takes two threads and returns non-@code{nil} if the first
8032thread should be sorted before the other. Note that sorting really is
8033normally done by looking only at the roots of each thread.
8034
8035If you use more than one function, the primary sort key should be the
8036last function in the list. You should probably always include
8037@code{gnus-thread-sort-by-number} in the list of sorting
8038functions---preferably first. This will ensure that threads that are
8039equal with respect to the other sort criteria will be displayed in
8040ascending article order.
8041
8042If you would like to sort by reverse score, then by subject, and finally
8043by number, you could do something like:
8044
8045@lisp
8046(setq gnus-thread-sort-functions
8047 '(gnus-thread-sort-by-number
8048 gnus-thread-sort-by-subject
8049 (not gnus-thread-sort-by-total-score)))
8050@end lisp
8051
8052The threads that have highest score will be displayed first in the
8053summary buffer. When threads have the same score, they will be sorted
8054alphabetically. The threads that have the same score and the same
8055subject will be sorted by number, which is (normally) the sequence in
8056which the articles arrived.
8057
8058If you want to sort by score and then reverse arrival order, you could
8059say something like:
8060
8061@lisp
8062(setq gnus-thread-sort-functions
01c52d31 8063 '((not gnus-thread-sort-by-number)
4009494e
GM
8064 gnus-thread-sort-by-score))
8065@end lisp
8066
8067@vindex gnus-thread-score-function
8068The function in the @code{gnus-thread-score-function} variable (default
8069@code{+}) is used for calculating the total score of a thread. Useful
8070functions might be @code{max}, @code{min}, or squared means, or whatever
8071tickles your fancy.
8072
8073@findex gnus-article-sort-functions
8074@findex gnus-article-sort-by-date
6ecfe5c2 8075@findex gnus-article-sort-by-most-recent-date
4009494e
GM
8076@findex gnus-article-sort-by-score
8077@findex gnus-article-sort-by-subject
8078@findex gnus-article-sort-by-author
8079@findex gnus-article-sort-by-random
8080@findex gnus-article-sort-by-number
6ecfe5c2 8081@findex gnus-article-sort-by-most-recent-number
4009494e
GM
8082If you are using an unthreaded display for some strange reason or
8083other, you have to fiddle with the @code{gnus-article-sort-functions}
8084variable. It is very similar to the
8085@code{gnus-thread-sort-functions}, except that it uses slightly
8086different functions for article comparison. Available sorting
8087predicate functions are @code{gnus-article-sort-by-number},
8088@code{gnus-article-sort-by-author},
8089@code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date},
8090@code{gnus-article-sort-by-random}, and
8091@code{gnus-article-sort-by-score}.
8092
8093If you want to sort an unthreaded summary display by subject, you could
8094say something like:
8095
8096@lisp
8097(setq gnus-article-sort-functions
8098 '(gnus-article-sort-by-number
8099 gnus-article-sort-by-subject))
8100@end lisp
8101
01c52d31
MB
8102You can define group specific sorting via @code{gnus-parameters},
8103@xref{Group Parameters}.
4009494e
GM
8104
8105
8106@node Asynchronous Fetching
8107@section Asynchronous Article Fetching
8108@cindex asynchronous article fetching
8109@cindex article pre-fetch
8110@cindex pre-fetch
8111
8112If you read your news from an @acronym{NNTP} server that's far away, the
8113network latencies may make reading articles a chore. You have to wait
8114for a while after pressing @kbd{n} to go to the next article before the
8115article appears. Why can't Gnus just go ahead and fetch the article
8116while you are reading the previous one? Why not, indeed.
8117
8118First, some caveats. There are some pitfalls to using asynchronous
8119article fetching, especially the way Gnus does it.
8120
8121Let's say you are reading article 1, which is short, and article 2 is
8122quite long, and you are not interested in reading that. Gnus does not
8123know this, so it goes ahead and fetches article 2. You decide to read
8124article 3, but since Gnus is in the process of fetching article 2, the
8125connection is blocked.
8126
8127To avoid these situations, Gnus will open two (count 'em two)
8128connections to the server. Some people may think this isn't a very nice
8129thing to do, but I don't see any real alternatives. Setting up that
8130extra connection takes some time, so Gnus startup will be slower.
8131
8132Gnus will fetch more articles than you will read. This will mean that
8133the link between your machine and the @acronym{NNTP} server will become more
8134loaded than if you didn't use article pre-fetch. The server itself will
8135also become more loaded---both with the extra article requests, and the
8136extra connection.
8137
8138Ok, so now you know that you shouldn't really use this thing@dots{} unless
8139you really want to.
8140
8141@vindex gnus-asynchronous
8142Here's how: Set @code{gnus-asynchronous} to @code{t}. The rest should
8143happen automatically.
8144
8145@vindex gnus-use-article-prefetch
8146You can control how many articles are to be pre-fetched by setting
8147@code{gnus-use-article-prefetch}. This is 30 by default, which means
8148that when you read an article in the group, the back end will pre-fetch
8149the next 30 articles. If this variable is @code{t}, the back end will
8150pre-fetch all the articles it can without bound. If it is
8151@code{nil}, no pre-fetching will be done.
8152
8153@vindex gnus-async-prefetch-article-p
8154@findex gnus-async-unread-p
8155There are probably some articles that you don't want to pre-fetch---read
8156articles, for instance. The @code{gnus-async-prefetch-article-p}
8157variable controls whether an article is to be pre-fetched. This
8158function should return non-@code{nil} when the article in question is
8159to be pre-fetched. The default is @code{gnus-async-unread-p}, which
8160returns @code{nil} on read articles. The function is called with an
8161article data structure as the only parameter.
8162
8163If, for instance, you wish to pre-fetch only unread articles shorter
8164than 100 lines, you could say something like:
8165
8166@lisp
8167(defun my-async-short-unread-p (data)
8168 "Return non-nil for short, unread articles."
8169 (and (gnus-data-unread-p data)
8170 (< (mail-header-lines (gnus-data-header data))
8171 100)))
8172
8173(setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
8174@end lisp
8175
8176These functions will be called many, many times, so they should
8177preferably be short and sweet to avoid slowing down Gnus too much.
8178It's probably a good idea to byte-compile things like this.
8179
85115796
KY
8180@vindex gnus-async-post-fetch-function
8181@findex gnus-html-prefetch-images
8182After an article has been prefetched, this
8183@code{gnus-async-post-fetch-function} will be called. The buffer will
8184be narrowed to the region of the article that was fetched. A useful
8185value would be @code{gnus-html-prefetch-images}, which will prefetch
8186and store images referenced in the article, so that you don't have to
8187wait for them to be fetched when you read the article. This is useful
8188for @acronym{HTML} messages that have external images.
8189
4009494e
GM
8190@vindex gnus-prefetched-article-deletion-strategy
8191Articles have to be removed from the asynch buffer sooner or later. The
8192@code{gnus-prefetched-article-deletion-strategy} says when to remove
8193articles. This is a list that may contain the following elements:
8194
8195@table @code
8196@item read
8197Remove articles when they are read.
8198
8199@item exit
8200Remove articles when exiting the group.
8201@end table
8202
8203The default value is @code{(read exit)}.
8204
8205@c @vindex gnus-use-header-prefetch
8206@c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
8207@c from the next group.
8208
8209
8210@node Article Caching
8211@section Article Caching
8212@cindex article caching
8213@cindex caching
8214
8215If you have an @emph{extremely} slow @acronym{NNTP} connection, you may
8216consider turning article caching on. Each article will then be stored
8217locally under your home directory. As you may surmise, this could
8218potentially use @emph{huge} amounts of disk space, as well as eat up all
8219your inodes so fast it will make your head swim. In vodka.
8220
8221Used carefully, though, it could be just an easier way to save articles.
8222
8223@vindex gnus-use-long-file-name
8224@vindex gnus-cache-directory
8225@vindex gnus-use-cache
8226To turn caching on, set @code{gnus-use-cache} to @code{t}. By default,
8227all articles ticked or marked as dormant will then be copied
8228over to your local cache (@code{gnus-cache-directory}). Whether this
8229cache is flat or hierarchical is controlled by the
8230@code{gnus-use-long-file-name} variable, as usual.
8231
8232When re-selecting a ticked or dormant article, it will be fetched from the
8233cache instead of from the server. As articles in your cache will never
8234expire, this might serve as a method of saving articles while still
8235keeping them where they belong. Just mark all articles you want to save
8236as dormant, and don't worry.
8237
8238When an article is marked as read, is it removed from the cache.
8239
8240@vindex gnus-cache-remove-articles
8241@vindex gnus-cache-enter-articles
8242The entering/removal of articles from the cache is controlled by the
8243@code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles}
8244variables. Both are lists of symbols. The first is @code{(ticked
8245dormant)} by default, meaning that ticked and dormant articles will be
8246put in the cache. The latter is @code{(read)} by default, meaning that
8247articles marked as read are removed from the cache. Possibly
8248symbols in these two lists are @code{ticked}, @code{dormant},
8249@code{unread} and @code{read}.
8250
8251@findex gnus-jog-cache
8252So where does the massive article-fetching and storing come into the
8253picture? The @code{gnus-jog-cache} command will go through all
8254subscribed newsgroups, request all unread articles, score them, and
8255store them in the cache. You should only ever, ever ever ever, use this
8256command if 1) your connection to the @acronym{NNTP} server is really, really,
8257really slow and 2) you have a really, really, really huge disk.
8258Seriously. One way to cut down on the number of articles downloaded is
8259to score unwanted articles down and have them marked as read. They will
8260not then be downloaded by this command.
8261
8262@vindex gnus-uncacheable-groups
8263@vindex gnus-cacheable-groups
8264It is likely that you do not want caching on all groups. For instance,
8265if your @code{nnml} mail is located under your home directory, it makes no
8266sense to cache it somewhere else under your home directory. Unless you
8267feel that it's neat to use twice as much space.
8268
8269To limit the caching, you could set @code{gnus-cacheable-groups} to a
8270regexp of groups to cache, @samp{^nntp} for instance, or set the
8271@code{gnus-uncacheable-groups} regexp to @samp{^nnml}, for instance.
8272Both variables are @code{nil} by default. If a group matches both
8273variables, the group is not cached.
8274
8275@findex gnus-cache-generate-nov-databases
8276@findex gnus-cache-generate-active
8277@vindex gnus-cache-active-file
8278The cache stores information on what articles it contains in its active
8279file (@code{gnus-cache-active-file}). If this file (or any other parts
8280of the cache) becomes all messed up for some reason or other, Gnus
8281offers two functions that will try to set things right. @kbd{M-x
8282gnus-cache-generate-nov-databases} will (re)build all the @acronym{NOV}
8283files, and @kbd{gnus-cache-generate-active} will (re)generate the active
8284file.
8285
8286@findex gnus-cache-move-cache
8287@code{gnus-cache-move-cache} will move your whole
8288@code{gnus-cache-directory} to some other location. You get asked to
8289where, isn't that cool?
8290
8291@node Persistent Articles
8292@section Persistent Articles
8293@cindex persistent articles
8294
8295Closely related to article caching, we have @dfn{persistent articles}.
8296In fact, it's just a different way of looking at caching, and much more
8297useful in my opinion.
8298
8299Say you're reading a newsgroup, and you happen on to some valuable gem
8300that you want to keep and treasure forever. You'd normally just save it
8301(using one of the many saving commands) in some file. The problem with
8302that is that it's just, well, yucky. Ideally you'd prefer just having
8303the article remain in the group where you found it forever; untouched by
8304the expiry going on at the news server.
8305
8306This is what a @dfn{persistent article} is---an article that just won't
8307be deleted. It's implemented using the normal cache functions, but
8308you use two explicit commands for managing persistent articles:
8309
8310@table @kbd
8311
8312@item *
8313@kindex * (Summary)
8314@findex gnus-cache-enter-article
8315Make the current article persistent (@code{gnus-cache-enter-article}).
8316
8317@item M-*
8318@kindex M-* (Summary)
8319@findex gnus-cache-remove-article
8320Remove the current article from the persistent articles
8321(@code{gnus-cache-remove-article}). This will normally delete the
8322article.
8323@end table
8324
8325Both these commands understand the process/prefix convention.
8326
8327To avoid having all ticked articles (and stuff) entered into the cache,
8328you should set @code{gnus-use-cache} to @code{passive} if you're just
8329interested in persistent articles:
8330
8331@lisp
8332(setq gnus-use-cache 'passive)
8333@end lisp
8334
01c52d31
MB
8335@node Sticky Articles
8336@section Sticky Articles
8337@cindex sticky articles
8338
8339When you select an article the current article buffer will be reused
8340according to the value of the variable
8341@code{gnus-single-article-buffer}. If its value is non-@code{nil} (the
8342default) all articles reuse the same article buffer. Else each group
8343has its own article buffer.
8344
8345This implies that it's not possible to have more than one article buffer
8346in a group at a time. But sometimes you might want to display all the
8347latest emails from your mother, your father, your aunt, your uncle and
8348your 17 cousins to coordinate the next christmas party.
8349
8350That's where sticky articles come in handy. A sticky article buffer
8351basically is a normal article buffer, but it won't be reused when you
8352select another article. You can make an article sticky with:
8353
8354@table @kbd
8355@item A S
8356@kindex A S (Summary)
8357@findex gnus-sticky-article
8358Make the current article sticky. If a prefix arg is given, ask for a
8359name for this sticky article buffer.
8360@end table
8361
8362To close a sticky article buffer you can use these commands:
8363
8364@table @kbd
8365@item q
8366@kindex q (Article)
8367@findex bury-buffer
8368Puts this sticky article buffer at the end of the list of all buffers.
8369
8370@item k
8371@kindex k (Article)
8372@findex gnus-kill-sticky-article-buffer
8373Kills this sticky article buffer.
8374@end table
8375
8376To kill all sticky article buffers you can use:
8377
8378@defun gnus-kill-sticky-article-buffers ARG
8379Kill all sticky article buffers.
8380If a prefix ARG is given, ask for confirmation.
8381@end defun
4009494e
GM
8382
8383@node Article Backlog
8384@section Article Backlog
8385@cindex backlog
8386@cindex article backlog
8387
8388If you have a slow connection, but the idea of using caching seems
8389unappealing to you (and it is, really), you can help the situation some
8390by switching on the @dfn{backlog}. This is where Gnus will buffer
8391already read articles so that it doesn't have to re-fetch articles
8392you've already read. This only helps if you are in the habit of
8393re-selecting articles you've recently read, of course. If you never do
8394that, turning the backlog on will slow Gnus down a little bit, and
8395increase memory usage some.
8396
8397@vindex gnus-keep-backlog
8398If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
8399at most @var{n} old articles in a buffer for later re-fetching. If this
8400variable is non-@code{nil} and is not a number, Gnus will store
8401@emph{all} read articles, which means that your Emacs will grow without
8402bound before exploding and taking your machine down with you. I put
8403that in there just to keep y'all on your toes.
8404
8405The default value is 20.
8406
8407
8408@node Saving Articles
8409@section Saving Articles
8410@cindex saving articles
8411
8412Gnus can save articles in a number of ways. Below is the documentation
8413for saving articles in a fairly straight-forward fashion (i.e., little
8414processing of the article is done before it is saved). For a different
8415approach (uudecoding, unsharing) you should use @code{gnus-uu}
8416(@pxref{Decoding Articles}).
8417
8418For the commands listed here, the target is a file. If you want to
8419save to a group, see the @kbd{B c} (@code{gnus-summary-copy-article})
8420command (@pxref{Mail Group Commands}).
8421
8422@vindex gnus-save-all-headers
8423If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
8424unwanted headers before saving the article.
8425
8426@vindex gnus-saved-headers
8427If the preceding variable is @code{nil}, all headers that match the
8428@code{gnus-saved-headers} regexp will be kept, while the rest will be
8429deleted before saving.
8430
8431@table @kbd
8432
8433@item O o
8434@itemx o
8435@kindex O o (Summary)
8436@kindex o (Summary)
8437@findex gnus-summary-save-article
8438@c @icon{gnus-summary-save-article}
8439Save the current article using the default article saver
8440(@code{gnus-summary-save-article}).
8441
8442@item O m
8443@kindex O m (Summary)
8444@findex gnus-summary-save-article-mail
8445Save the current article in a Unix mail box (mbox) file
8446(@code{gnus-summary-save-article-mail}).
8447
8448@item O r
8449@kindex O r (Summary)
8450@findex gnus-summary-save-article-rmail
8451Save the current article in Rmail format
bc79f9ab
GM
8452(@code{gnus-summary-save-article-rmail}). This is mbox since Emacs 23,
8453Babyl in older versions.
4009494e
GM
8454
8455@item O f
8456@kindex O f (Summary)
8457@findex gnus-summary-save-article-file
8458@c @icon{gnus-summary-save-article-file}
8459Save the current article in plain file format
8460(@code{gnus-summary-save-article-file}).
8461
8462@item O F
8463@kindex O F (Summary)
8464@findex gnus-summary-write-article-file
8465Write the current article in plain file format, overwriting any previous
8466file contents (@code{gnus-summary-write-article-file}).
8467
8468@item O b
8469@kindex O b (Summary)
8470@findex gnus-summary-save-article-body-file
8471Save the current article body in plain file format
8472(@code{gnus-summary-save-article-body-file}).
8473
8474@item O h
8475@kindex O h (Summary)
8476@findex gnus-summary-save-article-folder
8477Save the current article in mh folder format
8478(@code{gnus-summary-save-article-folder}).
8479
8480@item O v
8481@kindex O v (Summary)
8482@findex gnus-summary-save-article-vm
8483Save the current article in a VM folder
8484(@code{gnus-summary-save-article-vm}).
8485
8486@item O p
8487@itemx |
8488@kindex O p (Summary)
8489@kindex | (Summary)
8490@findex gnus-summary-pipe-output
89167438 8491@vindex gnus-summary-pipe-output-default-command
4009494e
GM
8492Save the current article in a pipe. Uhm, like, what I mean is---Pipe
8493the current article to a process (@code{gnus-summary-pipe-output}).
8494If given a symbolic prefix (@pxref{Symbolic Prefixes}), include the
6ecfe5c2
MB
8495complete headers in the piped output. The symbolic prefix @code{r} is
8496special; it lets this command pipe a raw article including all headers.
8497The @code{gnus-summary-pipe-output-default-command} variable can be set
8498to a string containing the default command and options (default
8499@code{nil}).
4009494e
GM
8500
8501@item O P
8502@kindex O P (Summary)
8503@findex gnus-summary-muttprint
8504@vindex gnus-summary-muttprint-program
8505Save the current article into muttprint. That is, print it using the
8506external program @uref{http://muttprint.sourceforge.net/,
8507Muttprint}. The program name and options to use is controlled by the
8508variable @code{gnus-summary-muttprint-program}.
8509(@code{gnus-summary-muttprint}).
8510
8511@end table
8512
8513@vindex gnus-prompt-before-saving
8514All these commands use the process/prefix convention
8515(@pxref{Process/Prefix}). If you save bunches of articles using these
8516functions, you might get tired of being prompted for files to save each
8517and every article in. The prompting action is controlled by
8518the @code{gnus-prompt-before-saving} variable, which is @code{always} by
8519default, giving you that excessive prompting action you know and
8520loathe. If you set this variable to @code{t} instead, you'll be prompted
8521just once for each series of articles you save. If you like to really
8522have Gnus do all your thinking for you, you can even set this variable
8523to @code{nil}, which means that you will never be prompted for files to
8524save articles in. Gnus will simply save all the articles in the default
8525files.
8526
8527
8528@vindex gnus-default-article-saver
8529You can customize the @code{gnus-default-article-saver} variable to make
8530Gnus do what you want it to. You can use any of the eight ready-made
8531functions below, or you can create your own.
8532
8533@table @code
8534
8535@item gnus-summary-save-in-rmail
8536@findex gnus-summary-save-in-rmail
8537@vindex gnus-rmail-save-name
8538@findex gnus-plain-save-name
bc79f9ab
GM
8539This is the default format, that used by the Rmail package. Since Emacs
854023, Rmail uses standard mbox format. Before this, it used the
8541@dfn{Babyl} format. Accordingly, this command writes mbox format since
8542Emacs 23, unless appending to an existing Babyl file. In older versions
8543of Emacs, it always uses Babyl format. Uses the function in the
4009494e
GM
8544@code{gnus-rmail-save-name} variable to get a file name to save the
8545article in. The default is @code{gnus-plain-save-name}.
8546
8547@item gnus-summary-save-in-mail
8548@findex gnus-summary-save-in-mail
8549@vindex gnus-mail-save-name
8550Save in a Unix mail (mbox) file. Uses the function in the
8551@code{gnus-mail-save-name} variable to get a file name to save the
8552article in. The default is @code{gnus-plain-save-name}.
8553
8554@item gnus-summary-save-in-file
8555@findex gnus-summary-save-in-file
8556@vindex gnus-file-save-name
8557@findex gnus-numeric-save-name
8558Append the article straight to an ordinary file. Uses the function in
8559the @code{gnus-file-save-name} variable to get a file name to save the
8560article in. The default is @code{gnus-numeric-save-name}.
8561
8562@item gnus-summary-write-to-file
8563@findex gnus-summary-write-to-file
8564Write the article straight to an ordinary file. The file is
8565overwritten if it exists. Uses the function in the
8566@code{gnus-file-save-name} variable to get a file name to save the
8567article in. The default is @code{gnus-numeric-save-name}.
8568
8569@item gnus-summary-save-body-in-file
8570@findex gnus-summary-save-body-in-file
8571Append the article body to an ordinary file. Uses the function in the
8572@code{gnus-file-save-name} variable to get a file name to save the
8573article in. The default is @code{gnus-numeric-save-name}.
8574
8575@item gnus-summary-write-body-to-file
8576@findex gnus-summary-write-body-to-file
8577Write the article body straight to an ordinary file. The file is
8578overwritten if it exists. Uses the function in the
8579@code{gnus-file-save-name} variable to get a file name to save the
8580article in. The default is @code{gnus-numeric-save-name}.
8581
8582@item gnus-summary-save-in-folder
8583@findex gnus-summary-save-in-folder
8584@findex gnus-folder-save-name
8585@findex gnus-Folder-save-name
8586@vindex gnus-folder-save-name
8587@cindex rcvstore
8588@cindex MH folders
8589Save the article to an MH folder using @code{rcvstore} from the MH
8590library. Uses the function in the @code{gnus-folder-save-name} variable
8591to get a file name to save the article in. The default is
8592@code{gnus-folder-save-name}, but you can also use
8593@code{gnus-Folder-save-name}, which creates capitalized names.
8594
8595@item gnus-summary-save-in-vm
8596@findex gnus-summary-save-in-vm
8597Save the article in a VM folder. You have to have the VM mail
8598reader to use this setting.
89167438
MB
8599
8600@item gnus-summary-save-in-pipe
8601@findex gnus-summary-save-in-pipe
d62672f3
MB
8602Pipe the article to a shell command. This function takes optional two
8603arguments COMMAND and RAW. Valid values for COMMAND include:
8604
8605@itemize @bullet
8606@item a string@*
8607The executable command name and possibly arguments.
8608@item @code{nil}@*
8609You will be prompted for the command in the minibuffer.
8610@item the symbol @code{default}@*
8611It will be replaced with the command which the variable
8612@code{gnus-summary-pipe-output-default-command} holds or the command
8613last used for saving.
8614@end itemize
8615
8616Non-@code{nil} value for RAW overrides @code{:decode} and
8617@code{:headers} properties (see below) and the raw article including all
8618headers will be piped.
4009494e
GM
8619@end table
8620
8621The symbol of each function may have the following properties:
8622
8623@table @code
8624@item :decode
8625The value non-@code{nil} means save decoded articles. This is
8626meaningful only with @code{gnus-summary-save-in-file},
8627@code{gnus-summary-save-body-in-file},
89167438
MB
8628@code{gnus-summary-write-to-file},
8629@code{gnus-summary-write-body-to-file}, and
8630@code{gnus-summary-save-in-pipe}.
4009494e
GM
8631
8632@item :function
8633The value specifies an alternative function which appends, not
8634overwrites, articles to a file. This implies that when saving many
8635articles at a time, @code{gnus-prompt-before-saving} is bound to
8636@code{t} and all articles are saved in a single file. This is
8637meaningful only with @code{gnus-summary-write-to-file} and
8638@code{gnus-summary-write-body-to-file}.
8639
8640@item :headers
8641The value specifies the symbol of a variable of which the value
8642specifies headers to be saved. If it is omitted,
8643@code{gnus-save-all-headers} and @code{gnus-saved-headers} control what
8644headers should be saved.
8645@end table
8646
8647@vindex gnus-article-save-directory
8648All of these functions, except for the last one, will save the article
8649in the @code{gnus-article-save-directory}, which is initialized from the
8650@env{SAVEDIR} environment variable. This is @file{~/News/} by
8651default.
8652
8653As you can see above, the functions use different functions to find a
8654suitable name of a file to save the article in. Below is a list of
8655available functions that generate names:
8656
8657@table @code
8658
8659@item gnus-Numeric-save-name
8660@findex gnus-Numeric-save-name
8661File names like @file{~/News/Alt.andrea-dworkin/45}.
8662
8663@item gnus-numeric-save-name
8664@findex gnus-numeric-save-name
8665File names like @file{~/News/alt.andrea-dworkin/45}.
8666
8667@item gnus-Plain-save-name
8668@findex gnus-Plain-save-name
8669File names like @file{~/News/Alt.andrea-dworkin}.
8670
8671@item gnus-plain-save-name
8672@findex gnus-plain-save-name
8673File names like @file{~/News/alt.andrea-dworkin}.
8674
8675@item gnus-sender-save-name
8676@findex gnus-sender-save-name
8677File names like @file{~/News/larsi}.
8678@end table
8679
8680@vindex gnus-split-methods
8681You can have Gnus suggest where to save articles by plonking a regexp into
8682the @code{gnus-split-methods} alist. For instance, if you would like to
8683save articles related to Gnus in the file @file{gnus-stuff}, and articles
8684related to VM in @file{vm-stuff}, you could set this variable to something
8685like:
8686
8687@lisp
8688(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
8689 ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
8690 (my-choosing-function "../other-dir/my-stuff")
8691 ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
8692@end lisp
8693
8694We see that this is a list where each element is a list that has two
8695elements---the @dfn{match} and the @dfn{file}. The match can either be
8696a string (in which case it is used as a regexp to match on the article
8697head); it can be a symbol (which will be called as a function with the
8698group name as a parameter); or it can be a list (which will be
8699@code{eval}ed). If any of these actions have a non-@code{nil} result,
8700the @dfn{file} will be used as a default prompt. In addition, the
8701result of the operation itself will be used if the function or form
8702called returns a string or a list of strings.
8703
8704You basically end up with a list of file names that might be used when
8705saving the current article. (All ``matches'' will be used.) You will
8706then be prompted for what you really want to use as a name, with file
8707name completion over the results from applying this variable.
8708
8709This variable is @code{((gnus-article-archive-name))} by default, which
8710means that Gnus will look at the articles it saves for an
8711@code{Archive-name} line and use that as a suggestion for the file
8712name.
8713
8714Here's an example function to clean up file names somewhat. If you have
8715lots of mail groups called things like
8716@samp{nnml:mail.whatever}, you may want to chop off the beginning of
8717these group names before creating the file name to save to. The
8718following will do just that:
8719
8720@lisp
8721(defun my-save-name (group)
8722 (when (string-match "^nnml:mail." group)
8723 (substring group (match-end 0))))
8724
8725(setq gnus-split-methods
8726 '((gnus-article-archive-name)
8727 (my-save-name)))
8728@end lisp
8729
8730
8731@vindex gnus-use-long-file-name
8732Finally, you have the @code{gnus-use-long-file-name} variable. If it is
8733@code{nil}, all the preceding functions will replace all periods
8734(@samp{.}) in the group names with slashes (@samp{/})---which means that
8735the functions will generate hierarchies of directories instead of having
8736all the files in the top level directory
8737(@file{~/News/alt/andrea-dworkin} instead of
8738@file{~/News/alt.andrea-dworkin}.) This variable is @code{t} by default
8739on most systems. However, for historical reasons, this is @code{nil} on
8740Xenix and usg-unix-v machines by default.
8741
8742This function also affects kill and score file names. If this variable
8743is a list, and the list contains the element @code{not-score}, long file
8744names will not be used for score files, if it contains the element
8745@code{not-save}, long file names will not be used for saving, and if it
8746contains the element @code{not-kill}, long file names will not be used
8747for kill files.
8748
8749If you'd like to save articles in a hierarchy that looks something like
8750a spool, you could
8751
8752@lisp
8753(setq gnus-use-long-file-name '(not-save)) ; @r{to get a hierarchy}
8754(setq gnus-default-article-saver
8755 'gnus-summary-save-in-file) ; @r{no encoding}
8756@end lisp
8757
8758Then just save with @kbd{o}. You'd then read this hierarchy with
8759ephemeral @code{nneething} groups---@kbd{G D} in the group buffer, and
8760the top level directory as the argument (@file{~/News/}). Then just walk
8761around to the groups/directories with @code{nneething}.
8762
8763
8764@node Decoding Articles
8765@section Decoding Articles
8766@cindex decoding articles
8767
8768Sometime users post articles (or series of articles) that have been
8769encoded in some way or other. Gnus can decode them for you.
8770
8771@menu
8772* Uuencoded Articles:: Uudecode articles.
8773* Shell Archives:: Unshar articles.
8774* PostScript Files:: Split PostScript.
8775* Other Files:: Plain save and binhex.
8776* Decoding Variables:: Variables for a happy decoding.
8777* Viewing Files:: You want to look at the result of the decoding?
8778@end menu
8779
8780@cindex series
8781@cindex article series
8782All these functions use the process/prefix convention
8783(@pxref{Process/Prefix}) for finding out what articles to work on, with
8784the extension that a ``single article'' means ``a single series''. Gnus
8785can find out by itself what articles belong to a series, decode all the
8786articles and unpack/view/save the resulting file(s).
8787
8788Gnus guesses what articles are in the series according to the following
8789simplish rule: The subjects must be (nearly) identical, except for the
8790last two numbers of the line. (Spaces are largely ignored, however.)
8791
8792For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
8793will find all the articles that match the regexp @samp{^cat.gif
8794([0-9]+/[0-9]+).*$}.
8795
8796Subjects that are non-standard, like @samp{cat.gif (2/3) Part 6 of a
8797series}, will not be properly recognized by any of the automatic viewing
8798commands, and you have to mark the articles manually with @kbd{#}.
8799
8800
8801@node Uuencoded Articles
8802@subsection Uuencoded Articles
8803@cindex uudecode
8804@cindex uuencoded articles
8805
8806@table @kbd
8807
8808@item X u
8809@kindex X u (Summary)
8810@findex gnus-uu-decode-uu
8811@c @icon{gnus-uu-decode-uu}
8812Uudecodes the current series (@code{gnus-uu-decode-uu}).
8813
8814@item X U
8815@kindex X U (Summary)
8816@findex gnus-uu-decode-uu-and-save
8817Uudecodes and saves the current series
8818(@code{gnus-uu-decode-uu-and-save}).
8819
8820@item X v u
8821@kindex X v u (Summary)
8822@findex gnus-uu-decode-uu-view
8823Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
8824
8825@item X v U
8826@kindex X v U (Summary)
8827@findex gnus-uu-decode-uu-and-save-view
8828Uudecodes, views and saves the current series
8829(@code{gnus-uu-decode-uu-and-save-view}).
8830
8831@end table
8832
8833Remember that these all react to the presence of articles marked with
8834the process mark. If, for instance, you'd like to decode and save an
8835entire newsgroup, you'd typically do @kbd{M P a}
8836(@code{gnus-uu-mark-all}) and then @kbd{X U}
8837(@code{gnus-uu-decode-uu-and-save}).
8838
8839All this is very much different from how @code{gnus-uu} worked with
8840@sc{gnus 4.1}, where you had explicit keystrokes for everything under
8841the sun. This version of @code{gnus-uu} generally assumes that you mark
8842articles in some way (@pxref{Setting Process Marks}) and then press
8843@kbd{X u}.
8844
8845@vindex gnus-uu-notify-files
8846Note: When trying to decode articles that have names matching
8847@code{gnus-uu-notify-files}, which is hard-coded to
8848@samp{[Cc][Ii][Nn][Dd][Yy][0-9]+.\\(gif\\|jpg\\)}, @code{gnus-uu} will
8849automatically post an article on @samp{comp.unix.wizards} saying that
8850you have just viewed the file in question. This feature can't be turned
8851off.
8852
8853
8854@node Shell Archives
8855@subsection Shell Archives
8856@cindex unshar
8857@cindex shell archives
8858@cindex shared articles
8859
8860Shell archives (``shar files'') used to be a popular way to distribute
8861sources, but it isn't used all that much today. In any case, we have
8862some commands to deal with these:
8863
8864@table @kbd
8865
8866@item X s
8867@kindex X s (Summary)
8868@findex gnus-uu-decode-unshar
8869Unshars the current series (@code{gnus-uu-decode-unshar}).
8870
8871@item X S
8872@kindex X S (Summary)
8873@findex gnus-uu-decode-unshar-and-save
8874Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
8875
8876@item X v s
8877@kindex X v s (Summary)
8878@findex gnus-uu-decode-unshar-view
8879Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
8880
8881@item X v S
8882@kindex X v S (Summary)
8883@findex gnus-uu-decode-unshar-and-save-view
8884Unshars, views and saves the current series
8885(@code{gnus-uu-decode-unshar-and-save-view}).
8886@end table
8887
8888
8889@node PostScript Files
8890@subsection PostScript Files
8891@cindex PostScript
8892
8893@table @kbd
8894
8895@item X p
8896@kindex X p (Summary)
8897@findex gnus-uu-decode-postscript
8898Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
8899
8900@item X P
8901@kindex X P (Summary)
8902@findex gnus-uu-decode-postscript-and-save
8903Unpack and save the current PostScript series
8904(@code{gnus-uu-decode-postscript-and-save}).
8905
8906@item X v p
8907@kindex X v p (Summary)
8908@findex gnus-uu-decode-postscript-view
8909View the current PostScript series
8910(@code{gnus-uu-decode-postscript-view}).
8911
8912@item X v P
8913@kindex X v P (Summary)
8914@findex gnus-uu-decode-postscript-and-save-view
8915View and save the current PostScript series
8916(@code{gnus-uu-decode-postscript-and-save-view}).
8917@end table
8918
8919
8920@node Other Files
8921@subsection Other Files
8922
8923@table @kbd
8924@item X o
8925@kindex X o (Summary)
8926@findex gnus-uu-decode-save
8927Save the current series
8928(@code{gnus-uu-decode-save}).
8929
8930@item X b
8931@kindex X b (Summary)
8932@findex gnus-uu-decode-binhex
8933Unbinhex the current series (@code{gnus-uu-decode-binhex}). This
8934doesn't really work yet.
b890d447
MB
8935
8936@item X Y
8937@kindex X Y (Summary)
8938@findex gnus-uu-decode-yenc
8939yEnc-decode the current series and save it (@code{gnus-uu-decode-yenc}).
4009494e
GM
8940@end table
8941
8942
8943@node Decoding Variables
8944@subsection Decoding Variables
8945
8946Adjective, not verb.
8947
8948@menu
8949* Rule Variables:: Variables that say how a file is to be viewed.
8950* Other Decode Variables:: Other decode variables.
8951* Uuencoding and Posting:: Variables for customizing uuencoding.
8952@end menu
8953
8954
8955@node Rule Variables
8956@subsubsection Rule Variables
8957@cindex rule variables
8958
8959Gnus uses @dfn{rule variables} to decide how to view a file. All these
8960variables are of the form
8961
8962@lisp
8963 (list '(regexp1 command2)
8964 '(regexp2 command2)
8965 ...)
8966@end lisp
8967
8968@table @code
8969
8970@item gnus-uu-user-view-rules
8971@vindex gnus-uu-user-view-rules
8972@cindex sox
8973This variable is consulted first when viewing files. If you wish to use,
8974for instance, @code{sox} to convert an @file{.au} sound file, you could
8975say something like:
8976@lisp
8977(setq gnus-uu-user-view-rules
8978 (list '("\\\\.au$" "sox %s -t .aiff > /dev/audio")))
8979@end lisp
8980
8981@item gnus-uu-user-view-rules-end
8982@vindex gnus-uu-user-view-rules-end
8983This variable is consulted if Gnus couldn't make any matches from the
8984user and default view rules.
8985
8986@item gnus-uu-user-archive-rules
8987@vindex gnus-uu-user-archive-rules
8988This variable can be used to say what commands should be used to unpack
8989archives.
8990@end table
8991
8992
8993@node Other Decode Variables
8994@subsubsection Other Decode Variables
8995
8996@table @code
8997@vindex gnus-uu-grabbed-file-functions
8998
8999@item gnus-uu-grabbed-file-functions
9000All functions in this list will be called right after each file has been
9001successfully decoded---so that you can move or view files right away,
9002and don't have to wait for all files to be decoded before you can do
9003anything. Ready-made functions you can put in this list are:
9004
9005@table @code
9006
9007@item gnus-uu-grab-view
9008@findex gnus-uu-grab-view
9009View the file.
9010
9011@item gnus-uu-grab-move
9012@findex gnus-uu-grab-move
9013Move the file (if you're using a saving function.)
9014@end table
9015
9016@item gnus-uu-be-dangerous
9017@vindex gnus-uu-be-dangerous
9018Specifies what to do if unusual situations arise during decoding. If
9019@code{nil}, be as conservative as possible. If @code{t}, ignore things
9020that didn't work, and overwrite existing files. Otherwise, ask each
9021time.
9022
9023@item gnus-uu-ignore-files-by-name
9024@vindex gnus-uu-ignore-files-by-name
9025Files with name matching this regular expression won't be viewed.
9026
9027@item gnus-uu-ignore-files-by-type
9028@vindex gnus-uu-ignore-files-by-type
9029Files with a @acronym{MIME} type matching this variable won't be viewed.
9030Note that Gnus tries to guess what type the file is based on the name.
9031@code{gnus-uu} is not a @acronym{MIME} package (yet), so this is slightly
9032kludgey.
9033
9034@item gnus-uu-tmp-dir
9035@vindex gnus-uu-tmp-dir
9036Where @code{gnus-uu} does its work.
9037
9038@item gnus-uu-do-not-unpack-archives
9039@vindex gnus-uu-do-not-unpack-archives
9040Non-@code{nil} means that @code{gnus-uu} won't peek inside archives
9041looking for files to display.
9042
9043@item gnus-uu-view-and-save
9044@vindex gnus-uu-view-and-save
9045Non-@code{nil} means that the user will always be asked to save a file
9046after viewing it.
9047
9048@item gnus-uu-ignore-default-view-rules
9049@vindex gnus-uu-ignore-default-view-rules
9050Non-@code{nil} means that @code{gnus-uu} will ignore the default viewing
9051rules.
9052
9053@item gnus-uu-ignore-default-archive-rules
9054@vindex gnus-uu-ignore-default-archive-rules
9055Non-@code{nil} means that @code{gnus-uu} will ignore the default archive
9056unpacking commands.
9057
9058@item gnus-uu-kill-carriage-return
9059@vindex gnus-uu-kill-carriage-return
9060Non-@code{nil} means that @code{gnus-uu} will strip all carriage returns
9061from articles.
9062
9063@item gnus-uu-unmark-articles-not-decoded
9064@vindex gnus-uu-unmark-articles-not-decoded
9065Non-@code{nil} means that @code{gnus-uu} will mark unsuccessfully
9066decoded articles as unread.
9067
9068@item gnus-uu-correct-stripped-uucode
9069@vindex gnus-uu-correct-stripped-uucode
9070Non-@code{nil} means that @code{gnus-uu} will @emph{try} to fix
9071uuencoded files that have had trailing spaces deleted.
9072
9073@item gnus-uu-pre-uudecode-hook
9074@vindex gnus-uu-pre-uudecode-hook
9075Hook run before sending a message to @code{uudecode}.
9076
9077@item gnus-uu-view-with-metamail
9078@vindex gnus-uu-view-with-metamail
9079@cindex metamail
9080Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
9081commands defined by the rule variables and just fudge a @acronym{MIME}
9082content type based on the file name. The result will be fed to
9083@code{metamail} for viewing.
9084
9085@item gnus-uu-save-in-digest
9086@vindex gnus-uu-save-in-digest
9087Non-@code{nil} means that @code{gnus-uu}, when asked to save without
9088decoding, will save in digests. If this variable is @code{nil},
9089@code{gnus-uu} will just save everything in a file without any
9090embellishments. The digesting almost conforms to RFC 1153---no easy way
9091to specify any meaningful volume and issue numbers were found, so I
9092simply dropped them.
9093
9094@end table
9095
9096
9097@node Uuencoding and Posting
9098@subsubsection Uuencoding and Posting
9099
9100@table @code
9101
9102@item gnus-uu-post-include-before-composing
9103@vindex gnus-uu-post-include-before-composing
9104Non-@code{nil} means that @code{gnus-uu} will ask for a file to encode
9105before you compose the article. If this variable is @code{t}, you can
9106either include an encoded file with @kbd{C-c C-i} or have one included
9107for you when you post the article.
9108
9109@item gnus-uu-post-length
9110@vindex gnus-uu-post-length
9111Maximum length of an article. The encoded file will be split into how
9112many articles it takes to post the entire file.
9113
9114@item gnus-uu-post-threaded
9115@vindex gnus-uu-post-threaded
9116Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a
9117thread. This may not be smart, as no other decoder I have seen is able
9118to follow threads when collecting uuencoded articles. (Well, I have
9119seen one package that does that---@code{gnus-uu}, but somehow, I don't
9120think that counts@dots{}) Default is @code{nil}.
9121
9122@item gnus-uu-post-separate-description
9123@vindex gnus-uu-post-separate-description
9124Non-@code{nil} means that the description will be posted in a separate
9125article. The first article will typically be numbered (0/x). If this
9126variable is @code{nil}, the description the user enters will be included
9127at the beginning of the first article, which will be numbered (1/x).
9128Default is @code{t}.
9129
9130@end table
9131
9132
9133@node Viewing Files
9134@subsection Viewing Files
9135@cindex viewing files
9136@cindex pseudo-articles
9137
9138After decoding, if the file is some sort of archive, Gnus will attempt
9139to unpack the archive and see if any of the files in the archive can be
9140viewed. For instance, if you have a gzipped tar file @file{pics.tar.gz}
9141containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
9142uncompress and de-tar the main file, and then view the two pictures.
9143This unpacking process is recursive, so if the archive contains archives
9144of archives, it'll all be unpacked.
9145
9146Finally, Gnus will normally insert a @dfn{pseudo-article} for each
9147extracted file into the summary buffer. If you go to these
9148``articles'', you will be prompted for a command to run (usually Gnus
9149will make a suggestion), and then the command will be run.
9150
9151@vindex gnus-view-pseudo-asynchronously
9152If @code{gnus-view-pseudo-asynchronously} is @code{nil}, Emacs will wait
9153until the viewing is done before proceeding.
9154
9155@vindex gnus-view-pseudos
9156If @code{gnus-view-pseudos} is @code{automatic}, Gnus will not insert
9157the pseudo-articles into the summary buffer, but view them
9158immediately. If this variable is @code{not-confirm}, the user won't even
9159be asked for a confirmation before viewing is done.
9160
9161@vindex gnus-view-pseudos-separately
9162If @code{gnus-view-pseudos-separately} is non-@code{nil}, one
9163pseudo-article will be created for each file to be viewed. If
9164@code{nil}, all files that use the same viewing command will be given as
9165a list of parameters to that command.
9166
9167@vindex gnus-insert-pseudo-articles
9168If @code{gnus-insert-pseudo-articles} is non-@code{nil}, insert
9169pseudo-articles when decoding. It is @code{t} by default.
9170
9171So; there you are, reading your @emph{pseudo-articles} in your
9172@emph{virtual newsgroup} from the @emph{virtual server}; and you think:
9173Why isn't anything real anymore? How did we get here?
9174
9175
9176@node Article Treatment
9177@section Article Treatment
9178
9179Reading through this huge manual, you may have quite forgotten that the
9180object of newsreaders is to actually, like, read what people have
9181written. Reading articles. Unfortunately, people are quite bad at
9182writing, so there are tons of functions and variables to make reading
9183these articles easier.
9184
9185@menu
9186* Article Highlighting:: You want to make the article look like fruit salad.
9187* Article Fontisizing:: Making emphasized text look nice.
9188* Article Hiding:: You also want to make certain info go away.
9189* Article Washing:: Lots of way-neat functions to make life better.
9190* Article Header:: Doing various header transformations.
9191* Article Buttons:: Click on URLs, Message-IDs, addresses and the like.
9192* Article Button Levels:: Controlling appearance of buttons.
9193* Article Date:: Grumble, UT!
61b1af82
G
9194* Article Display:: Display various stuff:
9195 X-Face, Picons, Gravatars, Smileys.
4009494e
GM
9196* Article Signature:: What is a signature?
9197* Article Miscellanea:: Various other stuff.
9198@end menu
9199
9200
9201@node Article Highlighting
9202@subsection Article Highlighting
9203@cindex highlighting
9204
9205Not only do you want your article buffer to look like fruit salad, but
9206you want it to look like technicolor fruit salad.
9207
9208@table @kbd
9209
9210@item W H a
9211@kindex W H a (Summary)
9212@findex gnus-article-highlight
9213@findex gnus-article-maybe-highlight
9214Do much highlighting of the current article
9215(@code{gnus-article-highlight}). This function highlights header, cited
9216text, the signature, and adds buttons to the body and the head.
9217
9218@item W H h
9219@kindex W H h (Summary)
9220@findex gnus-article-highlight-headers
9221@vindex gnus-header-face-alist
9222Highlight the headers (@code{gnus-article-highlight-headers}). The
9223highlighting will be done according to the @code{gnus-header-face-alist}
9224variable, which is a list where each element has the form
9225@code{(@var{regexp} @var{name} @var{content})}.
9226@var{regexp} is a regular expression for matching the
9227header, @var{name} is the face used for highlighting the header name
9228(@pxref{Faces and Fonts}) and @var{content} is the face for highlighting
9229the header value. The first match made will be used. Note that
9230@var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
9231
9232@item W H c
9233@kindex W H c (Summary)
9234@findex gnus-article-highlight-citation
9235Highlight cited text (@code{gnus-article-highlight-citation}).
9236
9237Some variables to customize the citation highlights:
9238
9239@table @code
9240@vindex gnus-cite-parse-max-size
9241
9242@item gnus-cite-parse-max-size
9243If the article size in bytes is bigger than this variable (which is
924425000 by default), no citation highlighting will be performed.
9245
9246@item gnus-cite-max-prefix
9247@vindex gnus-cite-max-prefix
9248Maximum possible length for a citation prefix (default 20).
9249
9250@item gnus-cite-face-list
9251@vindex gnus-cite-face-list
9252List of faces used for highlighting citations (@pxref{Faces and Fonts}).
9253When there are citations from multiple articles in the same message,
9254Gnus will try to give each citation from each article its own face.
9255This should make it easier to see who wrote what.
9256
9257@item gnus-supercite-regexp
9258@vindex gnus-supercite-regexp
9259Regexp matching normal Supercite attribution lines.
9260
9261@item gnus-supercite-secondary-regexp
9262@vindex gnus-supercite-secondary-regexp
9263Regexp matching mangled Supercite attribution lines.
9264
9265@item gnus-cite-minimum-match-count
9266@vindex gnus-cite-minimum-match-count
9267Minimum number of identical prefixes we have to see before we believe
9268that it's a citation.
9269
9270@item gnus-cite-attribution-prefix
9271@vindex gnus-cite-attribution-prefix
9272Regexp matching the beginning of an attribution line.
9273
9274@item gnus-cite-attribution-suffix
9275@vindex gnus-cite-attribution-suffix
9276Regexp matching the end of an attribution line.
9277
9278@item gnus-cite-attribution-face
9279@vindex gnus-cite-attribution-face
9280Face used for attribution lines. It is merged with the face for the
9281cited text belonging to the attribution.
9282
9283@item gnus-cite-ignore-quoted-from
9284@vindex gnus-cite-ignore-quoted-from
9285If non-@code{nil}, no citation highlighting will be performed on lines
9286beginning with @samp{>From }. Those lines may have been quoted by MTAs
9287in order not to mix up with the envelope From line. The default value
9288is @code{t}.
9289
9290@end table
9291
9292
9293@item W H s
9294@kindex W H s (Summary)
9295@vindex gnus-signature-separator
9296@vindex gnus-signature-face
9297@findex gnus-article-highlight-signature
9298Highlight the signature (@code{gnus-article-highlight-signature}).
9299Everything after @code{gnus-signature-separator} (@pxref{Article
9300Signature}) in an article will be considered a signature and will be
9301highlighted with @code{gnus-signature-face}, which is @code{italic} by
9302default.
9303
9304@end table
9305
9306@xref{Customizing Articles}, for how to highlight articles automatically.
9307
9308
9309@node Article Fontisizing
9310@subsection Article Fontisizing
9311@cindex emphasis
9312@cindex article emphasis
9313
9314@findex gnus-article-emphasize
9315@kindex W e (Summary)
9316People commonly add emphasis to words in news articles by writing things
9317like @samp{_this_} or @samp{*this*} or @samp{/this/}. Gnus can make
9318this look nicer by running the article through the @kbd{W e}
9319(@code{gnus-article-emphasize}) command.
9320
9321@vindex gnus-emphasis-alist
9322How the emphasis is computed is controlled by the
9323@code{gnus-emphasis-alist} variable. This is an alist where the first
9324element is a regular expression to be matched. The second is a number
9325that says what regular expression grouping is used to find the entire
9326emphasized word. The third is a number that says what regexp grouping
9327should be displayed and highlighted. (The text between these two
9328groupings will be hidden.) The fourth is the face used for
9329highlighting.
9330
9331@lisp
9332(setq gnus-emphasis-alist
9333 '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
9334 ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
9335@end lisp
9336
9337@cindex slash
9338@cindex asterisk
9339@cindex underline
9340@cindex /
9341@cindex *
9342
9343@vindex gnus-emphasis-underline
9344@vindex gnus-emphasis-bold
9345@vindex gnus-emphasis-italic
9346@vindex gnus-emphasis-underline-bold
9347@vindex gnus-emphasis-underline-italic
9348@vindex gnus-emphasis-bold-italic
9349@vindex gnus-emphasis-underline-bold-italic
9350By default, there are seven rules, and they use the following faces:
9351@code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
9352@code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
9353@code{gnus-emphasis-underline-italic},
9354@code{gnus-emphasis-underline-bold}, and
9355@code{gnus-emphasis-underline-bold-italic}.
9356
9357If you want to change these faces, you can either use @kbd{M-x
9358customize}, or you can use @code{copy-face}. For instance, if you want
9359to make @code{gnus-emphasis-italic} use a red face instead, you could
9360say something like:
9361
9362@lisp
9363(copy-face 'red 'gnus-emphasis-italic)
9364@end lisp
9365
9366@vindex gnus-group-highlight-words-alist
9367
9368If you want to highlight arbitrary words, you can use the
9369@code{gnus-group-highlight-words-alist} variable, which uses the same
9370syntax as @code{gnus-emphasis-alist}. The @code{highlight-words} group
9371parameter (@pxref{Group Parameters}) can also be used.
9372
9373@xref{Customizing Articles}, for how to fontize articles automatically.
9374
9375
9376@node Article Hiding
9377@subsection Article Hiding
9378@cindex article hiding
9379
9380Or rather, hiding certain things in each article. There usually is much
9381too much cruft in most articles.
9382
9383@table @kbd
9384
9385@item W W a
9386@kindex W W a (Summary)
9387@findex gnus-article-hide
9388Do quite a lot of hiding on the article buffer
9389(@kbd{gnus-article-hide}). In particular, this function will hide
9390headers, @acronym{PGP}, cited text and the signature.
9391
9392@item W W h
9393@kindex W W h (Summary)
9394@findex gnus-article-hide-headers
9395Hide headers (@code{gnus-article-hide-headers}). @xref{Hiding
9396Headers}.
9397
9398@item W W b
9399@kindex W W b (Summary)
9400@findex gnus-article-hide-boring-headers
9401Hide headers that aren't particularly interesting
9402(@code{gnus-article-hide-boring-headers}). @xref{Hiding Headers}.
9403
9404@item W W s
9405@kindex W W s (Summary)
9406@findex gnus-article-hide-signature
9407Hide signature (@code{gnus-article-hide-signature}). @xref{Article
9408Signature}.
9409
9410@item W W l
9411@kindex W W l (Summary)
9412@findex gnus-article-hide-list-identifiers
9413@vindex gnus-list-identifiers
9414Strip list identifiers specified in @code{gnus-list-identifiers}. These
9415are strings some mailing list servers add to the beginning of all
9416@code{Subject} headers---for example, @samp{[zebra 4711]}. Any leading
9417@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
9418may not contain @code{\\(..\\)}.
9419
9420@table @code
9421
9422@item gnus-list-identifiers
9423@vindex gnus-list-identifiers
9424A regular expression that matches list identifiers to be removed from
9425subject. This can also be a list of regular expressions.
9426
9427@end table
9428
9429@item W W P
9430@kindex W W P (Summary)
9431@findex gnus-article-hide-pem
9432Hide @acronym{PEM} (privacy enhanced messages) cruft
9433(@code{gnus-article-hide-pem}).
9434
9435@item W W B
9436@kindex W W B (Summary)
9437@findex gnus-article-strip-banner
9438@vindex gnus-article-banner-alist
9439@vindex gnus-article-address-banner-alist
9440@cindex banner
9441@cindex OneList
9442@cindex stripping advertisements
9443@cindex advertisements
9444Strip the banner specified by the @code{banner} group parameter
9445(@code{gnus-article-strip-banner}). This is mainly used to hide those
9446annoying banners and/or signatures that some mailing lists and moderated
9447groups adds to all the messages. The way to use this function is to add
9448the @code{banner} group parameter (@pxref{Group Parameters}) to the
9449group you want banners stripped from. The parameter either be a string,
9450which will be interpreted as a regular expression matching text to be
9451removed, or the symbol @code{signature}, meaning that the (last)
9452signature should be removed, or other symbol, meaning that the
9453corresponding regular expression in @code{gnus-article-banner-alist} is
9454used.
9455
a3f57c41
G
9456For instance:
9457
9458@lisp
9459(setq gnus-article-banner-alist
9460 ((googleGroups .
9461 "^\n*--~--~---------\\(.+\n\\)+")))
9462@end lisp
9463
4009494e
GM
9464Regardless of a group, you can hide things like advertisements only when
9465the sender of an article has a certain mail address specified in
9466@code{gnus-article-address-banner-alist}.
9467
9468@table @code
9469
9470@item gnus-article-address-banner-alist
9471@vindex gnus-article-address-banner-alist
9472Alist of mail addresses and banners. Each element has the form
9473@code{(@var{address} . @var{banner})}, where @var{address} is a regexp
9474matching a mail address in the From header, @var{banner} is one of a
9475symbol @code{signature}, an item in @code{gnus-article-banner-alist},
9476a regexp and @code{nil}. If @var{address} matches author's mail
9477address, it will remove things like advertisements. For example, if a
9478sender has the mail address @samp{hail@@yoo-hoo.co.jp} and there is a
9479banner something like @samp{Do You Yoo-hoo!?} in all articles he
9480sends, you can use the following element to remove them:
9481
9482@lisp
9483("@@yoo-hoo\\.co\\.jp\\'" .
9484 "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
9485@end lisp
9486
9487@end table
9488
9489@item W W c
9490@kindex W W c (Summary)
9491@findex gnus-article-hide-citation
9492Hide citation (@code{gnus-article-hide-citation}). Some variables for
9493customizing the hiding:
9494
9495@table @code
9496
9497@item gnus-cited-opened-text-button-line-format
9498@itemx gnus-cited-closed-text-button-line-format
9499@vindex gnus-cited-closed-text-button-line-format
9500@vindex gnus-cited-opened-text-button-line-format
9501Gnus adds buttons to show where the cited text has been hidden, and to
9502allow toggle hiding the text. The format of the variable is specified
9503by these format-like variable (@pxref{Formatting Variables}). These
9504specs are valid:
9505
9506@table @samp
9507@item b
9508Starting point of the hidden text.
9509@item e
9510Ending point of the hidden text.
9511@item l
9512Number of characters in the hidden region.
9513@item n
9514Number of lines of hidden text.
9515@end table
9516
9517@item gnus-cited-lines-visible
9518@vindex gnus-cited-lines-visible
9519The number of lines at the beginning of the cited text to leave
9520shown. This can also be a cons cell with the number of lines at the top
9521and bottom of the text, respectively, to remain visible.
9522
9523@end table
9524
9525@item W W C-c
9526@kindex W W C-c (Summary)
9527@findex gnus-article-hide-citation-maybe
9528
9529Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
9530following two variables:
9531
9532@table @code
9533@item gnus-cite-hide-percentage
9534@vindex gnus-cite-hide-percentage
9535If the cited text is of a bigger percentage than this variable (default
953650), hide the cited text.
9537
9538@item gnus-cite-hide-absolute
9539@vindex gnus-cite-hide-absolute
9540The cited text must have at least this length (default 10) before it
9541is hidden.
9542@end table
9543
9544@item W W C
9545@kindex W W C (Summary)
9546@findex gnus-article-hide-citation-in-followups
9547Hide cited text in articles that aren't roots
9548(@code{gnus-article-hide-citation-in-followups}). This isn't very
9549useful as an interactive command, but might be a handy function to stick
9550have happen automatically (@pxref{Customizing Articles}).
9551
9552@end table
9553
9554All these ``hiding'' commands are toggles, but if you give a negative
9555prefix to these commands, they will show what they have previously
9556hidden. If you give a positive prefix, they will always hide.
9557
9558Also @pxref{Article Highlighting} for further variables for
9559citation customization.
9560
9561@xref{Customizing Articles}, for how to hide article elements
9562automatically.
9563
9564
9565@node Article Washing
9566@subsection Article Washing
9567@cindex washing
9568@cindex article washing
9569
9570We call this ``article washing'' for a really good reason. Namely, the
9571@kbd{A} key was taken, so we had to use the @kbd{W} key instead.
9572
9573@dfn{Washing} is defined by us as ``changing something from something to
9574something else'', but normally results in something looking better.
9575Cleaner, perhaps.
9576
9577@xref{Customizing Articles}, if you want to change how Gnus displays
9578articles by default.
9579
9580@table @kbd
9581
9582@item C-u g
9583This is not really washing, it's sort of the opposite of washing. If
9584you type this, you see the article exactly as it exists on disk or on
9585the server.
9586
9587@item g
9588Force redisplaying of the current article
9589(@code{gnus-summary-show-article}). This is also not really washing.
9590If you type this, you see the article without any previously applied
9591interactive Washing functions but with all default treatments
9592(@pxref{Customizing Articles}).
9593
9594@item W l
9595@kindex W l (Summary)
9596@findex gnus-summary-stop-page-breaking
9597Remove page breaks from the current article
9598(@code{gnus-summary-stop-page-breaking}). @xref{Misc Article}, for page
9599delimiters.
9600
9601@item W r
9602@kindex W r (Summary)
9603@findex gnus-summary-caesar-message
9604@c @icon{gnus-summary-caesar-message}
9605Do a Caesar rotate (rot13) on the article buffer
9606(@code{gnus-summary-caesar-message}).
9607Unreadable articles that tell you to read them with Caesar rotate or rot13.
9608(Typically offensive jokes and such.)
9609
9610It's commonly called ``rot13'' because each letter is rotated 13
9611positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
9612#15). It is sometimes referred to as ``Caesar rotate'' because Caesar
9613is rumored to have employed this form of, uh, somewhat weak encryption.
9614
9615@item W m
9616@kindex W m (Summary)
9617@findex gnus-summary-morse-message
9618Morse decode the article buffer (@code{gnus-summary-morse-message}).
9619
01c52d31
MB
9620@item W i
9621@kindex W i (Summary)
9622@findex gnus-summary-idna-message
9623Decode IDNA encoded domain names in the current articles. IDNA
9624encoded domain names looks like @samp{xn--bar}. If a string remain
9625unencoded after running invoking this, it is likely an invalid IDNA
9626string (@samp{xn--bar} is invalid). You must have GNU Libidn
9627(@url{http://www.gnu.org/software/libidn/}) installed for this command
9628to work.
9629
4009494e
GM
9630@item W t
9631@item t
9632@kindex W t (Summary)
9633@kindex t (Summary)
9634@findex gnus-summary-toggle-header
9635Toggle whether to display all headers in the article buffer
9636(@code{gnus-summary-toggle-header}).
9637
9638@item W v
9639@kindex W v (Summary)
9640@findex gnus-summary-verbose-headers
9641Toggle whether to display all headers in the article buffer permanently
9642(@code{gnus-summary-verbose-headers}).
9643
9644@item W o
9645@kindex W o (Summary)
9646@findex gnus-article-treat-overstrike
9647Treat overstrike (@code{gnus-article-treat-overstrike}).
9648
9649@item W d
9650@kindex W d (Summary)
9651@findex gnus-article-treat-dumbquotes
9652@vindex gnus-article-dumbquotes-map
9653@cindex Smartquotes
9654@cindex M****s*** sm*rtq**t*s
9655@cindex Latin 1
9656Treat M****s*** sm*rtq**t*s according to
9657@code{gnus-article-dumbquotes-map}
9658(@code{gnus-article-treat-dumbquotes}). Note that this function guesses
9659whether a character is a sm*rtq**t* or not, so it should only be used
9660interactively.
9661
9662Sm*rtq**t*s are M****s***'s unilateral extension to the character map in
9663an attempt to provide more quoting characters. If you see something
9664like @code{\222} or @code{\264} where you're expecting some kind of
9665apostrophe or quotation mark, then try this wash.
9666
2f0e0dc8
KY
9667@item W U
9668@kindex W U (Summary)
be3c11b3
LMI
9669@findex gnus-article-treat-non-ascii
9670@cindex Unicode
9671@cindex Non-@acronym{ASCII}
9672Translate many non-@acronym{ASCII} characters into their
9673@acronym{ASCII} equivalents (@code{gnus-article-treat-non-ascii}).
9674This is mostly useful if you're on a terminal that has a limited font
9675and does't show accented characters, ``advanced'' punctuation, and the
9676