/[emacs]/emacs/man/gnus.texi
ViewVC logotype

Diff of /emacs/man/gnus.texi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.30.2.2 by miles, Tue Oct 14 22:56:23 2003 UTC revision 1.30.2.3 by miles, Thu Sep 16 00:12:17 2004 UTC
# Line 1  Line 1 
1  \input texinfo                  @c -*- mode: texinfo; coding: iso-latin-1; -*-  \input texinfo
2    
3  @setfilename ../info/gnus  @setfilename ../info/gnus
4  @settitle Gnus Manual  @settitle Gnus Manual
5  @synindex fn cp  @syncodeindex fn cp
6  @synindex vr cp  @syncodeindex vr cp
7  @synindex pg cp  @syncodeindex pg cp
8  @dircategory Emacs  
9  @direntry  @copying
10  * Gnus: (gnus).         The newsreader Gnus.  Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001,
11  @end direntry  2002, 2003, 2004
12  @iftex  Free Software Foundation, Inc.
13  @finalout  
14  @end iftex  @quotation
15  @setchapternewpage odd  Permission is granted to copy, distribute and/or modify this document
16    under the terms of the GNU Free Documentation License, Version 1.1 or
17    any later version published by the Free Software Foundation; with no
18    Invariant Sections, with the Front-Cover texts being ``A GNU
19    Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
20    license is included in the section entitled ``GNU Free Documentation
21    License'' in the Emacs manual.
22    
23    (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
24    this GNU Manual, like GNU software.  Copies published by the Free
25    Software Foundation raise funds for GNU development.''
26    
27    This document is part of a collection distributed under the GNU Free
28    Documentation License.  If you want to distribute this document
29    separately from the collection, you can do so by adding a copy of the
30    license to the document, as described in section 6 of the license.
31    @end quotation
32    @end copying
33    
34  @iftex  @iftex
35  @iflatex  @iflatex
# Line 20  Line 37 
37  \usepackage[latin1]{inputenc}  \usepackage[latin1]{inputenc}
38  \usepackage{pagestyle}  \usepackage{pagestyle}
39  \usepackage{epsfig}  \usepackage{epsfig}
 \usepackage{bembo}  
40  \usepackage{pixidx}  \usepackage{pixidx}
41    \input{gnusconfig.tex}
42    
43    \ifx\pdfoutput\undefined
44    \else
45    \usepackage[pdftex,bookmarks,colorlinks=true]{hyperref}
46    \usepackage{thumbpdf}
47    \pdfcompresslevel=9
48    \fi
49    
50  \makeindex  \makeindex
51  \begin{document}  \begin{document}
52    
53    \newcommand{\gnusversionname}{Gnus v5.10.6}
54  \newcommand{\gnuschaptername}{}  \newcommand{\gnuschaptername}{}
55  \newcommand{\gnussectionname}{}  \newcommand{\gnussectionname}{}
56    
57  \newcommand{\gnusbackslash}{/}  \newcommand{\gnusbackslash}{/}
58    
59    \newcommand{\gnusref}[1]{``#1'' on page \pageref{#1}}
60    \ifx\pdfoutput\undefined
61    \newcommand{\gnusuref}[1]{\gnustt{#1}}
62    \else
63    \newcommand{\gnusuref}[1]{\href{#1}{\gnustt{#1}}}
64    \fi
65  \newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}  \newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
66  \newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}  \newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
67    
68  \newcommand{\gnuskindex}[1]{\index{#1}}  \newcommand{\gnuskindex}[1]{\index{#1}}
69  \newcommand{\gnusindex}[1]{\index{#1}}  \newcommand{\gnusindex}[1]{\index{#1}}
70    
71  \newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}  \newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
72  \newcommand{\gnuscode}[1]{\gnustt{#1}}  \newcommand{\gnuscode}[1]{\gnustt{#1}}
73  \newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}''}  \newcommand{\gnusasis}[1]{\gnustt{#1}}
74    \newcommand{\gnusurl}[1]{\gnustt{#1}}
75    \newcommand{\gnuscommand}[1]{\gnustt{#1}}
76    \newcommand{\gnusenv}[1]{\gnustt{#1}}
77    \newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''}
78  \newcommand{\gnuslisp}[1]{\gnustt{#1}}  \newcommand{\gnuslisp}[1]{\gnustt{#1}}
79  \newcommand{\gnuskbd}[1]{`\gnustt{#1}'}  \newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
80    \newcommand{\gnuskey}[1]{`\gnustt{#1}'}
81  \newcommand{\gnusfile}[1]{`\gnustt{#1}'}  \newcommand{\gnusfile}[1]{`\gnustt{#1}'}
82  \newcommand{\gnusdfn}[1]{\textit{#1}}  \newcommand{\gnusdfn}[1]{\textit{#1}}
83  \newcommand{\gnusi}[1]{\textit{#1}}  \newcommand{\gnusi}[1]{\textit{#1}}
84    \newcommand{\gnusr}[1]{\textrm{#1}}
85  \newcommand{\gnusstrong}[1]{\textbf{#1}}  \newcommand{\gnusstrong}[1]{\textbf{#1}}
86  \newcommand{\gnusemph}[1]{\textit{#1}}  \newcommand{\gnusemph}[1]{\textit{#1}}
87  \newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}  \newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
88  \newcommand{\gnussc}[1]{\textsc{#1}}  \newcommand{\gnussc}[1]{\textsc{#1}}
89  \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}  \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
90    \newcommand{\gnusversion}[1]{{\small\textit{#1}}}
91  \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}  \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
92  \newcommand{\gnusresult}[1]{\gnustt{=> #1}}  \newcommand{\gnusresult}[1]{\gnustt{=> #1}}
93    \newcommand{\gnusacronym}[1]{\textsc{#1}}
94    \newcommand{\gnusemail}[1]{\textit{#1}}
95    
96  \newcommand{\gnusbullet}{{${\bullet}$}}  \newcommand{\gnusbullet}{{${\bullet}$}}
97  \newcommand{\gnusdollar}{\$}  \newcommand{\gnusdollar}{\$}
# Line 67  Line 107 
107  \newcommand{\gnusbraceleft}{{$>$}}  \newcommand{\gnusbraceleft}{{$>$}}
108  \newcommand{\gnusbraceright}{{$>$}}  \newcommand{\gnusbraceright}{{$>$}}
109    
110  \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}  \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head,height=1cm}}}
111  \newcommand{\gnusinteresting}{  \newcommand{\gnusinteresting}{
112  \marginpar[\mbox{}\hfill\gnushead]{\gnushead}  \marginpar[\mbox{}\hfill\gnushead]{\gnushead}
113  }  }
# Line 106  Line 146 
146  }  }
147    
148  \newcommand{\gnusicon}[1]{  \newcommand{\gnusicon}[1]{
149  \marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=tmp/#1-up.ps,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=tmp/#1-up.ps,height=1cm}}}  \marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=ps/#1-up,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=ps/#1-up,height=1cm}}}
150  }  }
151    
152  \newcommand{\gnuspicon}[1]{  \newcommand{\gnuspicon}[1]{
# Line 133  Line 173 
173  }  }
174  }{\end{list}}  }{\end{list}}
175    
176    \newenvironment{asislist}%
177    {\begin{list}{}{
178    }
179    }{\end{list}}
180    
181  \newenvironment{kbdlist}%  \newenvironment{kbdlist}%
182  {\begin{list}{}{  {\begin{list}{}{
183  \labelwidth=0cm  \labelwidth=0cm
# Line 186  Line 231 
231  {  {
232  \ifodd\count0  \ifodd\count0
233  \mbox{} \hfill  \mbox{} \hfill
234  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
235  \else  \else
236  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
237  \hfill \mbox{}  \hfill \mbox{}
238  \fi  \fi
239  }  }
# Line 210  Line 255 
255  {  {
256  \ifodd\count0  \ifodd\count0
257  \mbox{} \hfill  \mbox{} \hfill
258  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
259  \else  \else
260  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
261  \hfill \mbox{}  \hfill \mbox{}
262  \fi  \fi
263  }  }
# Line 234  Line 279 
279  {  {
280  \ifodd\count0  \ifodd\count0
281  \mbox{} \hfill  \mbox{} \hfill
282  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
283  \else  \else
284  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}  \raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo,height=1cm}}
285  \hfill \mbox{}  \hfill \mbox{}
286  \fi  \fi
287  }  }
# Line 249  Line 294 
294    
295  @iftex  @iftex
296  @iflatex  @iflatex
297    
298  \begin{titlepage}  \begin{titlepage}
299  {  {
300    
# Line 257  Line 303 
303  \parindent=0cm  \parindent=0cm
304  \addtolength{\textheight}{2cm}  \addtolength{\textheight}{2cm}
305    
306  \gnustitle{\gnustitlename}\\  \gnustitle{\gnustitlename}\hfill\gnusversion{\gnusversionname}\\
307  \rule{15cm}{1mm}\\  \rule{15cm}{1mm}\\
308  \vfill  \vfill
309  \hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}  \hspace*{0cm}\epsfig{figure=ps/gnus-big-logo,height=15cm}
310  \vfill  \vfill
311  \rule{15cm}{1mm}\\  \rule{15cm}{1mm}\\
312  \gnusauthor{by Lars Magne Ingebrigtsen}  \gnusauthor{by Lars Magne Ingebrigtsen}
# Line 272  Line 318 
318    
319  \thispagestyle{empty}  \thispagestyle{empty}
320    
321  Copyright \copyright{} 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc.  @c @insertcopying
   
   
 Permission is granted to copy, distribute and/or modify this document  
 under the terms of the GNU Free Documentation License, Version 1.1 or  
 any later version published by the Free Software Foundation; with no  
 Invariant Sections, with the Front-Cover texts being ``A GNU  
 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the  
 license is included in the section entitled ``GNU Free Documentation  
 License'' in the Emacs manual.  
   
 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify  
 this GNU Manual, like GNU software.  Copies published by the Free  
 Software Foundation raise funds for GNU development.''  
   
 This document is part of a collection distributed under the GNU Free  
 Documentation License.  If you want to distribute this document  
 separately from the collection, you can do so by adding a copy of the  
 license to the document, as described in section 6 of the license.  
322  \newpage  \newpage
323  \end{titlepage}  \end{titlepage}
324  @end iflatex  @end iflatex
325  @end iftex  @end iftex
326    
327  @ifnottex  @ifnottex
328    @insertcopying
329    @end ifnottex
330    
331  This file documents Gnus, the GNU Emacs newsreader.  @dircategory Emacs
332    @direntry
333  Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc.  * Gnus: (gnus).         The newsreader Gnus.
334    @end direntry
335  Permission is granted to copy, distribute and/or modify this document  @iftex
336  under the terms of the GNU Free Documentation License, Version 1.1 or  @finalout
337  any later version published by the Free Software Foundation; with the  @end iftex
338  Invariant Sections being none, with the Front-Cover texts being ``A GNU  @setchapternewpage odd
 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the  
 license is included in the section entitled ``GNU Free Documentation  
 License'' in the Emacs manual.  
   
 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify  
 this GNU Manual, like GNU software.  Copies published by the Free  
 Software Foundation raise funds for GNU development.''  
339    
 This document is part of a collection distributed under the GNU Free  
 Documentation License.  If you want to distribute this document  
 separately from the collection, you can do so by adding a copy of the  
 license to the document, as described in section 6 of the license.  
 @end ifnottex  
340    
 @tex  
341    
342  @titlepage  @titlepage
343  @title Gnus Manual  @title Gnus Manual
344    
345  @author by Lars Magne Ingebrigtsen  @author by Lars Magne Ingebrigtsen
346  @page  @page
   
347  @vskip 0pt plus 1filll  @vskip 0pt plus 1filll
348  Copyright @copyright{} 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc.  @insertcopying
   
 Permission is granted to copy, distribute and/or modify this document  
 under the terms of the GNU Free Documentation License, Version 1.1 or  
 any later version published by the Free Software Foundation; with no  
 Invariant Sections, with the Front-Cover texts being ``A GNU  
 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the  
 license is included in the section entitled ``GNU Free Documentation  
 License'' in the Emacs manual.  
   
 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify  
 this GNU Manual, like GNU software.  Copies published by the Free  
 Software Foundation raise funds for GNU development.''  
   
 This document is part of a collection distributed under the GNU Free  
 Documentation License.  If you want to distribute this document  
 separately from the collection, you can do so by adding a copy of the  
 license to the document, as described in section 6 of the license.  
   
349  @end titlepage  @end titlepage
 @page  
   
 @end tex  
350    
351    
352  @node Top  @node Top
# Line 360  license to the document, as described in Line 355  license to the document, as described in
355  @ifinfo  @ifinfo
356    
357  You can read news (and mail) from within Emacs by using Gnus.  The news  You can read news (and mail) from within Emacs by using Gnus.  The news
358  can be gotten by any nefarious means you can think of---@sc{nntp}, local  can be gotten by any nefarious means you can think of---@acronym{NNTP}, local
359  spool or your mbox file.  All at the same time, if you want to push your  spool or your mbox file.  All at the same time, if you want to push your
360  luck.  luck.
361    
362  This manual corresponds to Gnus 5.9.0.  This manual corresponds to Gnus v5.10.6.
363    
364  @end ifinfo  @end ifinfo
365    
# Line 396  the program. Line 391  the program.
391  @end iftex  @end iftex
392    
393  @menu  @menu
394  * Starting Up::           Finding news can be a pain.  * Starting Up::                 Finding news can be a pain.
395  * The Group Buffer::      Selecting, subscribing and killing groups.  * Group Buffer::                Selecting, subscribing and killing groups.
396  * The Summary Buffer::    Reading, saving and posting articles.  * Summary Buffer::              Reading, saving and posting articles.
397  * The Article Buffer::    Displaying and handling articles.  * Article Buffer::              Displaying and handling articles.
398  * Composing Messages::    Information on sending mail and news.  * Composing Messages::          Information on sending mail and news.
399  * Select Methods::        Gnus reads all messages from various select methods.  * Select Methods::              Gnus reads all messages from various select methods.
400  * Scoring::               Assigning values to articles.  * Scoring::                     Assigning values to articles.
401  * Various::               General purpose settings.  * Various::                     General purpose settings.
402  * The End::               Farewell and goodbye.  * The End::                     Farewell and goodbye.
403  * Appendices::            Terminology, Emacs intro, FAQ, History, Internals.  * Appendices::                  Terminology, Emacs intro, @acronym{FAQ}, History, Internals.
404  * Index::                 Variable, function and concept index.  * Index::                       Variable, function and concept index.
405  * Key Index::             Key Index.  * Key Index::                   Key Index.
406    
407    Other related manuals
408    
409    * Message:(message).            Composing messages.
410    * Emacs-MIME:(emacs-mime).      Composing messages; @acronym{MIME}-specific parts.
411    * Sieve:(sieve).                Managing Sieve scripts in Emacs.
412    * PGG:(pgg).                    @acronym{PGP/MIME} with Gnus.
413    
414  @detailmenu  @detailmenu
415   --- The Detailed Node Listing ---   --- The Detailed Node Listing ---
416    
417  Starting Gnus  Starting Gnus
418    
419  * Finding the News::    Choosing a method for getting news.  * Finding the News::            Choosing a method for getting news.
420  * The First Time::      What does Gnus do the first time you start it?  * The First Time::              What does Gnus do the first time you start it?
421  * The Server is Down::  How can I read my mail then?  * The Server is Down::          How can I read my mail then?
422  * Slave Gnusae::        You can have more than one Gnus active at a time.  * Slave Gnusae::                You can have more than one Gnus active at a time.
423  * Fetching a Group::    Starting Gnus just to read a group.  * Fetching a Group::            Starting Gnus just to read a group.
424  * New Groups::          What is Gnus supposed to do with new groups?  * New Groups::                  What is Gnus supposed to do with new groups?
425  * Startup Files::       Those pesky startup files---@file{.newsrc}.  * Changing Servers::            You may want to move from one server to another.
426  * Auto Save::           Recovering from a crash.  * Startup Files::               Those pesky startup files---@file{.newsrc}.
427  * The Active File::     Reading the active file over a slow line Takes Time.  * Auto Save::                   Recovering from a crash.
428  * Changing Servers::    You may want to move from one server to another.  * The Active File::             Reading the active file over a slow line Takes Time.
429  * Startup Variables::   Other variables you might change.  * Startup Variables::           Other variables you might change.
430    
431  New Groups  New Groups
432    
433  * Checking New Groups::      Determining what groups are new.  * Checking New Groups::         Determining what groups are new.
434  * Subscription Methods::     What Gnus should do with new groups.  * Subscription Methods::        What Gnus should do with new groups.
435  * Filtering New Groups::     Making Gnus ignore certain new groups.  * Filtering New Groups::        Making Gnus ignore certain new groups.
436    
437  The Group Buffer  Group Buffer
438    
439  * Group Buffer Format::    Information listed and how you can change it.  * Group Buffer Format::         Information listed and how you can change it.
440  * Group Maneuvering::      Commands for moving in the group buffer.  * Group Maneuvering::           Commands for moving in the group buffer.
441  * Selecting a Group::      Actually reading news.  * Selecting a Group::           Actually reading news.
442  * Group Data::             Changing the info for a group.  * Subscription Commands::       Unsubscribing, killing, subscribing.
443  * Subscription Commands::  Unsubscribing, killing, subscribing.  * Group Data::                  Changing the info for a group.
444  * Group Levels::           Levels? What are those, then?  * Group Levels::                Levels? What are those, then?
445  * Group Score::            A mechanism for finding out what groups you like.  * Group Score::                 A mechanism for finding out what groups you like.
446  * Marking Groups::         You can mark groups for later processing.  * Marking Groups::              You can mark groups for later processing.
447  * Foreign Groups::         Creating and editing groups.  * Foreign Groups::              Creating and editing groups.
448  * Group Parameters::       Each group may have different parameters set.  * Group Parameters::            Each group may have different parameters set.
449  * Listing Groups::         Gnus can list various subsets of the groups.  * Listing Groups::              Gnus can list various subsets of the groups.
450  * Sorting Groups::         Re-arrange the group order.  * Sorting Groups::              Re-arrange the group order.
451  * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.  * Group Maintenance::           Maintaining a tidy @file{.newsrc} file.
452  * Browse Foreign Server::  You can browse a server.  See what it has to offer.  * Browse Foreign Server::       You can browse a server.  See what it has to offer.
453  * Exiting Gnus::           Stop reading news and get some work done.  * Exiting Gnus::                Stop reading news and get some work done.
454  * Group Topics::           A folding group mode divided into topics.  * Group Topics::                A folding group mode divided into topics.
455  * Misc Group Stuff::       Other stuff that you can to do.  * Misc Group Stuff::            Other stuff that you can to do.
456    
457  Group Buffer Format  Group Buffer Format
458    
459  * Group Line Specification::       Deciding how the group buffer is to look.  * Group Line Specification::    Deciding how the group buffer is to look.
460  * Group Modeline Specification::   The group buffer modeline.  * Group Mode Line Specification::  The group buffer mode line.
461  * Group Highlighting::             Having nice colors in the group buffer.  * Group Highlighting::          Having nice colors in the group buffer.
462    
463  Group Topics  Group Topics
464    
465  * Topic Variables::    How to customize the topics the Lisp Way.  * Topic Commands::              Interactive E-Z commands.
466  * Topic Commands::     Interactive E-Z commands.  * Topic Variables::             How to customize the topics the Lisp Way.
467  * Topic Sorting::      Sorting each topic individually.  * Topic Sorting::               Sorting each topic individually.
468  * Topic Topology::     A map of the world.  * Topic Topology::              A map of the world.
469  * Topic Parameters::   Parameters that apply to all groups in a topic.  * Topic Parameters::            Parameters that apply to all groups in a topic.
470    
471  Misc Group Stuff  Misc Group Stuff
472    
473  * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.  * Scanning New Messages::       Asking Gnus to see whether new messages have arrived.
474  * Group Information::     Information and help on groups and Gnus.  * Group Information::           Information and help on groups and Gnus.
475  * Group Timestamp::       Making Gnus keep track of when you last read a group.  * Group Timestamp::             Making Gnus keep track of when you last read a group.
476  * File Commands::         Reading and writing the Gnus files.  * File Commands::               Reading and writing the Gnus files.
477    * Sieve Commands::              Managing Sieve scripts.
478    
479  The Summary Buffer  Summary Buffer
480    
481  * Summary Buffer Format::       Deciding how the summary buffer is to look.  * Summary Buffer Format::       Deciding how the summary buffer is to look.
482  * Summary Maneuvering::         Moving around the summary buffer.  * Summary Maneuvering::         Moving around the summary buffer.
483  * Choosing Articles::           Reading articles.  * Choosing Articles::           Reading articles.
484  * Paging the Article::          Scrolling the current article.  * Paging the Article::          Scrolling the current article.
485  * Reply Followup and Post::     Posting articles.  * Reply Followup and Post::     Posting articles.
486    * Delayed Articles::            Send articles at a later time.
487  * Marking Articles::            Marking articles as read, expirable, etc.  * Marking Articles::            Marking articles as read, expirable, etc.
488  * Limiting::                    You can limit the summary buffer.  * Limiting::                    You can limit the summary buffer.
489  * Threading::                   How threads are made.  * Threading::                   How threads are made.
490  * Sorting::                     How articles and threads are sorted.  * Sorting the Summary Buffer::  How articles and threads are sorted.
491  * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.  * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
492  * Article Caching::             You may store articles in a cache.  * Article Caching::             You may store articles in a cache.
493  * Persistent Articles::         Making articles expiry-resistant.  * Persistent Articles::         Making articles expiry-resistant.
# Line 500  The Summary Buffer Line 504  The Summary Buffer
504  * Tree Display::                A more visual display of threads.  * Tree Display::                A more visual display of threads.
505  * Mail Group Commands::         Some commands can only be used in mail groups.  * Mail Group Commands::         Some commands can only be used in mail groups.
506  * Various Summary Stuff::       What didn't fit anywhere else.  * Various Summary Stuff::       What didn't fit anywhere else.
507  * Exiting the Summary Buffer::  Returning to the Group buffer.  * Exiting the Summary Buffer::  Returning to the Group buffer,
508                                    or reselecting the current group.
509  * Crosspost Handling::          How crossposted articles are dealt with.  * Crosspost Handling::          How crossposted articles are dealt with.
510  * Duplicate Suppression::       An alternative when crosspost handling fails.  * Duplicate Suppression::       An alternative when crosspost handling fails.
511    * Security::                    Decrypt and Verify.
512    * Mailing List::                Mailing list minor mode.
513    
514  Summary Buffer Format  Summary Buffer Format
515    
516  * Summary Buffer Lines::     You can specify how summary lines should look.  * Summary Buffer Lines::        You can specify how summary lines should look.
517  * To From Newsgroups::       How to not display your own name.  * To From Newsgroups::          How to not display your own name.
518  * Summary Buffer Mode Line:: You can say how the mode line should look.  * Summary Buffer Mode Line::    You can say how the mode line should look.
519  * Summary Highlighting::     Making the summary buffer all pretty and nice.  * Summary Highlighting::        Making the summary buffer all pretty and nice.
520    
521  Choosing Articles  Choosing Articles
522    
523  * Choosing Commands::        Commands for choosing articles.  * Choosing Commands::           Commands for choosing articles.
524  * Choosing Variables::       Variables that influence these commands.  * Choosing Variables::          Variables that influence these commands.
525    
526  Reply, Followup and Post  Reply, Followup and Post
527    
528  * Summary Mail Commands::    Sending mail.  * Summary Mail Commands::       Sending mail.
529  * Summary Post Commands::    Sending news.  * Summary Post Commands::       Sending news.
530  * Summary Message Commands:: Other Message-related commands.  * Summary Message Commands::    Other Message-related commands.
531  * Canceling and Superseding:: ``Whoops, I shouldn't have called him that.''  * Canceling and Superseding::
532    
533    Marking Articles
534    
535    * Unread Articles::             Marks for unread articles.
536    * Read Articles::               Marks for read articles.
537    * Other Marks::                 Marks that do not affect readedness.
538    
539  Marking Articles  Marking Articles
540    
541  * Unread Articles::          Marks for unread articles.  * Setting Marks::             How to set and remove marks.
542  * Read Articles::            Marks for read articles.  * Generic Marking Commands::  How to customize the marking.
543  * Other Marks::              Marks that do not affect readedness.  * Setting Process Marks::     How to mark articles for later processing.
 * Setting Marks::            How to set and remove marks.  
 * Generic Marking Commands:: How to customize the marking.  
 * Setting Process Marks::    How to mark articles for later processing.  
544    
545  Threading  Threading
546    
547  * Customizing Threading::    Variables you can change to affect the threading.  * Customizing Threading::       Variables you can change to affect the threading.
548  * Thread Commands::          Thread based commands in the summary buffer.  * Thread Commands::             Thread based commands in the summary buffer.
549    
550  Customizing Threading  Customizing Threading
551    
552  * Loose Threads::        How Gnus gathers loose threads into bigger threads.  * Loose Threads::               How Gnus gathers loose threads into bigger threads.
553  * Filling In Threads::   Making the threads displayed look fuller.  * Filling In Threads::          Making the threads displayed look fuller.
554  * More Threading::       Even more variables for fiddling with threads.  * More Threading::              Even more variables for fiddling with threads.
555  * Low-Level Threading::  You thought it was over... but you were wrong!  * Low-Level Threading::         You thought it was over@dots{} but you were wrong!
556    
557  Decoding Articles  Decoding Articles
558    
559  * Uuencoded Articles::    Uudecode articles.  * Uuencoded Articles::          Uudecode articles.
560  * Shell Archives::        Unshar articles.  * Shell Archives::              Unshar articles.
561  * PostScript Files::      Split PostScript.  * PostScript Files::            Split PostScript.
562  * Other Files::           Plain save and binhex.  * Other Files::                 Plain save and binhex.
563  * Decoding Variables::    Variables for a happy decoding.  * Decoding Variables::          Variables for a happy decoding.
564  * Viewing Files::         You want to look at the result of the decoding?  * Viewing Files::               You want to look at the result of the decoding?
565    
566  Decoding Variables  Decoding Variables
567    
568  * Rule Variables::          Variables that say how a file is to be viewed.  * Rule Variables::              Variables that say how a file is to be viewed.
569  * Other Decode Variables::  Other decode variables.  * Other Decode Variables::      Other decode variables.
570  * Uuencoding and Posting::  Variables for customizing uuencoding.  * Uuencoding and Posting::      Variables for customizing uuencoding.
571    
572  Article Treatment  Article Treatment
573    
574  * Article Highlighting::    You want to make the article look like fruit salad.  * Article Highlighting::        You want to make the article look like fruit salad.
575  * Article Fontisizing::     Making emphasized text look nice.  * Article Fontisizing::         Making emphasized text look nice.
576  * Article Hiding::          You also want to make certain info go away.  * Article Hiding::              You also want to make certain info go away.
577  * Article Washing::         Lots of way-neat functions to make life better.  * Article Washing::             Lots of way-neat functions to make life better.
578  * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.  * Article Header::              Doing various header transformations.
579  * Article Date::            Grumble, UT!  * Article Buttons::             Click on URLs, Message-IDs, addresses and the like.
580  * Article Signature::       What is a signature?  * Article Button Levels::       Controlling appearance of buttons.
581  * Article Miscellanea::     Various other stuff.  * Article Date::                Grumble, UT!
582    * Article Display::             Display various stuff---X-Face, Picons, Smileys
583    * Article Signature::           What is a signature?
584    * Article Miscellanea::         Various other stuff.
585    
586  Alternative Approaches  Alternative Approaches
587    
# Line 577  Alternative Approaches Line 590  Alternative Approaches
590    
591  Various Summary Stuff  Various Summary Stuff
592    
593  * Summary Group Information::         Information oriented commands.  * Summary Group Information::   Information oriented commands.
594  * Searching for Articles::            Multiple article commands.  * Searching for Articles::      Multiple article commands.
595  * Summary Generation Commands::       (Re)generating the summary buffer.  * Summary Generation Commands::
596  * Really Various Summary Commands::   Those pesky non-conformant commands.  * Really Various Summary Commands::  Those pesky non-conformant commands.
597    
598  The Article Buffer  Article Buffer
599    
600  * Hiding Headers::        Deciding what headers should be displayed.  * Hiding Headers::              Deciding what headers should be displayed.
601  * Using MIME::            Pushing articles through @sc{mime} before reading them.  * Using MIME::                  Pushing articles through @acronym{MIME} before reading them.
602  * Customizing Articles::  Tailoring the look of the articles.  * Customizing Articles::        Tailoring the look of the articles.
603  * Article Keymap::        Keystrokes available in the article buffer.  * Article Keymap::              Keystrokes available in the article buffer.
604  * Misc Article::          Other stuff.  * Misc Article::                Other stuff.
605    
606  Composing Messages  Composing Messages
607    
608  * Mail::                 Mailing and replying.  * Mail::                        Mailing and replying.
609  * Posting Server::       What server should you post via?  * Posting Server::              What server should you post and mail via?
610  * Mail and Post::        Mailing and posting at the same time.  * POP before SMTP::             You cannot send a mail unless you read a mail.
611  * Archived Messages::    Where Gnus stores the messages you've sent.  * Mail and Post::               Mailing and posting at the same time.
612  * Posting Styles::       An easier way to specify who you are.  * Archived Messages::           Where Gnus stores the messages you've sent.
613  * Drafts::               Postponing messages and rejected messages.  * Posting Styles::              An easier way to specify who you are.
614  * Rejected Articles::    What happens if the server doesn't like your article?  * Drafts::                      Postponing messages and rejected messages.
615    * Rejected Articles::           What happens if the server doesn't like your article?
616    * Signing and encrypting::      How to compose secure messages.
617    
618  Select Methods  Select Methods
619    
620  * The Server Buffer::     Making and editing virtual servers.  * Server Buffer::               Making and editing virtual servers.
621  * Getting News::          Reading USENET news with Gnus.  * Getting News::                Reading USENET news with Gnus.
622  * Getting Mail::          Reading your personal mail with Gnus.  * Getting Mail::                Reading your personal mail with Gnus.
623  * Browsing the Web::      Getting messages from a plethora of Web sources.  * Browsing the Web::            Getting messages from a plethora of Web sources.
624  * Other Sources::         Reading directories, files, SOUP packets.  * IMAP::                        Using Gnus as a @acronym{IMAP} client.
625  * Combined Groups::       Combining groups into one group.  * Other Sources::               Reading directories, files, SOUP packets.
626  * Gnus Unplugged::        Reading news and mail offline.  * Combined Groups::             Combining groups into one group.
627    * Gnus Unplugged::              Reading news and mail offline.
628  The Server Buffer  
629    Server Buffer
630  * Server Buffer Format::      You can customize the look of this buffer.  
631  * Server Commands::           Commands to manipulate servers.  * Server Buffer Format::        You can customize the look of this buffer.
632  * Example Methods::           Examples server specifications.  * Server Commands::             Commands to manipulate servers.
633  * Creating a Virtual Server:: An example session.  * Example Methods::             Examples server specifications.
634  * Server Variables::          Which variables to set.  * Creating a Virtual Server::   An example session.
635  * Servers and Methods::       You can use server names as select methods.  * Server Variables::            Which variables to set.
636  * Unavailable Servers::       Some servers you try to contact may be down.  * Servers and Methods::         You can use server names as select methods.
637    * Unavailable Servers::         Some servers you try to contact may be down.
638    
639  Getting News  Getting News
640    
641  * NNTP::               Reading news from an @sc{nntp} server.  * NNTP::                        Reading news from an @acronym{NNTP} server.
642  * News Spool::         Reading news from the local spool.  * News Spool::                  Reading news from the local spool.
643    
644    @acronym{NNTP}
645    
646    * Direct Functions::            Connecting directly to the server.
647    * Indirect Functions::          Connecting indirectly to the server.
648    * Common Variables::            Understood by several connection functions.
649    
650  Getting Mail  Getting Mail
651    
652  * Mail in a Newsreader::         Important introductory notes.  * Mail in a Newsreader::        Important introductory notes.
653  * Getting Started Reading Mail:: A simple cookbook example.  * Getting Started Reading Mail::  A simple cookbook example.
654  * Splitting Mail::               How to create mail groups.  * Splitting Mail::              How to create mail groups.
655  * Mail Sources::                 How to tell Gnus where to get mail from.  * Mail Sources::                How to tell Gnus where to get mail from.
656  * Mail Back End Variables::      Variables for customizing mail handling.  * Mail Back End Variables::     Variables for customizing mail handling.
657  * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.  * Fancy Mail Splitting::        Gnus can do hairy splitting of incoming mail.
658  * Group Mail Splitting::         Use group customize to drive mail splitting.  * Group Mail Splitting::        Use group customize to drive mail splitting.
659  * Incorporating Old Mail::       What about the old mail you have?  * Incorporating Old Mail::      What about the old mail you have?
660  * Expiring Mail::                Getting rid of unwanted mail.  * Expiring Mail::               Getting rid of unwanted mail.
661  * Washing Mail::                 Removing cruft from the mail you get.  * Washing Mail::                Removing cruft from the mail you get.
662  * Duplicates::                   Dealing with duplicated mail.  * Duplicates::                  Dealing with duplicated mail.
663  * Not Reading Mail::             Using mail back ends for reading other files.  * Not Reading Mail::            Using mail back ends for reading other files.
664  * Choosing a Mail Back End::     Gnus can read a variety of mail formats.  * Choosing a Mail Back End::    Gnus can read a variety of mail formats.
665    
666  Mail Sources  Mail Sources
667    
668  * Mail Source Specifiers::       How to specify what a mail source is.  * Mail Source Specifiers::      How to specify what a mail source is.
669  * Mail Source Customization::    Some variables that influence things.  * Mail Source Customization::   Some variables that influence things.
670  * Fetching Mail::                Using the mail source specifiers.  * Fetching Mail::               Using the mail source specifiers.
671    
672  Choosing a Mail Back End  Choosing a Mail Back End
673    
674  * Unix Mail Box::               Using the (quite) standard Un*x mbox.  * Unix Mail Box::               Using the (quite) standard Un*x mbox.
675  * Rmail Babyl::                 Emacs programs use the rmail babyl format.  * Rmail Babyl::                 Emacs programs use the Rmail Babyl format.
676  * Mail Spool::                  Store your mail in a private spool?  * Mail Spool::                  Store your mail in a private spool?
677  * MH Spool::                    An mhspool-like back end.  * MH Spool::                    An mhspool-like back end.
678    * Maildir::                     Another one-file-per-message format.
679  * Mail Folders::                Having one file for each group.  * Mail Folders::                Having one file for each group.
680  * Comparing Mail Back Ends::    An in-depth looks at pros and cons.  * Comparing Mail Back Ends::    An in-depth looks at pros and cons.
681    
682  Browsing the Web  Browsing the Web
683    
684  * Web Searches::          Creating groups from articles that match a string.  * Archiving Mail::
685  * Slashdot::              Reading the Slashdot comments.  * Web Searches::                Creating groups from articles that match a string.
686  * Ultimate::              The Ultimate Bulletin Board systems.  * Slashdot::                    Reading the Slashdot comments.
687  * Web Archive::           Reading mailing list archived on web.  * Ultimate::                    The Ultimate Bulletin Board systems.
688    * Web Archive::                 Reading mailing list archived on web.
689    * RSS::                         Reading RDF site summary.
690    * Customizing w3::              Doing stuff to Emacs/w3 from Gnus.
691    
692    @acronym{IMAP}
693    
694    * Splitting in IMAP::           Splitting mail with nnimap.
695    * Expiring in IMAP::            Expiring mail with nnimap.
696    * Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
697    * Expunging mailboxes::         Equivalent of a ``compress mailbox'' button.
698    * A note on namespaces::        How to (not) use @acronym{IMAP} namespace in Gnus.
699    * Debugging IMAP::              What to do when things don't work.
700    
701  Other Sources  Other Sources
702    
703  * Directory Groups::      You can read a directory as if it was a newsgroup.  * Directory Groups::            You can read a directory as if it was a newsgroup.
704  * Anything Groups::       Dired?  Who needs dired?  * Anything Groups::             Dired?  Who needs dired?
705  * Document Groups::       Single files can be the basis of a group.  * Document Groups::             Single files can be the basis of a group.
706  * SOUP::                  Reading @sc{soup} packets ``offline''.  * SOUP::                        Reading @sc{soup} packets ``offline''.
707  * Mail-To-News Gateways:: Posting articles via mail-to-news gateways.  * Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
 * IMAP::                  Using Gnus as a @sc{imap} client.  
708    
709  Document Groups  Document Groups
710    
# Line 678  Document Groups Line 712  Document Groups
712    
713  SOUP  SOUP
714    
715  * SOUP Commands::     Commands for creating and sending @sc{soup} packets  * SOUP Commands::               Commands for creating and sending @sc{soup} packets
716  * SOUP Groups::       A back end for reading @sc{soup} packets.  * SOUP Groups::                 A back end for reading @sc{soup} packets.
717  * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.  * SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
   
 @sc{imap}  
   
 * Splitting in IMAP::     Splitting mail with nnimap.  
 * Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.  
 * Expunging mailboxes::   Equivalent of a "compress mailbox" button.  
718    
719  Combined Groups  Combined Groups
720    
721  * Virtual Groups::     Combining articles from many groups.  * Virtual Groups::              Combining articles from many groups.
722  * Kibozed Groups::     Looking through parts of the newsfeed for articles.  * Kibozed Groups::              Looking through parts of the newsfeed for articles.
723    
724  Gnus Unplugged  Gnus Unplugged
725    
726  * Agent Basics::           How it all is supposed to work.  * Agent Basics::                How it all is supposed to work.
727  * Agent Categories::       How to tell the Gnus Agent what to download.  * Agent Categories::            How to tell the Gnus Agent what to download.
728  * Agent Commands::         New commands for all the buffers.  * Agent Commands::              New commands for all the buffers.
729  * Agent Expiry::           How to make old articles go away.  * Agent Visuals::               Ways that the agent may effect your summary buffer.
730  * Agent and IMAP::         How to use the Agent with IMAP.  * Agent as Cache::              The Agent is a big cache too.
731  * Outgoing Messages::      What happens when you post/mail something?  * Agent Expiry::                How to make old articles go away.
732  * Agent Variables::        Customizing is fun.  * Agent Regeneration::          How to recover from lost connections and other accidents.
733  * Example Setup::          An example @file{.gnus.el} file for offline people.  * Agent and IMAP::              How to use the Agent with @acronym{IMAP}.
734  * Batching Agents::        How to fetch news from a @code{cron} job.  * Outgoing Messages::           What happens when you post/mail something?
735  * Agent Caveats::          What you think it'll do and what it does.  * Agent Variables::             Customizing is fun.
736    * Example Setup::               An example @file{~/.gnus.el} file for offline people.
737    * Batching Agents::             How to fetch news from a @code{cron} job.
738    * Agent Caveats::               What you think it'll do and what it does.
739    
740  Agent Categories  Agent Categories
741    
742  * Category Syntax::       What a category looks like.  * Category Syntax::             What a category looks like.
743  * The Category Buffer::   A buffer for maintaining categories.  * Category Buffer::             A buffer for maintaining categories.
744  * Category Variables::    Customize'r'Us.  * Category Variables::          Customize'r'Us.
745    
746  Agent Commands  Agent Commands
747    
748  * Group Agent Commands::  * Group Agent Commands::        Configure groups and fetch their contents.
749  * Summary Agent Commands::  * Summary Agent Commands::      Manually select then fetch specific articles.
750  * Server Agent Commands::  * Server Agent Commands::       Select the servers that are supported by the agent.
751    
752  Scoring  Scoring
753    
754  * Summary Score Commands::   Adding score entries for the current group.  * Summary Score Commands::      Adding score entries for the current group.
755  * Group Score Commands::     General score commands.  * Group Score Commands::        General score commands.
756  * Score Variables::          Customize your scoring.  (My, what terminology).  * Score Variables::             Customize your scoring.  (My, what terminology).
757  * Score File Format::        What a score file may contain.  * Score File Format::           What a score file may contain.
758  * Score File Editing::       You can edit score files by hand as well.  * Score File Editing::          You can edit score files by hand as well.
759  * Adaptive Scoring::         Big Sister Gnus knows what you read.  * Adaptive Scoring::            Big Sister Gnus knows what you read.
760  * Home Score File::          How to say where new score entries are to go.  * Home Score File::             How to say where new score entries are to go.
761  * Followups To Yourself::    Having Gnus notice when people answer you.  * Followups To Yourself::       Having Gnus notice when people answer you.
762  * Scoring Tips::             How to score effectively.  * Scoring On Other Headers::    Scoring on non-standard headers.
763  * Reverse Scoring::          That problem child of old is not problem.  * Scoring Tips::                How to score effectively.
764  * Global Score Files::       Earth-spanning, ear-splitting score files.  * Reverse Scoring::             That problem child of old is not problem.
765  * Kill Files::               They are still here, but they can be ignored.  * Global Score Files::          Earth-spanning, ear-splitting score files.
766  * Converting Kill Files::    Translating kill files to score files.  * Kill Files::                  They are still here, but they can be ignored.
767  * GroupLens::                Getting predictions on what you like to read.  * Converting Kill Files::       Translating kill files to score files.
768  * Advanced Scoring::         Using logical expressions to build score rules.  * GroupLens::                   Getting predictions on what you like to read.
769  * Score Decays::             It can be useful to let scores wither away.  * Advanced Scoring::            Using logical expressions to build score rules.
770    * Score Decays::                It can be useful to let scores wither away.
771    
772  GroupLens  GroupLens
773    
774  * Using GroupLens::          How to make Gnus use GroupLens.  * Using GroupLens::             How to make Gnus use GroupLens.
775  * Rating Articles::          Letting GroupLens know how you rate articles.  * Rating Articles::             Letting GroupLens know how you rate articles.
776  * Displaying Predictions::   Displaying predictions given by GroupLens.  * Displaying Predictions::      Displaying predictions given by GroupLens.
777  * GroupLens Variables::      Customizing GroupLens.  * GroupLens Variables::         Customizing GroupLens.
778    
779  Advanced Scoring  Advanced Scoring
780    
# Line 752  Advanced Scoring Line 784  Advanced Scoring
784    
785  Various  Various
786    
787  * Process/Prefix::             A convention used by many treatment commands.  * Process/Prefix::              A convention used by many treatment commands.
788  * Interactive::                Making Gnus ask you many questions.  * Interactive::                 Making Gnus ask you many questions.
789  * Symbolic Prefixes::          How to supply some Gnus functions with options.  * Symbolic Prefixes::           How to supply some Gnus functions with options.
790  * Formatting Variables::       You can specify what buffers should look like.  * Formatting Variables::        You can specify what buffers should look like.
791  * Windows Configuration::      Configuring the Gnus buffer windows.  * Window Layout::               Configuring the Gnus buffer windows.
792  * Faces and Fonts::            How to change how faces look.  * Faces and Fonts::             How to change how faces look.
793  * Compilation::                How to speed Gnus up.  * Compilation::                 How to speed Gnus up.
794  * Mode Lines::                 Displaying information in the mode lines.  * Mode Lines::                  Displaying information in the mode lines.
795  * Highlighting and Menus::     Making buffers look all nice and cozy.  * Highlighting and Menus::      Making buffers look all nice and cozy.
796  * Buttons::                    Get tendinitis in ten easy steps!  * Buttons::                     Get tendinitis in ten easy steps!
797  * Daemons::                    Gnus can do things behind your back.  * Daemons::                     Gnus can do things behind your back.
798  * NoCeM::                      How to avoid spam and other fatty foods.  * NoCeM::                       How to avoid spam and other fatty foods.
799  * Undo::                       Some actions can be undone.  * Undo::                        Some actions can be undone.
800  * Moderation::                 What to do if you're a moderator.  * Predicate Specifiers::        Specifying predicates.
801  * XEmacs Enhancements::        There are more pictures and stuff under XEmacs.  * Moderation::                  What to do if you're a moderator.
802  * Fuzzy Matching::             What's the big fuzz?  * Image Enhancements::          Modern versions of Emacs/XEmacs can display images.
803  * Thwarting Email Spam::       A how-to on avoiding unsolicited commercial email.  * Fuzzy Matching::              What's the big fuzz?
804  * Various Various::            Things that are really various.  * Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
805    * Other modes::                 Interaction with other modes.
806    * Various Various::             Things that are really various.
807    
808  Formatting Variables  Formatting Variables
809    
810  * Formatting Basics::     A formatting variable is basically a format string.  * Formatting Basics::           A formatting variable is basically a format string.
811  * Mode Line Formatting::  Some rules about mode line formatting variables.  * Mode Line Formatting::        Some rules about mode line formatting variables.
812  * Advanced Formatting::   Modifying output in various ways.  * Advanced Formatting::         Modifying output in various ways.
813  * User-Defined Specs::    Having Gnus call your own functions.  * User-Defined Specs::          Having Gnus call your own functions.
814  * Formatting Fonts::      Making the formatting look colorful and nice.  * Formatting Fonts::            Making the formatting look colorful and nice.
815    * Positioning Point::           Moving point to a position after an operation.
816  XEmacs Enhancements  * Tabulation::                  Tabulating your output.
817    * Wide Characters::             Dealing with wide characters.
818  * Picons::    How to display pictures of what your reading.  
819  * Smileys::   Show all those happy faces the way they were meant to be shown.  Image Enhancements
820  * Toolbar::   Click'n'drool.  
821  * XVarious::  Other XEmacsy Gnusey variables.  * X-Face::                      Display a funky, teensy black-and-white image.
822    * Face::                        Display a funkier, teensier colored image.
823  Picons  * Smileys::                     Show all those happy faces the way they were meant to be shown.
824    * Picons::                      How to display pictures of what you're reading.
825  * Picon Basics::           What are picons and How do I get them.  * XVarious::                    Other XEmacsy Gnusey variables.
826  * Picon Requirements::     Don't go further if you aren't using XEmacs.  
827  * Easy Picons::            Displaying Picons---the easy way.  Thwarting Email Spam
828  * Hard Picons::            The way you should do it.  You'll learn something.  
829  * Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.  * The problem of spam::         Some background, and some solutions
830    * Anti-Spam Basics::            Simple steps to reduce the amount of spam.
831    * SpamAssassin::                How to use external anti-spam tools.
832    * Hashcash::                    Reduce spam by burning CPU time.
833    * Filtering Spam Using The Spam ELisp Package::
834    * Filtering Spam Using Statistics with spam-stat::
835    
836    Filtering Spam Using The Spam ELisp Package
837    
838    * Spam ELisp Package Sequence of Events::  
839    * Spam ELisp Package Filtering of Incoming Mail::  
840    * Spam ELisp Package Global Variables::  
841    * Spam ELisp Package Configuration Examples::  
842    * Blacklists and Whitelists::  
843    * BBDB Whitelists::            
844    * Gmane Spam Reporting::        
845    * Anti-spam Hashcash Payments::  
846    * Blackholes::                  
847    * Regular Expressions Header Matching::  
848    * Bogofilter::                  
849    * ifile spam filtering::        
850    * spam-stat spam filtering::    
851    * SpamOracle::                  
852    * Extending the Spam ELisp package::  
853    
854    Filtering Spam Using Statistics with spam-stat
855    
856    * Creating a spam-stat dictionary::
857    * Splitting mail using spam-stat::
858    * Low-level interface to the spam-stat dictionary::
859    
860  Appendices  Appendices
861    
862  * History::                        How Gnus got where it is today.  * XEmacs::                      Requirements for installing under XEmacs.
863  * On Writing Manuals::             Why this is not a beginner's guide.  * History::                     How Gnus got where it is today.
864  * Terminology::                    We use really difficult, like, words here.  * On Writing Manuals::          Why this is not a beginner's guide.
865  * Customization::                  Tailoring Gnus to your needs.  * Terminology::                 We use really difficult, like, words here.
866  * Troubleshooting::                What you might try if things do not work.  * Customization::               Tailoring Gnus to your needs.
867  * Gnus Reference Guide::           Rilly, rilly technical stuff.  * Troubleshooting::             What you might try if things do not work.
868  * Emacs for Heathens::             A short introduction to Emacsian terms.  * Gnus Reference Guide::        Rilly, rilly technical stuff.
869  * Frequently Asked Questions::     A question-and-answer session.  * Emacs for Heathens::          A short introduction to Emacsian terms.
870    * Frequently Asked Questions::  The Gnus FAQ
871    
872  History  History
873    
874  * Gnus Versions::       What Gnus versions have been released.  * Gnus Versions::               What Gnus versions have been released.
875  * Other Gnus Versions:: Other Gnus versions that also have been released.  * Other Gnus Versions::         Other Gnus versions that also have been released.
876  * Why?::                What's the point of Gnus?  * Why?::                        What's the point of Gnus?
877  * Compatibility::       Just how compatible is Gnus with @sc{gnus}?  * Compatibility::               Just how compatible is Gnus with @sc{gnus}?
878  * Conformity::          Gnus tries to conform to all standards.  * Conformity::                  Gnus tries to conform to all standards.
879  * Emacsen::             Gnus can be run on a few modern Emacsen.  * Emacsen::                     Gnus can be run on a few modern Emacsen.
880  * Gnus Development::    How Gnus is developed.  * Gnus Development::            How Gnus is developed.
881  * Contributors::        Oodles of people.  * Contributors::                Oodles of people.
882  * New Features::        Pointers to some of the new stuff in Gnus.  * New Features::                Pointers to some of the new stuff in Gnus.
883    
884  New Features  New Features
885    
886  * ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.  * ding Gnus::                   New things in Gnus 5.0/5.1, the first new Gnus.
887  * September Gnus::     The Thing Formally Known As Gnus 5.2/5.3.  * September Gnus::              The Thing Formally Known As Gnus 5.2/5.3.
888  * Red Gnus::           Third time best---Gnus 5.4/5.5.  * Red Gnus::                    Third time best---Gnus 5.4/5.5.
889  * Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.  * Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
890  * Pterodactyl Gnus::   Pentad also starts with P, AKA Gnus 5.8/5.9.  * Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
891    * Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
892    
893  Customization  Customization
894    
895  * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.  * Slow/Expensive Connection::   You run a local Emacs and get the news elsewhere.
896  * Slow Terminal Connection::  You run a remote Emacs.  * Slow Terminal Connection::    You run a remote Emacs.
897  * Little Disk Space::         You feel that having large setup files is icky.  * Little Disk Space::           You feel that having large setup files is icky.
898  * Slow Machine::              You feel like buying a faster machine.  * Slow Machine::                You feel like buying a faster machine.
899    
900  Gnus Reference Guide  Gnus Reference Guide
901    
902  * Gnus Utility Functions::   Common functions and variable to use.  * Gnus Utility Functions::      Common functions and variable to use.
903  * Back End Interface::       How Gnus communicates with the servers.  * Back End Interface::          How Gnus communicates with the servers.
904  * Score File Syntax::        A BNF definition of the score file standard.  * Score File Syntax::           A BNF definition of the score file standard.
905  * Headers::                  How Gnus stores headers internally.  * Headers::                     How Gnus stores headers internally.
906  * Ranges::                   A handy format for storing mucho numbers.  * Ranges::                      A handy format for storing mucho numbers.
907  * Group Info::               The group info format.  * Group Info::                  The group info format.
908  * Extended Interactive::     Symbolic prefixes and stuff.  * Extended Interactive::        Symbolic prefixes and stuff.
909  * Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.  * Emacs/XEmacs Code::           Gnus can be run under all modern Emacsen.
910  * Various File Formats::     Formats of files that Gnus use.  * Various File Formats::        Formats of files that Gnus use.
911    
912  Back End Interface  Back End Interface
913    
914  * Required Back End Functions::       Functions that must be implemented.  * Required Back End Functions::  Functions that must be implemented.
915  * Optional Back End Functions::       Functions that need not be implemented.  * Optional Back End Functions::  Functions that need not be implemented.
916  * Error Messaging::                   How to get messages and report errors.  * Error Messaging::             How to get messages and report errors.
917  * Writing New Back Ends::             Extending old back ends.  * Writing New Back Ends::       Extending old back ends.
918  * Hooking New Back Ends Into Gnus::   What has to be done on the Gnus end.  * Hooking New Back Ends Into Gnus::  What has to be done on the Gnus end.
919  * Mail-like Back Ends::               Some tips on mail back ends.  * Mail-like Back Ends::         Some tips on mail back ends.
920    
921  Various File Formats  Various File Formats
922    
923  * Active File Format::      Information on articles and groups available.  * Active File Format::          Information on articles and groups available.
924  * Newsgroups File Format::  Group descriptions.  * Newsgroups File Format::      Group descriptions.
925    
926  Emacs for Heathens  Emacs for Heathens
927    
928  * Keystrokes::      Entering text and executing commands.  * Keystrokes::                  Entering text and executing commands.
929  * Emacs Lisp::      The built-in Emacs programming language.  * Emacs Lisp::                  The built-in Emacs programming language.
930    
931  @end detailmenu  @end detailmenu
932  @end menu  @end menu
# Line 882  If you want to start Gnus in a different Line 947  If you want to start Gnus in a different
947  @kbd{M-x gnus-other-frame} instead.  @kbd{M-x gnus-other-frame} instead.
948    
949  If things do not go smoothly at startup, you have to twiddle some  If things do not go smoothly at startup, you have to twiddle some
950  variables in your @file{~/.gnus} file.  This file is similar to  variables in your @file{~/.gnus.el} file.  This file is similar to
951  @file{~/.emacs}, but is read when gnus starts.  @file{~/.emacs}, but is read when Gnus starts.
952    
953  If you puzzle at any terms used in this manual, please refer to the  If you puzzle at any terms used in this manual, please refer to the
954  terminology section (@pxref{Terminology}).  terminology section (@pxref{Terminology}).
955    
956  @menu  @menu
957  * Finding the News::    Choosing a method for getting news.  * Finding the News::            Choosing a method for getting news.
958  * The First Time::      What does Gnus do the first time you start it?  * The First Time::              What does Gnus do the first time you start it?
959  * The Server is Down::  How can I read my mail then?  * The Server is Down::          How can I read my mail then?
960  * Slave Gnusae::        You can have more than one Gnus active at a time.  * Slave Gnusae::                You can have more than one Gnus active at a time.
961  * Fetching a Group::    Starting Gnus just to read a group.  * Fetching a Group::            Starting Gnus just to read a group.
962  * New Groups::          What is Gnus supposed to do with new groups?  * New Groups::                  What is Gnus supposed to do with new groups?
963  * Startup Files::       Those pesky startup files---@file{.newsrc}.  * Changing Servers::            You may want to move from one server to another.
964  * Auto Save::           Recovering from a crash.  * Startup Files::               Those pesky startup files---@file{.newsrc}.
965  * The Active File::     Reading the active file over a slow line Takes Time.  * Auto Save::                   Recovering from a crash.
966  * Changing Servers::    You may want to move from one server to another.  * The Active File::             Reading the active file over a slow line Takes Time.
967  * Startup Variables::   Other variables you might change.  * Startup Variables::           Other variables you might change.
968  @end menu  @end menu
969    
970    
# Line 915  news.  This variable should be a list wh Line 980  news.  This variable should be a list wh
980  native method.  All groups not fetched with this method are  native method.  All groups not fetched with this method are
981  foreign groups.  foreign groups.
982    
983  For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where  For instance, if the @samp{news.somewhere.edu} @acronym{NNTP} server is where
984  you want to get your daily dosage of news from, you'd say:  you want to get your daily dosage of news from, you'd say:
985    
986  @lisp  @lisp
# Line 929  If you want to read directly from the lo Line 994  If you want to read directly from the lo
994  @end lisp  @end lisp
995    
996  If you can use a local spool, you probably should, as it will almost  If you can use a local spool, you probably should, as it will almost
997  certainly be much faster.  certainly be much faster.  But do not use the local spool if your
998    server is running Leafnode; in this case, use @code{(nntp "localhost")}.
999    
1000  @vindex gnus-nntpserver-file  @vindex gnus-nntpserver-file
1001  @cindex NNTPSERVER  @cindex NNTPSERVER
1002  @cindex @sc{nntp} server  @cindex @acronym{NNTP} server
1003  If this variable is not set, Gnus will take a look at the  If this variable is not set, Gnus will take a look at the
1004  @code{NNTPSERVER} environment variable.  If that variable isn't set,  @env{NNTPSERVER} environment variable.  If that variable isn't set,
1005  Gnus will see whether @code{gnus-nntpserver-file}  Gnus will see whether @code{gnus-nntpserver-file}
1006  (@file{/etc/nntpserver} by default) has any opinions on the matter.  If  (@file{/etc/nntpserver} by default) has any opinions on the matter.
1007  that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.  If that fails as well, Gnus will try to use the machine running Emacs
1008    as an @acronym{NNTP} server.  That's a long shot, though.
1009    
1010  @vindex gnus-nntp-server  @vindex gnus-nntp-server
1011  If @code{gnus-nntp-server} is set, this variable will override  If @code{gnus-nntp-server} is set, this variable will override
# Line 948  If @code{gnus-nntp-server} is set, this Line 1015  If @code{gnus-nntp-server} is set, this
1015  @vindex gnus-secondary-servers  @vindex gnus-secondary-servers
1016  @vindex gnus-nntp-server  @vindex gnus-nntp-server
1017  You can also make Gnus prompt you interactively for the name of an  You can also make Gnus prompt you interactively for the name of an
1018  @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}  @acronym{NNTP} server.  If you give a non-numerical prefix to @code{gnus}
1019  (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers  (i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
1020  in the @code{gnus-secondary-servers} list (if any).  You can also just  in the @code{gnus-secondary-servers} list (if any).  You can also just
1021  type in the name of any server you feel like visiting.  (Note that this  type in the name of any server you feel like visiting.  (Note that this
# Line 957  gnus} later in the same Emacs session, G Line 1024  gnus} later in the same Emacs session, G
1024  server.)  server.)
1025    
1026  @findex gnus-group-browse-foreign-server  @findex gnus-group-browse-foreign-server
1027  @kindex B @r{(Group)}  @kindex B (Group)
1028  However, if you use one @sc{nntp} server regularly and are just  However, if you use one @acronym{NNTP} server regularly and are just
1029  interested in a couple of groups from a different server, you would be  interested in a couple of groups from a different server, you would be
1030  better served by using the @kbd{B} command in the group buffer.  It will  better served by using the @kbd{B} command in the group buffer.  It will
1031  let you have a look at what groups are available, and you can subscribe  let you have a look at what groups are available, and you can subscribe
# Line 1033  your mail without bothering with the ser Line 1100  your mail without bothering with the ser
1100  if you're in a hurry as well.  This command will not attempt to contact  if you're in a hurry as well.  This command will not attempt to contact
1101  your primary server---instead, it will just activate all groups on level  your primary server---instead, it will just activate all groups on level
1102  1 and 2.  (You should preferably keep no native groups on those two  1 and 2.  (You should preferably keep no native groups on those two
1103  levels.)  levels.) Also @pxref{Group Levels}.
1104    
1105    
1106  @node Slave Gnusae  @node Slave Gnusae
# Line 1046  are using the two different Gnusae to re Line 1113  are using the two different Gnusae to re
1113  that is no problem whatsoever.  You just do it.  that is no problem whatsoever.  You just do it.
1114    
1115  The problem appears when you want to run two Gnusae that use the same  The problem appears when you want to run two Gnusae that use the same
1116  @code{.newsrc} file.  @file{.newsrc} file.
1117    
1118  To work around that problem some, we here at the Think-Tank at the Gnus  To work around that problem some, we here at the Think-Tank at the Gnus
1119  Towers have come up with a new concept: @dfn{Masters} and  Towers have come up with a new concept: @dfn{Masters} and
# Line 1056  conjunction with each other, you have to Line 1123  conjunction with each other, you have to
1123  me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer  me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
1124  Applications}) will be much more expensive, of course.)  Applications}) will be much more expensive, of course.)
1125    
1126    @findex gnus-slave
1127  Anyway, you start one Gnus up the normal way with @kbd{M-x gnus} (or  Anyway, you start one Gnus up the normal way with @kbd{M-x gnus} (or
1128  however you do it).  Each subsequent slave Gnusae should be started with  however you do it).  Each subsequent slave Gnusae should be started with
1129  @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}  @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
# Line 1066  information from them.  (The slave files Line 1134  information from them.  (The slave files
1134  they were created, so the latest changes will have precedence.)  they were created, so the latest changes will have precedence.)
1135    
1136  Information from the slave files has, of course, precedence over the  Information from the slave files has, of course, precedence over the
1137  information in the normal (i.e., master) @code{.newsrc} file.  information in the normal (i.e., master) @file{.newsrc} file.
1138    
1139    If the @file{.newsrc*} files have not been saved in the master when the
1140    slave starts, you may be prompted as to whether to read an auto-save
1141    file.  If you answer ``yes'', the unsaved changes to the master will be
1142    incorporated into the slave.  If you answer ``no'', the slave may see some
1143    messages as unread that have been read in the master.
1144    
1145  @node Fetching a Group  @node Fetching a Group
1146  @section Fetching a Group  @section Fetching a Group
# Line 1097  is @code{ask-server} by default.  If you Line 1170  is @code{ask-server} by default.  If you
1170  when you do the @kbd{g} command (@pxref{Scanning New Messages}).  when you do the @kbd{g} command (@pxref{Scanning New Messages}).
1171    
1172  @menu  @menu
1173  * Checking New Groups::      Determining what groups are new.  * Checking New Groups::         Determining what groups are new.
1174  * Subscription Methods::     What Gnus should do with new groups.  * Subscription Methods::        What Gnus should do with new groups.
1175  * Filtering New Groups::     Making Gnus ignore certain new groups.  * Filtering New Groups::        Making Gnus ignore certain new groups.
1176  @end menu  @end menu
1177    
1178    
# Line 1251  subscribed, and if it matches the latter Line 1324  subscribed, and if it matches the latter
1324  @vindex gnus-auto-subscribed-groups  @vindex gnus-auto-subscribed-groups
1325  Yet another variable that meddles here is  Yet another variable that meddles here is
1326  @code{gnus-auto-subscribed-groups}.  It works exactly like  @code{gnus-auto-subscribed-groups}.  It works exactly like
1327  @code{gnus-options-subscribe}, and is therefore really superfluous, but I  @code{gnus-options-subscribe}, and is therefore really superfluous,
1328  thought it would be nice to have two of these.  This variable is more  but I thought it would be nice to have two of these.  This variable is
1329  meant for setting some ground rules, while the other variable is used  more meant for setting some ground rules, while the other variable is
1330  more for user fiddling.  By default this variable makes all new groups  used more for user fiddling.  By default this variable makes all new
1331  that come from mail back ends (@code{nnml}, @code{nnbabyl},  groups that come from mail back ends (@code{nnml}, @code{nnbabyl},
1332  @code{nnfolder}, @code{nnmbox}, and @code{nnmh}) subscribed.  If you  @code{nnfolder}, @code{nnmbox}, @code{nnmh}, and @code{nnmaildir})
1333  don't like that, just set this variable to @code{nil}.  subscribed.  If you don't like that, just set this variable to
1334    @code{nil}.
1335    
1336  New groups that match this regexp are subscribed using  New groups that match this regexp are subscribed using
1337  @code{gnus-subscribe-options-newsgroup-method}.  @code{gnus-subscribe-options-newsgroup-method}.
# Line 1267  New groups that match this regexp are su Line 1341  New groups that match this regexp are su
1341  @section Changing Servers  @section Changing Servers
1342  @cindex changing servers  @cindex changing servers
1343    
1344  Sometimes it is necessary to move from one @sc{nntp} server to another.  Sometimes it is necessary to move from one @acronym{NNTP} server to another.
1345  This happens very rarely, but perhaps you change jobs, or one server is  This happens very rarely, but perhaps you change jobs, or one server is
1346  very flaky and you want to use another.  very flaky and you want to use another.
1347    
# Line 1277  Changing the server is pretty easy, righ Line 1351  Changing the server is pretty easy, righ
1351  @emph{Wrong!}  @emph{Wrong!}
1352    
1353  Article numbers are not (in any way) kept synchronized between different  Article numbers are not (in any way) kept synchronized between different
1354  @sc{nntp} servers, and the only way Gnus keeps track of what articles  @acronym{NNTP} servers, and the only way Gnus keeps track of what articles
1355  you have read is by keeping track of article numbers.  So when you  you have read is by keeping track of article numbers.  So when you
1356  change @code{gnus-select-method}, your @file{.newsrc} file becomes  change @code{gnus-select-method}, your @file{.newsrc} file becomes
1357  worthless.  worthless.
# Line 1308  and read ranges have become worthless. Line 1382  and read ranges have become worthless.
1382  gnus-group-clear-data-on-native-groups} command to clear out all data  gnus-group-clear-data-on-native-groups} command to clear out all data
1383  that you have on your native groups.  Use with caution.  that you have on your native groups.  Use with caution.
1384    
1385    @kindex M-x gnus-group-clear-data
1386    @findex gnus-group-clear-data
1387    Clear the data from the current group only---nix out marks and the
1388    list of read articles (@code{gnus-group-clear-data}).
1389    
1390  After changing servers, you @strong{must} move the cache hierarchy away,  After changing servers, you @strong{must} move the cache hierarchy away,
1391  since the cached articles will have wrong article numbers, which will  since the cached articles will have wrong article numbers, which will
1392  affect which articles Gnus thinks are read.  affect which articles Gnus thinks are read.
1393    @code{gnus-group-clear-data-on-native-groups} will ask you if you want
1394    to have it done automatically; for @code{gnus-group-clear-data}, you
1395    can use @kbd{M-x gnus-cache-move-cache} (but beware, it will move the
1396    cache for all groups).
1397    
1398    
1399  @node Startup Files  @node Startup Files
# Line 1363  saving.  This can be useful in certain o Line 1446  saving.  This can be useful in certain o
1446  several servers where not all servers support @code{ask-server}.  several servers where not all servers support @code{ask-server}.
1447    
1448  @vindex gnus-startup-file  @vindex gnus-startup-file
1449    @vindex gnus-backup-startup-file
1450    @vindex version-control
1451  The @code{gnus-startup-file} variable says where the startup files are.  The @code{gnus-startup-file} variable says where the startup files are.
1452  The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup  The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
1453  file being whatever that one is, with a @samp{.eld} appended.  file being whatever that one is, with a @samp{.eld} appended.
1454    If you want version control for this file, set
1455    @code{gnus-backup-startup-file}.  It respects the same values as the
1456    @code{version-control} variable.
1457    
1458  @vindex gnus-save-newsrc-hook  @vindex gnus-save-newsrc-hook
1459  @vindex gnus-save-quick-newsrc-hook  @vindex gnus-save-quick-newsrc-hook
# Line 1387  startup files.  If you want to turn back Line 1475  startup files.  If you want to turn back
1475  @end lisp  @end lisp
1476    
1477  @vindex gnus-init-file  @vindex gnus-init-file
1478    @vindex gnus-site-init-file
1479  When Gnus starts, it will read the @code{gnus-site-init-file}  When Gnus starts, it will read the @code{gnus-site-init-file}
1480  (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}  (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
1481  (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files  (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
# Line 1424  Gnus will put the dribble file(s) in @co Line 1513  Gnus will put the dribble file(s) in @co
1513  this variable is @code{nil}, which it is by default, Gnus will dribble  this variable is @code{nil}, which it is by default, Gnus will dribble
1514  into the directory where the @file{.newsrc} file is located.  (This is  into the directory where the @file{.newsrc} file is located.  (This is
1515  normally the user's home directory.)  The dribble file will get the same  normally the user's home directory.)  The dribble file will get the same
1516  file permissions as the @code{.newsrc} file.  file permissions as the @file{.newsrc} file.
1517    
1518  @vindex gnus-always-read-dribble-file  @vindex gnus-always-read-dribble-file
1519  If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will  If @code{gnus-always-read-dribble-file} is non-@code{nil}, Gnus will
# Line 1480  variable. Line 1569  variable.
1569    
1570  If this variable is @code{nil}, Gnus will ask for group info in total  If this variable is @code{nil}, Gnus will ask for group info in total
1571  lock-step, which isn't very fast.  If it is @code{some} and you use an  lock-step, which isn't very fast.  If it is @code{some} and you use an
1572  @sc{nntp} server, Gnus will pump out commands as fast as it can, and  @acronym{NNTP} server, Gnus will pump out commands as fast as it can, and
1573  read all the replies in one swoop.  This will normally result in better  read all the replies in one swoop.  This will normally result in better
1574  performance, but if the server does not support the aforementioned  performance, but if the server does not support the aforementioned
1575  @code{LIST ACTIVE group} command, this isn't very nice to the server.  @code{LIST ACTIVE group} command, this isn't very nice to the server.
# Line 1538  in a while from the group buffer instead Line 1627  in a while from the group buffer instead
1627  If non-@code{nil}, the startup message won't be displayed.  That way,  If non-@code{nil}, the startup message won't be displayed.  That way,
1628  your boss might not notice as easily that you are reading news instead  your boss might not notice as easily that you are reading news instead
1629  of doing your job.  Note that this variable is used before  of doing your job.  Note that this variable is used before
1630  @file{.gnus.el} is loaded, so it should be set in @code{.emacs} instead.  @file{~/.gnus.el} is loaded, so it should be set in @file{.emacs} instead.
1631    
1632  @item gnus-no-groups-message  @item gnus-no-groups-message
1633  @vindex gnus-no-groups-message  @vindex gnus-no-groups-message
# Line 1556  default is @samp{Tuxedomoon.Jingle4.au}. Line 1645  default is @samp{Tuxedomoon.Jingle4.au}.
1645  @end table  @end table
1646    
1647    
1648  @node The Group Buffer  @node Group Buffer
1649  @chapter The Group Buffer  @chapter Group Buffer
1650  @cindex group buffer  @cindex group buffer
1651    
1652    @c Alex Schroeder suggests to rearrange this as follows:
1653    @c
1654    @c <kensanata> ok, just save it for reference.  I'll go to bed in a minute.
1655    @c   1. Selecting a Group, 2. (new) Finding a Group, 3. Group Levels,
1656    @c   4. Subscription Commands, 5. Group Maneuvering, 6. Group Data,
1657    @c   7. Group Score, 8. Group Buffer Format
1658    @c <kensanata> Group Levels should have more information on levels 5 to 9.  I
1659    @c   suggest to split the 4th paragraph ("Gnus considers groups...") as follows:
1660    @c <kensanata> First, "Gnus considers groups... (default 9)."
1661    @c <kensanata> New, a table summarizing what levels 1 to 9 mean.
1662    @c <kensanata> Third, "Gnus treats subscribed ... reasons of efficiency"
1663    @c <kensanata> Then expand the next paragraph or add some more to it.
1664    @c    This short one sentence explains levels 1 and 2, therefore I understand
1665    @c    that I should keep important news at 3 and boring news at 4.
1666    @c    Say so!  Then go on to explain why I should bother with levels 6 to 9.
1667    @c    Maybe keep those that you don't want to read temporarily at 6,
1668    @c    those that you never want to read at 8, those that offend your
1669    @c    human rights at 9...
1670    
1671    
1672  The @dfn{group buffer} lists all (or parts) of the available groups.  It  The @dfn{group buffer} lists all (or parts) of the available groups.  It
1673  is the first buffer shown when Gnus starts, and will never be killed as  is the first buffer shown when Gnus starts, and will never be killed as
1674  long as Gnus is active.  long as Gnus is active.
# Line 1567  long as Gnus is active. Line 1676  long as Gnus is active.
1676  @iftex  @iftex
1677  @iflatex  @iflatex
1678  \gnusfigure{The Group Buffer}{320}{  \gnusfigure{The Group Buffer}{320}{
1679  \put(75,50){\epsfig{figure=tmp/group.ps,height=9cm}}  \put(75,50){\epsfig{figure=ps/group,height=9cm}}
1680  \put(120,37){\makebox(0,0)[t]{Buffer name}}  \put(120,37){\makebox(0,0)[t]{Buffer name}}
1681  \put(120,38){\vector(1,2){10}}  \put(120,38){\vector(1,2){10}}
1682  \put(40,60){\makebox(0,0)[r]{Mode line}}  \put(40,60){\makebox(0,0)[r]{Mode line}}
# Line 1579  long as Gnus is active. Line 1688  long as Gnus is active.
1688  @end iftex  @end iftex
1689    
1690  @menu  @menu
1691  * Group Buffer Format::    Information listed and how you can change it.  * Group Buffer Format::         Information listed and how you can change it.
1692  * Group Maneuvering::      Commands for moving in the group buffer.  * Group Maneuvering::           Commands for moving in the group buffer.
1693  * Selecting a Group::      Actually reading news.  * Selecting a Group::           Actually reading news.
1694  * Group Data::             Changing the info for a group.  * Subscription Commands::       Unsubscribing, killing, subscribing.
1695  * Subscription Commands::  Unsubscribing, killing, subscribing.  * Group Data::                  Changing the info for a group.
1696  * Group Levels::           Levels? What are those, then?  * Group Levels::                Levels? What are those, then?
1697  * Group Score::            A mechanism for finding out what groups you like.  * Group Score::                 A mechanism for finding out what groups you like.
1698  * Marking Groups::         You can mark groups for later processing.  * Marking Groups::              You can mark groups for later processing.
1699  * Foreign Groups::         Creating and editing groups.  * Foreign Groups::              Creating and editing groups.
1700  * Group Parameters::       Each group may have different parameters set.  * Group Parameters::            Each group may have different parameters set.
1701  * Listing Groups::         Gnus can list various subsets of the groups.  * Listing Groups::              Gnus can list various subsets of the groups.
1702  * Sorting Groups::         Re-arrange the group order.  * Sorting Groups::              Re-arrange the group order.
1703  * Group Maintenance::      Maintaining a tidy @file{.newsrc} file.  * Group Maintenance::           Maintaining a tidy @file{.newsrc} file.
1704  * Browse Foreign Server::  You can browse a server.  See what it has to offer.  * Browse Foreign Server::       You can browse a server.  See what it has to offer.
1705  * Exiting Gnus::           Stop reading news and get some work done.  * Exiting Gnus::                Stop reading news and get some work done.
1706  * Group Topics::           A folding group mode divided into topics.  * Group Topics::                A folding group mode divided into topics.
1707  * Misc Group Stuff::       Other stuff that you can to do.  * Misc Group Stuff::            Other stuff that you can to do.
1708  @end menu  @end menu
1709    
1710    
# Line 1603  long as Gnus is active. Line 1712  long as Gnus is active.
1712  @section Group Buffer Format  @section Group Buffer Format
1713    
1714  @menu  @menu
1715  * Group Line Specification::       Deciding how the group buffer is to look.  * Group Line Specification::    Deciding how the group buffer is to look.
1716  * Group Modeline Specification::   The group buffer modeline.  * Group Mode Line Specification::  The group buffer mode line.
1717  * Group Highlighting::             Having nice colors in the group buffer.  * Group Highlighting::          Having nice colors in the group buffer.
1718  @end menu  @end menu
1719    
1720    
# Line 1637  lines of a @code{format} specification, Line 1746  lines of a @code{format} specification,
1746  a @code{printf} specifications, for those of you who use (feh!) C.  a @code{printf} specifications, for those of you who use (feh!) C.
1747  @xref{Formatting Variables}.  @xref{Formatting Variables}.
1748    
1749  @samp{%M%S%5y: %(%g%)\n} is the value that produced those lines above.  @samp{%M%S%5y:%B%(%g%)\n} is the value that produced those lines above.
1750    
1751  There should always be a colon on the line; the cursor always moves to  There should always be a colon on the line; the cursor always moves to
1752  the colon after performing an operation.  Nothing else is required---not  the colon after performing an operation.  @xref{Positioning
1753  even the group name.  All displayed text is just window dressing, and is  Point}.  Nothing else is required---not even the group name.  All
1754  never examined by Gnus.  Gnus stores all real information it needs using  displayed text is just window dressing, and is never examined by Gnus.
1755  text properties.  Gnus stores all real information it needs using text properties.
1756    
1757  (Note that if you make a really strange, wonderful, spreadsheet-like  (Note that if you make a really strange, wonderful, spreadsheet-like
1758  layout, everybody will believe you are hard at work with the accounting  layout, everybody will believe you are hard at work with the accounting
# Line 1674  Number of ticked articles. Line 1783  Number of ticked articles.
1783  @item R  @item R
1784  Number of read articles.  Number of read articles.
1785    
1786    @item U
1787    Number of unseen articles.
1788    
1789  @item t  @item t
1790  Estimated total number of articles.  (This is really @var{max-number}  Estimated total number of articles.  (This is really @var{max-number}
1791  minus @var{min-number} plus 1.)  minus @var{min-number} plus 1.)
1792    
1793    Gnus uses this estimation because the @acronym{NNTP} protocol provides
1794    efficient access to @var{max-number} and @var{min-number} but getting
1795    the true unread message count is not possible efficiently.  For
1796    hysterical raisins, even the mail back ends, where the true number of
1797    unread messages might be available efficiently, use the same limited
1798    interface.  To remove this restriction from Gnus means that the back
1799    end interface has to be changed, which is not an easy job.  If you
1800    want to work on this, please contact the Gnus mailing list.
1801    
1802  @item y  @item y
1803  Number of unread, unticked, non-dormant articles.  Number of unread, unticked, non-dormant articles.
1804    
# Line 1690  Full group name. Line 1811  Full group name.
1811  @item G  @item G
1812  Group name.  Group name.
1813    
1814    @item C
1815    Group comment (@pxref{Group Parameters}) or group name if there is no
1816    comment element in the group parameters.
1817    
1818  @item D  @item D
1819  Newsgroup description.  Newsgroup description.  You need to read the group descriptions
1820    before these will appear, and to do that, you either have to set
1821    @code{gnus-read-active-file} or use the group buffer @kbd{M-d}
1822    command.
1823    
1824  @item o  @item o
1825  @samp{m} if moderated.  @samp{m} if moderated.
# Line 1702  Newsgroup description. Line 1830  Newsgroup description.
1830  @item s  @item s
1831  Select method.  Select method.
1832    
1833    @item B
1834    If the summary buffer for the group is open or not.
1835    
1836  @item n  @item n
1837  Select from where.  Select from where.
1838    
# Line 1748  if no info is available---for instance, Line 1879  if no info is available---for instance,
1879  group, or a bogus native group.  group, or a bogus native group.
1880    
1881    
1882  @node Group Modeline Specification  @node Group Mode Line Specification
1883  @subsection Group Modeline Specification  @subsection Group Mode Line Specification
1884  @cindex group modeline  @cindex group mode line
1885    
1886  @vindex gnus-group-mode-line-format  @vindex gnus-group-mode-line-format
1887  The mode line can be changed by setting  The mode line can be changed by setting
# Line 1783  background is dark: Line 1914  background is dark:
1914  (cond (window-system  (cond (window-system
1915         (setq custom-background-mode 'light)         (setq custom-background-mode 'light)
1916         (defface my-group-face-1         (defface my-group-face-1
1917           '((t (:foreground "Red" :bold t))) "First group face")           '((t (:foreground "Red" :bold t))) "First group face")
1918         (defface my-group-face-2         (defface my-group-face-2
1919           '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")           '((t (:foreground "DarkSeaGreen4" :bold t)))
1920             "Second group face")
1921         (defface my-group-face-3         (defface my-group-face-3
1922           '((t (:foreground "Green4" :bold t))) "Third group face")           '((t (:foreground "Green4" :bold t))) "Third group face")
1923         (defface my-group-face-4         (defface my-group-face-4
1924           '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")           '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
1925         (defface my-group-face-5         (defface my-group-face-5
1926           '((t (:foreground "Blue" :bold t))) "Fifth group face")))           '((t (:foreground "Blue" :bold t))) "Fifth group face")))
1927    
1928  (setq gnus-group-highlight  (setq gnus-group-highlight
1929        '(((> unread 200) . my-group-face-1)        '(((> unread 200) . my-group-face-1)
# Line 1822  The score of the group. Line 1954  The score of the group.
1954  @item ticked  @item ticked
1955  The number of ticked articles in the group.  The number of ticked articles in the group.
1956  @item total  @item total
1957  The total number of articles in the group.  Or rather, MAX-NUMBER minus  The total number of articles in the group.  Or rather,
1958  MIN-NUMBER plus one.  @var{max-number} minus @var{min-number} plus one.
1959  @item topic  @item topic
1960  When using the topic minor mode, this variable is bound to the current  When using the topic minor mode, this variable is bound to the current
1961  topic being inserted.  topic being inserted.
# Line 1850  expected, hopefully. Line 1982  expected, hopefully.
1982  @table @kbd  @table @kbd
1983    
1984  @item n  @item n
1985  @kindex n @r{(Group)}  @kindex n (Group)
1986  @findex gnus-group-next-unread-group  @findex gnus-group-next-unread-group
1987  Go to the next group that has unread articles  Go to the next group that has unread articles
1988  (@code{gnus-group-next-unread-group}).  (@code{gnus-group-next-unread-group}).
1989    
1990  @item p  @item p
1991  @itemx @key{DEL}  @itemx DEL
1992  @kindex @key{DEL} @r{(Group)}  @kindex DEL (Group)
1993  @kindex p @r{(Group)}  @kindex p (Group)
1994  @findex gnus-group-prev-unread-group  @findex gnus-group-prev-unread-group
1995  Go to the previous group that has unread articles  Go to the previous group that has unread articles
1996  (@code{gnus-group-prev-unread-group}).  (@code{gnus-group-prev-unread-group}).
1997    
1998  @item N  @item N
1999  @kindex N @r{(Group)}  @kindex N (Group)
2000  @findex gnus-group-next-group  @findex gnus-group-next-group
2001  Go to the next group (@code{gnus-group-next-group}).  Go to the next group (@code{gnus-group-next-group}).
2002    
2003  @item P  @item P
2004  @kindex P @r{(Group)}  @kindex P (Group)
2005  @findex gnus-group-prev-group  @findex gnus-group-prev-group
2006  Go to the previous group (@code{gnus-group-prev-group}).  Go to the previous group (@code{gnus-group-prev-group}).
2007    
2008  @item M-n  @item M-n
2009  @kindex M-n @r{(Group)}  @kindex M-n (Group)
2010  @findex gnus-group-next-unread-group-same-level  @findex gnus-group-next-unread-group-same-level
2011  Go to the next unread group on the same (or lower) level  Go to the next unread group on the same (or lower) level
2012  (@code{gnus-group-next-unread-group-same-level}).  (@code{gnus-group-next-unread-group-same-level}).
2013    
2014  @item M-p  @item M-p
2015  @kindex M-p @r{(Group)}  @kindex M-p (Group)
2016  @findex gnus-group-prev-unread-group-same-level  @findex gnus-group-prev-unread-group-same-level
2017  Go to the previous unread group on the same (or lower) level  Go to the previous unread group on the same (or lower) level
2018  (@code{gnus-group-prev-unread-group-same-level}).  (@code{gnus-group-prev-unread-group-same-level}).
# Line 1891  Three commands for jumping to groups: Line 2023  Three commands for jumping to groups:
2023  @table @kbd  @table @kbd
2024    
2025  @item j  @item j
2026  @kindex j @r{(Group)}  @kindex j (Group)
2027  @findex gnus-group-jump-to-group  @findex gnus-group-jump-to-group
2028  Jump to a group (and make it visible if it isn't already)  Jump to a group (and make it visible if it isn't already)
2029  (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just  (@code{gnus-group-jump-to-group}).  Killed groups can be jumped to, just
2030  like living groups.  like living groups.
2031    
2032  @item ,  @item ,
2033  @kindex , @r{(Group)}  @kindex , (Group)
2034  @findex gnus-group-best-unread-group  @findex gnus-group-best-unread-group
2035  Jump to the unread group with the lowest level  Jump to the unread group with the lowest level
2036  (@code{gnus-group-best-unread-group}).  (@code{gnus-group-best-unread-group}).
2037    
2038  @item .  @item .
2039  @kindex . @r{(Group)}  @kindex . (Group)
2040  @findex gnus-group-first-unread-group  @findex gnus-group-first-unread-group
2041  Jump to the first group with unread articles  Jump to the first group with unread articles
2042  (@code{gnus-group-first-unread-group}).  (@code{gnus-group-first-unread-group}).
# Line 1923  is @code{t}. Line 2055  is @code{t}.
2055    
2056  @table @kbd  @table @kbd
2057    
2058  @item @key{SPC}  @item SPACE
2059  @kindex @key{SPC} @r{(Group)}  @kindex SPACE (Group)
2060  @findex gnus-group-read-group  @findex gnus-group-read-group
2061  Select the current group, switch to the summary buffer and display the  Select the current group, switch to the summary buffer and display the
2062  first unread article (@code{gnus-group-read-group}).  If there are no  first unread article (@code{gnus-group-read-group}).  If there are no
2063  unread articles in the group, or if you give a non-numerical prefix to  unread articles in the group, or if you give a non-numerical prefix to
2064  this command, Gnus will offer to fetch all the old articles in this  this command, Gnus will offer to fetch all the old articles in this
2065  group from the server.  If you give a numerical prefix @var{N}, @var{N}  group from the server.  If you give a numerical prefix @var{n}, @var{n}
2066  determines the number of articles Gnus will fetch.  If @var{N} is  determines the number of articles Gnus will fetch.  If @var{n} is
2067  positive, Gnus fetches the @var{N} newest articles, if @var{N} is  positive, Gnus fetches the @var{n} newest articles, if @var{n} is
2068  negative, Gnus fetches the @code{abs(@var{N})} oldest articles.  negative, Gnus fetches the @code{abs(@var{n})} oldest articles.
2069    
2070  Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old  Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old
2071  articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u  articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u
# Line 1943  When you are in the group (in the Summar Line 2075  When you are in the group (in the Summar
2075  @kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old  @kbd{M-g} to fetch new articles, or @kbd{C-u M-g} to also show the old
2076  ones.  ones.
2077    
2078  @item @key{RET}  @item RET
2079  @kindex @key{RET} @r{(Group)}  @kindex RET (Group)
   
2080  @findex gnus-group-select-group  @findex gnus-group-select-group
2081  Select the current group and switch to the summary buffer  Select the current group and switch to the summary buffer
2082  (@code{gnus-group-select-group}).  Takes the same arguments as  (@code{gnus-group-select-group}).  Takes the same arguments as
# Line 1953  Select the current group and switch to t Line 2084  Select the current group and switch to t
2084  does not display the first unread article automatically upon group  does not display the first unread article automatically upon group
2085  entry.  entry.
2086    
2087  @item M-@key{RET}  @item M-RET
2088  @kindex M-@key{RET} @r{(Group)}  @kindex M-RET (Group)
2089  @findex gnus-group-quick-select-group  @findex gnus-group-quick-select-group
2090  This does the same as the command above, but tries to do it with the  This does the same as the command above, but tries to do it with the
2091  minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No  minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
2092  scoring/killing will be performed, there will be no highlights and no  scoring/killing will be performed, there will be no highlights and no
2093  expunging.  This might be useful if you're in a real hurry and have to  expunging.  This might be useful if you're in a real hurry and have to
2094  enter some humongous group.  If you give a 0 prefix to this command  enter some humongous group.  If you give a 0 prefix to this command
2095  (i.e., @kbd{0 M-@key{RET}}), Gnus won't even generate the summary buffer,  (i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
2096  which is useful if you want to toggle threading before generating the  which is useful if you want to toggle threading before generating the
2097  summary buffer (@pxref{Summary Generation Commands}).  summary buffer (@pxref{Summary Generation Commands}).
2098    
2099  @item M-@key{SPC}  @item M-SPACE
2100  @kindex M-@key{SPC} @r{(Group)}  @kindex M-SPACE (Group)
2101  @findex gnus-group-visible-select-group  @findex gnus-group-visible-select-group
2102  This is yet one more command that does the same as the @key{RET}  This is yet one more command that does the same as the @kbd{RET}
2103  command, but this one does it without expunging and hiding dormants  command, but this one does it without expunging and hiding dormants
2104  (@code{gnus-group-visible-select-group}).  (@code{gnus-group-visible-select-group}).
2105    
2106  @item C-M-@key{RET}  @item C-M-RET
2107  @kindex C-M-@key{RET} @r{(Group)}  @kindex C-M-RET (Group)
2108  @findex gnus-group-select-group-ephemerally  @findex gnus-group-select-group-ephemerally
2109  Finally, this command selects the current group ephemerally without  Finally, this command selects the current group ephemerally without
2110  doing any processing of its contents  doing any processing of its contents
# Line 1984  manner will have no permanent effects. Line 2115  manner will have no permanent effects.
2115  @end table  @end table
2116    
2117  @vindex gnus-large-newsgroup  @vindex gnus-large-newsgroup
2118  The @code{gnus-large-newsgroup} variable says what Gnus should consider  The @code{gnus-large-newsgroup} variable says what Gnus should
2119  to be a big group.  This is 200 by default.  If the group has more  consider to be a big group.  If it is @code{nil}, no groups are
2120    considered big.  The default value is 200.  If the group has more
2121  (unread and/or ticked) articles than this, Gnus will query the user  (unread and/or ticked) articles than this, Gnus will query the user
2122  before entering the group.  The user can then specify how many articles  before entering the group.  The user can then specify how many
2123  should be fetched from the server.  If the user specifies a negative  articles should be fetched from the server.  If the user specifies a
2124  number (@code{-n}), the @code{n} oldest articles will be fetched.  If it  negative number (@var{-n}), the @var{n} oldest articles will be
2125  is positive, the @code{n} articles that have arrived most recently will  fetched.  If it is positive, the @var{n} articles that have arrived
2126  be fetched.  most recently will be fetched.
2127    
2128    @vindex gnus-large-ephemeral-newsgroup
2129    @code{gnus-large-ephemeral-newsgroup} is the same as
2130    @code{gnus-large-newsgroup}, but is only used for ephemeral
2131    newsgroups.
2132    
2133  @vindex gnus-select-group-hook  @vindex gnus-select-group-hook
2134  @vindex gnus-auto-select-first  @vindex gnus-auto-select-first
2135  @code{gnus-auto-select-first} control whether any articles are selected  @vindex gnus-auto-select-subject
2136  automatically when entering a group with the @key{SPC} command.  If @code{gnus-auto-select-first} is non-@code{nil}, select an article
2137    automatically when entering a group with the @kbd{SPACE} command.
2138    Which article this is is controlled by the
2139    @code{gnus-auto-select-subject} variable.  Valid values for this
2140    variable is:
2141    
2142  @table @code  @table @code
2143    
2144  @item nil  @item unread
2145  Don't select any articles when entering the group.  Just display the  Place point on the subject line of the first unread article.
 full summary buffer.  
   
 @item t  
 Select the first unread article when entering the group.  
   
 @item best  
 Select the highest scored article in the group when entering the  
 group.  
2146    
2147  @end table  @item first
2148    Place point on the subject line of the first article.
2149    
2150  This variable can also be a function.  In that case, that function will  @item unseen
2151  be called to place point on a subject line, and/or select some article.  Place point on the subject line of the first unseen article.
 Useful functions include:  
2152    
2153  @table @code  @item unseen-or-unread
2154  @item gnus-summary-first-unread-subject  Place point on the subject line of the first unseen article, and if
2155  Place point on the subject line of the first unread article, but  there is no such article, place point on the subject line of the first
2156  don't select the article.  unread article.
2157    
2158  @item gnus-summary-first-unread-article  @item best
2159  Select the first unread article.  Place point on the subject line of the highest-scored unread article.
2160    
 @item gnus-summary-best-unread-article  
 Select the highest-scored unread article.  
2161  @end table  @end table
2162    
2163    This variable can also be a function.  In that case, that function
2164    will be called to place point on a subject line.
2165    
2166  If you want to prevent automatic selection in some group (say, in a  If you want to prevent automatic selection in some group (say, in a
2167  binary group with Huge articles) you can set this variable to @code{nil}  binary group with Huge articles) you can set the
2168  in @code{gnus-select-group-hook}, which is called when a group is  @code{gnus-auto-select-first} variable to @code{nil} in
2169    @code{gnus-select-group-hook}, which is called when a group is
2170  selected.  selected.
2171    
2172    
# Line 2044  selected. Line 2178  selected.
2178    
2179  @item S t  @item S t
2180  @itemx u  @itemx u
2181  @kindex S t @r{(Group)}  @kindex S t (Group)
2182  @kindex u @r{(Group)}  @kindex u (Group)
2183  @findex gnus-group-unsubscribe-current-group  @findex gnus-group-unsubscribe-current-group
2184  @c @icon{gnus-group-unsubscribe}  @c @icon{gnus-group-unsubscribe}
2185  Toggle subscription to the current group  Toggle subscription to the current group
# Line 2053  Toggle subscription to the current group Line 2187  Toggle subscription to the current group
2187    
2188  @item S s  @item S s
2189  @itemx U  @itemx U
2190  @kindex S s @r{(Group)}  @kindex S s (Group)
2191  @kindex U @r{(Group)}  @kindex U (Group)
2192  @findex gnus-group-unsubscribe-group  @findex gnus-group-unsubscribe-group
2193  Prompt for a group to subscribe, and then subscribe it.  If it was  Prompt for a group to subscribe, and then subscribe it.  If it was
2194  subscribed already, unsubscribe it instead  subscribed already, unsubscribe it instead
# Line 2062  subscribed already, unsubscribe it inste Line 2196  subscribed already, unsubscribe it inste
2196    
2197  @item S k  @item S k
2198  @itemx C-k  @itemx C-k
2199  @kindex S k @r{(Group)}  @kindex S k (Group)
2200  @kindex C-k @r{(Group)}  @kindex C-k (Group)
2201  @findex gnus-group-kill-group  @findex gnus-group-kill-group
2202  @c @icon{gnus-group-kill-group}  @c @icon{gnus-group-kill-group}
2203  Kill the current group (@code{gnus-group-kill-group}).  Kill the current group (@code{gnus-group-kill-group}).
2204    
2205  @item S y  @item S y
2206  @itemx C-y  @itemx C-y
2207  @kindex S y @r{(Group)}  @kindex S y (Group)
2208  @kindex C-y @r{(Group)}  @kindex C-y (Group)
2209  @findex gnus-group-yank-group  @findex gnus-group-yank-group
2210  Yank the last killed group (@code{gnus-group-yank-group}).  Yank the last killed group (@code{gnus-group-yank-group}).
2211    
2212  @item C-x C-t  @item C-x C-t
2213  @kindex C-x C-t @r{(Group)}  @kindex C-x C-t (Group)
2214  @findex gnus-group-transpose-groups  @findex gnus-group-transpose-groups
2215  Transpose two groups (@code{gnus-group-transpose-groups}).  This isn't  Transpose two groups (@code{gnus-group-transpose-groups}).  This isn't
2216  really a subscription command, but you can use it instead of a  really a subscription command, but you can use it instead of a
# Line 2084  kill-and-yank sequence sometimes. Line 2218  kill-and-yank sequence sometimes.
2218    
2219  @item S w  @item S w
2220  @itemx C-w  @itemx C-w
2221  @kindex S w @r{(Group)}  @kindex S w (Group)
2222  @kindex C-w @r{(Group)}  @kindex C-w (Group)
2223  @findex gnus-group-kill-region  @findex gnus-group-kill-region
2224  Kill all groups in the region (@code{gnus-group-kill-region}).  Kill all groups in the region (@code{gnus-group-kill-region}).
2225    
2226  @item S z  @item S z
2227  @kindex S z @r{(Group)}  @kindex S z (Group)
2228  @findex gnus-group-kill-all-zombies  @findex gnus-group-kill-all-zombies
2229  Kill all zombie groups (@code{gnus-group-kill-all-zombies}).  Kill all zombie groups (@code{gnus-group-kill-all-zombies}).
2230    
2231  @item S C-k  @item S C-k
2232  @kindex S C-k @r{(Group)}  @kindex S C-k (Group)
2233  @findex gnus-group-kill-level  @findex gnus-group-kill-level
2234  Kill all groups on a certain level (@code{gnus-group-kill-level}).  Kill all groups on a certain level (@code{gnus-group-kill-level}).
2235  These groups can't be yanked back after killing, so this command should  These groups can't be yanked back after killing, so this command should
# Line 2116  Also @pxref{Group Levels}. Line 2250  Also @pxref{Group Levels}.
2250  @table @kbd  @table @kbd
2251    
2252  @item c  @item c
2253  @kindex c @r{(Group)}  @kindex c (Group)
2254  @findex gnus-group-catchup-current  @findex gnus-group-catchup-current
2255  @vindex gnus-group-catchup-group-hook  @vindex gnus-group-catchup-group-hook
2256  @c @icon{gnus-group-catchup-current}  @c @icon{gnus-group-catchup-current}
# Line 2126  Mark all unticked articles in this group Line 2260  Mark all unticked articles in this group
2260  the group buffer.  the group buffer.
2261    
2262  @item C  @item C
2263  @kindex C @r{(Group)}  @kindex C (Group)
2264  @findex gnus-group-catchup-current-all  @findex gnus-group-catchup-current-all
2265  Mark all articles in this group, even the ticked ones, as read  Mark all articles in this group, even the ticked ones, as read
2266  (@code{gnus-group-catchup-current-all}).  (@code{gnus-group-catchup-current-all}).
2267    
2268  @item M-c  @item M-c
2269  @kindex M-c @r{(Group)}  @kindex M-c (Group)
2270  @findex gnus-group-clear-data  @findex gnus-group-clear-data
2271  Clear the data from the current group---nix out marks and the list of  Clear the data from the current group---nix out marks and the list of
2272  read articles (@code{gnus-group-clear-data}).  read articles (@code{gnus-group-clear-data}).
# Line 2140  read articles (@code{gnus-group-clear-da Line 2274  read articles (@code{gnus-group-clear-da
2274  @item M-x gnus-group-clear-data-on-native-groups  @item M-x gnus-group-clear-data-on-native-groups
2275  @kindex M-x gnus-group-clear-data-on-native-groups  @kindex M-x gnus-group-clear-data-on-native-groups
2276  @findex gnus-group-clear-data-on-native-groups  @findex gnus-group-clear-data-on-native-groups
2277  If you have switched from one @sc{nntp} server to another, all your marks  If you have switched from one @acronym{NNTP} server to another, all your marks
2278  and read ranges have become worthless.  You can use this command to  and read ranges have become worthless.  You can use this command to
2279  clear out all data that you have on your native groups.  Use with  clear out all data that you have on your native groups.  Use with
2280  caution.  caution.
# Line 2164  Remember:  The higher the level of the g Line 2298  Remember:  The higher the level of the g
2298  @table @kbd  @table @kbd
2299    
2300  @item S l  @item S l
2301  @kindex S l @r{(Group)}  @kindex S l (Group)
2302  @findex gnus-group-set-current-level  @findex gnus-group-set-current-level
2303  Set the level of the current group.  If a numeric prefix is given, the  Set the level of the current group.  If a numeric prefix is given, the
2304  next @var{n} groups will have their levels set.  The user will be  next @var{n} groups will have their levels set.  The user will be
# Line 2304  with the process mark and then execute t Line 2438  with the process mark and then execute t
2438  @table @kbd  @table @kbd
2439    
2440  @item #  @item #
2441  @kindex # @r{(Group)}  @kindex # (Group)
2442  @itemx M m  @itemx M m
2443  @kindex M m @r{(Group)}  @kindex M m (Group)
2444  @findex gnus-group-mark-group  @findex gnus-group-mark-group
2445  Set the mark on the current group (@code{gnus-group-mark-group}).  Set the mark on the current group (@code{gnus-group-mark-group}).
2446    
2447  @item M-#  @item M-#
2448  @kindex M-# @r{(Group)}  @kindex M-# (Group)
2449  @itemx M u  @itemx M u
2450  @kindex M u @r{(Group)}  @kindex M u (Group)
2451  @findex gnus-group-unmark-group  @findex gnus-group-unmark-group
2452  Remove the mark from the current group  Remove the mark from the current group
2453  (@code{gnus-group-unmark-group}).  (@code{gnus-group-unmark-group}).
2454    
2455  @item M U  @item M U
2456  @kindex M U @r{(Group)}  @kindex M U (Group)
2457  @findex gnus-group-unmark-all-groups  @findex gnus-group-unmark-all-groups
2458  Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).  Remove the mark from all groups (@code{gnus-group-unmark-all-groups}).
2459    
2460  @item M w  @item M w
2461  @kindex M w @r{(Group)}  @kindex M w (Group)
2462  @findex gnus-group-mark-region  @findex gnus-group-mark-region
2463  Mark all groups between point and mark (@code{gnus-group-mark-region}).  Mark all groups between point and mark (@code{gnus-group-mark-region}).
2464    
2465  @item M b  @item M b
2466  @kindex M b @r{(Group)}  @kindex M b (Group)
2467  @findex gnus-group-mark-buffer  @findex gnus-group-mark-buffer
2468  Mark all groups in the buffer (@code{gnus-group-mark-buffer}).  Mark all groups in the buffer (@code{gnus-group-mark-buffer}).
2469    
2470  @item M r  @item M r
2471  @kindex M r @r{(Group)}  @kindex M r (Group)
2472  @findex gnus-group-mark-regexp  @findex gnus-group-mark-regexp
2473  Mark all groups that match some regular expression  Mark all groups that match some regular expression
2474  (@code{gnus-group-mark-regexp}).  (@code{gnus-group-mark-regexp}).
# Line 2362  consulted. Line 2496  consulted.
2496  @table @kbd  @table @kbd
2497    
2498  @item G m  @item G m
2499  @kindex G m @r{(Group)}  @kindex G m (Group)
2500  @findex gnus-group-make-group  @findex gnus-group-make-group
2501  @cindex making groups  @cindex making groups
2502  Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you  Make a new group (@code{gnus-group-make-group}).  Gnus will prompt you
2503  for a name, a method and possibly an @dfn{address}.  For an easier way  for a name, a method and possibly an @dfn{address}.  For an easier way
2504  to subscribe to @sc{nntp} groups, @pxref{Browse Foreign Server}.  to subscribe to @acronym{NNTP} groups (@pxref{Browse Foreign Server}).
2505    
2506    @item G M
2507    @kindex G M (Group)
2508    @findex gnus-group-read-ephemeral-group
2509    Make an ephemeral group (@code{gnus-group-read-ephemeral-group}).  Gnus
2510    will prompt you for a name, a method and an @dfn{address}.
2511    
2512  @item G r  @item G r
2513  @kindex G r @r{(Group)}  @kindex G r (Group)
2514  @findex gnus-group-rename-group  @findex gnus-group-rename-group
2515  @cindex renaming groups  @cindex renaming groups
2516  Rename the current group to something else  Rename the current group to something else
# Line 2379  groups---mail groups mostly.  This comma Line 2519  groups---mail groups mostly.  This comma
2519  on some back ends.  on some back ends.
2520    
2521  @item G c  @item G c
2522  @kindex G c @r{(Group)}  @kindex G c (Group)
2523  @cindex customizing  @cindex customizing
2524  @findex gnus-group-customize  @findex gnus-group-customize
2525  Customize the group parameters (@code{gnus-group-customize}).  Customize the group parameters (@code{gnus-group-customize}).
2526    
2527  @item G e  @item G e
2528  @kindex G e @r{(Group)}  @kindex G e (Group)
2529  @findex gnus-group-edit-group-method  @findex gnus-group-edit-group-method
2530  @cindex renaming groups  @cindex renaming groups
2531  Enter a buffer where you can edit the select method of the current  Enter a buffer where you can edit the select method of the current
2532  group (@code{gnus-group-edit-group-method}).  group (@code{gnus-group-edit-group-method}).
2533    
2534  @item G p  @item G p
2535  @kindex G p @r{(Group)}  @kindex G p (Group)
2536  @findex gnus-group-edit-group-parameters  @findex gnus-group-edit-group-parameters
2537  Enter a buffer where you can edit the group parameters  Enter a buffer where you can edit the group parameters
2538  (@code{gnus-group-edit-group-parameters}).  (@code{gnus-group-edit-group-parameters}).
2539    
2540  @item G E  @item G E
2541  @kindex G E @r{(Group)}  @kindex G E (Group)
2542  @findex gnus-group-edit-group  @findex gnus-group-edit-group
2543  Enter a buffer where you can edit the group info  Enter a buffer where you can edit the group info
2544  (@code{gnus-group-edit-group}).  (@code{gnus-group-edit-group}).
2545    
2546  @item G d  @item G d
2547  @kindex G d @r{(Group)}  @kindex G d (Group)
2548  @findex gnus-group-make-directory-group  @findex gnus-group-make-directory-group
2549  @cindex nndir  @cindex nndir
2550  Make a directory group (@pxref{Directory Groups}).  You will be prompted  Make a directory group (@pxref{Directory Groups}).  You will be prompted
2551  for a directory name (@code{gnus-group-make-directory-group}).  for a directory name (@code{gnus-group-make-directory-group}).
2552    
2553  @item G h  @item G h
2554  @kindex G h @r{(Group)}  @kindex G h (Group)
2555  @cindex help group  @cindex help group
2556  @findex gnus-group-make-help-group  @findex gnus-group-make-help-group
2557  Make the Gnus help group (@code{gnus-group-make-help-group}).  Make the Gnus help group (@code{gnus-group-make-help-group}).
2558    
2559  @item G a  @item G a
2560  @kindex G a @r{(Group)}  @kindex G a (Group)
2561  @cindex (ding) archive  @cindex (ding) archive
2562  @cindex archive group  @cindex archive group
2563  @findex gnus-group-make-archive-group  @findex gnus-group-make-archive-group
# Line 2429  default a group pointing to the most rec Line 2569  default a group pointing to the most rec
2569  group will be created from @code{gnus-group-archive-directory}.  group will be created from @code{gnus-group-archive-directory}.
2570    
2571  @item G k  @item G k
2572  @kindex G k @r{(Group)}  @kindex G k (Group)
2573  @findex gnus-group-make-kiboze-group  @findex gnus-group-make-kiboze-group
2574  @cindex nnkiboze  @cindex nnkiboze
2575  Make a kiboze group.  You will be prompted for a name, for a regexp to  Make a kiboze group.  You will be prompted for a name, for a regexp to
# Line 2438  strings to match on headers (@code{gnus- Line 2578  strings to match on headers (@code{gnus-
2578  @xref{Kibozed Groups}.  @xref{Kibozed Groups}.
2579    
2580  @item G D  @item G D
2581  @kindex G D @r{(Group)}  @kindex G D (Group)
2582  @findex gnus-group-enter-directory  @findex gnus-group-enter-directory
2583  @cindex nneething  @cindex nneething
2584  Read an arbitrary directory as if it were a newsgroup with the  Read an arbitrary directory as if it were a newsgroup with the
# Line 2446  Read an arbitrary directory as if it wer Line 2586  Read an arbitrary directory as if it wer
2586  @xref{Anything Groups}.  @xref{Anything Groups}.
2587    
2588  @item G f  @item G f
2589  @kindex G f @r{(Group)}  @kindex G f (Group)
2590  @findex gnus-group-make-doc-group  @findex gnus-group-make-doc-group
2591  @cindex ClariNet Briefs  @cindex ClariNet Briefs
2592  @cindex nndoc  @cindex nndoc
2593  Make a group based on some file or other  Make a group based on some file or other
2594  (@code{gnus-group-make-doc-group}).  If you give a prefix to this  (@code{gnus-group-make-doc-group}).  If you give a prefix to this
2595  command, you will be prompted for a file name and a file type.  command, you will be prompted for a file name and a file type.
2596  Currently supported types are @code{babyl}, @code{mbox}, @code{digest},  Currently supported types are @code{mbox}, @code{babyl},
2597  @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},  @code{digest}, @code{news}, @code{rnews}, @code{mmdf}, @code{forward},
2598  @code{rfc934}, @code{rfc822-forward}, @code{nsmail} and @code{forward}.  @code{rfc934}, @code{rfc822-forward}, @code{mime-parts},
2599  If you run this command without a prefix, Gnus will guess at the file  @code{standard-digest}, @code{slack-digest}, @code{clari-briefs},
2600    @code{nsmail}, @code{outlook}, @code{oe-dbx}, and @code{mailman}.  If
2601    you run this command without a prefix, Gnus will guess at the file
2602  type.  @xref{Document Groups}.  type.  @xref{Document Groups}.
2603    
2604  @item G u  @item G u
2605  @kindex G u @r{(Group)}  @kindex G u (Group)
2606  @vindex gnus-useful-groups  @vindex gnus-useful-groups
2607  @findex gnus-group-make-useful-group  @findex gnus-group-make-useful-group
2608  Create one of the groups mentioned in @code{gnus-useful-groups}  Create one of the groups mentioned in @code{gnus-useful-groups}
2609  (@code{gnus-group-make-useful-group}).  (@code{gnus-group-make-useful-group}).
2610    
2611  @item G w  @item G w
2612  @kindex G w @r{(Group)}  @kindex G w (Group)
2613  @findex gnus-group-make-web-group  @findex gnus-group-make-web-group
2614  @cindex DejaNews  @cindex Google
 @cindex Alta Vista  
 @cindex InReference  
2615  @cindex nnweb  @cindex nnweb
2616    @cindex gmane
2617  Make an ephemeral group based on a web search  Make an ephemeral group based on a web search
2618  (@code{gnus-group-make-web-group}).  If you give a prefix to this  (@code{gnus-group-make-web-group}).  If you give a prefix to this
2619  command, make a solid group instead.  You will be prompted for the  command, make a solid group instead.  You will be prompted for the
2620  search engine type and the search string.  Valid search engine types  search engine type and the search string.  Valid search engine types
2621  include @code{dejanews}, @code{altavista} and @code{reference}.  include @code{google}, @code{dejanews}, and @code{gmane}.
2622  @xref{Web Searches}.  @xref{Web Searches}.
2623    
2624  If you use the @code{dejanews} search engine, you can limit the search  If you use the @code{google} search engine, you can limit the search
2625  to a particular group by using a match string like  to a particular group by using a match string like
2626  @samp{~g alt.sysadmin.recovery shaving}.  @samp{shaving group:alt.sysadmin.recovery}.
2627    
2628    @item G R
2629    @kindex G R (Group)
2630    @findex gnus-group-make-rss-group
2631    Make a group based on an @acronym{RSS} feed
2632    (@code{gnus-group-make-rss-group}).  You will be prompted for an URL.
2633    @xref{RSS}.
2634    
2635  @item G @key{DEL}  @item G DEL
2636  @kindex G @key{DEL} @r{(Group)}  @kindex G DEL (Group)
2637  @findex gnus-group-delete-group  @findex gnus-group-delete-group
2638  This function will delete the current group  This function will delete the current group
2639  (@code{gnus-group-delete-group}).  If given a prefix, this function will  (@code{gnus-group-delete-group}).  If given a prefix, this function will
2640  actually delete all the articles in the group, and forcibly remove the  actually delete all the articles in the group, and forcibly remove the
2641  group itself from the face of the Earth.  Use a prefix only if you are  group itself from the face of the Earth.  Use a prefix only if you are
2642  absolutely sure of what you are doing.  This command can't be used on  absolutely sure of what you are doing.  This command can't be used on
2643  read-only groups (like @code{nntp} group), though.  read-only groups (like @code{nntp} groups), though.
2644    
2645  @item G V  @item G V
2646  @kindex G V @r{(Group)}  @kindex G V (Group)
2647  @findex gnus-group-make-empty-virtual  @findex gnus-group-make-empty-virtual
2648  Make a new, fresh, empty @code{nnvirtual} group  Make a new, fresh, empty @code{nnvirtual} group
2649  (@code{gnus-group-make-empty-virtual}).  @xref{Virtual Groups}.  (@code{gnus-group-make-empty-virtual}).  @xref{Virtual Groups}.
2650    
2651  @item G v  @item G v
2652  @kindex G v @r{(Group)}  @kindex G v (Group)
2653  @findex gnus-group-add-to-virtual  @findex gnus-group-add-to-virtual
2654  Add the current group to an @code{nnvirtual} group  Add the current group to an @code{nnvirtual} group
2655  (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.  (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
# Line 2514  methods. Line 2662  methods.
2662  If @code{gnus-activate-foreign-newsgroups} is a positive number,  If @code{gnus-activate-foreign-newsgroups} is a positive number,
2663  Gnus will check all foreign groups with this level or lower at startup.  Gnus will check all foreign groups with this level or lower at startup.
2664  This might take quite a while, especially if you subscribe to lots of  This might take quite a while, especially if you subscribe to lots of
2665  groups from different @sc{nntp} servers.  Also @pxref{Group Levels};  groups from different @acronym{NNTP} servers.  Also @pxref{Group Levels};
2666  @code{gnus-activate-level} also affects activation of foreign  @code{gnus-activate-level} also affects activation of foreign
2667  newsgroups.  newsgroups.
2668    
# Line 2531  Here's an example group parameter list: Line 2679  Here's an example group parameter list:
2679   (auto-expire . t))   (auto-expire . t))
2680  @end example  @end example
2681    
2682  We see that each element consists of a "dotted pair"---the thing before  We see that each element consists of a ``dotted pair''---the thing before
2683  the dot is the key, while the thing after the dot is the value.  All the  the dot is the key, while the thing after the dot is the value.  All the
2684  parameters have this form @emph{except} local variable specs, which are  parameters have this form @emph{except} local variable specs, which are
2685  not dotted pairs, but proper lists.  not dotted pairs, but proper lists.
2686    
2687    Some parameters have correspondent customizable variables, each of which
2688    is an alist of regexps and values.
2689    
2690  The following group parameters can be used:  The following group parameters can be used:
2691    
2692  @table @code  @table @code
# Line 2544  The following group parameters can be us Line 2695  The following group parameters can be us
2695  Address used by when doing followups and new posts.  Address used by when doing followups and new posts.
2696    
2697  @example  @example
2698  (to-address .  "some@@where.com")  (to-address . "some@@where.com")
2699  @end example  @end example
2700    
2701  This is primarily useful in mail groups that represent closed mailing  This is primarily useful in mail groups that represent closed mailing
# Line 2560  the articles from a mail-to-news gateway Line 2711  the articles from a mail-to-news gateway
2711  group is therefore impossible---you have to send mail to the mailing  group is therefore impossible---you have to send mail to the mailing
2712  list address instead.  list address instead.
2713    
2714  Some parameters have corresponding customizable variables, each of which  See also @code{gnus-parameter-to-address-alist}.
 is an alist of regexps and values.  
2715    
2716  @item to-list  @item to-list
2717  @cindex to-list  @cindex to-list
# Line 2581  then a @code{to-list} group parameter wi Line 2731  then a @code{to-list} group parameter wi
2731  sending the message if @code{gnus-add-to-list} is set to @code{t}.  sending the message if @code{gnus-add-to-list} is set to @code{t}.
2732  @vindex gnus-add-to-list  @vindex gnus-add-to-list
2733    
2734  If you do an @kbd{a} command in a mail group and you don't have a  @findex gnus-mailing-list-mode
2735  @code{to-list} group parameter, one will be added automatically upon  @cindex mail list groups
2736  sending the message.  If this variable is set, @code{gnus-mailing-list-mode} is turned on when
2737    entering summary buffer.
2738    
2739  See also @code{gnus-parameter-to-list-alist}.  See also @code{gnus-parameter-to-list-alist}.
2740    
2741    @anchor{subscribed}
2742    @item subscribed
2743    @cindex subscribed
2744    @cindex Mail-Followup-To
2745    @findex gnus-find-subscribed-addresses
2746    If this parameter is set to @code{t}, Gnus will consider the
2747    to-address and to-list parameters for this group as addresses of
2748    mailing lists you are subscribed to.  Giving Gnus this information is
2749    (only) a first step in getting it to generate correct Mail-Followup-To
2750    headers for your posts to these lists.  The second step is to put the
2751    following in your @file{.gnus.el}
2752    
2753    @lisp
2754    (setq message-subscribed-address-functions
2755          '(gnus-find-subscribed-addresses))
2756    @end lisp
2757    
2758    @xref{Mailing Lists, ,Mailing Lists, message, The Message Manual}, for
2759    a complete treatment of available MFT support.
2760    
2761  @item visible  @item visible
2762  @cindex visible  @cindex visible
2763  If the group parameter list has the element @code{(visible . t)},  If the group parameter list has the element @code{(visible . t)},
# Line 2596  of whether it has any unread articles. Line 2767  of whether it has any unread articles.
2767  @item broken-reply-to  @item broken-reply-to
2768  @cindex broken-reply-to  @cindex broken-reply-to
2769  Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}  Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
2770  headers in this group are to be ignored.  This can be useful if you're  headers in this group are to be ignored, and for the header to be hidden
2771  reading a mailing list group where the listserv has inserted  if @code{reply-to} is part of @code{gnus-boring-article-headers}.  This
2772  @code{Reply-To} headers that point back to the listserv itself.  This is  can be useful if you're reading a mailing list group where the listserv
2773  broken behavior.  So there!  has inserted @code{Reply-To} headers that point back to the listserv
2774    itself.  That is broken behavior.  So there!
2775    
2776  @item to-group  @item to-group
2777  @cindex to-group  @cindex to-group
# Line 2623  be inserted literally as a @code{gcc} he Line 2795  be inserted literally as a @code{gcc} he
2795  precedence over any default @code{Gcc} rules as described later  precedence over any default @code{Gcc} rules as described later
2796  (@pxref{Archived Messages}).  (@pxref{Archived Messages}).
2797    
2798    @strong{Caveat}: Adding @code{(gcc-self . t)} to the parameter list of
2799    @code{nntp} groups (or the like) isn't valid.  An @code{nntp} server
2800    doesn't accept articles.
2801    
2802  @item auto-expire  @item auto-expire
2803  @cindex auto-expire  @cindex auto-expire
2804  If the group parameter has an element that looks like @code{(auto-expire  If the group parameter has an element that looks like @code{(auto-expire
2805  . t)}, all articles read will be marked as expirable.  For an  . t)}, all articles read will be marked as expirable.  For an
2806  alternative approach, @pxref{Expiring Mail}.  alternative approach, @pxref{Expiring Mail}.
2807    
2808    See also @code{gnus-auto-expirable-newsgroups}.
2809    
2810  @item total-expire  @item total-expire
2811  @cindex total-expire  @cindex total-expire
2812  If the group parameter has an element that looks like  If the group parameter has an element that looks like
# Line 2642  See also @code{gnus-total-expirable-news Line 2820  See also @code{gnus-total-expirable-news
2820  @item expiry-wait  @item expiry-wait
2821  @cindex expiry-wait  @cindex expiry-wait
2822  @vindex nnmail-expiry-wait-function  @vindex nnmail-expiry-wait-function
2823  If the group parameter has an element that looks like @code{(expiry-wait  If the group parameter has an element that looks like
2824  . 10)}, this value will override any @code{nnmail-expiry-wait} and  @code{(expiry-wait . 10)}, this value will override any
2825  @code{nnmail-expiry-wait-function} when expiring expirable messages.  @code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function}
2826  The value can either be a number of days (not necessarily an integer) or  (@pxref{Expiring Mail}) when expiring expirable messages.  The value
2827  the symbols @code{never} or @code{immediate}.  can either be a number of days (not necessarily an integer) or the
2828    symbols @code{never} or @code{immediate}.
2829    
2830    @item expiry-target
2831    @cindex expiry-target
2832    Where expired messages end up.  This parameter overrides
2833    @code{nnmail-expiry-target}.
2834    
2835  @item score-file  @item score-file
2836  @cindex score file group parameter  @cindex score file group parameter
# Line 2661  Elements that look like @code{(adapt-fil Line 2845  Elements that look like @code{(adapt-fil
2845  All adaptive score entries will be put into this file.  All adaptive score entries will be put into this file.
2846    
2847  @item admin-address  @item admin-address
2848    @cindex admin-address
2849  When unsubscribing from a mailing list you should never send the  When unsubscribing from a mailing list you should never send the
2850  unsubscription notice to the mailing list itself.  Instead, you'd send  unsubscription notice to the mailing list itself.  Instead, you'd send
2851  messages to the administrative address.  This parameter allows you to  messages to the administrative address.  This parameter allows you to
2852  put the admin address somewhere convenient.  put the admin address somewhere convenient.
2853    
2854  @item display  @item display
2855    @cindex display
2856  Elements that look like @code{(display . MODE)} say which articles to  Elements that look like @code{(display . MODE)} say which articles to
2857  display on entering the group.  Valid values are:  display on entering the group.  Valid values are:
2858    
# Line 2674  display on entering the group.  Valid va Line 2860  display on entering the group.  Valid va
2860  @item all  @item all
2861  Display all articles, both read and unread.  Display all articles, both read and unread.
2862    
2863    @item an integer
2864    Display the last @var{integer} articles in the group.  This is the same as
2865    entering the group with @kbd{C-u @var{integer}}.
2866    
2867  @item default  @item default
2868  Display the default visible articles, which normally includes unread and  Display the default visible articles, which normally includes unread and
2869  ticked articles.  ticked articles.
2870    
2871    @item an array
2872    Display articles that satisfy a predicate.
2873    
2874    Here are some examples:
2875    
2876    @table @code
2877    @item [unread]
2878    Display only unread articles.
2879    
2880    @item [not expire]
2881    Display everything except expirable articles.
2882    
2883    @item [and (not reply) (not expire)]
2884    Display everything except expirable and articles you've already
2885    responded to.
2886    @end table
2887    
2888    The available operators are @code{not}, @code{and} and @code{or}.
2889    Predicates include @code{tick}, @code{unsend}, @code{undownload},
2890    @code{unread}, @code{dormant}, @code{expire}, @code{reply},
2891    @code{killed}, @code{bookmark}, @code{score}, @code{save},
2892    @code{cache}, @code{forward}, @code{unseen} and @code{recent}.
2893    
2894  @end table  @end table
2895    
2896    The @code{display} parameter works by limiting the summary buffer to
2897    the subset specified.  You can pop the limit by using the @kbd{/ w}
2898    command (@pxref{Limiting}).
2899    
2900  @item comment  @item comment
2901  Elements that look like @code{(comment . "This is a comment")}  @cindex comment
2902  are arbitrary comments on the group.  They are currently ignored by  Elements that look like @code{(comment . "This is a comment")} are
2903  Gnus, but provide a place for you to store information on particular  arbitrary comments on the group.  You can display comments in the
2904  groups.  group line (@pxref{Group Line Specification}).
2905    
2906  @item charset  @item charset
2907    @cindex charset
2908  Elements that look like @code{(charset . iso-8859-1)} will make  Elements that look like @code{(charset . iso-8859-1)} will make
2909  @code{iso-8859-1} the default charset; that is, the charset that will be  @code{iso-8859-1} the default charset; that is, the charset that will be
2910  used for all articles that do not specify a charset.  used for all articles that do not specify a charset.
# Line 2693  used for all articles that do not specif Line 2912  used for all articles that do not specif
2912  See also @code{gnus-group-charset-alist}.  See also @code{gnus-group-charset-alist}.
2913    
2914  @item ignored-charsets  @item ignored-charsets
2915  Elements that look like @code{(ignored-charsets x-known iso-8859-1)}  @cindex ignored-charset
2916    Elements that look like @code{(ignored-charsets x-unknown iso-8859-1)}
2917  will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the  will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
2918  default charset will be used for decoding articles.  default charset will be used for decoding articles.
2919    
2920  See also @code{gnus-group-ignored-charsets-alist}.  See also @code{gnus-group-ignored-charsets-alist}.
2921    
2922  @item posting-style  @item posting-style
2923  You can store additional posting style information for this group only  @cindex posting-style
2924    You can store additional posting style information for this group
2925  here (@pxref{Posting Styles}).  The format is that of an entry in the  here (@pxref{Posting Styles}).  The format is that of an entry in the
2926  @code{gnus-posting-styles} alist, except that there's no regexp matching  @code{gnus-posting-styles} alist, except that there's no regexp matching
2927  the group name (of course).  Style elements in this group parameter will  the group name (of course).  Style elements in this group parameter will
# Line 2713  like this in the group parameters: Line 2934  like this in the group parameters:
2934  @example  @example
2935  (posting-style  (posting-style
2936    (name "Funky Name")    (name "Funky Name")
2937      ("X-My-Header" "Funky Value")
2938    (signature "Funky Signature"))    (signature "Funky Signature"))
2939  @end example  @end example
2940    
2941    @item post-method
2942    @cindex post-method
2943    If it is set, the value is used as the method for posting message
2944    instead of @code{gnus-post-method}.
2945    
2946  @item banner  @item banner
2947  An item like @code{(banner . "regex")} causes any part of an article  @cindex banner
2948  that matches the regular expression "regex" to be stripped. Instead of  An item like @code{(banner . @var{regexp})} causes any part of an article
2949  "regex", you can also use the symbol @code{signature} which strips the  that matches the regular expression @var{regexp} to be stripped.  Instead of
2950    @var{regexp}, you can also use the symbol @code{signature} which strips the
2951  last signature or any of the elements of the alist  last signature or any of the elements of the alist
2952  @code{gnus-article-banner-alist}.  @code{gnus-article-banner-alist}.
2953    
2954    @item sieve
2955    @cindex sieve
2956    This parameter contains a Sieve test that should match incoming mail
2957    that should be placed in this group.  From this group parameter, a
2958    Sieve @samp{IF} control structure is generated, having the test as the
2959    condition and @samp{fileinto "group.name";} as the body.
2960    
2961    For example, if the @samp{INBOX.list.sieve} group has the @code{(sieve
2962    address "sender" "sieve-admin@@extundo.com")} group parameter, when
2963    translating the group parameter into a Sieve script (@pxref{Sieve
2964    Commands}) the following Sieve code is generated:
2965    
2966    @example
2967    if address \"sender\" \"sieve-admin@@extundo.com\" @{
2968            fileinto \"INBOX.list.sieve\";
2969    @}
2970    @end example
2971    
2972    The Sieve language is described in RFC 3028.  @xref{Top, Emacs Sieve,
2973    Top, sieve, Emacs Sieve}.
2974    
2975    @item (agent parameters)
2976    If the agent has been enabled, you can set any of the its parameters
2977    to control the behavior of the agent in individual groups. See Agent
2978    Parameters in @ref{Category Syntax}.  Most users will choose to set
2979    agent parameters in either an agent category or group topic to
2980    minimize the configuration effort.
2981    
2982  @item (@var{variable} @var{form})  @item (@var{variable} @var{form})
2983  You can use the group parameters to set variables local to the group you  You can use the group parameters to set variables local to the group you
2984  are entering.  If you want to turn threading off in @samp{news.answers},  are entering.  If you want to turn threading off in @samp{news.answers},
# Line 2731  that group.  @code{gnus-show-threads} wi Line 2987  that group.  @code{gnus-show-threads} wi
2987  in the summary buffer you enter, and the form @code{nil} will be  in the summary buffer you enter, and the form @code{nil} will be
2988  @code{eval}ed there.  @code{eval}ed there.
2989    
2990  This can also be used as a group-specific hook function, if you like.  Note that this feature sets the variable locally to the summary buffer.
2991    But some variables are evaluated in the article buffer, or in the
2992    message buffer (of a reply or followup or otherwise newly created
2993    message).  As a workaround, it might help to add the variable in
2994    question to @code{gnus-newsgroup-variables}.  @xref{Various Summary
2995    Stuff}.  So if you want to set @code{message-from-style} via the group
2996    parameters, then you may need the following statement elsewhere in your
2997    @file{~/.gnus} file:
2998    
2999    @lisp
3000    (add-to-list 'gnus-newsgroup-variables 'message-from-style)
3001    @end lisp
3002    
3003    @vindex gnus-list-identifiers
3004    A use for this feature is to remove a mailing list identifier tag in
3005    the subject fields of articles.  E.g. if the news group
3006    
3007    @example
3008    nntp+news.gnus.org:gmane.text.docbook.apps
3009    @end example
3010    
3011    has the tag @samp{DOC-BOOK-APPS:} in the subject of all articles, this
3012    tag can be removed from the article subjects in the summary buffer for
3013    the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")}
3014    into the group parameters for the group.
3015    
3016    This can also be used as a group-specific hook function, if you'd like.
3017  If you want to hear a beep when you enter a group, you could put  If you want to hear a beep when you enter a group, you could put
3018  something like @code{(dummy-variable (ding))} in the parameters of that  something like @code{(dummy-variable (ding))} in the parameters of that
3019  group.  @code{dummy-variable} will be set to the result of the  group.  @code{dummy-variable} will be set to the result of the
# Line 2745  presents you with a Customize-like inter Line 3027  presents you with a Customize-like inter
3027  silly Lisp errors.)  You might also be interested in reading about topic  silly Lisp errors.)  You might also be interested in reading about topic
3028  parameters (@pxref{Topic Parameters}).  parameters (@pxref{Topic Parameters}).
3029    
3030    @vindex gnus-parameters
3031    Group parameters can be set via the @code{gnus-parameters} variable too.
3032    But some variables, such as @code{visible}, have no effect.  For
3033    example:
3034    
3035    @lisp
3036    (setq gnus-parameters
3037          '(("mail\\..*"
3038             (gnus-show-threads nil)
3039             (gnus-use-scoring nil)
3040             (gnus-summary-line-format
3041              "%U%R%z%I%(%[%d:%ub%-23,23f%]%) %s\n")
3042             (gcc-self . t)
3043             (display . all))
3044    
3045            ("^nnimap:\\(foo.bar\\)$"
3046             (to-group . "\\1"))
3047    
3048            ("mail\\.me"
3049             (gnus-use-scoring  t))
3050    
3051            ("list\\..*"
3052             (total-expire . t)
3053             (broken-reply-to . t))))
3054    @end lisp
3055    
3056    String value of parameters will be subjected to regexp substitution, as
3057    the @code{to-group} example shows.
3058    
3059    
3060  @node Listing Groups  @node Listing Groups
3061  @section Listing Groups  @section Listing Groups
# Line 2756  These commands all list various slices o Line 3067  These commands all list various slices o
3067    
3068  @item l  @item l
3069  @itemx A s  @itemx A s
3070  @kindex A s @r{(Group)}  @kindex A s (Group)
3071  @kindex l @r{(Group)}  @kindex l (Group)
3072  @findex gnus-group-list-groups  @findex gnus-group-list-groups
3073  List all groups that have unread articles  List all groups that have unread articles
3074  (@code{gnus-group-list-groups}).  If the numeric prefix is used, this  (@code{gnus-group-list-groups}).  If the numeric prefix is used, this
3075  command will list only groups of level ARG and lower.  By default, it  command will list only groups of level ARG and lower.  By default, it
3076  only lists groups of level five (i. e.,  only lists groups of level five (i.e.,
3077  @code{gnus-group-default-list-level}) or lower (i.e., just subscribed  @code{gnus-group-default-list-level}) or lower (i.e., just subscribed
3078  groups).  groups).
3079    
3080  @item L  @item L
3081  @itemx A u  @itemx A u
3082  @kindex A u @r{(Group)}  @kindex A u (Group)
3083  @kindex L @r{(Group)}  @kindex L (Group)
3084  @findex gnus-group-list-all-groups  @findex gnus-group-list-all-groups
3085  List all groups, whether they have unread articles or not  List all groups, whether they have unread articles or not
3086  (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,  (@code{gnus-group-list-all-groups}).  If the numeric prefix is used,
# Line 2778  it lists groups of level seven or lower Line 3089  it lists groups of level seven or lower
3089  unsubscribed groups).  unsubscribed groups).
3090    
3091  @item A l  @item A l
3092  @kindex A l @r{(Group)}  @kindex A l (Group)
3093  @findex gnus-group-list-level  @findex gnus-group-list-level
3094  List all unread groups on a specific level  List all unread groups on a specific level
3095  (@code{gnus-group-list-level}).  If given a prefix, also list the groups  (@code{gnus-group-list-level}).  If given a prefix, also list the groups
3096  with no unread articles.  with no unread articles.
3097    
3098  @item A k  @item A k
3099  @kindex A k @r{(Group)}  @kindex A k (Group)
3100  @findex gnus-group-list-killed  @findex gnus-group-list-killed
3101  List all killed groups (@code{gnus-group-list-killed}).  If given a  List all killed groups (@code{gnus-group-list-killed}).  If given a
3102  prefix argument, really list all groups that are available, but aren't  prefix argument, really list all groups that are available, but aren't
# Line 2793  currently (un)subscribed.  This could en Line 3104  currently (un)subscribed.  This could en
3104  from the server.  from the server.
3105    
3106  @item A z  @item A z
3107  @kindex A z @r{(Group)}  @kindex A z (Group)
3108  @findex gnus-group-list-zombies  @findex gnus-group-list-zombies
3109  List all zombie groups (@code{gnus-group-list-zombies}).  List all zombie groups (@code{gnus-group-list-zombies}).
3110    
3111  @item A m  @item A m
3112  @kindex A m @r{(Group)}  @kindex A m (Group)
3113  @findex gnus-group-list-matching  @findex gnus-group-list-matching
3114  List all unread, subscribed groups with names that match a regexp  List all unread, subscribed groups with names that match a regexp
3115  (@code{gnus-group-list-matching}).  (@code{gnus-group-list-matching}).
3116    
3117  @item A M  @item A M
3118  @kindex A M @r{(Group)}  @kindex A M (Group)
3119  @findex gnus-group-list-all-matching  @findex gnus-group-list-all-matching
3120  List groups that match a regexp (@code{gnus-group-list-all-matching}).  List groups that match a regexp (@code{gnus-group-list-all-matching}).
3121    
3122  @item A A  @item A A
3123  @kindex A A @r{(Group)}  @kindex A A (Group)
3124  @findex gnus-group-list-active  @findex gnus-group-list-active
3125  List absolutely all groups in the active file(s) of the  List absolutely all groups in the active file(s) of the
3126  server(s) you are connected to (@code{gnus-group-list-active}).  This  server(s) you are connected to (@code{gnus-group-list-active}).  This
# Line 2820  don't exist (yet)---these will be listed Line 3131  don't exist (yet)---these will be listed
3131  Take the output with some grains of salt.  Take the output with some grains of salt.
3132    
3133  @item A a  @item A a
3134  @kindex A a @r{(Group)}  @kindex A a (Group)
3135  @findex gnus-group-apropos  @findex gnus-group-apropos
3136  List all groups that have names that match a regexp  List all groups that have names that match a regexp
3137  (@code{gnus-group-apropos}).  (@code{gnus-group-apropos}).
3138    
3139  @item A d  @item A d
3140  @kindex A d @r{(Group)}  @kindex A d (Group)
3141  @findex gnus-group-description-apropos  @findex gnus-group-description-apropos
3142  List all groups that have names or descriptions that match a regexp  List all groups that have names or descriptions that match a regexp
3143  (@code{gnus-group-description-apropos}).  (@code{gnus-group-description-apropos}).
3144    
3145  @item A c  @item A c
3146  @kindex A c @r{(Group)}  @kindex A c (Group)
3147  @findex gnus-group-list-cached  @findex gnus-group-list-cached
3148  List all groups with cached articles (@code{gnus-group-list-cached}).  List all groups with cached articles (@code{gnus-group-list-cached}).
3149    
3150  @item A ?  @item A ?
3151  @kindex A ? @r{(Group)}  @kindex A ? (Group)
3152  @findex gnus-group-list-dormant  @findex gnus-group-list-dormant
3153  List all groups with dormant articles (@code{gnus-group-list-dormant}).  List all groups with dormant articles (@code{gnus-group-list-dormant}).
3154    
3155    @item A /
3156    @kindex A / (Group)
3157    @findex gnus-group-list-limit
3158    List groups limited within the current selection
3159    (@code{gnus-group-list-limit}).
3160    
3161    @item A f
3162    @kindex A f (Group)
3163    @findex gnus-group-list-flush
3164    Flush groups from the current selection (@code{gnus-group-list-flush}).
3165    
3166    @item A p
3167    @kindex A p (Group)
3168    @findex gnus-group-list-plus
3169    List groups plus the current selection (@code{gnus-group-list-plus}).
3170    
3171  @end table  @end table
3172    
3173  @vindex gnus-permanently-visible-groups  @vindex gnus-permanently-visible-groups
# Line 2861  groups.  It is @code{t} by default. Line 3188  groups.  It is @code{t} by default.
3188  @section Sorting Groups  @section Sorting Groups
3189  @cindex sorting groups  @cindex sorting groups
3190    
3191  @kindex C-c C-s @r{(Group)}  @kindex C-c C-s (Group)
3192  @findex gnus-group-sort-groups  @findex gnus-group-sort-groups
3193  @vindex gnus-group-sort-function  @vindex gnus-group-sort-function
3194  The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the  The @kbd{C-c C-s} (@code{gnus-group-sort-groups}) command sorts the
# Line 2900  Sort by number of unread articles. Line 3227  Sort by number of unread articles.
3227  @findex gnus-group-sort-by-method  @findex gnus-group-sort-by-method
3228  Sort alphabetically on the select method.  Sort alphabetically on the select method.
3229    
3230    @item gnus-group-sort-by-server
3231    @findex gnus-group-sort-by-server
3232    Sort alphabetically on the Gnus server name.
3233    
3234    
3235  @end table  @end table
3236    
# Line 2913  some sorting criteria: Line 3244  some sorting criteria:
3244    
3245  @table @kbd  @table @kbd
3246  @item G S a  @item G S a
3247  @kindex G S a @r{(Group)}  @kindex G S a (Group)
3248  @findex gnus-group-sort-groups-by-alphabet  @findex gnus-group-sort-groups-by-alphabet
3249  Sort the group buffer alphabetically by group name  Sort the group buffer alphabetically by group name
3250  (@code{gnus-group-sort-groups-by-alphabet}).  (@code{gnus-group-sort-groups-by-alphabet}).
3251    
3252  @item G S u  @item G S u
3253  @kindex G S u @r{(Group)}  @kindex G S u (Group)
3254  @findex gnus-group-sort-groups-by-unread  @findex gnus-group-sort-groups-by-unread
3255  Sort the group buffer by the number of unread articles  Sort the group buffer by the number of unread articles
3256  (@code{gnus-group-sort-groups-by-unread}).  (@code{gnus-group-sort-groups-by-unread}).
3257    
3258  @item G S l  @item G S l
3259  @kindex G S l @r{(Group)}  @kindex G S l (Group)
3260  @findex gnus-group-sort-groups-by-level  @findex gnus-group-sort-groups-by-level
3261  Sort the group buffer by group level  Sort the group buffer by group level
3262  (@code{gnus-group-sort-groups-by-level}).  (@code{gnus-group-sort-groups-by-level}).
3263    
3264  @item G S v  @item G S v
3265  @kindex G S v @r{(Group)}  @kindex G S v (Group)
3266  @findex gnus-group-sort-groups-by-score  @findex gnus-group-sort-groups-by-score
3267  Sort the group buffer by group score  Sort the group buffer by group score
3268  (@code{gnus-group-sort-groups-by-score}).  @xref{Group Score}.  (@code{gnus-group-sort-groups-by-score}).  @xref{Group Score}.
3269    
3270  @item G S r  @item G S r
3271  @kindex G S r @r{(Group)}  @kindex G S r (Group)
3272  @findex gnus-group-sort-groups-by-rank  @findex gnus-group-sort-groups-by-rank
3273  Sort the group buffer by group rank  Sort the group buffer by group rank
3274  (@code{gnus-group-sort-groups-by-rank}).  @xref{Group Score}.  (@code{gnus-group-sort-groups-by-rank}).  @xref{Group Score}.
3275    
3276  @item G S m  @item G S m
3277  @kindex G S m @r{(Group)}  @kindex G S m (Group)
3278  @findex gnus-group-sort-groups-by-method  @findex gnus-group-sort-groups-by-method
3279  Sort the group buffer alphabetically by back end name  Sort the group buffer alphabetically by back end name@*
3280  (@code{gnus-group-sort-groups-by-method}).  (@code{gnus-group-sort-groups-by-method}).
3281    
3282    @item G S n
3283    @kindex G S n (Group)
3284    @findex gnus-group-sort-groups-by-real-name
3285    Sort the group buffer alphabetically by real (unprefixed) group name
3286    (@code{gnus-group-sort-groups-by-real-name}).
3287    
3288  @end table  @end table
3289    
3290  All the commands below obey the process/prefix convention  All the commands below obey the process/prefix convention
# Line 2960  You can also sort a subset of the groups Line 3297  You can also sort a subset of the groups
3297    
3298  @table @kbd  @table @kbd
3299  @item G P a  @item G P a
3300  @kindex G P a @r{(Group)}  @kindex G P a (Group)
3301  @findex gnus-group-sort-selected-groups-by-alphabet  @findex gnus-group-sort-selected-groups-by-alphabet
3302  Sort the groups alphabetically by group name  Sort the groups alphabetically by group name
3303  (@code{gnus-group-sort-selected-groups-by-alphabet}).  (@code{gnus-group-sort-selected-groups-by-alphabet}).
3304    
3305  @item G P u  @item G P u
3306  @kindex G P u @r{(Group)}  @kindex G P u (Group)
3307  @findex gnus-group-sort-selected-groups-by-unread  @findex gnus-group-sort-selected-groups-by-unread
3308  Sort the groups by the number of unread articles  Sort the groups by the number of unread articles
3309  (@code{gnus-group-sort-selected-groups-by-unread}).  (@code{gnus-group-sort-selected-groups-by-unread}).
3310    
3311  @item G P l  @item G P l
3312  @kindex G P l @r{(Group)}  @kindex G P l (Group)
3313  @findex gnus-group-sort-selected-groups-by-level  @findex gnus-group-sort-selected-groups-by-level
3314  Sort the groups by group level  Sort the groups by group level
3315  (@code{gnus-group-sort-selected-groups-by-level}).  (@code{gnus-group-sort-selected-groups-by-level}).
3316    
3317  @item G P v  @item G P v
3318  @kindex G P v @r{(Group)}  @kindex G P v (Group)
3319  @findex gnus-group-sort-selected-groups-by-score  @findex gnus-group-sort-selected-groups-by-score
3320  Sort the groups by group score  Sort the groups by group score
3321  (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.  (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
3322    
3323  @item G P r  @item G P r
3324  @kindex G P r @r{(Group)}  @kindex G P r (Group)
3325  @findex gnus-group-sort-selected-groups-by-rank  @findex gnus-group-sort-selected-groups-by-rank
3326  Sort the groups by group rank  Sort the groups by group rank
3327  (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.  (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
3328    
3329  @item G P m  @item G P m
3330  @kindex G P m @r{(Group)}  @kindex G P m (Group)
3331  @findex gnus-group-sort-selected-groups-by-method  @findex gnus-group-sort-selected-groups-by-method
3332  Sort the groups alphabetically by back end name  Sort the groups alphabetically by back end name@*
3333  (@code{gnus-group-sort-selected-groups-by-method}).  (@code{gnus-group-sort-selected-groups-by-method}).
3334    
3335    @item G P n
3336    @kindex G P n (Group)
3337    @findex gnus-group-sort-selected-groups-by-real-name
3338    Sort the groups alphabetically by real (unprefixed) group name
3339    (@code{gnus-group-sort-selected-groups-by-real-name}).
3340    
3341    @item G P s
3342    @kindex G P s (Group)
3343    @findex gnus-group-sort-selected-groups
3344    Sort the groups according to @code{gnus-group-sort-function}.
3345    
3346  @end table  @end table
3347    
3348    And finally, note that you can use @kbd{C-k} and @kbd{C-y} to manually
3349    move groups around.
3350    
3351    
3352  @node Group Maintenance  @node Group Maintenance
# Line 3005  Sort the groups alphabetically by back e Line 3355  Sort the groups alphabetically by back e
3355    
3356  @table @kbd  @table @kbd
3357  @item b  @item b
3358  @kindex b @r{(Group)}  @kindex b (Group)
3359  @findex gnus-group-check-bogus-groups  @findex gnus-group-check-bogus-groups
3360  Find bogus groups and delete them  Find bogus groups and delete them
3361  (@code{gnus-group-check-bogus-groups}).  (@code{gnus-group-check-bogus-groups}).
3362    
3363  @item F  @item F
3364  @kindex F @r{(Group)}  @kindex F (Group)
3365  @findex gnus-group-find-new-groups  @findex gnus-group-find-new-groups
3366  Find new groups and process them (@code{gnus-group-find-new-groups}).  Find new groups and process them (@code{gnus-group-find-new-groups}).
3367  With 1 @kbd{C-u}, use the @code{ask-server} method to query the server  With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
# Line 3020  to query the server for new groups, and Line 3370  to query the server for new groups, and
3370  zombies.  zombies.
3371    
3372  @item C-c C-x  @item C-c C-x
3373  @kindex C-c C-x @r{(Group)}  @kindex C-c C-x (Group)
3374  @findex gnus-group-expire-articles  @findex gnus-group-expire-articles
3375  Run all expirable articles in the current group through the expiry  Run all expirable articles in the current group through the expiry
3376  process (if any) (@code{gnus-group-expire-articles}).  process (if any) (@code{gnus-group-expire-articles}).  That is, delete
3377    all expirable articles in the group that have been around for a while.
3378    (@pxref{Expiring Mail}).
3379    
3380  @item C-c C-M-x  @item C-c C-M-x
3381  @kindex C-c C-M-x @r{(Group)}  @kindex C-c C-M-x (Group)
3382  @findex gnus-group-expire-all-groups  @findex gnus-group-expire-all-groups
3383  Run all articles in all groups through the expiry process  Run all expirable articles in all groups through the expiry process
3384  (@code{gnus-group-expire-all-groups}).  (@code{gnus-group-expire-all-groups}).
3385    
3386  @end table  @end table
# Line 3041  Run all articles in all groups through t Line 3393  Run all articles in all groups through t
3393    
3394  @table @kbd  @table @kbd
3395  @item B  @item B
3396  @kindex B @r{(Group)}  @kindex B (Group)
3397  @findex gnus-group-browse-foreign-server  @findex gnus-group-browse-foreign-server
3398  You will be queried for a select method and a server name.  Gnus will  You will be queried for a select method and a server name.  Gnus will
3399  then attempt to contact this server and let you browse the groups there  then attempt to contact this server and let you browse the groups there
# Line 3066  Go to the next group (@code{gnus-group-n Line 3418  Go to the next group (@code{gnus-group-n
3418  @findex gnus-group-prev-group  @findex gnus-group-prev-group
3419  Go to the previous group (@code{gnus-group-prev-group}).  Go to the previous group (@code{gnus-group-prev-group}).
3420    
3421  @item @key{SPC}  @item SPACE
3422  @kindex @key{SPC} (Browse)  @kindex SPACE (Browse)
3423  @findex gnus-browse-read-group  @findex gnus-browse-read-group
3424  Enter the current group and display the first article  Enter the current group and display the first article
3425  (@code{gnus-browse-read-group}).  (@code{gnus-browse-read-group}).
3426    
3427  @item @key{RET}  @item RET
3428  @kindex @key{RET} (Browse)  @kindex RET (Browse)
3429  @findex gnus-browse-select-group  @findex gnus-browse-select-group
3430  Enter the current group (@code{gnus-browse-select-group}).  Enter the current group (@code{gnus-browse-select-group}).
3431    
# Line 3090  subscribe to it (@code{gnus-browse-unsub Line 3442  subscribe to it (@code{gnus-browse-unsub
3442  @findex gnus-browse-exit  @findex gnus-browse-exit
3443  Exit browse mode (@code{gnus-browse-exit}).  Exit browse mode (@code{gnus-browse-exit}).
3444    
3445    @item d
3446    @kindex d (Browse)
3447    @findex gnus-browse-describe-group
3448    Describe the current group (@code{gnus-browse-describe-group}).
3449    
3450  @item ?  @item ?
3451  @kindex ? (Browse)  @kindex ? (Browse)
3452  @findex gnus-browse-describe-briefly  @findex gnus-browse-describe-briefly
# Line 3106  Yes, Gnus is ex(c)iting. Line 3463  Yes, Gnus is ex(c)iting.
3463    
3464  @table @kbd  @table @kbd
3465  @item z  @item z
3466  @kindex z @r{(Group)}  @kindex z (Group)
3467  @findex gnus-group-suspend  @findex gnus-group-suspend
3468  Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,  Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
3469  but it kills all buffers except the Group buffer.  I'm not sure why this  but it kills all buffers except the Group buffer.  I'm not sure why this
3470  is a gain, but then who am I to judge?  is a gain, but then who am I to judge?
3471    
3472  @item q  @item q
3473  @kindex q @r{(Group)}  @kindex q (Group)
3474  @findex gnus-group-exit  @findex gnus-group-exit
3475  @c @icon{gnus-group-exit}  @c @icon{gnus-group-exit}
3476  Quit Gnus (@code{gnus-group-exit}).  Quit Gnus (@code{gnus-group-exit}).
3477    
3478  @item Q  @item Q
3479  @kindex Q @r{(Group)}  @kindex Q (Group)
3480  @findex gnus-group-quit  @findex gnus-group-quit
3481  Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).  Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
3482  The dribble file will be saved, though (@pxref{Auto Save}).  The dribble file will be saved, though (@pxref{Auto Save}).
# Line 3127  The dribble file will be saved, though ( Line 3484  The dribble file will be saved, though (
3484    
3485  @vindex gnus-exit-gnus-hook  @vindex gnus-exit-gnus-hook
3486  @vindex gnus-suspend-gnus-hook  @vindex gnus-suspend-gnus-hook
3487    @vindex gnus-after-exiting-gnus-hook
3488  @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and  @code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
3489  @code{gnus-exit-gnus-hook} is called when you quit Gnus, while  @code{gnus-exit-gnus-hook} is called when you quit Gnus, while
3490  @code{gnus-after-exiting-gnus-hook} is called as the final item when  @code{gnus-after-exiting-gnus-hook} is called as the final item when
3491  exiting Gnus.  exiting Gnus.
3492    
 @findex gnus-unload  
 @cindex unloading  
 If you wish to completely unload Gnus and all its adherents, you can use  
 the @code{gnus-unload} command.  This command is also very handy when  
 trying to customize meta-variables.  
   
3493  Note:  Note:
3494    
3495  @quotation  @quotation
# Line 3162  groups or the sex groups---or both!  Go Line 3514  groups or the sex groups---or both!  Go
3514  @iftex  @iftex
3515  @iflatex  @iflatex
3516  \gnusfigure{Group Topics}{400}{  \gnusfigure{Group Topics}{400}{
3517  \put(75,50){\epsfig{figure=tmp/group-topic.ps,height=9cm}}  \put(75,50){\epsfig{figure=ps/group-topic,height=9cm}}
3518  }  }
3519  @end iflatex  @end iflatex
3520  @end iftex  @end iftex
# Line 3183  Gnus Line 3535  Gnus
3535  @end example  @end example
3536    
3537  @findex gnus-topic-mode  @findex gnus-topic-mode
3538  @kindex t @r{(Group)}  @kindex t (Group)
3539  To get this @emph{fab} functionality you simply turn on (ooh!) the  To get this @emph{fab} functionality you simply turn on (ooh!) the
3540  @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This  @code{gnus-topic} minor mode---type @kbd{t} in the group buffer.  (This
3541  is a toggling command.)  is a toggling command.)
3542    
3543  Go ahead, just try it.  I'll still be here when you get back.  La de  Go ahead, just try it.  I'll still be here when you get back.  La de
3544  dum...  Nice tune, that...  la la la...  What, you're back? Yes, and now  dum@dots{} Nice tune, that@dots{} la la la@dots{} What, you're back?
3545  press @kbd{l}.  There.  All your groups are now listed under  Yes, and now press @kbd{l}.  There.  All your groups are now listed
3546  @samp{misc}.  Doesn't that make you feel all warm and fuzzy?  Hot and  under @samp{misc}.  Doesn't that make you feel all warm and fuzzy?
3547  bothered?  Hot and bothered?
3548    
3549  If you want this permanently enabled, you should add that minor mode to  If you want this permanently enabled, you should add that minor mode to
3550  the hook for the group mode:  the hook for the group mode.  Put the following line in your
3551    @file{~/.gnus.el} file:
3552    
3553  @lisp  @lisp
3554  (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)  (add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
3555  @end lisp  @end lisp
3556    
3557  @menu  @menu
3558  * Topic Variables::    How to customize the topics the Lisp Way.  * Topic Commands::              Interactive E-Z commands.
3559  * Topic Commands::     Interactive E-Z commands.  * Topic Variables::             How to customize the topics the Lisp Way.
3560  * Topic Sorting::      Sorting each topic individually.  * Topic Sorting::               Sorting each topic individually.
3561  * Topic Topology::     A map of the world.  * Topic Topology::              A map of the world.
3562  * Topic Parameters::   Parameters that apply to all groups in a topic.  * Topic Parameters::            Parameters that apply to all groups in a topic.
3563  @end menu  @end menu
3564    
3565    
 @node Topic Variables  
 @subsection Topic Variables  
 @cindex topic variables  
   
 Now, if you select a topic, it will fold/unfold that topic, which is  
 really neat, I think.  
   
 @vindex gnus-topic-line-format  
 The topic lines themselves are created according to the  
 @code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).  
 Valid elements are:  
   
 @table @samp  
 @item i  
 Indentation.  
 @item n  
 Topic name.  
 @item v  
 Visibility.  
 @item l  
 Level.  
 @item g  
 Number of groups in the topic.  
 @item a  
 Number of unread articles in the topic.  
 @item A  
 Number of unread articles in the topic and all its subtopics.  
 @end table  
   
 @vindex gnus-topic-indent-level  
 Each sub-topic (and the groups in the sub-topics) will be indented with  
 @code{gnus-topic-indent-level} times the topic level number of spaces.  
 The default is 2.  
   
 @vindex gnus-topic-mode-hook  
 @code{gnus-topic-mode-hook} is called in topic minor mode buffers.  
   
 @vindex gnus-topic-display-empty-topics  
 The @code{gnus-topic-display-empty-topics} says whether to display even  
 topics that have no unread articles in them.  The default is @code{t}.  
   
   
3566  @node Topic Commands  @node Topic Commands
3567  @subsection Topic Commands  @subsection Topic Commands
3568  @cindex topic commands  @cindex topic commands
# Line 3260  When the topic minor mode is turned on, Line 3571  When the topic minor mode is turned on,
3571  available.  In addition, a few of the standard keys change their  available.  In addition, a few of the standard keys change their
3572  definitions slightly.  definitions slightly.
3573    
3574    In general, the following kinds of operations are possible on topics.
3575    First of all, you want to create topics.  Secondly, you want to put
3576    groups in topics and to move them around until you have an order you
3577    like.  The third kind of operation is to show/hide parts of the whole
3578    shebang.  You might want to hide a topic including its subtopics and
3579    groups, to get a better overview of the other groups.
3580    
3581    Here is a list of the basic keys that you might need to set up topics
3582    the way you like.
3583    
3584  @table @kbd  @table @kbd
3585    
3586  @item T n  @item T n
# Line 3268  definitions slightly. Line 3589  definitions slightly.
3589  Prompt for a new topic name and create it  Prompt for a new topic name and create it
3590  (@code{gnus-topic-create-topic}).  (@code{gnus-topic-create-topic}).
3591    
3592    @item T TAB
3593    @itemx TAB
3594    @kindex T TAB (Topic)
3595    @kindex TAB (Topic)
3596    @findex gnus-topic-indent
3597    ``Indent'' the current topic so that it becomes a sub-topic of the
3598    previous topic (@code{gnus-topic-indent}).  If given a prefix,
3599    ``un-indent'' the topic instead.
3600    
3601    @item M-TAB
3602    @kindex M-TAB (Topic)
3603    @findex gnus-topic-unindent
3604    ``Un-indent'' the current topic so that it becomes a sub-topic of the
3605    parent of its current parent (@code{gnus-topic-unindent}).
3606    
3607    @end table
3608    
3609    The following two keys can be used to move groups and topics around.
3610    They work like the well-known cut and paste.  @kbd{C-k} is like cut and
3611    @kbd{C-y} is like paste.  Of course, this being Emacs, we use the terms
3612    kill and yank rather than cut and paste.
3613    
3614    @table @kbd
3615    
3616    @item C-k
3617    @kindex C-k (Topic)
3618    @findex gnus-topic-kill-group
3619    Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the
3620    topic will be removed along with the topic.
3621    
3622    @item C-y
3623    @kindex C-y (Topic)
3624    @findex gnus-topic-yank-group
3625    Yank the previously killed group or topic
3626    (@code{gnus-topic-yank-group}).  Note that all topics will be yanked
3627    before all groups.
3628    
3629    So, to move a topic to the beginning of the list of topics, just hit
3630    @kbd{C-k} on it.  This is like the ``cut'' part of cut and paste.  Then,
3631    move the cursor to the beginning of the buffer (just below the ``Gnus''
3632    topic) and hit @kbd{C-y}.  This is like the ``paste'' part of cut and
3633    paste.  Like I said -- E-Z.
3634    
3635    You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics.  So
3636    you can move topics around as well as groups.
3637    
3638    @end table
3639    
3640    After setting up the topics the way you like them, you might wish to
3641    hide a topic, or to show it again.  That's why we have the following
3642    key.
3643    
3644    @table @kbd
3645    
3646    @item RET
3647    @kindex RET (Topic)
3648    @findex gnus-topic-select-group
3649    @itemx SPACE
3650    Either select a group or fold a topic (@code{gnus-topic-select-group}).
3651    When you perform this command on a group, you'll enter the group, as
3652    usual.  When done on a topic line, the topic will be folded (if it was
3653    visible) or unfolded (if it was folded already).  So it's basically a
3654    toggling command on topics.  In addition, if you give a numerical
3655    prefix, group on that level (and lower) will be displayed.
3656    
3657    @end table
3658    
3659    Now for a list of other commands, in no particular order.
3660    
3661    @table @kbd
3662    
3663  @item T m  @item T m
3664  @kindex T m (Topic)  @kindex T m (Topic)
3665  @findex gnus-topic-move-group  @findex gnus-topic-move-group
# Line 3335  Toggle hiding empty topics Line 3727  Toggle hiding empty topics
3727  @kindex T # (Topic)  @kindex T # (Topic)
3728  @findex gnus-topic-mark-topic  @findex gnus-topic-mark-topic
3729  Mark all groups in the current topic with the process mark  Mark all groups in the current topic with the process mark
3730  (@code{gnus-topic-mark-topic}).  (@code{gnus-topic-mark-topic}).  This command works recursively on
3731    sub-topics unless given a prefix.
3732    
3733  @item T M-#  @item T M-#
3734  @kindex T M-# (Topic)  @kindex T M-# (Topic)
3735  @findex gnus-topic-unmark-topic  @findex gnus-topic-unmark-topic
3736  Remove the process mark from all groups in the current topic  Remove the process mark from all groups in the current topic
3737  (@code{gnus-topic-unmark-topic}).  (@code{gnus-topic-unmark-topic}).  This command works recursively on
3738    sub-topics unless given a prefix.
 @item T TAB  
 @itemx TAB  
 @kindex T TAB (Topic)  
 @kindex TAB (Topic)  
 @findex gnus-topic-indent  
 ``Indent'' the current topic so that it becomes a sub-topic of the  
 previous topic (@code{gnus-topic-indent}).  If given a prefix,  
 ``un-indent'' the topic instead.  
   
 @item M-TAB  
 @kindex M-TAB (Topic)  
 @findex gnus-topic-unindent  
 ``Un-indent'' the current topic so that it becomes a sub-topic of the  
 parent of its current parent (@code{gnus-topic-unindent}).  
   
 @item @key{RET}  
 @kindex @key{RET} (Topic)  
 @findex gnus-topic-select-group  
 @itemx @key{SPC}  
 Either select a group or fold a topic (@code{gnus-topic-select-group}).  
 When you perform this command on a group, you'll enter the group, as  
 usual.  When done on a topic line, the topic will be folded (if it was  
 visible) or unfolded (if it was folded already).  So it's basically a  
 toggling command on topics.  In addition, if you give a numerical  
 prefix, group on that level (and lower) will be displayed.  
3739    
3740  @item C-c C-x  @item C-c C-x
3741  @kindex C-c C-x (Topic)  @kindex C-c C-x (Topic)
3742  @findex gnus-topic-expire-articles  @findex gnus-topic-expire-articles
3743  Run all expirable articles in the current group or topic through the expiry  Run all expirable articles in the current group or topic through the
3744  process (if any) (@code{gnus-topic-expire-articles}).  expiry process (if any)
3745    (@code{gnus-topic-expire-articles}).  (@pxref{Expiring Mail}).
 @item C-k  
 @kindex C-k (Topic)  
 @findex gnus-topic-kill-group  
 Kill a group or topic (@code{gnus-topic-kill-group}).  All groups in the  
 topic will be removed along with the topic.  
   
 @item C-y  
 @kindex C-y (Topic)  
 @findex gnus-topic-yank-group  
 Yank the previously killed group or topic  
 (@code{gnus-topic-yank-group}).  Note that all topics will be yanked  
 before all groups.  
3746    
3747  @item T r  @item T r
3748  @kindex T r (Topic)  @kindex T r (Topic)
3749  @findex gnus-topic-rename  @findex gnus-topic-rename
3750  Rename a topic (@code{gnus-topic-rename}).  Rename a topic (@code{gnus-topic-rename}).
3751    
3752  @item T @key{DEL}  @item T DEL
3753  @kindex T @key{DEL} (Topic)  @kindex T DEL (Topic)
3754  @findex gnus-topic-delete  @findex gnus-topic-delete
3755  Delete an empty topic (@code{gnus-topic-delete}).  Delete an empty topic (@code{gnus-topic-delete}).
3756    
# Line 3404  Delete an empty topic (@code{gnus-topic- Line 3760  Delete an empty topic (@code{gnus-topic-
3760  List all groups that Gnus knows about in a topics-ified way  List all groups that Gnus knows about in a topics-ified way
3761  (@code{gnus-topic-list-active}).  (@code{gnus-topic-list-active}).
3762    
3763    @item T M-n
3764    @kindex T M-n (Topic)
3765    @findex gnus-topic-goto-next-topic
3766    Go to the next topic (@code{gnus-topic-goto-next-topic}).
3767    
3768    @item T M-p
3769    @kindex T M-p (Topic)
3770    @findex gnus-topic-goto-previous-topic
3771    Go to the next topic (@code{gnus-topic-goto-previous-topic}).
3772    
3773  @item G p  @item G p
3774  @kindex G p (Topic)  @kindex G p (Topic)
3775  @findex gnus-topic-edit-parameters  @findex gnus-topic-edit-parameters
# Line 3416  Edit the topic parameters (@code{gnus-to Line 3782  Edit the topic parameters (@code{gnus-to
3782  @end table  @end table
3783    
3784    
3785    @node Topic Variables
3786    @subsection Topic Variables
3787    @cindex topic variables
3788    
3789    The previous section told you how to tell Gnus which topics to display.
3790    This section explains how to tell Gnus what to display about each topic.
3791    
3792    @vindex gnus-topic-line-format
3793    The topic lines themselves are created according to the
3794    @code{gnus-topic-line-format} variable (@pxref{Formatting Variables}).
3795    Valid elements are:
3796    
3797    @table @samp
3798    @item i
3799    Indentation.
3800    @item n
3801    Topic name.
3802    @item v
3803    Visibility.
3804    @item l
3805    Level.
3806    @item g
3807    Number of groups in the topic.
3808    @item a
3809    Number of unread articles in the topic.
3810    @item A
3811    Number of unread articles in the topic and all its subtopics.
3812    @end table
3813    
3814    @vindex gnus-topic-indent-level
3815    Each sub-topic (and the groups in the sub-topics) will be indented with
3816    @code{gnus-topic-indent-level} times the topic level number of spaces.
3817    The default is 2.
3818    
3819    @vindex gnus-topic-mode-hook
3820    @code{gnus-topic-mode-hook} is called in topic minor mode buffers.
3821    
3822    @vindex gnus-topic-display-empty-topics
3823    The @code{gnus-topic-display-empty-topics} says whether to display even
3824    topics that have no unread articles in them.  The default is @code{t}.
3825    
3826    
3827  @node Topic Sorting  @node Topic Sorting
3828  @subsection Topic Sorting  @subsection Topic Sorting
3829  @cindex topic sorting  @cindex topic sorting
# Line 3461  Sort the current topic by group rank Line 3869  Sort the current topic by group rank
3869  Sort the current topic alphabetically by back end name  Sort the current topic alphabetically by back end name
3870  (@code{gnus-topic-sort-groups-by-method}).  (@code{gnus-topic-sort-groups-by-method}).
3871    
3872    @item T S e
3873    @kindex T S e (Topic)
3874    @findex gnus-topic-sort-groups-by-server
3875    Sort the current topic alphabetically by server name
3876    (@code{gnus-topic-sort-groups-by-server}).
3877    
3878    @item T S s
3879    @kindex T S s (Topic)
3880    @findex gnus-topic-sort-groups
3881    Sort the current topic according to the function(s) given by the
3882    @code{gnus-group-sort-function} variable
3883    (@code{gnus-topic-sort-groups}).
3884    
3885  @end table  @end table
3886    
3887  @xref{Sorting Groups}, for more information about group sorting.  When given a prefix argument, all these commands will sort in reverse
3888    order.  @xref{Sorting Groups}, for more information about group
3889    sorting.
3890    
3891    
3892  @node Topic Topology  @node Topic Topology
# Line 3474  Sort the current topic alphabetically by Line 3897  Sort the current topic alphabetically by
3897  So, let's have a look at an example group buffer:  So, let's have a look at an example group buffer:
3898    
3899  @example  @example
3900    @group
3901  Gnus  Gnus
3902    Emacs -- I wuw it!    Emacs -- I wuw it!
3903       3: comp.emacs       3: comp.emacs
# Line 3484  Gnus Line 3908  Gnus
3908    Misc    Misc
3909       8: comp.binaries.fractals       8: comp.binaries.fractals
3910      13: comp.sources.unix      13: comp.sources.unix
3911    @end group
3912  @end example  @end example
3913    
3914  So, here we have one top-level topic (@samp{Gnus}), two topics under  So, here we have one top-level topic (@samp{Gnus}), two topics under
# Line 3514  allowed---@code{visible} and @code{invis Line 3939  allowed---@code{visible} and @code{invis
3939  @subsection Topic Parameters  @subsection Topic Parameters
3940  @cindex topic parameters  @cindex topic parameters
3941    
3942  All groups in a topic will inherit group parameters from the parent (and  All groups in a topic will inherit group parameters from the parent
3943  ancestor) topic parameters.  All valid group parameters are valid topic  (and ancestor) topic parameters.  All valid group parameters are valid
3944  parameters (@pxref{Group Parameters}).  topic parameters (@pxref{Group Parameters}).  When the agent is
3945    enabled, all agent parameters (See Agent Parameters in @ref{Category
3946    Syntax}) are also valid topic parameters.
3947    
3948  In addition, the following parameters are only valid as topic  In addition, the following parameters are only valid as topic
3949  parameters:  parameters:
# Line 3528  When subscribing new groups by topic (@p Line 3955  When subscribing new groups by topic (@p
3955  value should be a regexp to match the groups that should go in that  value should be a regexp to match the groups that should go in that
3956  topic.  topic.
3957    
3958    @item subscribe-level
3959    When subscribing new groups by topic (see the @code{subscribe} parameter),
3960    the group will be subscribed with the level specified in the
3961    @code{subscribe-level} instead of @code{gnus-level-default-subscribed}.
3962    
3963  @end table  @end table
3964    
3965  Group parameters (of course) override topic parameters, and topic  Group parameters (of course) override topic parameters, and topic
# Line 3536  know.  Normal inheritance rules.  (@dfn{ Line 3968  know.  Normal inheritance rules.  (@dfn{
3968  verb, although you may feel free to disagree with me here.)  verb, although you may feel free to disagree with me here.)
3969    
3970  @example  @example
3971    @group
3972  Gnus  Gnus
3973    Emacs    Emacs
3974       3: comp.emacs       3: comp.emacs
# Line 3548  Gnus Line 3981  Gnus
3981       8: comp.binaries.fractals       8: comp.binaries.fractals
3982      13: comp.sources.unix      13: comp.sources.unix
3983     452: alt.sex.emacs     452: alt.sex.emacs
3984    @end group  
3985  @end example  @end example
3986    
3987  The @samp{Emacs} topic has the topic parameter @code{(score-file  The @samp{Emacs} topic has the topic parameter @code{(score-file
# Line 3577  happens.  You just have to be careful if Line 4011  happens.  You just have to be careful if
4011  @section Misc Group Stuff  @section Misc Group Stuff
4012    
4013  @menu  @menu
4014  * Scanning New Messages:: Asking Gnus to see whether new messages have arrived.  * Scanning New Messages::       Asking Gnus to see whether new messages have arrived.
4015  * Group Information::     Information and help on groups and Gnus.  * Group Information::           Information and help on groups and Gnus.
4016  * Group Timestamp::       Making Gnus keep track of when you last read a group.  * Group Timestamp::             Making Gnus keep track of when you last read a group.
4017  * File Commands::         Reading and writing the Gnus files.  * File Commands::               Reading and writing the Gnus files.
4018    * Sieve Commands::              Managing Sieve scripts.
4019  @end menu  @end menu
4020    
4021  @table @kbd  @table @kbd
4022    
4023  @item ^  @item ^
4024  @kindex ^ @r{(Group)}  @kindex ^ (Group)
4025  @findex gnus-group-enter-server-mode  @findex gnus-group-enter-server-mode
4026  Enter the server buffer (@code{gnus-group-enter-server-mode}).  Enter the server buffer (@code{gnus-group-enter-server-mode}).
4027  @xref{The Server Buffer}.  @xref{Server Buffer}.
4028    
4029  @item a  @item a
4030  @kindex a @r{(Group)}  @kindex a (Group)
4031  @findex gnus-group-post-news  @findex gnus-group-post-news
4032  Post an article to a group (@code{gnus-group-post-news}).  If given a  Start composing a message (a news by default)
4033  prefix, the current group name will be used as the default.  (@code{gnus-group-post-news}).  If given a prefix, post to the group
4034    under the point.  If the prefix is 1, prompt for a group to post to.
4035    Contrary to what the name of this function suggests, the prepared
4036    article might be a mail instead of a news, if a mail group is specified
4037    with the prefix argument.  @xref{Composing Messages}.
4038    
4039  @item m  @item m
4040  @kindex m @r{(Group)}  @kindex m (Group)
4041  @findex gnus-group-mail  @findex gnus-group-mail
4042  Mail a message somewhere (@code{gnus-group-mail}).  Mail a message somewhere (@code{gnus-group-mail}).  If given a prefix,
4043    use the posting style of the group under the point.  If the prefix is 1,
4044    prompt for a group name to find the posting style.
4045    @xref{Composing Messages}.
4046    
4047    @item i
4048    @kindex i (Group)
4049    @findex gnus-group-news
4050    Start composing a news (@code{gnus-group-news}).  If given a prefix,
4051    post to the group under the point.  If the prefix is 1, prompt
4052    for group to post to.  @xref{Composing Messages}.
4053    
4054    This function actually prepares a news even when using mail groups.
4055    This is useful for ``posting'' messages to mail groups without actually
4056    sending them over the network: they're just saved directly to the group
4057    in question.  The corresponding back end must have a request-post method
4058    for this to work though.
4059    
4060  @end table  @end table
4061    
# Line 3631  whether they are empty or not. Line 4086  whether they are empty or not.
4086    
4087  @item gnus-group-name-charset-method-alist  @item gnus-group-name-charset-method-alist
4088  @vindex gnus-group-name-charset-method-alist  @vindex gnus-group-name-charset-method-alist
4089  An alist of method and the charset for group names. It is used to show  An alist of method and the charset for group names.  It is used to show
4090  non-ASCII group names.  non-@acronym{ASCII} group names.
4091    
4092  For example:  For example:
4093  @lisp  @lisp
# Line 3641  For example: Line 4096  For example:
4096  @end lisp  @end lisp
4097    
4098  @item gnus-group-name-charset-group-alist  @item gnus-group-name-charset-group-alist
4099    @cindex UTF-8 group names
4100  @vindex gnus-group-name-charset-group-alist  @vindex gnus-group-name-charset-group-alist
4101  An alist of regexp of group name and the charset for group names.  An alist of regexp of group name and the charset for group names.  It
4102  It is used to show non-ASCII group names.  is used to show non-@acronym{ASCII} group names.  @code{((".*"
4103    utf-8))} is the default value if UTF-8 is supported, otherwise the
4104    default is @code{nil}.
4105    
4106  For example:  For example:
4107  @lisp  @lisp
# Line 3661  For example: Line 4119  For example:
4119  @table @kbd  @table @kbd
4120    
4121  @item g  @item g
4122  @kindex g @r{(Group)}  @kindex g (Group)
4123  @findex gnus-group-get-new-news  @findex gnus-group-get-new-news
4124  @c @icon{gnus-group-get-new-news}  @c @icon{gnus-group-get-new-news}
4125  Check the server(s) for new articles.  If the numerical prefix is used,  Check the server(s) for new articles.  If the numerical prefix is used,
# Line 3671  command will force a total re-reading of Line 4129  command will force a total re-reading of
4129  back end(s).  back end(s).
4130    
4131  @item M-g  @item M-g
4132  @kindex M-g @r{(Group)}  @kindex M-g (Group)
4133  @findex gnus-group-get-new-news-this-group  @findex gnus-group-get-new-news-this-group
4134  @vindex gnus-goto-next-group-when-activating  @vindex gnus-goto-next-group-when-activating
4135  @c @icon{gnus-group-get-new-news-this-group}  @c @icon{gnus-group-get-new-news-this-group}
# Line 3683  to move point to the next group or not. Line 4141  to move point to the next group or not.
4141  @findex gnus-activate-all-groups  @findex gnus-activate-all-groups
4142  @cindex activating groups  @cindex activating groups
4143  @item C-c M-g  @item C-c M-g
4144  @kindex C-c M-g @r{(Group)}  @kindex C-c M-g (Group)
4145  Activate absolutely all groups (@code{gnus-activate-all-groups}).  Activate absolutely all groups (@code{gnus-activate-all-groups}).
4146    
4147  @item R  @item R
4148  @kindex R @r{(Group)}  @kindex R (Group)
4149  @cindex restarting  @cindex restarting
4150  @findex gnus-group-restart  @findex gnus-group-restart
4151  Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}  Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
# Line 3713  news. Line 4171  news.
4171    
4172    
4173  @item H f  @item H f
4174  @kindex H f @r{(Group)}  @kindex H f (Group)
4175  @findex gnus-group-fetch-faq  @findex gnus-group-fetch-faq
4176  @vindex gnus-group-faq-directory  @vindex gnus-group-faq-directory
4177  @cindex FAQ  @cindex FAQ
4178  @cindex ange-ftp  @cindex ange-ftp
4179  Try to fetch the FAQ for the current group  Try to fetch the @acronym{FAQ} for the current group
4180  (@code{gnus-group-fetch-faq}).  Gnus will try to get the FAQ from  (@code{gnus-group-fetch-faq}).  Gnus will try to get the @acronym{FAQ}
4181  @code{gnus-group-faq-directory}, which is usually a directory on a  from @code{gnus-group-faq-directory}, which is usually a directory on
4182  remote machine.  This variable can also be a list of directories.  In  a remote machine.  This variable can also be a list of directories.
4183  that case, giving a prefix to this command will allow you to choose  In that case, giving a prefix to this command will allow you to choose
4184  between the various sites.  @code{ange-ftp} (or @code{efs}) will be used  between the various sites.  @code{ange-ftp} (or @code{efs}) will be
4185  for fetching the file.  used for fetching the file.
4186    
4187  If fetching from the first site is unsuccessful, Gnus will attempt to go  If fetching from the first site is unsuccessful, Gnus will attempt to go
4188  through @code{gnus-group-faq-directory} and try to open them one by one.  through @code{gnus-group-faq-directory} and try to open them one by one.
4189    
4190    @item H c
4191    @kindex H c (Group)
4192    @findex gnus-group-fetch-charter
4193    @vindex gnus-group-charter-alist
4194    @cindex charter
4195    Try to open the charter for the current group in a web browser
4196    (@code{gnus-group-fetch-charter}).  Query for a group if given a
4197    prefix argument.
4198    
4199    Gnus will use @code{gnus-group-charter-alist} to find the location of
4200    the charter.  If no location is known, Gnus will fetch the control
4201    messages for the group, which in some cases includes the charter.
4202    
4203    @item H C
4204    @kindex H C (Group)
4205    @findex gnus-group-fetch-control
4206    @vindex gnus-group-fetch-control-use-browse-url
4207    @cindex control message
4208    Fetch the control messages for the group from the archive at
4209    @code{ftp.isc.org} (@code{gnus-group-fetch-control}).  Query for a
4210    group if given a prefix argument.
4211    
4212    If @code{gnus-group-fetch-control-use-browse-url} is non-@code{nil},
4213    Gnus will open the control messages in a browser using
4214    @code{browse-url}.  Otherwise they are fetched using @code{ange-ftp}
4215    and displayed in an ephemeral group.
4216    
4217    Note that the control messages are compressed.  To use this command
4218    you need to turn on @code{auto-compression-mode} (@pxref{Compressed
4219    Files, ,Compressed Files, emacs, The Emacs Manual}).
4220    
4221  @item H d  @item H d
4222  @itemx C-c C-d  @itemx C-c C-d
4223  @c @icon{gnus-group-describe-group}  @c @icon{gnus-group-describe-group}
4224  @kindex H d @r{(Group)}  @kindex H d (Group)
4225  @kindex C-c C-d @r{(Group)}  @kindex C-c C-d (Group)
4226  @cindex describing groups  @cindex describing groups
4227  @cindex group description  @cindex group description
4228  @findex gnus-group-describe-group  @findex gnus-group-describe-group
# Line 3741  Describe the current group (@code{gnus-g Line 4230  Describe the current group (@code{gnus-g
4230  a prefix, force Gnus to re-read the description from the server.  a prefix, force Gnus to re-read the description from the server.
4231    
4232  @item M-d  @item M-d
4233  @kindex M-d @r{(Group)}  @kindex M-d (Group)
4234  @findex gnus-group-describe-all-groups  @findex gnus-group-describe-all-groups
4235  Describe all groups (@code{gnus-group-describe-all-groups}).  If given a  Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
4236  prefix, force Gnus to re-read the description file from the server.  prefix, force Gnus to re-read the description file from the server.
4237    
4238  @item H v  @item H v
4239  @itemx V  @itemx V
4240  @kindex V @r{(Group)}  @kindex V (Group)
4241  @kindex H v @r{(Group)}  @kindex H v (Group)
4242  @cindex version  @cindex version
4243  @findex gnus-version  @findex gnus-version
4244  Display current Gnus version numbers (@code{gnus-version}).  Display current Gnus version numbers (@code{gnus-version}).
4245    
4246  @item ?  @item ?
4247  @kindex ? @r{(Group)}  @kindex ? (Group)
4248  @findex gnus-group-describe-briefly  @findex gnus-group-describe-briefly
4249  Give a very short help message (@code{gnus-group-describe-briefly}).  Give a very short help message (@code{gnus-group-describe-briefly}).
4250    
4251  @item C-c C-i  @item C-c C-i
4252  @kindex C-c C-i @r{(Group)}  @kindex C-c C-i (Group)
4253  @cindex info  @cindex info
4254  @cindex manual  @cindex manual
4255  @findex gnus-info-find-node  @findex gnus-info-find-node
# Line 3807  something like: Line 4296  something like:
4296        "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")        "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
4297  @end lisp  @end lisp
4298    
4299    If you would like greater control of the time format, you can use a
4300    user-defined format spec.  Something like the following should do the
4301    trick:
4302    
4303    @lisp
4304    (setq gnus-group-line-format
4305          "%M\%S\%p\%P\%5y: %(%-40,40g%) %ud\n")
4306    (defun gnus-user-format-function-d (headers)
4307      (let ((time (gnus-group-timestamp gnus-tmp-group)))
4308        (if time
4309            (format-time-string "%b %d  %H:%M" time)
4310          "")))
4311    @end lisp
4312    
4313    
4314  @node File Commands  @node File Commands
4315  @subsection File Commands  @subsection File Commands
# Line 3815  something like: Line 4318  something like:
4318  @table @kbd  @table @kbd
4319    
4320  @item r  @item r
4321  @kindex r @r{(Group)}  @kindex r (Group)
4322  @findex gnus-group-read-init-file  @findex gnus-group-read-init-file
4323  @vindex gnus-init-file  @vindex gnus-init-file
4324  @cindex reading init file  @cindex reading init file
4325  Re-read the init file (@code{gnus-init-file}, which defaults to  Re-read the init file (@code{gnus-init-file}, which defaults to
4326  @file{~/.gnus}) (@code{gnus-group-read-init-file}).  @file{~/.gnus.el}) (@code{gnus-group-read-init-file}).
4327    
4328  @item s  @item s
4329  @kindex s @r{(Group)}  @kindex s (Group)
4330  @findex gnus-group-save-newsrc  @findex gnus-group-save-newsrc
4331  @cindex saving .newsrc  @cindex saving .newsrc
4332  Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)  Save the @file{.newsrc.eld} file (and @file{.newsrc} if wanted)
# Line 3831  Save the @file{.newsrc.eld} file (and @f Line 4334  Save the @file{.newsrc.eld} file (and @f
4334  file(s) whether Gnus thinks it is necessary or not.  file(s) whether Gnus thinks it is necessary or not.
4335    
4336  @c @item Z  @c @item Z
4337  @c @kindex Z @r{(Group)}  @c @kindex Z (Group)
4338  @c @findex gnus-group-clear-dribble  @c @findex gnus-group-clear-dribble
4339  @c Clear the dribble buffer (@code{gnus-group-clear-dribble}).  @c Clear the dribble buffer (@code{gnus-group-clear-dribble}).
4340    
4341  @end table  @end table
4342    
4343    
4344  @node The Summary Buffer  @node Sieve Commands
4345  @chapter The Summary Buffer  @subsection Sieve Commands
4346    @cindex group sieve commands
4347    
4348    Sieve is a server-side mail filtering language.  In Gnus you can use
4349    the @code{sieve} group parameter (@pxref{Group Parameters}) to specify
4350    sieve rules that should apply to each group.  Gnus provides two
4351    commands to translate all these group parameters into a proper Sieve
4352    script that can be transfered to the server somehow.
4353    
4354    @vindex gnus-sieve-file
4355    @vindex gnus-sieve-region-start
4356    @vindex gnus-sieve-region-end
4357    The generated Sieve script is placed in @code{gnus-sieve-file} (by
4358    default @file{~/.sieve}).  The Sieve code that Gnus generate is placed
4359    between two delimiters, @code{gnus-sieve-region-start} and
4360    @code{gnus-sieve-region-end}, so you may write additional Sieve code
4361    outside these delimiters that will not be removed the next time you
4362    regenerate the Sieve script.
4363    
4364    @vindex gnus-sieve-crosspost
4365    The variable @code{gnus-sieve-crosspost} controls how the Sieve script
4366    is generated.  If it is non-@code{nil} (the default) articles is
4367    placed in all groups that have matching rules, otherwise the article
4368    is only placed in the group with the first matching rule.  For
4369    example, the group parameter @samp{(sieve address "sender"
4370    "owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
4371    code if @code{gnus-sieve-crosspost} is @code{nil}.  (When
4372    @code{gnus-sieve-crosspost} is non-@code{nil}, it looks the same
4373    except that the line containing the call to @code{stop} is removed.)
4374    
4375    @example
4376    if address "sender" "owner-ding@@hpc.uh.edu" @{
4377            fileinto "INBOX.ding";
4378            stop;
4379    @}
4380    @end example
4381    
4382    @xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}.
4383    
4384    @table @kbd
4385    
4386    @item D g
4387    @kindex D g (Group)
4388    @findex gnus-sieve-generate
4389    @vindex gnus-sieve-file
4390    @cindex generating sieve script
4391    Regenerate a Sieve script from the @code{sieve} group parameters and
4392    put you into the @code{gnus-sieve-file} without saving it.
4393    
4394    @item D u
4395    @kindex D u (Group)
4396    @findex gnus-sieve-update
4397    @vindex gnus-sieve-file
4398    @cindex updating sieve script
4399    Regenerates the Gnus managed part of @code{gnus-sieve-file} using the
4400    @code{sieve} group parameters, save the file and upload it to the
4401    server using the @code{sieveshell} program.
4402    
4403    @end table
4404    
4405    
4406    @node Summary Buffer
4407    @chapter Summary Buffer
4408  @cindex summary buffer  @cindex summary buffer
4409    
4410  A line for each article is displayed in the summary buffer.  You can  A line for each article is displayed in the summary buffer.  You can
# Line 3856  You can have as many summary buffers ope Line 4421  You can have as many summary buffers ope
4421  * Choosing Articles::           Reading articles.  * Choosing Articles::           Reading articles.
4422  * Paging the Article::          Scrolling the current article.  * Paging the Article::          Scrolling the current article.
4423  * Reply Followup and Post::     Posting articles.  * Reply Followup and Post::     Posting articles.
4424    * Delayed Articles::            Send articles at a later time.
4425  * Marking Articles::            Marking articles as read, expirable, etc.  * Marking Articles::            Marking articles as read, expirable, etc.
4426  * Limiting::                    You can limit the summary buffer.  * Limiting::                    You can limit the summary buffer.
4427  * Threading::                   How threads are made.  * Threading::                   How threads are made.
4428  * Sorting::                     How articles and threads are sorted.  * Sorting the Summary Buffer::  How articles and threads are sorted.
4429  * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.  * Asynchronous Fetching::       Gnus might be able to pre-fetch articles.
4430  * Article Caching::             You may store articles in a cache.  * Article Caching::             You may store articles in a cache.
4431  * Persistent Articles::         Making articles expiry-resistant.  * Persistent Articles::         Making articles expiry-resistant.
# Line 3880  You can have as many summary buffers ope Line 4446  You can have as many summary buffers ope
4446                                  or reselecting the current group.                                  or reselecting the current group.
4447  * Crosspost Handling::          How crossposted articles are dealt with.  * Crosspost Handling::          How crossposted articles are dealt with.
4448  * Duplicate Suppression::       An alternative when crosspost handling fails.  * Duplicate Suppression::       An alternative when crosspost handling fails.
4449    * Security::                    Decrypt and Verify.
4450    * Mailing List::                Mailing list minor mode.
4451  @end menu  @end menu
4452    
4453    
# Line 3890  You can have as many summary buffers ope Line 4458  You can have as many summary buffers ope
4458  @iftex  @iftex
4459  @iflatex  @iflatex
4460  \gnusfigure{The Summary Buffer}{180}{  \gnusfigure{The Summary Buffer}{180}{
4461  \put(0,0){\epsfig{figure=tmp/summary.ps,width=7.5cm}}  \put(0,0){\epsfig{figure=ps/summary,width=7.5cm}}
4462  \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-article.ps,width=7.5cm}}}  \put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-article,width=7.5cm}}}
4463  }  }
4464  @end iflatex  @end iflatex
4465  @end iftex  @end iftex
4466    
4467  @menu  @menu
4468  * Summary Buffer Lines::     You can specify how summary lines should look.  * Summary Buffer Lines::        You can specify how summary lines should look.
4469  * To From Newsgroups::       How to not display your own name.  * To From Newsgroups::          How to not display your own name.
4470  * Summary Buffer Mode Line:: You can say how the mode line should look.  * Summary Buffer Mode Line::    You can say how the mode line should look.
4471  * Summary Highlighting::     Making the summary buffer all pretty and nice.  * Summary Highlighting::        Making the summary buffer all pretty and nice.
4472  @end menu  @end menu
4473    
4474  @findex mail-extract-address-components  @findex mail-extract-address-components
# Line 3935  the @code{gnus-summary-line-format} vari Line 4503  the @code{gnus-summary-line-format} vari
4503  lines as a normal @code{format} string, with some extensions  lines as a normal @code{format} string, with some extensions
4504  (@pxref{Formatting Variables}).  (@pxref{Formatting Variables}).
4505    
4506  The default string is @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n}.  There should always be a colon or a point position marker on the line;
4507    the cursor always moves to the point position marker or the colon after
4508    performing an operation.  (Of course, Gnus wouldn't be Gnus if it wasn't
4509    possible to change this.  Just write a new function
4510    @code{gnus-goto-colon} which does whatever you like with the cursor.)
4511    @xref{Positioning Point}.
4512    
4513  The following format specification characters are understood:  The default string is @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n}.
4514    
4515    The following format specification characters and extended format
4516    specification(s) are understood:
4517    
4518  @table @samp  @table @samp
4519  @item N  @item N
# Line 3954  Full @code{From} header. Line 4530  Full @code{From} header.
4530  @item n  @item n
4531  The name (from the @code{From} header).  The name (from the @code{From} header).
4532  @item f  @item f
4533  The name, code @code{To} header or the @code{Newsgroups} header  The name, @code{To} header or the @code{Newsgroups} header (@pxref{To
4534  (@pxref{To From Newsgroups}).  From Newsgroups}).
4535  @item a  @item a
4536  The name (from the @code{From} header).  This differs from the @code{n}  The name (from the @code{From} header).  This differs from the @code{n}
4537  spec in that it uses the function designated by the  spec in that it uses the function designated by the
# Line 3967  the @code{a} spec. Line 4543  the @code{a} spec.
4543  @item L  @item L
4544  Number of lines in the article.  Number of lines in the article.
4545  @item c  @item c
4546  Number of characters in the article. This specifier is not supported in some  Number of characters in the article.  This specifier is not supported
4547  methods (like nnfolder).  in some methods (like nnfolder).
4548    @item k
4549    Pretty-printed version of the number of characters in the article;
4550    for example, @samp{1.2k} or @samp{0.4M}.
4551  @item I  @item I
4552  Indentation based on thread level (@pxref{Customizing Threading}).  Indentation based on thread level (@pxref{Customizing Threading}).
4553    @item B
4554    A complex trn-style thread tree, showing response-connecting trace
4555    lines.  A thread could be drawn like this:
4556    
4557    @example
4558    >
4559    +->
4560    | +->
4561    | | \->
4562    | |   \->
4563    | \->
4564    +->
4565    \->
4566    @end example
4567    
4568    You can customize the appearance with the following options.  Note
4569    that it is possible to make the thread display look really neat by
4570    replacing the default @acronym{ASCII} characters with graphic
4571    line-drawing glyphs.
4572    @table @code
4573    @item gnus-sum-thread-tree-root
4574    @vindex gnus-sum-thread-tree-root
4575    Used for the root of a thread.  If @code{nil}, use subject
4576    instead.  The default is @samp{> }.
4577    
4578    @item gnus-sum-thread-tree-false-root
4579    @vindex gnus-sum-thread-tree-false-root
4580    Used for the false root of a thread (@pxref{Loose Threads}).  If
4581    @code{nil}, use subject instead.  The default is @samp{> }.
4582    
4583    @item gnus-sum-thread-tree-single-indent
4584    @vindex gnus-sum-thread-tree-single-indent
4585    Used for a thread with just one message.  If @code{nil}, use subject
4586    instead.  The default is @samp{}.
4587    
4588    @item gnus-sum-thread-tree-vertical
4589    @vindex gnus-sum-thread-tree-vertical
4590    Used for drawing a vertical line.  The default is @samp{| }.
4591    
4592    @item gnus-sum-thread-tree-indent
4593    @vindex gnus-sum-thread-tree-indent
4594    Used for indenting.  The default is @samp{  }.
4595    
4596    @item gnus-sum-thread-tree-leaf-with-other
4597    @vindex gnus-sum-thread-tree-leaf-with-other
4598    Used for a leaf with brothers.  The default is @samp{+-> }.
4599    
4600    @item gnus-sum-thread-tree-single-leaf
4601    @vindex gnus-sum-thread-tree-single-leaf
4602    Used for a leaf without brothers.  The default is @samp{\-> }
4603    
4604    @end table
4605    
4606  @item T  @item T
4607  Nothing if the article is a root and lots of spaces if it isn't (it  Nothing if the article is a root and lots of spaces if it isn't (it
4608  pushes everything after it off the screen).  pushes everything after it off the screen).
# Line 3985  One space for each thread level. Line 4617  One space for each thread level.
4617  @item <  @item <
4618  Twenty minus thread level spaces.  Twenty minus thread level spaces.
4619  @item U  @item U
4620  Unread.  Unread.  @xref{Read Articles}.
4621    
4622  @item R  @item R
4623  This misleadingly named specifier is the @dfn{secondary mark}.  This  This misleadingly named specifier is the @dfn{secondary mark}.  This
4624  mark will say whether the article has been replied to, has been cached,  mark will say whether the article has been replied to, has been cached,
4625  or has been saved.  or has been saved.  @xref{Other Marks}.
4626    
4627  @item i  @item i
4628  Score as a number (@pxref{Scoring}).  Score as a number (@pxref{Scoring}).
# Line 4024  article has any children. Line 4656  article has any children.
4656  The line number.  The line number.
4657  @item O  @item O
4658  Download mark.  Download mark.
4659    @item &user-date;
4660    Age sensitive date format.  Various date format is defined in
4661    @code{gnus-user-date-format-alist}.
4662  @item u  @item u
4663  User defined specifier.  The next character in the format string should  User defined specifier.  The next character in the format string should
4664  be a letter.  Gnus will call the function  be a letter.  Gnus will call the function
4665  @code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter  @code{gnus-user-format-function-@var{x}}, where @var{x} is the letter
4666  following @samp{%u}.  The function will be passed the current header as  following @samp{%u}.  The function will be passed the current header as
4667  argument.  The function should return a string, which will be inserted  argument.  The function should return a string, which will be inserted
4668  into the summary just like information from any other summary specifier.  into the summary just like information from any other summary specifier.
4669  @end table  @end table
4670    
4671    Text between @samp{%(} and @samp{%)} will be highlighted with
4672    @code{gnus-mouse-face} when the mouse point is placed inside the area.
4673    There can only be one such area.
4674    
4675  The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs  The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
4676  have to be handled with care.  For reasons of efficiency, Gnus will  have to be handled with care.  For reasons of efficiency, Gnus will
4677  compute what column these characters will end up in, and ``hard-code''  compute what column these characters will end up in, and ``hard-code''
# Line 4094  headers are used instead. Line 4733  headers are used instead.
4733    
4734  @vindex nnmail-extra-headers  @vindex nnmail-extra-headers
4735  A related variable is @code{nnmail-extra-headers}, which controls when  A related variable is @code{nnmail-extra-headers}, which controls when
4736  to include extra headers when generating overview (@sc{nov}) files.  If  to include extra headers when generating overview (@acronym{NOV}) files.
4737  you have old overview files, you should regenerate them after changing  If you have old overview files, you should regenerate them after
4738  this variable.  changing this variable, by entering the server buffer using @kbd{^},
4739    and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause
4740    regeneration.
4741    
4742  @vindex gnus-summary-line-format  @vindex gnus-summary-line-format
4743  You also have to instruct Gnus to display the data by changing the  You also have to instruct Gnus to display the data by changing the
4744  @code{%n} spec to the @code{%f} spec in the  @code{%n} spec to the @code{%f} spec in the
4745  @code{gnus-summary-line-format} variable.  @code{gnus-summary-line-format} variable.
4746    
4747  In summary, you'd typically do something like the following:  In summary, you'd typically put something like the following in
4748    @file{~/.gnus.el}:
4749    
4750  @lisp  @lisp
4751  (setq gnus-extra-headers  (setq gnus-extra-headers
4752        '(To Newsgroups))        '(To Newsgroups))
4753  (setq nnmail-extra-headers gnus-extra-headers)  (setq nnmail-extra-headers gnus-extra-headers)
4754  (setq gnus-summary-line-format  (setq gnus-summary-line-format
4755        "%U%R%z%I%(%[%4L: %-20,20f%]%) %s\n")        "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n")
4756  (setq gnus-ignored-from-addresses  (setq gnus-ignored-from-addresses
4757        "Your Name Here")        "Your Name Here")
4758  @end lisp  @end lisp
4759    
4760  Now, this is mostly useful for mail groups, where you have control over  (The values listed above are the default values in Gnus.  Alter them
4761  the @sc{nov} files that are created.  However, if you can persuade your  to fit your needs.)
4762  nntp admin to add:  
4763    A note for news server administrators, or for users who wish to try to
4764    convince their news server administrator to provide some additional
4765    support:
4766    
4767    The above is mostly useful for mail groups, where you have control over
4768    the @acronym{NOV} files that are created.  However, if you can persuade your
4769    nntp admin to add (in the usual implementation, notably INN):
4770    
4771  @example  @example
4772  Newsgroups:full  Newsgroups:full
# Line 4227  None of these commands select articles. Line 4876  None of these commands select articles.
4876  @table @kbd  @table @kbd
4877  @item G M-n  @item G M-n
4878  @itemx M-n  @itemx M-n
4879  @kindex M-n @r{(Summary)}  @kindex M-n (Summary)
4880  @kindex G M-n @r{(Summary)}  @kindex G M-n (Summary)
4881  @findex gnus-summary-next-unread-subject  @findex gnus-summary-next-unread-subject
4882  Go to the next summary line of an unread article  Go to the next summary line of an unread article
4883  (@code{gnus-summary-next-unread-subject}).  (@code{gnus-summary-next-unread-subject}).
4884    
4885  @item G M-p  @item G M-p
4886  @itemx M-p  @itemx M-p
4887  @kindex M-p @r{(Summary)}  @kindex M-p (Summary)
4888  @kindex G M-p @r{(Summary)}  @kindex G M-p (Summary)
4889  @findex gnus-summary-prev-unread-subject  @findex gnus-summary-prev-unread-subject
4890  Go to the previous summary line of an unread article  Go to the previous summary line of an unread article
4891  (@code{gnus-summary-prev-unread-subject}).  (@code{gnus-summary-prev-unread-subject}).
4892    
4893  @item G g  @item G g
4894  @kindex G g @r{(Summary)}  @kindex G g (Summary)
4895  @findex gnus-summary-goto-subject  @findex gnus-summary-goto-subject
4896  Ask for an article number and then go to the summary line of that article  Ask for an article number and then go to the summary line of that article
4897  without displaying the article (@code{gnus-summary-goto-subject}).  without displaying the article (@code{gnus-summary-goto-subject}).
# Line 4264  no more unread articles after the curren Line 4913  no more unread articles after the curren
4913  the next group.  If this variable is @code{t} and the next group is  the next group.  If this variable is @code{t} and the next group is
4914  empty, Gnus will exit summary mode and return to the group buffer.  If  empty, Gnus will exit summary mode and return to the group buffer.  If
4915  this variable is neither @code{t} nor @code{nil}, Gnus will select the  this variable is neither @code{t} nor @code{nil}, Gnus will select the
4916  next group, no matter whether it has any unread articles or not.  As a  next group with unread articles.  As a special case, if this variable
4917  special case, if this variable is @code{quietly}, Gnus will select the  is @code{quietly}, Gnus will select the next group without asking for
4918  next group without asking for confirmation.  If this variable is  confirmation.  If this variable is @code{almost-quietly}, the same
4919  @code{almost-quietly}, the same will happen only if you are located on  will happen only if you are located on the last article in the group.
4920  the last article in the group.  Finally, if this variable is  Finally, if this variable is @code{slightly-quietly}, the @kbd{Z n}
4921  @code{slightly-quietly}, the @kbd{Z n} command will go to the next group  command will go to the next group without confirmation.  Also
4922  without confirmation.  Also @pxref{Group Levels}.  @pxref{Group Levels}.
4923    
4924  @item gnus-auto-select-same  @item gnus-auto-select-same
4925  @vindex gnus-auto-select-same  @vindex gnus-auto-select-same
# Line 4309  the given number of lines from the top. Line 4958  the given number of lines from the top.
4958  @cindex selecting articles  @cindex selecting articles
4959    
4960  @menu  @menu
4961  * Choosing Commands::        Commands for choosing articles.  * Choosing Commands::           Commands for choosing articles.
4962  * Choosing Variables::       Variables that influence these commands.  * Choosing Variables::          Variables that influence these commands.
4963  @end menu  @end menu
4964    
4965    
# Line 4324  If you want to fetch new articles or red Line 4973  If you want to fetch new articles or red
4973  @ref{Exiting the Summary Buffer}.  @ref{Exiting the Summary Buffer}.
4974    
4975  @table @kbd  @table @kbd
4976  @item @key{SPC}  @item SPACE
4977  @kindex @key{SPC} @r{(Summary)}  @kindex SPACE (Summary)
4978  @findex gnus-summary-next-page  @findex gnus-summary-next-page
4979  Select the current article, or, if that one's read already, the next  Select the current article, or, if that one's read already, the next
4980  unread article (@code{gnus-summary-next-page}).  unread article (@code{gnus-summary-next-page}).
4981    
4982    If you have an article window open already and you press @kbd{SPACE}
4983    again, the article will be scrolled.  This lets you conveniently
4984    @kbd{SPACE} through an entire newsgroup.  @xref{Paging the Article}.
4985    
4986  @item G n  @item G n
4987  @itemx n  @itemx n
4988  @kindex n @r{(Summary)}  @kindex n (Summary)
4989  @kindex G n @r{(Summary)}  @kindex G n (Summary)
4990  @findex gnus-summary-next-unread-article  @findex gnus-summary-next-unread-article
4991  @c @icon{gnus-summary-next-unread}  @c @icon{gnus-summary-next-unread}
4992  Go to next unread article (@code{gnus-summary-next-unread-article}).  Go to next unread article (@code{gnus-summary-next-unread-article}).
4993    
4994  @item G p  @item G p
4995  @itemx p  @itemx p
4996  @kindex p @r{(Summary)}  @kindex p (Summary)
4997  @findex gnus-summary-prev-unread-article  @findex gnus-summary-prev-unread-article
4998  @c @icon{gnus-summary-prev-unread}  @c @icon{gnus-summary-prev-unread}
4999  Go to previous unread article (@code{gnus-summary-prev-unread-article}).  Go to previous unread article (@code{gnus-summary-prev-unread-article}).
5000    
5001  @item G N  @item G N
5002  @itemx N  @itemx N
5003  @kindex N @r{(Summary)}  @kindex N (Summary)
5004  @kindex G N @r{(Summary)}  @kindex G N (Summary)
5005  @findex gnus-summary-next-article  @findex gnus-summary-next-article
5006  Go to the next article (@code{gnus-summary-next-article}).  Go to the next article (@code{gnus-summary-next-article}).
5007    
5008  @item G P  @item G P
5009  @itemx P  @itemx P
5010  @kindex P @r{(Summary)}  @kindex P (Summary)
5011  @kindex G P @r{(Summary)}  @kindex G P (Summary)
5012  @findex gnus-summary-prev-article  @findex gnus-summary-prev-article
5013  Go to the previous article (@code{gnus-summary-prev-article}).  Go to the previous article (@code{gnus-summary-prev-article}).
5014    
5015  @item G C-n  @item G C-n
5016  @kindex G C-n @r{(Summary)}  @kindex G C-n (Summary)
5017  @findex gnus-summary-next-same-subject  @findex gnus-summary-next-same-subject
5018  Go to the next article with the same subject  Go to the next article with the same subject
5019  (@code{gnus-summary-next-same-subject}).  (@code{gnus-summary-next-same-subject}).
5020    
5021  @item G C-p  @item G C-p
5022  @kindex G C-p @r{(Summary)}  @kindex G C-p (Summary)
5023  @findex gnus-summary-prev-same-subject  @findex gnus-summary-prev-same-subject
5024  Go to the previous article with the same subject  Go to the previous article with the same subject
5025  (@code{gnus-summary-prev-same-subject}).  (@code{gnus-summary-prev-same-subject}).
5026    
5027  @item G f  @item G f
5028  @itemx .  @itemx .
5029  @kindex G f  @r{(Summary)}  @kindex G f  (Summary)
5030  @kindex .  @r{(Summary)}  @kindex .  (Summary)
5031  @findex gnus-summary-first-unread-article  @findex gnus-summary-first-unread-article
5032  Go to the first unread article  Go to the first unread article
5033  (@code{gnus-summary-first-unread-article}).  (@code{gnus-summary-first-unread-article}).
5034    
5035  @item G b  @item G b
5036  @itemx ,  @itemx ,
5037  @kindex G b @r{(Summary)}  @kindex G b (Summary)
5038  @kindex , @r{(Summary)}  @kindex , (Summary)
5039  @findex gnus-summary-best-unread-article  @findex gnus-summary-best-unread-article
5040  Go to the article with the highest score  Go to the unread article with the highest score
5041  (@code{gnus-summary-best-unread-article}).  (@code{gnus-summary-best-unread-article}).  If given a prefix argument,
5042    go to the first unread article that has a score over the default score.
5043    
5044  @item G l  @item G l
5045  @itemx l  @itemx l
5046  @kindex l @r{(Summary)}  @kindex l (Summary)
5047  @kindex G l @r{(Summary)}  @kindex G l (Summary)
5048  @findex gnus-summary-goto-last-article  @findex gnus-summary-goto-last-article
5049  Go to the previous article read (@code{gnus-summary-goto-last-article}).  Go to the previous article read (@code{gnus-summary-goto-last-article}).
5050    
5051  @item G o  @item G o
5052  @kindex G o @r{(Summary)}  @kindex G o (Summary)
5053  @findex gnus-summary-pop-article  @findex gnus-summary-pop-article
5054  @cindex history  @cindex history
5055  @cindex article history  @cindex article history
# Line 4408  For a somewhat related issue (if you use Line 5062  For a somewhat related issue (if you use
5062    
5063  @item G j  @item G j
5064  @itemx j  @itemx j
5065  @kindex j @r{(Summary)}  @kindex j (Summary)
5066  @kindex G j @r{(Summary)}  @kindex G j (Summary)
5067  @findex gnus-summary-goto-article  @findex gnus-summary-goto-article
5068  Ask for an article number or @code{Message-ID}, and then go to that  Ask for an article number or @code{Message-ID}, and then go to that
5069  article (@code{gnus-summary-goto-article}).  article (@code{gnus-summary-goto-article}).
5070    
5071  @end table  @end table
5072    
5073    
# Line 4432  the server and display it in the article Line 5087  the server and display it in the article
5087  @item gnus-select-article-hook  @item gnus-select-article-hook
5088  @vindex gnus-select-article-hook  @vindex gnus-select-article-hook
5089  This hook is called whenever an article is selected.  By default it  This hook is called whenever an article is selected.  By default it
5090  exposes any threads hidden under the selected article.  exposes any threads hidden under the selected article.  If you would
5091    like each article to be saved in the Agent as you read it, putting
5092    @code{gnus-agent-fetch-selected-article} on this hook will do so.
5093    
5094  @item gnus-mark-article-hook  @item gnus-mark-article-hook
5095  @vindex gnus-mark-article-hook  @vindex gnus-mark-article-hook
# Line 4458  instead.  It will leave marks like @code Line 5115  instead.  It will leave marks like @code
5115    
5116  @table @kbd  @table @kbd
5117    
5118  @item @key{SPC}  @item SPACE
5119  @kindex @key{SPC} @r{(Summary)}  @kindex SPACE (Summary)
5120  @findex gnus-summary-next-page  @findex gnus-summary-next-page
5121  Pressing @key{SPC} will scroll the current article forward one page,  Pressing @kbd{SPACE} will scroll the current article forward one page,
5122  or, if you have come to the end of the current article, will choose the  or, if you have come to the end of the current article, will choose the
5123  next article (@code{gnus-summary-next-page}).  next article (@code{gnus-summary-next-page}).
5124    
5125  @item @key{DEL}  @vindex gnus-article-boring-faces
5126  @kindex @key{DEL} @r{(Summary)}  @vindex gnus-article-skip-boring
5127    If @code{gnus-article-skip-boring} is non-@code{nil} and the rest of
5128    the article consists only of citations and signature, then it will be
5129    skipped; the next article will be shown instead.  You can customize
5130    what is considered uninteresting with
5131    @code{gnus-article-boring-faces}.  You can manually view the article's
5132    pages, no matter how boring, using @kbd{C-M-v}.
5133    
5134    @item DEL
5135    @kindex DEL (Summary)
5136  @findex gnus-summary-prev-page  @findex gnus-summary-prev-page
5137  Scroll the current article back one page (@code{gnus-summary-prev-page}).  Scroll the current article back one page (@code{gnus-summary-prev-page}).
5138    
5139  @item @key{RET}  @item RET
5140  @kindex @key{RET} @r{(Summary)}  @kindex RET (Summary)
5141  @findex gnus-summary-scroll-up  @findex gnus-summary-scroll-up
5142  Scroll the current article one line forward  Scroll the current article one line forward
5143  (@code{gnus-summary-scroll-up}).  (@code{gnus-summary-scroll-up}).
5144    
5145  @item M-@key{RET}  @item M-RET
5146  @kindex M-@key{RET} @r{(Summary)}  @kindex M-RET (Summary)
5147  @findex gnus-summary-scroll-down  @findex gnus-summary-scroll-down
5148  Scroll the current article one line backward  Scroll the current article one line backward
5149  (@code{gnus-summary-scroll-down}).  (@code{gnus-summary-scroll-down}).
5150    
5151  @item A g  @item A g
5152  @itemx g  @itemx g
5153  @kindex A g @r{(Summary)}  @kindex A g (Summary)
5154  @kindex g @r{(Summary)}  @kindex g (Summary)
5155  @findex gnus-summary-show-article  @findex gnus-summary-show-article
5156  @vindex gnus-summary-show-article-charset-alist  @vindex gnus-summary-show-article-charset-alist
5157  (Re)fetch the current article (@code{gnus-summary-show-article}).  If  (Re)fetch the current article (@code{gnus-summary-show-article}).  If
# Line 4494  article treatment functions.  This will Line 5160  article treatment functions.  This will
5160  the way it came from the server.  the way it came from the server.
5161    
5162  If given a numerical prefix, you can do semi-manual charset stuff.  If given a numerical prefix, you can do semi-manual charset stuff.
5163  @kbd{C-u 0 g cn-gb-2312 @key{RET}} will decode the message as if it were  @kbd{C-u 0 g cn-gb-2312 RET} will decode the message as if it were
5164  encoded in the @code{cn-gb-2312} charset.  If you have  encoded in the @code{cn-gb-2312} charset.  If you have
5165    
5166  @lisp  @lisp
# Line 4507  then you can say @kbd{C-u 1 g} to get th Line 5173  then you can say @kbd{C-u 1 g} to get th
5173    
5174  @item A <  @item A <
5175  @itemx <  @itemx <
5176  @kindex < @r{(Summary)}  @kindex < (Summary)
5177  @kindex A < @r{(Summary)}  @kindex A < (Summary)
5178  @findex gnus-summary-beginning-of-article  @findex gnus-summary-beginning-of-article
5179  Scroll to the beginning of the article  Scroll to the beginning of the article
5180  (@code{gnus-summary-beginning-of-article}).  (@code{gnus-summary-beginning-of-article}).
5181    
5182  @item A >  @item A >
5183  @itemx >  @itemx >
5184  @kindex > @r{(Summary)}  @kindex > (Summary)
5185  @kindex A > @r{(Summary)}  @kindex A > (Summary)
5186  @findex gnus-summary-end-of-article  @findex gnus-summary-end-of-article
5187  Scroll to the end of the article (@code{gnus-summary-end-of-article}).  Scroll to the end of the article (@code{gnus-summary-end-of-article}).
5188    
5189  @item A s  @item A s
5190  @itemx s  @itemx s
5191  @kindex A s @r{(Summary)}  @kindex A s (Summary)
5192  @kindex s @r{(Summary)}  @kindex s (Summary)
5193  @findex gnus-summary-isearch-article  @findex gnus-summary-isearch-article
5194  Perform an isearch in the article buffer  Perform an isearch in the article buffer
5195  (@code{gnus-summary-isearch-article}).  (@code{gnus-summary-isearch-article}).
5196    
5197  @item h  @item h
5198  @kindex h @r{(Summary)}  @kindex h (Summary)
5199  @findex gnus-summary-select-article-buffer  @findex gnus-summary-select-article-buffer
5200  Select the article buffer (@code{gnus-summary-select-article-buffer}).  Select the article buffer (@code{gnus-summary-select-article-buffer}).
5201    
# Line 4543  Select the article buffer (@code{gnus-su Line 5209  Select the article buffer (@code{gnus-su
5209  * Summary Mail Commands::       Sending mail.  * Summary Mail Commands::       Sending mail.
5210  * Summary Post Commands::       Sending news.  * Summary Post Commands::       Sending news.
5211  * Summary Message Commands::    Other Message-related commands.  * Summary Message Commands::    Other Message-related commands.
5212  * Canceling and Superseding::   ``Whoops, I shouldn't have called him that.''  * Canceling and Superseding::
5213  @end menu  @end menu
5214    
5215    
# Line 4558  Commands for composing a mail message: Line 5224  Commands for composing a mail message:
5224    
5225  @item S r  @item S r
5226  @itemx r  @itemx r
5227  @kindex S r @r{(Summary)}  @kindex S r (Summary)
5228  @kindex r @r{(Summary)}  @kindex r (Summary)
5229  @findex gnus-summary-reply  @findex gnus-summary-reply
5230  @c @icon{gnus-summary-mail-reply}  @c @icon{gnus-summary-mail-reply}
5231  @c @icon{gnus-summary-reply}  @c @icon{gnus-summary-reply}
# Line 4568  Mail a reply to the author of the curren Line 5234  Mail a reply to the author of the curren
5234    
5235  @item S R  @item S R
5236  @itemx R  @itemx R
5237  @kindex R @r{(Summary)}  @kindex R (Summary)
5238  @kindex S R @r{(Summary)}  @kindex S R (Summary)
5239  @findex gnus-summary-reply-with-original  @findex gnus-summary-reply-with-original
5240  @c @icon{gnus-summary-reply-with-original}  @c @icon{gnus-summary-reply-with-original}
5241  Mail a reply to the author of the current article and include the  Mail a reply to the author of the current article and include the
# Line 4577  original message (@code{gnus-summary-rep Line 5243  original message (@code{gnus-summary-rep
5243  command uses the process/prefix convention.  command uses the process/prefix convention.
5244    
5245  @item S w  @item S w
5246  @kindex S w @r{(Summary)}  @kindex S w (Summary)
5247  @findex gnus-summary-wide-reply  @findex gnus-summary-wide-reply
5248  Mail a wide reply to the author of the current article  Mail a wide reply to the author of the current article
5249  (@code{gnus-summary-wide-reply}).  A @dfn{wide reply} is a reply that  (@code{gnus-summary-wide-reply}).  A @dfn{wide reply} is a reply that
5250  goes out to all people listed in the @code{To}, @code{From} (or  goes out to all people listed in the @code{To}, @code{From} (or
5251  @code{Reply-to}) and @code{Cc} headers.  @code{Reply-to}) and @code{Cc} headers.  If @code{Mail-Followup-To} is
5252    present, that's used instead.
5253    
5254  @item S W  @item S W
5255  @kindex S W @r{(Summary)}  @kindex S W (Summary)
5256  @findex gnus-summary-wide-reply-with-original  @findex gnus-summary-wide-reply-with-original
5257  Mail a wide reply to the current article and include the original  Mail a wide reply to the current article and include the original
5258  message (@code{gnus-summary-wide-reply-with-original}).  This command uses  message (@code{gnus-summary-wide-reply-with-original}).  This command uses
5259  the process/prefix convention.  the process/prefix convention.
5260    
5261    @item S v
5262    @kindex S v (Summary)
5263    @findex gnus-summary-very-wide-reply
5264    Mail a very wide reply to the author of the current article
5265    (@code{gnus-summary-wide-reply}).  A @dfn{very wide reply} is a reply
5266    that goes out to all people listed in the @code{To}, @code{From} (or
5267    @code{Reply-to}) and @code{Cc} headers in all the process/prefixed
5268    articles.  This command uses the process/prefix convention.
5269    
5270    @item S V
5271    @kindex S V (Summary)
5272    @findex gnus-summary-very-wide-reply-with-original
5273    Mail a very wide reply to the author of the current article and include the
5274    original message (@code{gnus-summary-very-wide-reply-with-original}).  This
5275    command uses the process/prefix convention.
5276    
5277    @item S B r
5278    @kindex S B r (Summary)
5279    @findex gnus-summary-reply-broken-reply-to
5280    Mail a reply to the author of the current article but ignore the
5281    @code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}).
5282    If you need this because a mailing list incorrectly sets a
5283    @code{Reply-To} header pointing to the list, you probably want to set
5284    the @code{broken-reply-to} group parameter instead, so things will work
5285    correctly.  @xref{Group Parameters}.
5286    
5287    @item S B R
5288    @kindex S B R (Summary)
5289    @findex gnus-summary-reply-broken-reply-to-with-original
5290    Mail a reply to the author of the current article and include the
5291    original message but ignore the @code{Reply-To} field
5292    (@code{gnus-summary-reply-broken-reply-to-with-original}).
5293    
5294  @item S o m  @item S o m
5295  @itemx C-c C-f  @itemx C-c C-f
5296  @kindex S o m @r{(Summary)}  @kindex S o m (Summary)
5297  @kindex C-c C-f @r{(Summary)}  @kindex C-c C-f (Summary)
5298  @findex gnus-summary-mail-forward  @findex gnus-summary-mail-forward
5299  @c @icon{gnus-summary-mail-forward}  @c @icon{gnus-summary-mail-forward}
5300  Forward the current article to some other person  Forward the current article to some other person
# Line 4602  Forward the current article to some othe Line 5302  Forward the current article to some othe
5302  is forwarded according to the value of (@code{message-forward-as-mime})  is forwarded according to the value of (@code{message-forward-as-mime})
5303  and (@code{message-forward-show-mml}); if the prefix is 1, decode the  and (@code{message-forward-show-mml}); if the prefix is 1, decode the
5304  message and forward directly inline; if the prefix is 2, forward message  message and forward directly inline; if the prefix is 2, forward message
5305  as an rfc822 MIME section; if the prefix is 3, decode message and  as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
5306  forward as an rfc822 MIME section; if the prefix is 4, forward message  forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
5307  directly inline; otherwise, the message is forwarded as no prefix given  directly inline; otherwise, the message is forwarded as no prefix given
5308  but use the flipped value of (@code{message-forward-as-mime}).  By  but use the flipped value of (@code{message-forward-as-mime}).  By
5309  default, the message is decoded and forwarded as an rfc822 MIME section.  default, the message is decoded and forwarded as an rfc822 @acronym{MIME}
5310    section.
5311    
5312  @item S m  @item S m
5313  @itemx m  @itemx m
5314  @kindex m @r{(Summary)}  @kindex m (Summary)
5315  @kindex S m @r{(Summary)}  @kindex S m (Summary)
5316  @findex gnus-summary-mail-other-window  @findex gnus-summary-mail-other-window
5317  @c @icon{gnus-summary-mail-originate}  @c @icon{gnus-summary-mail-originate}
5318  Send a mail to some other person  Prepare a mail (@code{gnus-summary-mail-other-window}).  By default, use
5319  (@code{gnus-summary-mail-other-window}).  the posting style of the current group.  If given a prefix, disable that.
5320    If the prefix is 1, prompt for a group name to find the posting style.
5321    
5322    @item S i
5323    @itemx i
5324    @kindex i (Summary)
5325    @kindex S i (Summary)
5326    @findex gnus-summary-news-other-window
5327    Prepare a news (@code{gnus-summary-news-other-window}).  By default,
5328    post to the current group.  If given a prefix, disable that.  If the
5329    prefix is 1, prompt for a group to post to.
5330    
5331    This function actually prepares a news even when using mail groups.
5332    This is useful for ``posting'' messages to mail groups without actually
5333    sending them over the network: they're just saved directly to the group
5334    in question.  The corresponding back end must have a request-post method
5335    for this to work though.
5336    
5337  @item S D b  @item S D b
5338  @kindex S D b @r{(Summary)}  @kindex S D b (Summary)
5339  @findex gnus-summary-resend-bounced-mail  @findex gnus-summary-resend-bounced-mail
5340  @cindex bouncing mail  @cindex bouncing mail
5341  If you have sent a mail, but the mail was bounced back to you for some  If you have sent a mail, but the mail was bounced back to you for some
# Line 4631  that mail and display it for easy perusa Line 5348  that mail and display it for easy perusa
5348  very well fail, though.  very well fail, though.
5349    
5350  @item S D r  @item S D r
5351  @kindex S D r @r{(Summary)}  @kindex S D r (Summary)
5352  @findex gnus-summary-resend-message  @findex gnus-summary-resend-message
5353  Not to be confused with the previous command,  Not to be confused with the previous command,
5354  @code{gnus-summary-resend-message} will prompt you for an address to  @code{gnus-summary-resend-message} will prompt you for an address to
# Line 4646  This command is mainly used if you have Line 5363  This command is mainly used if you have
5363  ship a mail to a different account of yours.  (If you're both  ship a mail to a different account of yours.  (If you're both
5364  @code{root} and @code{postmaster} and get a mail for @code{postmaster}  @code{root} and @code{postmaster} and get a mail for @code{postmaster}
5365  to the @code{root} account, you may want to resend it to  to the @code{root} account, you may want to resend it to
5366  @code{postmaster}.  Ordnung muß sein!  @code{postmaster}.  Ordnung muss sein!
5367    
5368  This command understands the process/prefix convention  This command understands the process/prefix convention
5369  (@pxref{Process/Prefix}).  (@pxref{Process/Prefix}).
5370    
5371  @item S O m  @item S O m
5372  @kindex S O m @r{(Summary)}  @kindex S O m (Summary)
5373  @findex gnus-uu-digest-mail-forward  @findex gnus-uu-digest-mail-forward
5374  Digest the current series (@pxref{Decoding Articles}) and forward the  Digest the current series (@pxref{Decoding Articles}) and forward the
5375  result using mail (@code{gnus-uu-digest-mail-forward}).  This command  result using mail (@code{gnus-uu-digest-mail-forward}).  This command
5376  uses the process/prefix convention (@pxref{Process/Prefix}).  uses the process/prefix convention (@pxref{Process/Prefix}).
5377    
5378  @item S M-c  @item S M-c
5379  @kindex S M-c @r{(Summary)}  @kindex S M-c (Summary)
5380  @findex gnus-summary-mail-crosspost-complaint  @findex gnus-summary-mail-crosspost-complaint
5381  @cindex crossposting  @cindex crossposting
5382  @cindex excessive crossposting  @cindex excessive crossposting
# Line 4675  command understands the process/prefix c Line 5392  command understands the process/prefix c
5392    
5393  @end table  @end table
5394    
5395  Also @pxref{(message)Header Commands} for more information.  Also @xref{Header Commands, ,Header Commands, message, The Message
5396    Manual}, for more information.
5397    
5398    
5399  @node Summary Post Commands  @node Summary Post Commands
# Line 4688  Commands for posting a news article: Line 5406  Commands for posting a news article:
5406  @table @kbd  @table @kbd
5407  @item S p  @item S p
5408  @itemx a  @itemx a
5409  @kindex a @r{(Summary)}  @kindex a (Summary)
5410  @kindex S p @r{(Summary)}  @kindex S p (Summary)
5411  @findex gnus-summary-post-news  @findex gnus-summary-post-news
5412  @c @icon{gnus-summary-post-news}  @c @icon{gnus-summary-post-news}
5413  Post an article to the current group  Prepare for posting an article (@code{gnus-summary-post-news}).  By
5414  (@code{gnus-summary-post-news}).  default, post to the current group.  If given a prefix, disable that.
5415    If the prefix is 1, prompt for another group instead.
5416    
5417  @item S f  @item S f
5418  @itemx f  @itemx f
5419  @kindex f @r{(Summary)}  @kindex f (Summary)
5420  @kindex S f @r{(Summary)}  @kindex S f (Summary)
5421  @findex gnus-summary-followup  @findex gnus-summary-followup
5422  @c @icon{gnus-summary-followup}  @c @icon{gnus-summary-followup}
5423  Post a followup to the current article (@code{gnus-summary-followup}).  Post a followup to the current article (@code{gnus-summary-followup}).
5424    
5425  @item S F  @item S F
5426  @itemx F  @itemx F
5427  @kindex S F @r{(Summary)}  @kindex S F (Summary)
5428  @kindex F @r{(Summary)}  @kindex F (Summary)
5429  @c @icon{gnus-summary-followup-with-original}  @c @icon{gnus-summary-followup-with-original}
5430  @findex gnus-summary-followup-with-original  @findex gnus-summary-followup-with-original
5431  Post a followup to the current article and include the original message  Post a followup to the current article and include the original message
5432  (@code{gnus-summary-followup-with-original}).   This command uses the  (@code{gnus-summary-followup-with-original}).  This command uses the
5433  process/prefix convention.  process/prefix convention.
5434    
5435  @item S n  @item S n
5436  @kindex S n @r{(Summary)}  @kindex S n (Summary)
5437  @findex gnus-summary-followup-to-mail  @findex gnus-summary-followup-to-mail
5438  Post a followup to the current article via news, even if you got the  Post a followup to the current article via news, even if you got the
5439  message through mail (@code{gnus-summary-followup-to-mail}).  message through mail (@code{gnus-summary-followup-to-mail}).
5440    
5441  @item S N  @item S N
5442  @kindex S N @r{(Summary)}  @kindex S N (Summary)
5443  @findex gnus-summary-followup-to-mail-with-original  @findex gnus-summary-followup-to-mail-with-original
5444  Post a followup to the current article via news, even if you got the  Post a followup to the current article via news, even if you got the
5445  message through mail and include the original message  message through mail and include the original message
# Line 4728  message through mail and include the ori Line 5447  message through mail and include the ori
5447  the process/prefix convention.  the process/prefix convention.
5448    
5449  @item S o p  @item S o p
5450  @kindex S o p @r{(Summary)}  @kindex S o p (Summary)
5451  @findex gnus-summary-post-forward  @findex gnus-summary-post-forward
5452  Forward the current article to a newsgroup  Forward the current article to a newsgroup
5453  (@code{gnus-summary-post-forward}).  (@code{gnus-summary-post-forward}).
# Line 4736  Forward the current article to a newsgro Line 5455  Forward the current article to a newsgro
5455  of (@code{message-forward-as-mime}) and  of (@code{message-forward-as-mime}) and
5456  (@code{message-forward-show-mml}); if the prefix is 1, decode the  (@code{message-forward-show-mml}); if the prefix is 1, decode the
5457  message and forward directly inline; if the prefix is 2, forward message  message and forward directly inline; if the prefix is 2, forward message
5458  as an rfc822 MIME section; if the prefix is 3, decode message and  as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
5459  forward as an rfc822 MIME section; if the prefix is 4, forward message  forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
5460  directly inline; otherwise, the message is forwarded as no prefix given  directly inline; otherwise, the message is forwarded as no prefix given
5461  but use the flipped value of (@code{message-forward-as-mime}).  By  but use the flipped value of (@code{message-forward-as-mime}).  By
5462  default, the message is decoded and forwarded as an rfc822 MIME section.  default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section.
5463    
5464  @item S O p  @item S O p
5465  @kindex S O p @r{(Summary)}  @kindex S O p (Summary)
5466  @findex gnus-uu-digest-post-forward  @findex gnus-uu-digest-post-forward
5467  @cindex digests  @cindex digests
5468  @cindex making digests  @cindex making digests
# Line 4752  Digest the current series and forward th Line 5471  Digest the current series and forward th
5471  process/prefix convention.  process/prefix convention.
5472    
5473  @item S u  @item S u
5474  @kindex S u @r{(Summary)}  @kindex S u (Summary)
5475  @findex gnus-uu-post-news  @findex gnus-uu-post-news
5476  @c @icon{gnus-uu-post-news}  @c @icon{gnus-uu-post-news}
5477  Uuencode a file, split it into parts, and post it as a series  Uuencode a file, split it into parts, and post it as a series
5478  (@code{gnus-uu-post-news}).  (@pxref{Uuencoding and Posting}).  (@code{gnus-uu-post-news}).  (@pxref{Uuencoding and Posting}).
5479  @end table  @end table
5480    
5481  Also @pxref{(message)Header Commands} for more information.  Also @xref{Header Commands, ,Header Commands, message, The Message
5482    Manual}, for more information.
5483    
5484    
5485  @node Summary Message Commands  @node Summary Message Commands
# Line 4767  Also @pxref{(message)Header Commands} fo Line 5487  Also @pxref{(message)Header Commands} fo
5487    
5488  @table @kbd  @table @kbd
5489  @item S y  @item S y
5490  @kindex S y @r{(Summary)}  @kindex S y (Summary)
5491  @findex gnus-summary-yank-message  @findex gnus-summary-yank-message
5492  Yank the current article into an already existing Message composition  Yank the current article into an already existing Message composition
5493  buffer (@code{gnus-summary-yank-message}).  This command prompts for  buffer (@code{gnus-summary-yank-message}).  This command prompts for
# Line 4788  really, really wish you hadn't posted th Line 5508  really, really wish you hadn't posted th
5508  Well, you can't cancel mail, but you can cancel posts.  Well, you can't cancel mail, but you can cancel posts.
5509    
5510  @findex gnus-summary-cancel-article  @findex gnus-summary-cancel-article
5511  @kindex C @r{(Summary)}  @kindex C (Summary)
5512  @c @icon{gnus-summary-cancel-article}  @c @icon{gnus-summary-cancel-article}
5513  Find the article you wish to cancel (you can only cancel your own  Find the article you wish to cancel (you can only cancel your own
5514  articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S  articles, so don't try any funny stuff).  Then press @kbd{C} or @kbd{S
# Line 4804  Gnus will use the ``current'' select met Line 5524  Gnus will use the ``current'' select met
5524  want to use the standard posting method, use the @samp{a} symbolic  want to use the standard posting method, use the @samp{a} symbolic
5525  prefix (@pxref{Symbolic Prefixes}).  prefix (@pxref{Symbolic Prefixes}).
5526    
5527    Gnus ensures that only you can cancel your own messages using a
5528    @code{Cancel-Lock} header (@pxref{Canceling News, Canceling News, ,
5529    message, Message Manual}).
5530    
5531  If you discover that you have made some mistakes and want to do some  If you discover that you have made some mistakes and want to do some
5532  corrections, you can post a @dfn{superseding} article that will replace  corrections, you can post a @dfn{superseding} article that will replace
5533  your original article.  your original article.
5534    
5535  @findex gnus-summary-supersede-article  @findex gnus-summary-supersede-article
5536  @kindex S @r{(Summary)}  @kindex S (Summary)
5537  Go to the original article and press @kbd{S s}  Go to the original article and press @kbd{S s}
5538  (@code{gnus-summary-supersede-article}).  You will be put in a buffer  (@code{gnus-summary-supersede-article}).  You will be put in a buffer
5539  where you can edit the article all you want before sending it off the  where you can edit the article all you want before sending it off the
# Line 4832  canceled/superseded. Line 5556  canceled/superseded.
5556    
5557  Just remember, kids: There is no 'c' in 'supersede'.  Just remember, kids: There is no 'c' in 'supersede'.
5558    
5559    @node Delayed Articles
5560    @section Delayed Articles
5561    @cindex delayed sending
5562    @cindex send delayed
5563    
5564    Sometimes, you might wish to delay the sending of a message.  For
5565    example, you might wish to arrange for a message to turn up just in time
5566    to remind your about the birthday of your Significant Other.  For this,
5567    there is the @code{gnus-delay} package.  Setup is simple:
5568    
5569    @lisp
5570    (gnus-delay-initialize)
5571    @end lisp
5572    
5573    @findex gnus-delay-article
5574    Normally, to send a message you use the @kbd{C-c C-c} command from
5575    Message mode.  To delay a message, use @kbd{C-c C-j}
5576    (@code{gnus-delay-article}) instead.  This will ask you for how long the
5577    message should be delayed.  Possible answers are:
5578    
5579    @itemize @bullet
5580    @item
5581    A time span.  Consists of an integer and a letter.  For example,
5582    @code{42d} means to delay for 42 days.  Available letters are @code{m}
5583    (minutes), @code{h} (hours), @code{d} (days), @code{w} (weeks), @code{M}
5584    (months) and @code{Y} (years).
5585    
5586    @item
5587    A specific date.  Looks like @code{YYYY-MM-DD}.  The message will be
5588    delayed until that day, at a specific time (eight o'clock by default).
5589    See also @code{gnus-delay-default-hour}.
5590    
5591    @item
5592    A specific time of day.  Given in @code{hh:mm} format, 24h, no am/pm
5593    stuff.  The deadline will be at that time today, except if that time has
5594    already passed, then it's at the given time tomorrow.  So if it's ten
5595    o'clock in the morning and you specify @code{11:15}, then the deadline
5596    is one hour and fifteen minutes hence.  But if you specify @code{9:20},
5597    that means a time tomorrow.
5598    @end itemize
5599    
5600    The action of the @code{gnus-delay-article} command is influenced by a
5601    couple of variables:
5602    
5603    @table @code
5604    @item gnus-delay-default-hour
5605    @vindex gnus-delay-default-hour
5606    When you specify a specific date, the message will be due on that hour
5607    on the given date.  Possible values are integers 0 through 23.
5608    
5609    @item gnus-delay-default-delay
5610    @vindex gnus-delay-default-delay
5611    This is a string and gives the default delay.  It can be of any of the
5612    formats described above.
5613    
5614    @item gnus-delay-group
5615    @vindex gnus-delay-group
5616    Delayed articles will be kept in this group on the drafts server until
5617    they are due.  You probably don't need to change this.  The default
5618    value is @code{"delayed"}.
5619    
5620    @item gnus-delay-header
5621    @vindex gnus-delay-header
5622    The deadline for each article will be stored in a header.  This variable
5623    is a string and gives the header name.  You probably don't need to
5624    change this.  The default value is @code{"X-Gnus-Delayed"}.
5625    @end table
5626    
5627    The way delaying works is like this: when you use the
5628    @code{gnus-delay-article} command, you give a certain delay.  Gnus
5629    calculates the deadline of the message and stores it in the
5630    @code{X-Gnus-Delayed} header and puts the message in the
5631    @code{nndraft:delayed} group.
5632    
5633    @findex gnus-delay-send-queue
5634    And whenever you get new news, Gnus looks through the group for articles
5635    which are due and sends them.  It uses the @code{gnus-delay-send-queue}
5636    function for this.  By default, this function is added to the hook
5637    @code{gnus-get-new-news-hook}.  But of course, you can change this.
5638    Maybe you want to use the demon to send drafts?  Just tell the demon to
5639    execute the @code{gnus-delay-send-queue} function.
5640    
5641    @table @code
5642    @item gnus-delay-initialize
5643    @findex gnus-delay-initialize
5644    By default, this function installs @code{gnus-delay-send-queue} in
5645    @code{gnus-get-new-news-hook}.  But it accepts the optional second
5646    argument @code{no-check}.  If it is non-@code{nil},
5647    @code{gnus-get-new-news-hook} is not changed.  The optional first
5648    argument is ignored.
5649    
5650    For example, @code{(gnus-delay-initialize nil t)} means to do nothing.
5651    Presumably, you want to use the demon for sending due delayed articles.
5652    Just don't forget to set that up :-)
5653    @end table
5654    
5655    
5656  @node Marking Articles  @node Marking Articles
5657  @section Marking Articles  @section Marking Articles
# Line 4848  neologism ohoy!) of the article.  Alphab Line 5668  neologism ohoy!) of the article.  Alphab
5668  In addition, you also have marks that do not affect readedness.  In addition, you also have marks that do not affect readedness.
5669    
5670  @menu  @menu
5671  * Unread Articles::      Marks for unread articles.  * Unread Articles::             Marks for unread articles.
5672  * Read Articles::        Marks for read articles.  * Read Articles::               Marks for read articles.
5673  * Other Marks::          Marks that do not affect readedness.  * Other Marks::                 Marks that do not affect readedness.
5674  @end menu  @end menu
5675    
5676  @ifinfo  @ifinfo
# Line 4878  Marked as ticked (@code{gnus-ticked-mark Line 5698  Marked as ticked (@code{gnus-ticked-mark
5698  @dfn{Ticked articles} are articles that will remain visible always.  If  @dfn{Ticked articles} are articles that will remain visible always.  If
5699  you see an article that you find interesting, or you want to put off  you see an article that you find interesting, or you want to put off
5700  reading it, or replying to it, until sometime later, you'd typically  reading it, or replying to it, until sometime later, you'd typically
5701  tick it.  However, articles can be expired, so if you want to keep an  tick it.  However, articles can be expired (from news servers by the
5702  article forever, you'll have to make it persistent (@pxref{Persistent  news server software, Gnus itself never expires ticked messages), so if
5703  Articles}).  you want to keep an article forever, you'll have to make it persistent
5704    (@pxref{Persistent Articles}).
5705    
5706  @item ?  @item ?
5707  @vindex gnus-dormant-mark  @vindex gnus-dormant-mark
# Line 4889  Marked as dormant (@code{gnus-dormant-ma Line 5710  Marked as dormant (@code{gnus-dormant-ma
5710  @dfn{Dormant articles} will only appear in the summary buffer if there  @dfn{Dormant articles} will only appear in the summary buffer if there
5711  are followups to it.  If you want to see them even if they don't have  are followups to it.  If you want to see them even if they don't have
5712  followups, you can use the @kbd{/ D} command (@pxref{Limiting}).  followups, you can use the @kbd{/ D} command (@pxref{Limiting}).
5713    Otherwise (except for the visibility issue), they are just like ticked
5714    messages.
5715    
5716  @item @key{SPC}  @item SPACE
5717  @vindex gnus-unread-mark  @vindex gnus-unread-mark
5718  Marked as unread (@code{gnus-unread-mark}).  Marked as unread (@code{gnus-unread-mark}).
5719    
# Line 4952  Threading}. Line 5775  Threading}.
5775  @item M  @item M
5776  @vindex gnus-duplicate-mark  @vindex gnus-duplicate-mark
5777  Article marked as read by duplicate suppression  Article marked as read by duplicate suppression
5778  (@code{gnus-duplicated-mark}).  @xref{Duplicate Suppression}.  (@code{gnus-duplicate-mark}).  @xref{Duplicate Suppression}.
5779    
5780  @end table  @end table
5781    
# Line 4998  answered) will be marked with an @samp{A Line 5821  answered) will be marked with an @samp{A
5821  (@code{gnus-replied-mark}).  (@code{gnus-replied-mark}).
5822    
5823  @item  @item
5824    @vindex gnus-forwarded-mark
5825    All articles that you have forwarded will be marked with an @samp{F} in
5826    the second column (@code{gnus-forwarded-mark}).
5827    
5828    @item
5829  @vindex gnus-cached-mark  @vindex gnus-cached-mark
5830  Articles stored in the article cache will be marked with an @samp{*} in  Articles stored in the article cache will be marked with an @samp{*} in
5831  the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.  the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
# Line 5009  religiously) are marked with an @samp{S} Line 5837  religiously) are marked with an @samp{S}
5837  (@code{gnus-saved-mark}).  (@code{gnus-saved-mark}).
5838    
5839  @item  @item
5840    @vindex gnus-recent-mark
5841    Articles that according to the server haven't been shown to the user
5842    before are marked with a @samp{N} in the second column
5843    (@code{gnus-recent-mark}).  Note that not all servers support this
5844    mark, in which case it simply never appears.  Compare with
5845    @code{gnus-unseen-mark}.
5846    
5847    @item
5848    @vindex gnus-unseen-mark
5849    Articles that haven't been seen before in Gnus by the user are marked
5850    with a @samp{.} in the second column (@code{gnus-unseen-mark}).
5851    Compare with @code{gnus-recent-mark}.
5852    
5853    @item
5854    @vindex gnus-downloaded-mark
5855    When using the Gnus agent (@pxref{Agent Basics}), articles may be
5856    downloaded for unplugged (offline) viewing.  If you are using the
5857    @samp{%O} spec, these articles get the @samp{+} mark in that spec.
5858    (The variable @code{gnus-downloaded-mark} controls which character to
5859    use.)
5860    
5861    @item
5862    @vindex gnus-undownloaded-mark
5863    When using the Gnus agent (@pxref{Agent Basics}), some articles might
5864    not have been downloaded.  Such articles cannot be viewed while you
5865    are unplugged (offline).  If you are using the @samp{%O} spec, these
5866    articles get the @samp{-} mark in that spec.  (The variable
5867    @code{gnus-undownloaded-mark} controls which character to use.)
5868    
5869    @item
5870    @vindex gnus-downloadable-mark
5871    The Gnus agent (@pxref{Agent Basics}) downloads some articles
5872    automatically, but it is also possible to explicitly mark articles for
5873    download, even if they would not be downloaded automatically.  Such
5874    explicitly-marked articles get the @samp{%} mark in the first column.
5875    (The variable @code{gnus-downloadable-mark} controls which character to
5876    use.)
5877    
5878    @item
5879  @vindex gnus-not-empty-thread-mark  @vindex gnus-not-empty-thread-mark
5880  @vindex gnus-empty-thread-mark  @vindex gnus-empty-thread-mark
5881  If the @samp{%e} spec is used, the presence of threads or not will be  If the @samp{%e} spec is used, the presence of threads or not will be
# Line 5043  All the marking commands understand the Line 5910  All the marking commands understand the
5910  @table @kbd  @table @kbd
5911  @item M c  @item M c
5912  @itemx M-u  @itemx M-u
5913  @kindex M c @r{(Summary)}  @kindex M c (Summary)
5914  @kindex M-u @r{(Summary)}  @kindex M-u (Summary)
5915  @findex gnus-summary-clear-mark-forward  @findex gnus-summary-clear-mark-forward
5916  @cindex mark as unread  @cindex mark as unread
5917  Clear all readedness-marks from the current article  Clear all readedness-marks from the current article
# Line 5053  article as unread. Line 5920  article as unread.
5920    
5921  @item M t  @item M t
5922  @itemx !  @itemx !
5923  @kindex ! @r{(Summary)}  @kindex ! (Summary)
5924  @kindex M t @r{(Summary)}  @kindex M t (Summary)
5925  @findex gnus-summary-tick-article-forward  @findex gnus-summary-tick-article-forward
5926  Tick the current article (@code{gnus-summary-tick-article-forward}).  Tick the current article (@code{gnus-summary-tick-article-forward}).
5927  @xref{Article Caching}.  @xref{Article Caching}.
5928    
5929  @item M ?  @item M ?
5930  @itemx ?  @itemx ?
5931  @kindex ? @r{(Summary)}  @kindex ? (Summary)
5932  @kindex M ? @r{(Summary)}  @kindex M ? (Summary)
5933  @findex gnus-summary-mark-as-dormant  @findex gnus-summary-mark-as-dormant
5934  Mark the current article as dormant  Mark the current article as dormant
5935  (@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.  (@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.
5936    
5937  @item M d  @item M d
5938  @itemx d  @itemx d
5939  @kindex M d @r{(Summary)}  @kindex M d (Summary)
5940  @kindex d @r{(Summary)}  @kindex d (Summary)
5941  @findex gnus-summary-mark-as-read-forward  @findex gnus-summary-mark-as-read-forward
5942  Mark the current article as read  Mark the current article as read
5943  (@code{gnus-summary-mark-as-read-forward}).  (@code{gnus-summary-mark-as-read-forward}).
5944    
5945  @item D  @item D
5946  @kindex D @r{(Summary)}  @kindex D (Summary)
5947  @findex gnus-summary-mark-as-read-backward  @findex gnus-summary-mark-as-read-backward
5948  Mark the current article as read and move point to the previous line  Mark the current article as read and move point to the previous line
5949  (@code{gnus-summary-mark-as-read-backward}).  (@code{gnus-summary-mark-as-read-backward}).
5950    
5951  @item M k  @item M k
5952  @itemx k  @itemx k
5953  @kindex k @r{(Summary)}  @kindex k (Summary)
5954  @kindex M k @r{(Summary)}  @kindex M k (Summary)
5955  @findex gnus-summary-kill-same-subject-and-select  @findex gnus-summary-kill-same-subject-and-select
5956  Mark all articles that have the same subject as the current one as read,  Mark all articles that have the same subject as the current one as read,
5957  and then select the next unread article  and then select the next unread article
# Line 5092  and then select the next unread article Line 5959  and then select the next unread article
5959    
5960  @item M K  @item M K
5961  @itemx C-k  @itemx C-k
5962  @kindex M K @r{(Summary)}  @kindex M K (Summary)
5963  @kindex C-k @r{(Summary)}  @kindex C-k (Summary)
5964  @findex gnus-summary-kill-same-subject  @findex gnus-summary-kill-same-subject
5965  Mark all articles that have the same subject as the current one as read  Mark all articles that have the same subject as the current one as read
5966  (@code{gnus-summary-kill-same-subject}).  (@code{gnus-summary-kill-same-subject}).
5967    
5968  @item M C  @item M C
5969  @kindex M C @r{(Summary)}  @kindex M C (Summary)
5970  @findex gnus-summary-catchup  @findex gnus-summary-catchup
5971  @c @icon{gnus-summary-catchup}  @c @icon{gnus-summary-catchup}
5972  Mark all unread articles as read (@code{gnus-summary-catchup}).  Mark all unread articles as read (@code{gnus-summary-catchup}).
5973    
5974  @item M C-c  @item M C-c
5975  @kindex M C-c @r{(Summary)}  @kindex M C-c (Summary)
5976  @findex gnus-summary-catchup-all  @findex gnus-summary-catchup-all
5977  Mark all articles in the group as read---even the ticked and dormant  Mark all articles in the group as read---even the ticked and dormant
5978  articles (@code{gnus-summary-catchup-all}).  articles (@code{gnus-summary-catchup-all}).
5979    
5980  @item M H  @item M H
5981  @kindex M H @r{(Summary)}  @kindex M H (Summary)
5982  @findex gnus-summary-catchup-to-here  @findex gnus-summary-catchup-to-here
5983  Catchup the current group to point  Catchup the current group to point (before the point)
5984  (@code{gnus-summary-catchup-to-here}).  (@code{gnus-summary-catchup-to-here}).
5985    
5986    @item M h
5987    @kindex M h (Summary)
5988    @findex gnus-summary-catchup-from-here
5989    Catchup the current group from point (after the point)
5990    (@code{gnus-summary-catchup-from-here}).
5991    
5992  @item C-w  @item C-w
5993  @kindex C-w @r{(Summary)}  @kindex C-w (Summary)
5994  @findex gnus-summary-mark-region-as-read  @findex gnus-summary-mark-region-as-read
5995  Mark all articles between point and mark as read  Mark all articles between point and mark as read
5996  (@code{gnus-summary-mark-region-as-read}).  (@code{gnus-summary-mark-region-as-read}).
5997    
5998  @item M V k  @item M V k
5999  @kindex M V k @r{(Summary)}  @kindex M V k (Summary)
6000  @findex gnus-summary-kill-below  @findex gnus-summary-kill-below
6001  Kill all articles with scores below the default score (or below the  Kill all articles with scores below the default score (or below the
6002  numeric prefix) (@code{gnus-summary-kill-below}).  numeric prefix) (@code{gnus-summary-kill-below}).
6003    
6004  @item M e  @item M e
6005  @itemx E  @itemx E
6006  @kindex M e @r{(Summary)}  @kindex M e (Summary)
6007  @kindex E @r{(Summary)}  @kindex E (Summary)
6008  @findex gnus-summary-mark-as-expirable  @findex gnus-summary-mark-as-expirable
6009  Mark the current article as expirable  Mark the current article as expirable
6010  (@code{gnus-summary-mark-as-expirable}).  (@code{gnus-summary-mark-as-expirable}).
6011    
6012  @item M b  @item M b
6013  @kindex M b @r{(Summary)}  @kindex M b (Summary)
6014  @findex gnus-summary-set-bookmark  @findex gnus-summary-set-bookmark
6015  Set a bookmark in the current article  Set a bookmark in the current article
6016  (@code{gnus-summary-set-bookmark}).  (@code{gnus-summary-set-bookmark}).
6017    
6018  @item M B  @item M B
6019  @kindex M B @r{(Summary)}  @kindex M B (Summary)
6020  @findex gnus-summary-remove-bookmark  @findex gnus-summary-remove-bookmark
6021  Remove the bookmark from the current article  Remove the bookmark from the current article
6022  (@code{gnus-summary-remove-bookmark}).  (@code{gnus-summary-remove-bookmark}).
6023    
6024  @item M V c  @item M V c
6025  @kindex M V c @r{(Summary)}  @kindex M V c (Summary)
6026  @findex gnus-summary-clear-above  @findex gnus-summary-clear-above
6027  Clear all marks from articles with scores over the default score (or  Clear all marks from articles with scores over the default score (or
6028  over the numeric prefix) (@code{gnus-summary-clear-above}).  over the numeric prefix) (@code{gnus-summary-clear-above}).
6029    
6030  @item M V u  @item M V u
6031  @kindex M V u @r{(Summary)}  @kindex M V u (Summary)
6032  @findex gnus-summary-tick-above  @findex gnus-summary-tick-above
6033  Tick all articles with scores over the default score (or over the  Tick all articles with scores over the default score (or over the
6034  numeric prefix) (@code{gnus-summary-tick-above}).  numeric prefix) (@code{gnus-summary-tick-above}).
6035    
6036  @item M V m  @item M V m
6037  @kindex M V m @r{(Summary)}  @kindex M V m (Summary)
6038  @findex gnus-summary-mark-above  @findex gnus-summary-mark-above
6039  Prompt for a mark, and mark all articles with scores over the default  Prompt for a mark, and mark all articles with scores over the default
6040  score (or over the numeric prefix) with this mark  score (or over the numeric prefix) with this mark
# Line 5174  be taken after setting a mark.  If non-@ Line 6047  be taken after setting a mark.  If non-@
6047  the next/previous unread article.  If @code{nil}, point will just move  the next/previous unread article.  If @code{nil}, point will just move
6048  one line up or down.  As a special case, if this variable is  one line up or down.  As a special case, if this variable is
6049  @code{never}, all the marking commands as well as other commands (like  @code{never}, all the marking commands as well as other commands (like
6050  @key{SPC}) will move to the next article, whether it is unread or not.  @kbd{SPACE}) will move to the next article, whether it is unread or not.
6051  The default is @code{t}.  The default is @code{t}.
6052    
6053    
# Line 5188  even though I haven't heard of anybody w Line 6061  even though I haven't heard of anybody w
6061  previous (unread) article, I'm sure there are people that want that as  previous (unread) article, I'm sure there are people that want that as
6062  well.  well.
6063    
6064  Multiply these five behaviors by five different marking commands, and  Multiply these five behaviors with five different marking commands, and
6065  you get a potentially complex set of variable to control what each  you get a potentially complex set of variable to control what each
6066  command should do.  command should do.
6067    
# Line 5203  altering the summary mode keymap.  For i Line 6076  altering the summary mode keymap.  For i
6076  article, you could say something like:  article, you could say something like:
6077    
6078  @lisp  @lisp
6079    @group
6080  (add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)  (add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
6081  (defun my-alter-summary-map ()  (defun my-alter-summary-map ()
6082    (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))    (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
6083    @end group
6084  @end lisp  @end lisp
6085    
6086    @noindent
6087  or  or
6088    
6089  @lisp  @lisp
# Line 5220  or Line 6096  or
6096  @subsection Setting Process Marks  @subsection Setting Process Marks
6097  @cindex setting process marks  @cindex setting process marks
6098    
6099    Process marks are displayed as @code{#} in the summary buffer, and are
6100    used for marking articles in such a way that other commands will
6101    process these articles.  For instance, if you process mark four
6102    articles and then use the @kbd{*} command, Gnus will enter these four
6103    commands into the cache.  For more information,
6104    @pxref{Process/Prefix}.
6105    
6106  @table @kbd  @table @kbd
6107    
6108  @item M P p  @item M P p
6109  @itemx #  @itemx #
6110  @kindex # @r{(Summary)}  @kindex # (Summary)
6111  @kindex M P p @r{(Summary)}  @kindex M P p (Summary)
6112  @findex gnus-summary-mark-as-processable  @findex gnus-summary-mark-as-processable
6113  Mark the current article with the process mark  Mark the current article with the process mark
6114  (@code{gnus-summary-mark-as-processable}).  (@code{gnus-summary-mark-as-processable}).
# Line 5233  Mark the current article with the proces Line 6116  Mark the current article with the proces
6116    
6117  @item M P u  @item M P u
6118  @itemx M-#  @itemx M-#
6119  @kindex M P u @r{(Summary)}  @kindex M P u (Summary)
6120  @kindex M-# @r{(Summary)}  @kindex M-# (Summary)
6121  Remove the process mark, if any, from the current article  Remove the process mark, if any, from the current article
6122  (@code{gnus-summary-unmark-as-processable}).  (@code{gnus-summary-unmark-as-processable}).
6123    
6124  @item M P U  @item M P U
6125  @kindex M P U @r{(Summary)}  @kindex M P U (Summary)
6126  @findex gnus-summary-unmark-all-processable  @findex gnus-summary-unmark-all-processable
6127  Remove the process mark from all articles  Remove the process mark from all articles
6128  (@code{gnus-summary-unmark-all-processable}).  (@code{gnus-summary-unmark-all-processable}).
6129    
6130  @item M P i  @item M P i
6131  @kindex M P i @r{(Summary)}  @kindex M P i (Summary)
6132  @findex gnus-uu-invert-processable  @findex gnus-uu-invert-processable
6133  Invert the list of process marked articles  Invert the list of process marked articles
6134  (@code{gnus-uu-invert-processable}).  (@code{gnus-uu-invert-processable}).
6135    
6136  @item M P R  @item M P R
6137  @kindex M P R @r{(Summary)}  @kindex M P R (Summary)
6138  @findex gnus-uu-mark-by-regexp  @findex gnus-uu-mark-by-regexp
6139  Mark articles that have a @code{Subject} header that matches a regular  Mark articles that have a @code{Subject} header that matches a regular
6140  expression (@code{gnus-uu-mark-by-regexp}).  expression (@code{gnus-uu-mark-by-regexp}).
6141    
6142  @item M P G  @item M P G
6143  @kindex M P G @r{(Summary)}  @kindex M P G (Summary)
6144  @findex gnus-uu-unmark-by-regexp  @findex gnus-uu-unmark-by-regexp
6145  Unmark articles that have a @code{Subject} header that matches a regular  Unmark articles that have a @code{Subject} header that matches a regular
6146  expression (@code{gnus-uu-unmark-by-regexp}).  expression (@code{gnus-uu-unmark-by-regexp}).
6147    
6148  @item M P r  @item M P r
6149  @kindex M P r @r{(Summary)}  @kindex M P r (Summary)
6150  @findex gnus-uu-mark-region  @findex gnus-uu-mark-region
6151  Mark articles in region (@code{gnus-uu-mark-region}).  Mark articles in region (@code{gnus-uu-mark-region}).
6152    
6153    @item M P g
6154    @kindex M P g (Summary)
6155    @findex gnus-uu-unmark-region
6156    Unmark articles in region (@code{gnus-uu-unmark-region}).
6157    
6158  @item M P t  @item M P t
6159  @kindex M P t @r{(Summary)}  @kindex M P t (Summary)
6160  @findex gnus-uu-mark-thread  @findex gnus-uu-mark-thread
6161  Mark all articles in the current (sub)thread  Mark all articles in the current (sub)thread
6162  (@code{gnus-uu-mark-thread}).  (@code{gnus-uu-mark-thread}).
6163    
6164  @item M P T  @item M P T
6165  @kindex M P T @r{(Summary)}  @kindex M P T (Summary)
6166  @findex gnus-uu-unmark-thread  @findex gnus-uu-unmark-thread
6167  Unmark all articles in the current (sub)thread  Unmark all articles in the current (sub)thread
6168  (@code{gnus-uu-unmark-thread}).  (@code{gnus-uu-unmark-thread}).
6169    
6170  @item M P v  @item M P v
6171  @kindex M P v @r{(Summary)}  @kindex M P v (Summary)
6172  @findex gnus-uu-mark-over  @findex gnus-uu-mark-over
6173  Mark all articles that have a score above the prefix argument  Mark all articles that have a score above the prefix argument
6174  (@code{gnus-uu-mark-over}).  (@code{gnus-uu-mark-over}).
6175    
6176  @item M P s  @item M P s
6177  @kindex M P s @r{(Summary)}  @kindex M P s (Summary)
6178  @findex gnus-uu-mark-series  @findex gnus-uu-mark-series
6179  Mark all articles in the current series (@code{gnus-uu-mark-series}).  Mark all articles in the current series (@code{gnus-uu-mark-series}).
6180    
6181  @item M P S  @item M P S
6182  @kindex M P S @r{(Summary)}  @kindex M P S (Summary)
6183  @findex gnus-uu-mark-sparse  @findex gnus-uu-mark-sparse
6184  Mark all series that have already had some articles marked  Mark all series that have already had some articles marked
6185  (@code{gnus-uu-mark-sparse}).  (@code{gnus-uu-mark-sparse}).
6186    
6187  @item M P a  @item M P a
6188  @kindex M P a @r{(Summary)}  @kindex M P a (Summary)
6189  @findex gnus-uu-mark-all  @findex gnus-uu-mark-all
6190  Mark all articles in series order (@code{gnus-uu-mark-series}).  Mark all articles in series order (@code{gnus-uu-mark-series}).
6191    
6192  @item M P b  @item M P b
6193  @kindex M P b @r{(Summary)}  @kindex M P b (Summary)
6194  @findex gnus-uu-mark-buffer  @findex gnus-uu-mark-buffer
6195  Mark all articles in the buffer in the order they appear  Mark all articles in the buffer in the order they appear
6196  (@code{gnus-uu-mark-buffer}).  (@code{gnus-uu-mark-buffer}).
6197    
6198  @item M P k  @item M P k
6199  @kindex M P k @r{(Summary)}  @kindex M P k (Summary)
6200  @findex gnus-summary-kill-process-mark  @findex gnus-summary-kill-process-mark
6201  Push the current process mark set onto the stack and unmark all articles  Push the current process mark set onto the stack and unmark all articles
6202  (@code{gnus-summary-kill-process-mark}).  (@code{gnus-summary-kill-process-mark}).
6203    
6204  @item M P y  @item M P y
6205  @kindex M P y @r{(Summary)}  @kindex M P y (Summary)
6206  @findex gnus-summary-yank-process-mark  @findex gnus-summary-yank-process-mark
6207  Pop the previous process mark set from the stack and restore it  Pop the previous process mark set from the stack and restore it
6208  (@code{gnus-summary-yank-process-mark}).  (@code{gnus-summary-yank-process-mark}).
6209    
6210  @item M P w  @item M P w
6211  @kindex M P w @r{(Summary)}  @kindex M P w (Summary)
6212  @findex gnus-summary-save-process-mark  @findex gnus-summary-save-process-mark
6213  Push the current process mark set onto the stack  Push the current process mark set onto the stack
6214  (@code{gnus-summary-save-process-mark}).  (@code{gnus-summary-save-process-mark}).
6215    
6216  @end table  @end table
6217    
6218  Also see the @kbd{&} command in @pxref{Searching for Articles} for how to  Also see the @kbd{&} command in @ref{Searching for Articles}, for how to
6219  set process marks based on article body contents.  set process marks based on article body contents.
6220    
6221    
# Line 5348  additional articles. Line 6236  additional articles.
6236    
6237  @item / /  @item / /
6238  @itemx / s  @itemx / s
6239  @kindex / / @r{(Summary)}  @kindex / / (Summary)
6240  @findex gnus-summary-limit-to-subject  @findex gnus-summary-limit-to-subject
6241  Limit the summary buffer to articles that match some subject  Limit the summary buffer to articles that match some subject
6242  (@code{gnus-summary-limit-to-subject}).  (@code{gnus-summary-limit-to-subject}).  If given a prefix, exclude
6243    matching articles.
6244    
6245  @item / a  @item / a
6246  @kindex / a @r{(Summary)}  @kindex / a (Summary)
6247  @findex gnus-summary-limit-to-author  @findex gnus-summary-limit-to-author
6248  Limit the summary buffer to articles that match some author  Limit the summary buffer to articles that match some author
6249  (@code{gnus-summary-limit-to-author}).  (@code{gnus-summary-limit-to-author}).  If given a prefix, exclude
6250    matching articles.
6251    
6252  @item / x  @item / x
6253  @kindex / x @r{(Summary)}  @kindex / x (Summary)
6254  @findex gnus-summary-limit-to-extra  @findex gnus-summary-limit-to-extra
6255  Limit the summary buffer to articles that match one of the ``extra''  Limit the summary buffer to articles that match one of the ``extra''
6256  headers (@pxref{To From Newsgroups})  headers (@pxref{To From Newsgroups})
6257  (@code{gnus-summary-limit-to-extra}).  (@code{gnus-summary-limit-to-extra}).  If given a prefix, exclude
6258    matching articles.
6259    
6260  @item / u  @item / u
6261  @itemx x  @itemx x
6262  @kindex / u @r{(Summary)}  @kindex / u (Summary)
6263  @kindex x @r{(Summary)}  @kindex x (Summary)
6264  @findex gnus-summary-limit-to-unread  @findex gnus-summary-limit-to-unread
6265  Limit the summary buffer to articles not marked as read  Limit the summary buffer to articles not marked as read
6266  (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the  (@code{gnus-summary-limit-to-unread}).  If given a prefix, limit the
# Line 5377  buffer to articles strictly unread.  Thi Line 6268  buffer to articles strictly unread.  Thi
6268  dormant articles will also be excluded.  dormant articles will also be excluded.
6269    
6270  @item / m  @item / m
6271  @kindex / m @r{(Summary)}  @kindex / m (Summary)
6272  @findex gnus-summary-limit-to-marks  @findex gnus-summary-limit-to-marks
6273  Ask for a mark and then limit to all articles that have been marked  Ask for a mark and then limit to all articles that have been marked
6274  with that mark (@code{gnus-summary-limit-to-marks}).  with that mark (@code{gnus-summary-limit-to-marks}).
6275    
6276  @item / t  @item / t
6277  @kindex / t @r{(Summary)}  @kindex / t (Summary)
6278  @findex gnus-summary-limit-to-age  @findex gnus-summary-limit-to-age
6279  Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days  Ask for a number and then limit the summary buffer to articles older than (or equal to) that number of days
6280  (@code{gnus-summary-limit-to-age}).  If given a prefix, limit to  (@code{gnus-summary-limit-to-age}).  If given a prefix, limit to
6281  articles younger than that number of days.  articles younger than that number of days.
6282    
6283  @item / n  @item / n
6284  @kindex / n @r{(Summary)}  @kindex / n (Summary)
6285  @findex gnus-summary-limit-to-articles  @findex gnus-summary-limit-to-articles
6286  Limit the summary buffer to the current article  Limit the summary buffer to the current article
6287  (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix  (@code{gnus-summary-limit-to-articles}).  Uses the process/prefix
6288  convention (@pxref{Process/Prefix}).  convention (@pxref{Process/Prefix}).
6289    
6290  @item / w  @item / w
6291  @kindex / w @r{(Summary)}  @kindex / w (Summary)
6292  @findex gnus-summary-pop-limit  @findex gnus-summary-pop-limit
6293  Pop the previous limit off the stack and restore it  Pop the previous limit off the stack and restore it
6294  (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off  (@code{gnus-summary-pop-limit}).  If given a prefix, pop all limits off
6295  the stack.  the stack.
6296    
6297    @item / .
6298    @kindex / . (Summary)
6299    @findex gnus-summary-limit-to-unseen
6300    Limit the summary buffer to the unseen articles
6301    (@code{gnus-summary-limit-to-unseen}).
6302    
6303  @item / v  @item / v
6304  @kindex / v @r{(Summary)}  @kindex / v (Summary)
6305  @findex gnus-summary-limit-to-score  @findex gnus-summary-limit-to-score
6306  Limit the summary buffer to articles that have a score at or above some  Limit the summary buffer to articles that have a score at or above some
6307  score (@code{gnus-summary-limit-to-score}).  score (@code{gnus-summary-limit-to-score}).
6308    
6309    @item / p
6310    @kindex / p (Summary)
6311    @findex gnus-summary-limit-to-display-predicate
6312    Limit the summary buffer to articles that satisfy the @code{display}
6313    group parameter predicate
6314    (@code{gnus-summary-limit-to-display-predicate}).  @xref{Group
6315    Parameters}, for more on this predicate.
6316    
6317  @item / E  @item / E
6318  @itemx M S  @itemx M S
6319  @kindex M S @r{(Summary)}  @kindex M S (Summary)
6320  @kindex / E @r{(Summary)}  @kindex / E (Summary)
6321  @findex gnus-summary-limit-include-expunged  @findex gnus-summary-limit-include-expunged
6322  Include all expunged articles in the limit  Include all expunged articles in the limit
6323  (@code{gnus-summary-limit-include-expunged}).  (@code{gnus-summary-limit-include-expunged}).
6324    
6325  @item / D  @item / D
6326  @kindex / D @r{(Summary)}  @kindex / D (Summary)
6327  @findex gnus-summary-limit-include-dormant  @findex gnus-summary-limit-include-dormant
6328  Include all dormant articles in the limit  Include all dormant articles in the limit
6329  (@code{gnus-summary-limit-include-dormant}).  (@code{gnus-summary-limit-include-dormant}).
6330    
6331  @item / *  @item / *
6332  @kindex / * @r{(Summary)}  @kindex / * (Summary)
6333  @findex gnus-summary-limit-include-cached  @findex gnus-summary-limit-include-cached
6334  Include all cached articles in the limit  Include all cached articles in the limit
6335  (@code{gnus-summary-limit-include-cached}).  (@code{gnus-summary-limit-include-cached}).
6336    
6337  @item / d  @item / d
6338  @kindex / d @r{(Summary)}  @kindex / d (Summary)
6339  @findex gnus-summary-limit-exclude-dormant  @findex gnus-summary-limit-exclude-dormant
6340  Exclude all dormant articles from the limit  Exclude all dormant articles from the limit
6341  (@code{gnus-summary-limit-exclude-dormant}).  (@code{gnus-summary-limit-exclude-dormant}).
6342    
6343  @item / M  @item / M
6344  @kindex / M @r{(Summary)}  @kindex / M (Summary)
6345  @findex gnus-summary-limit-exclude-marks  @findex gnus-summary-limit-exclude-marks
6346  Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).  Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
6347    
6348  @item / T  @item / T
6349  @kindex / T @r{(Summary)}  @kindex / T (Summary)
6350  @findex gnus-summary-limit-include-thread  @findex gnus-summary-limit-include-thread
6351  Include all the articles in the current thread in the limit.  Include all the articles in the current thread in the limit.
6352    
6353  @item / c  @item / c
6354  @kindex / c @r{(Summary)}  @kindex / c (Summary)
6355  @findex gnus-summary-limit-exclude-childless-dormant  @findex gnus-summary-limit-exclude-childless-dormant
6356  Exclude all dormant articles that have no children from the limit  Exclude all dormant articles that have no children from the limit@*
6357  (@code{gnus-summary-limit-exclude-childless-dormant}).  (@code{gnus-summary-limit-exclude-childless-dormant}).
6358    
6359  @item / C  @item / C
6360  @kindex / C @r{(Summary)}  @kindex / C (Summary)
6361  @findex gnus-summary-limit-mark-excluded-as-read  @findex gnus-summary-limit-mark-excluded-as-read
6362  Mark all excluded unread articles as read  Mark all excluded unread articles as read
6363  (@code{gnus-summary-limit-mark-excluded-as-read}).   If given a prefix,  (@code{gnus-summary-limit-mark-excluded-as-read}).  If given a prefix,
6364  also mark excluded ticked and dormant articles as read.  also mark excluded ticked and dormant articles as read.
6365    
6366    @item / N
6367    @kindex / N (Summary)
6368    @findex gnus-summary-insert-new-articles
6369    Insert all new articles in the summary buffer.  It scans for new emails
6370    if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
6371    
6372    @item / o
6373    @kindex / o (Summary)
6374    @findex gnus-summary-insert-old-articles
6375    Insert all old articles in the summary buffer.  If given a numbered
6376    prefix, fetch this number of articles.
6377    
6378  @end table  @end table
6379    
6380    
# Line 5476  trees, but unfortunately, the @code{Refe Line 6393  trees, but unfortunately, the @code{Refe
6393  or simply missing.  Weird news propagation exacerbates the problem,  or simply missing.  Weird news propagation exacerbates the problem,
6394  so one has to employ other heuristics to get pleasing results.  A  so one has to employ other heuristics to get pleasing results.  A
6395  plethora of approaches exists, as detailed in horrible detail in  plethora of approaches exists, as detailed in horrible detail in
6396  @pxref{Customizing Threading}.  @ref{Customizing Threading}.
6397    
6398  First, a quick overview of the concepts:  First, a quick overview of the concepts:
6399    
# Line 5508  displayed as empty lines in the summary Line 6425  displayed as empty lines in the summary
6425    
6426    
6427  @menu  @menu
6428  * Customizing Threading::     Variables you can change to affect the threading.  * Customizing Threading::       Variables you can change to affect the threading.
6429  * Thread Commands::           Thread based commands in the summary buffer.  * Thread Commands::             Thread based commands in the summary buffer.
6430  @end menu  @end menu
6431    
6432    
# Line 5518  displayed as empty lines in the summary Line 6435  displayed as empty lines in the summary
6435  @cindex customizing threading  @cindex customizing threading
6436    
6437  @menu  @menu
6438  * Loose Threads::        How Gnus gathers loose threads into bigger threads.  * Loose Threads::               How Gnus gathers loose threads into bigger threads.
6439  * Filling In Threads::   Making the threads displayed look fuller.  * Filling In Threads::          Making the threads displayed look fuller.
6440  * More Threading::       Even more variables for fiddling with threads.  * More Threading::              Even more variables for fiddling with threads.
6441  * Low-Level Threading::  You thought it was over... but you were wrong!  * Low-Level Threading::         You thought it was over@dots{} but you were wrong!
6442  @end menu  @end menu
6443    
6444    
# Line 5546  There are four possible values: Line 6463  There are four possible values:
6463  @iftex  @iftex
6464  @iflatex  @iflatex
6465  \gnusfigure{The Summary Buffer}{390}{  \gnusfigure{The Summary Buffer}{390}{
6466  \put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}  \put(0,0){\epsfig{figure=ps/summary-adopt,width=7.5cm}}
6467  \put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}  \put(445,0){\makebox(0,0)[br]{\epsfig{figure=ps/summary-empty,width=7.5cm}}}
6468  \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}  \put(0,400){\makebox(0,0)[tl]{\epsfig{figure=ps/summary-none,width=7.5cm}}}
6469  \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}  \put(445,400){\makebox(0,0)[tr]{\epsfig{figure=ps/summary-dummy,width=7.5cm}}}
6470  }  }
6471  @end iflatex  @end iflatex
6472  @end iftex  @end iftex
# Line 5566  square brackets (@samp{[]}).  This is th Line 6483  square brackets (@samp{[]}).  This is th
6483    
6484  @item dummy  @item dummy
6485  @vindex gnus-summary-dummy-line-format  @vindex gnus-summary-dummy-line-format
6486    @vindex gnus-summary-make-false-root-always
6487  Gnus will create a dummy summary line that will pretend to be the  Gnus will create a dummy summary line that will pretend to be the
6488  parent.  This dummy line does not correspond to any real article, so  parent.  This dummy line does not correspond to any real article, so
6489  selecting it will just select the first real article after the dummy  selecting it will just select the first real article after the dummy
6490  article.  @code{gnus-summary-dummy-line-format} is used to specify the  article.  @code{gnus-summary-dummy-line-format} is used to specify the
6491  format of the dummy roots.  It accepts only one format spec:  @samp{S},  format of the dummy roots.  It accepts only one format spec:  @samp{S},
6492  which is the subject of the article.  @xref{Formatting Variables}.  which is the subject of the article.  @xref{Formatting Variables}.
6493    If you want all threads to have a dummy root, even the non-gathered
6494    ones, set @code{gnus-summary-make-false-root-always} to @code{t}.
6495    
6496  @item empty  @item empty
6497  Gnus won't actually make any article the parent, but simply leave the  Gnus won't actually make any article the parent, but simply leave the
# Line 5661  Simplify fuzzily. Line 6581  Simplify fuzzily.
6581  @item gnus-simplify-whitespace  @item gnus-simplify-whitespace
6582  @findex gnus-simplify-whitespace  @findex gnus-simplify-whitespace
6583  Remove excessive whitespace.  Remove excessive whitespace.
6584    
6585    @item gnus-simplify-all-whitespace
6586    @findex gnus-simplify-all-whitespace
6587    Remove all whitespace.
6588  @end table  @end table
6589    
6590  You may also write your own functions, of course.  You may also write your own functions, of course.
# Line 5715  something like: Line 6639  something like:
6639  @item gnus-fetch-old-headers  @item gnus-fetch-old-headers
6640  @vindex gnus-fetch-old-headers  @vindex gnus-fetch-old-headers
6641  If non-@code{nil}, Gnus will attempt to build old threads by fetching  If non-@code{nil}, Gnus will attempt to build old threads by fetching
6642  more old headers---headers to articles marked as read.  If you  more old headers---headers to articles marked as read.  If you would
6643  would like to display as few summary lines as possible, but still  like to display as few summary lines as possible, but still connect as
6644  connect as many loose threads as possible, you should set this variable  many loose threads as possible, you should set this variable to
6645  to @code{some} or a number.  If you set it to a number, no more than  @code{some} or a number.  If you set it to a number, no more than that
6646  that number of extra old headers will be fetched.  In either case,  number of extra old headers will be fetched.  In either case, fetching
6647  fetching old headers only works if the back end you are using carries  old headers only works if the back end you are using carries overview
6648  overview files---this would normally be @code{nntp}, @code{nnspool} and  files---this would normally be @code{nntp}, @code{nnspool},
6649  @code{nnml}.  Also remember that if the root of the thread has been  @code{nnml}, and @code{nnmaildir}.  Also remember that if the root of
6650  expired by the server, there's not much Gnus can do about that.  the thread has been expired by the server, there's not much Gnus can
6651    do about that.
6652    
6653  This variable can also be set to @code{invisible}.  This won't have any  This variable can also be set to @code{invisible}.  This won't have any
6654  visible effects, but is useful if you use the @kbd{A T} command a lot  visible effects, but is useful if you use the @kbd{A T} command a lot
6655  (@pxref{Finding the Parent}).  (@pxref{Finding the Parent}).
6656    
6657    @item gnus-fetch-old-ephemeral-headers
6658    @vindex gnus-fetch-old-ephemeral-headers
6659    Same as @code{gnus-fetch-old-headers}, but only used for ephemeral
6660    newsgroups.
6661    
6662  @item gnus-build-sparse-threads  @item gnus-build-sparse-threads
6663  @vindex gnus-build-sparse-threads  @vindex gnus-build-sparse-threads
6664  Fetching old headers can be slow.  A low-rent similar effect can be  Fetching old headers can be slow.  A low-rent similar effect can be
# Line 5744  thread or not.  Finally, if this variabl Line 6674  thread or not.  Finally, if this variabl
6674  off sparse leaf nodes that don't lead anywhere.  This variable is  off sparse leaf nodes that don't lead anywhere.  This variable is
6675  @code{nil} by default.  @code{nil} by default.
6676    
6677    @item gnus-read-all-available-headers
6678    @vindex gnus-read-all-available-headers
6679    This is a rather obscure variable that few will find useful.  It's
6680    intended for those non-news newsgroups where the back end has to fetch
6681    quite a lot to present the summary buffer, and where it's impossible to
6682    go back to parents of articles.  This is mostly the case in the
6683    web-based groups, like the @code{nnultimate} groups.
6684    
6685    If you don't use those, then it's safe to leave this as the default
6686    @code{nil}.  If you want to use this variable, it should be a regexp
6687    that matches the group name, or @code{t} for all groups.
6688    
6689  @end table  @end table
6690    
6691    
# Line 5763  slower and more awkward. Line 6705  slower and more awkward.
6705  If non-@code{nil}, all threads will be hidden when the summary buffer is  If non-@code{nil}, all threads will be hidden when the summary buffer is
6706  generated.  generated.
6707    
6708    This can also be a predicate specifier (@pxref{Predicate Specifiers}).
6709    Available predicates are @code{gnus-article-unread-p} and
6710    @code{gnus-article-unseen-p}.
6711    
6712    Here's an example:
6713    
6714    @lisp
6715    (setq gnus-thread-hide-subtree
6716          '(or gnus-article-unread-p
6717               gnus-article-unseen-p))
6718    @end lisp
6719    
6720    (It's a pretty nonsensical example, since all unseen articles are also
6721    unread, but you get my drift.)
6722    
6723    
6724  @item gnus-thread-expunge-below  @item gnus-thread-expunge-below
6725  @vindex gnus-thread-expunge-below  @vindex gnus-thread-expunge-below
6726  All threads that have a total score (as defined by  All threads that have a total score (as defined by
# Line 5778  will be hidden. Line 6736  will be hidden.
6736  @item gnus-thread-ignore-subject  @item gnus-thread-ignore-subject
6737  @vindex gnus-thread-ignore-subject  @vindex gnus-thread-ignore-subject
6738  Sometimes somebody changes the subject in the middle of a thread.  If  Sometimes somebody changes the subject in the middle of a thread.  If
6739  this variable is non-@code{nil}, the subject change is ignored.  If it  this variable is non-@code{nil}, which is the default, the subject
6740  is @code{nil}, which is the default, a change in the subject will result  change is ignored.  If it is @code{nil}, a change in the subject will
6741  in a new thread.  result in a new thread.
6742    
6743  @item gnus-thread-indent-level  @item gnus-thread-indent-level
6744  @vindex gnus-thread-indent-level  @vindex gnus-thread-indent-level
# Line 5844  meaningful.  Here's one example: Line 6802  meaningful.  Here's one example:
6802    
6803  @item T k  @item T k
6804  @itemx C-M-k  @itemx C-M-k
6805  @kindex T k @r{(Summary)}  @kindex T k (Summary)
6806  @kindex C-M-k @r{(Summary)}  @kindex C-M-k (Summary)
6807  @findex gnus-summary-kill-thread  @findex gnus-summary-kill-thread
6808  Mark all articles in the current (sub-)thread as read  Mark all articles in the current (sub-)thread as read
6809  (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,  (@code{gnus-summary-kill-thread}).  If the prefix argument is positive,
# Line 5854  articles instead. Line 6812  articles instead.
6812    
6813  @item T l  @item T l
6814  @itemx C-M-l  @itemx C-M-l
6815  @kindex T l @r{(Summary)}  @kindex T l (Summary)
6816  @kindex C-M-l @r{(Summary)}  @kindex C-M-l (Summary)
6817  @findex gnus-summary-lower-thread  @findex gnus-summary-lower-thread
6818  Lower the score of the current (sub-)thread  Lower the score of the current (sub-)thread
6819  (@code{gnus-summary-lower-thread}).  (@code{gnus-summary-lower-thread}).
6820    
6821  @item T i  @item T i
6822  @kindex T i @r{(Summary)}  @kindex T i (Summary)
6823  @findex gnus-summary-raise-thread  @findex gnus-summary-raise-thread
6824  Increase the score of the current (sub-)thread  Increase the score of the current (sub-)thread
6825  (@code{gnus-summary-raise-thread}).  (@code{gnus-summary-raise-thread}).
6826    
6827  @item T #  @item T #
6828  @kindex T # @r{(Summary)}  @kindex T # (Summary)
6829  @findex gnus-uu-mark-thread  @findex gnus-uu-mark-thread
6830  Set the process mark on the current (sub-)thread  Set the process mark on the current (sub-)thread
6831  (@code{gnus-uu-mark-thread}).  (@code{gnus-uu-mark-thread}).
6832    
6833  @item T M-#  @item T M-#
6834  @kindex T M-# @r{(Summary)}  @kindex T M-# (Summary)
6835  @findex gnus-uu-unmark-thread  @findex gnus-uu-unmark-thread
6836  Remove the process mark from the current (sub-)thread  Remove the process mark from the current (sub-)thread
6837  (@code{gnus-uu-unmark-thread}).  (@code{gnus-uu-unmark-thread}).
6838    
6839  @item T T  @item T T
6840  @kindex T T @r{(Summary)}  @kindex T T (Summary)
6841  @findex gnus-summary-toggle-threads  @findex gnus-summary-toggle-threads
6842  Toggle threading (@code{gnus-summary-toggle-threads}).  Toggle threading (@code{gnus-summary-toggle-threads}).
6843    
6844  @item T s  @item T s
6845  @kindex T s @r{(Summary)}  @kindex T s (Summary)
6846  @findex gnus-summary-show-thread  @findex gnus-summary-show-thread
6847  Expose the (sub-)thread hidden under the current article, if any  Expose the (sub-)thread hidden under the current article, if any@*
6848  (@code{gnus-summary-show-thread}).  (@code{gnus-summary-show-thread}).
6849    
6850  @item T h  @item T h
6851  @kindex T h @r{(Summary)}  @kindex T h (Summary)
6852  @findex gnus-summary-hide-thread  @findex gnus-summary-hide-thread
6853  Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).  Hide the current (sub-)thread (@code{gnus-summary-hide-thread}).
6854    
6855  @item T S  @item T S
6856  @kindex T S @r{(Summary)}  @kindex T S (Summary)
6857  @findex gnus-summary-show-all-threads  @findex gnus-summary-show-all-threads
6858  Expose all hidden threads (@code{gnus-summary-show-all-threads}).  Expose all hidden threads (@code{gnus-summary-show-all-threads}).
6859    
6860  @item T H  @item T H
6861  @kindex T H @r{(Summary)}  @kindex T H (Summary)
6862  @findex gnus-summary-hide-all-threads  @findex gnus-summary-hide-all-threads
6863  Hide all threads (@code{gnus-summary-hide-all-threads}).  Hide all threads (@code{gnus-summary-hide-all-threads}).
6864    
6865  @item T t  @item T t
6866  @kindex T t @r{(Summary)}  @kindex T t (Summary)
6867  @findex gnus-summary-rethread-current  @findex gnus-summary-rethread-current
6868  Re-thread the current article's thread  Re-thread the current article's thread
6869  (@code{gnus-summary-rethread-current}).  This works even when the  (@code{gnus-summary-rethread-current}).  This works even when the
6870  summary buffer is otherwise unthreaded.  summary buffer is otherwise unthreaded.
6871    
6872  @item T ^  @item T ^
6873  @kindex T ^ @r{(Summary)}  @kindex T ^ (Summary)
6874  @findex gnus-summary-reparent-thread  @findex gnus-summary-reparent-thread
6875  Make the current article the child of the marked (or previous) article  Make the current article the child of the marked (or previous) article
6876  (@code{gnus-summary-reparent-thread}).  (@code{gnus-summary-reparent-thread}).
# Line 5925  understand the numeric prefix. Line 6883  understand the numeric prefix.
6883  @table @kbd  @table @kbd
6884    
6885  @item T n  @item T n
6886  @kindex T n @r{(Summary)}  @kindex T n (Summary)
6887  @itemx C-M-n  @itemx C-M-f
6888  @kindex C-M-n @r{(Summary)}  @kindex C-M-n (Summary)
6889  @itemx M-down  @itemx M-down
6890  @kindex M-down @r{(Summary)}  @kindex M-down (Summary)
6891  @findex gnus-summary-next-thread  @findex gnus-summary-next-thread
6892  Go to the next thread (@code{gnus-summary-next-thread}).  Go to the next thread (@code{gnus-summary-next-thread}).
6893    
6894  @item T p  @item T p
6895  @kindex T p @r{(Summary)}  @kindex T p (Summary)
6896  @itemx C-M-p  @itemx C-M-b
6897  @kindex C-M-p @r{(Summary)}  @kindex C-M-p (Summary)
6898  @itemx M-up  @itemx M-up
6899  @kindex M-up @r{(Summary)}  @kindex M-up (Summary)
6900  @findex gnus-summary-prev-thread  @findex gnus-summary-prev-thread
6901  Go to the previous thread (@code{gnus-summary-prev-thread}).  Go to the previous thread (@code{gnus-summary-prev-thread}).
6902    
6903  @item T d  @item T d
6904  @kindex T d @r{(Summary)}  @kindex T d (Summary)
6905  @findex gnus-summary-down-thread  @findex gnus-summary-down-thread
6906  Descend the thread (@code{gnus-summary-down-thread}).  Descend the thread (@code{gnus-summary-down-thread}).
6907    
6908  @item T u  @item T u
6909  @kindex T u @r{(Summary)}  @kindex T u (Summary)
6910  @findex gnus-summary-up-thread  @findex gnus-summary-up-thread
6911  Ascend the thread (@code{gnus-summary-up-thread}).  Ascend the thread (@code{gnus-summary-up-thread}).
6912    
6913  @item T o  @item T o
6914  @kindex T o @r{(Summary)}  @kindex T o (Summary)
6915  @findex gnus-summary-top-thread  @findex gnus-summary-top-thread
6916  Go to the top of the thread (@code{gnus-summary-top-thread}).  Go to the top of the thread (@code{gnus-summary-top-thread}).
6917  @end table  @end table
# Line 5973  that have subjects fuzzily equal will be Line 6931  that have subjects fuzzily equal will be
6931  Matching}).  Matching}).
6932    
6933    
6934  @node Sorting  @node Sorting the Summary Buffer
6935  @section Sorting  @section Sorting the Summary Buffer
6936    
6937  @findex gnus-thread-sort-by-total-score  @findex gnus-thread-sort-by-total-score
6938  @findex gnus-thread-sort-by-date  @findex gnus-thread-sort-by-date
# Line 5982  Matching}). Line 6940  Matching}).
6940  @findex gnus-thread-sort-by-subject  @findex gnus-thread-sort-by-subject
6941  @findex gnus-thread-sort-by-author  @findex gnus-thread-sort-by-author
6942  @findex gnus-thread-sort-by-number  @findex gnus-thread-sort-by-number
6943    @findex gnus-thread-sort-by-random
6944  @vindex gnus-thread-sort-functions  @vindex gnus-thread-sort-functions
6945    @findex gnus-thread-sort-by-most-recent-number
6946    @findex gnus-thread-sort-by-most-recent-date
6947  If you are using a threaded summary display, you can sort the threads by  If you are using a threaded summary display, you can sort the threads by
6948  setting @code{gnus-thread-sort-functions}, which can be either a single  setting @code{gnus-thread-sort-functions}, which can be either a single
6949  function, a list of functions, or a list containing functions and  function, a list of functions, or a list containing functions and
# Line 5991  function, a list of functions, or a list Line 6952  function, a list of functions, or a list
6952  By default, sorting is done on article numbers.  Ready-made sorting  By default, sorting is done on article numbers.  Ready-made sorting
6953  predicate functions include @code{gnus-thread-sort-by-number},  predicate functions include @code{gnus-thread-sort-by-number},
6954  @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},  @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
6955  @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score}, and  @code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
6956    @code{gnus-thread-sort-by-most-recent-number},
6957    @code{gnus-thread-sort-by-most-recent-date},
6958    @code{gnus-thread-sort-by-random} and
6959  @code{gnus-thread-sort-by-total-score}.  @code{gnus-thread-sort-by-total-score}.
6960    
6961  Each function takes two threads and returns non-@code{nil} if the first  Each function takes two threads and returns non-@code{nil} if the first
# Line 6042  tickles your fancy. Line 7006  tickles your fancy.
7006  @findex gnus-article-sort-by-score  @findex gnus-article-sort-by-score
7007  @findex gnus-article-sort-by-subject  @findex gnus-article-sort-by-subject
7008  @findex gnus-article-sort-by-author  @findex gnus-article-sort-by-author
7009    @findex gnus-article-sort-by-random
7010  @findex gnus-article-sort-by-number  @findex gnus-article-sort-by-number
7011  If you are using an unthreaded display for some strange reason or other,  If you are using an unthreaded display for some strange reason or
7012  you have to fiddle with the @code{gnus-article-sort-functions} variable.  other, you have to fiddle with the @code{gnus-article-sort-functions}
7013  It is very similar to the @code{gnus-thread-sort-functions}, except that  variable.  It is very similar to the
7014  it uses slightly different functions for article comparison.  Available  @code{gnus-thread-sort-functions}, except that it uses slightly
7015  sorting predicate functions are @code{gnus-article-sort-by-number},  different functions for article comparison.  Available sorting
7016  @code{gnus-article-sort-by-author}, @code{gnus-article-sort-by-subject},  predicate functions are @code{gnus-article-sort-by-number},
7017  @code{gnus-article-sort-by-date}, and @code{gnus-article-sort-by-score}.  @code{gnus-article-sort-by-author},
7018    @code{gnus-article-sort-by-subject}, @code{gnus-article-sort-by-date},
7019    @code{gnus-article-sort-by-random}, and
7020    @code{gnus-article-sort-by-score}.
7021    
7022  If you want to sort an unthreaded summary display by subject, you could  If you want to sort an unthreaded summary display by subject, you could
7023  say something like:  say something like:
# Line 6068  say something like: Line 7036  say something like:
7036  @cindex article pre-fetch  @cindex article pre-fetch
7037  @cindex pre-fetch  @cindex pre-fetch
7038    
7039  If you read your news from an @sc{nntp} server that's far away, the  If you read your news from an @acronym{NNTP} server that's far away, the
7040  network latencies may make reading articles a chore.  You have to wait  network latencies may make reading articles a chore.  You have to wait
7041  for a while after pressing @kbd{n} to go to the next article before the  for a while after pressing @kbd{n} to go to the next article before the
7042  article appears.  Why can't Gnus just go ahead and fetch the article  article appears.  Why can't Gnus just go ahead and fetch the article
# Line 6089  thing to do, but I don't see any real al Line 7057  thing to do, but I don't see any real al
7057  extra connection takes some time, so Gnus startup will be slower.  extra connection takes some time, so Gnus startup will be slower.
7058    
7059  Gnus will fetch more articles than you will read.  This will mean that  Gnus will fetch more articles than you will read.  This will mean that
7060  the link between your machine and the @sc{nntp} server will become more  the link between your machine and the @acronym{NNTP} server will become more
7061  loaded than if you didn't use article pre-fetch.  The server itself will  loaded than if you didn't use article pre-fetch.  The server itself will
7062  also become more loaded---both with the extra article requests, and the  also become more loaded---both with the extra article requests, and the
7063  extra connection.  extra connection.
7064    
7065  Ok, so now you know that you shouldn't really use this thing...  unless  Ok, so now you know that you shouldn't really use this thing@dots{} unless
7066  you really want to.  you really want to.
7067    
7068  @vindex gnus-asynchronous  @vindex gnus-asynchronous
# Line 6112  pre-fetch all the articles it can withou Line 7080  pre-fetch all the articles it can withou
7080  @vindex gnus-async-prefetch-article-p  @vindex gnus-async-prefetch-article-p
7081  @findex gnus-async-read-p  @findex gnus-async-read-p
7082  There are probably some articles that you don't want to pre-fetch---read  There are probably some articles that you don't want to pre-fetch---read
7083  articles, for instance.  The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched.  This function should  articles, for instance.  The @code{gnus-async-prefetch-article-p}
7084  return non-@code{nil} when the article in question is to be  variable controls whether an article is to be pre-fetched.  This
7085  pre-fetched.  The default is @code{gnus-async-read-p}, which returns  function should return non-@code{nil} when the article in question is
7086  @code{nil} on read articles.  The function is called with an article  to be pre-fetched.  The default is @code{gnus-async-read-p}, which
7087  data structure as the only parameter.  returns @code{nil} on read articles.  The function is called with an
7088    article data structure as the only parameter.
7089    
7090  If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:  If, for instance, you wish to pre-fetch only unread articles shorter
7091    than 100 lines, you could say something like:
7092    
7093  @lisp  @lisp
7094  (defun my-async-short-unread-p (data)  (defun my-async-short-unread-p (data)
# Line 6159  The default value is @code{(read exit)}. Line 7129  The default value is @code{(read exit)}.
7129  @cindex article caching  @cindex article caching
7130  @cindex caching  @cindex caching
7131    
7132  If you have an @emph{extremely} slow @sc{nntp} connection, you may  If you have an @emph{extremely} slow @acronym{NNTP} connection, you may
7133  consider turning article caching on.  Each article will then be stored  consider turning article caching on.  Each article will then be stored
7134  locally under your home directory.  As you may surmise, this could  locally under your home directory.  As you may surmise, this could
7135  potentially use @emph{huge} amounts of disk space, as well as eat up all  potentially use @emph{huge} amounts of disk space, as well as eat up all
# Line 6200  So where does the massive article-fetchi Line 7170  So where does the massive article-fetchi
7170  picture?  The @code{gnus-jog-cache} command will go through all  picture?  The @code{gnus-jog-cache} command will go through all
7171  subscribed newsgroups, request all unread articles, score them, and  subscribed newsgroups, request all unread articles, score them, and
7172  store them in the cache.  You should only ever, ever ever ever, use this  store them in the cache.  You should only ever, ever ever ever, use this
7173  command if 1) your connection to the @sc{nntp} server is really, really,  command if 1) your connection to the @acronym{NNTP} server is really, really,
7174  really slow and 2) you have a really, really, really huge disk.  really slow and 2) you have a really, really, really huge disk.
7175  Seriously.  One way to cut down on the number of articles downloaded is  Seriously.  One way to cut down on the number of articles downloaded is
7176  to score unwanted articles down and have them marked as read.  They will  to score unwanted articles down and have them marked as read.  They will
# Line 6226  The cache stores information on what art Line 7196  The cache stores information on what art
7196  file (@code{gnus-cache-active-file}).  If this file (or any other parts  file (@code{gnus-cache-active-file}).  If this file (or any other parts
7197  of the cache) becomes all messed up for some reason or other, Gnus  of the cache) becomes all messed up for some reason or other, Gnus
7198  offers two functions that will try to set things right.  @kbd{M-x  offers two functions that will try to set things right.  @kbd{M-x
7199  gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}  gnus-cache-generate-nov-databases} will (re)build all the @acronym{NOV}
7200  files, and @kbd{gnus-cache-generate-active} will (re)generate the active  files, and @kbd{gnus-cache-generate-active} will (re)generate the active
7201  file.  file.
7202    
7203    @findex gnus-cache-move-cache
7204    @code{gnus-cache-move-cache} will move your whole
7205    @code{gnus-cache-directory} to some other location.  You get asked to
7206    where, isn't that cool?
7207    
7208  @node Persistent Articles  @node Persistent Articles
7209  @section Persistent Articles  @section Persistent Articles
# Line 6253  you use two explicit commands for managi Line 7227  you use two explicit commands for managi
7227  @table @kbd  @table @kbd
7228    
7229  @item *  @item *
7230  @kindex * @r{(Summary)}  @kindex * (Summary)
7231  @findex gnus-cache-enter-article  @findex gnus-cache-enter-article
7232  Make the current article persistent (@code{gnus-cache-enter-article}).  Make the current article persistent (@code{gnus-cache-enter-article}).
7233    
7234  @item M-*  @item M-*
7235  @kindex M-* @r{(Summary)}  @kindex M-* (Summary)
7236  @findex gnus-cache-remove-article  @findex gnus-cache-remove-article
7237  Remove the current article from the persistent articles  Remove the current article from the persistent articles
7238  (@code{gnus-cache-remove-article}).  This will normally delete the  (@code{gnus-cache-remove-article}).  This will normally delete the
# Line 6298  variable is non-@code{nil} and is not a Line 7272  variable is non-@code{nil} and is not a
7272  bound before exploding and taking your machine down with you.  I put  bound before exploding and taking your machine down with you.  I put
7273  that in there just to keep y'all on your toes.  that in there just to keep y'all on your toes.
7274    
7275  This variable is @code{nil} by default.  The default value is 20.
7276    
7277    
7278  @node Saving Articles  @node Saving Articles
# Line 6311  processing of the article is done before Line 7285  processing of the article is done before
7285  approach (uudecoding, unsharing) you should use @code{gnus-uu}  approach (uudecoding, unsharing) you should use @code{gnus-uu}
7286  (@pxref{Decoding Articles}).  (@pxref{Decoding Articles}).
7287    
7288    For the commands listed here, the target is a file.  If you want to
7289    save to a group, see the @kbd{B c} (@code{gnus-summary-copy-article})
7290    command (@pxref{Mail Group Commands}).
7291    
7292  @vindex gnus-save-all-headers  @vindex gnus-save-all-headers
7293  If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete  If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
7294  unwanted headers before saving the article.  unwanted headers before saving the article.
# Line 6324  deleted before saving. Line 7302  deleted before saving.
7302    
7303  @item O o  @item O o
7304  @itemx o  @itemx o
7305  @kindex O o @r{(Summary)}  @kindex O o (Summary)
7306  @kindex o @r{(Summary)}  @kindex o (Summary)
7307  @findex gnus-summary-save-article  @findex gnus-summary-save-article
7308  @c @icon{gnus-summary-save-article}  @c @icon{gnus-summary-save-article}
7309  Save the current article using the default article saver  Save the current article using the default article saver
7310  (@code{gnus-summary-save-article}).  (@code{gnus-summary-save-article}).
7311    
7312  @item O m  @item O m
7313  @kindex O m @r{(Summary)}  @kindex O m (Summary)
7314  @findex gnus-summary-save-article-mail  @findex gnus-summary-save-article-mail
7315  Save the current article in mail format  Save the current article in mail format
7316  (@code{gnus-summary-save-article-mail}).  (@code{gnus-summary-save-article-mail}).
7317    
7318  @item O r  @item O r
7319  @kindex O r @r{(Summary)}  @kindex O r (Summary)
7320  @findex gnus-summary-save-article-rmail  @findex gnus-summary-save-article-rmail
7321  Save the current article in rmail format  Save the current article in Rmail format
7322  (@code{gnus-summary-save-article-rmail}).  (@code{gnus-summary-save-article-rmail}).
7323    
7324  @item O f  @item O f
7325  @kindex O f @r{(Summary)}  @kindex O f (Summary)
7326  @findex gnus-summary-save-article-file  @findex gnus-summary-save-article-file
7327  @c @icon{gnus-summary-save-article-file}  @c @icon{gnus-summary-save-article-file}
7328  Save the current article in plain file format  Save the current article in plain file format
7329  (@code{gnus-summary-save-article-file}).  (@code{gnus-summary-save-article-file}).
7330    
7331  @item O F  @item O F
7332  @kindex O F @r{(Summary)}  @kindex O F (Summary)
7333  @findex gnus-summary-write-article-file  @findex gnus-summary-write-article-file
7334  Write the current article in plain file format, overwriting any previous  Write the current article in plain file format, overwriting any previous
7335  file contents (@code{gnus-summary-write-article-file}).  file contents (@code{gnus-summary-write-article-file}).
7336    
7337  @item O b  @item O b
7338  @kindex O b @r{(Summary)}  @kindex O b (Summary)
7339  @findex gnus-summary-save-article-body-file  @findex gnus-summary-save-article-body-file
7340  Save the current article body in plain file format  Save the current article body in plain file format
7341  (@code{gnus-summary-save-article-body-file}).  (@code{gnus-summary-save-article-body-file}).
7342    
7343  @item O h  @item O h
7344  @kindex O h @r{(Summary)}  @kindex O h (Summary)
7345  @findex gnus-summary-save-article-folder  @findex gnus-summary-save-article-folder
7346  Save the current article in mh folder format  Save the current article in mh folder format
7347  (@code{gnus-summary-save-article-folder}).  (@code{gnus-summary-save-article-folder}).
7348    
7349  @item O v  @item O v
7350  @kindex O v @r{(Summary)}  @kindex O v (Summary)
7351  @findex gnus-summary-save-article-vm  @findex gnus-summary-save-article-vm
7352  Save the current article in a VM folder  Save the current article in a VM folder
7353  (@code{gnus-summary-save-article-vm}).  (@code{gnus-summary-save-article-vm}).
7354    
7355  @item O p  @item O p
7356  @kindex O p @r{(Summary)}  @itemx |
7357    @kindex O p (Summary)
7358    @kindex | (Summary)
7359  @findex gnus-summary-pipe-output  @findex gnus-summary-pipe-output
7360  Save the current article in a pipe.  Uhm, like, what I mean is---Pipe  Save the current article in a pipe.  Uhm, like, what I mean is---Pipe
7361  the current article to a process (@code{gnus-summary-pipe-output}).  the current article to a process (@code{gnus-summary-pipe-output}).
7362    If given a symbolic prefix (@pxref{Symbolic Prefixes}), include the
7363    complete headers in the piped output.
7364    
7365    @item O P
7366    @kindex O P (Summary)
7367    @findex gnus-summary-muttprint
7368    @vindex gnus-summary-muttprint-program
7369    Save the current article into muttprint.  That is, print it using the
7370    external program @uref{http://muttprint.sourceforge.net/,
7371    Muttprint}.  The program name and options to use is controlled by the
7372    variable @code{gnus-summary-muttprint-program}.
7373    (@code{gnus-summary-muttprint}).
7374    
7375  @end table  @end table
7376    
7377  @vindex gnus-prompt-before-saving  @vindex gnus-prompt-before-saving
# Line 6407  functions below, or you can create your Line 7400  functions below, or you can create your
7400  @findex gnus-summary-save-in-rmail  @findex gnus-summary-save-in-rmail
7401  @vindex gnus-rmail-save-name  @vindex gnus-rmail-save-name
7402  @findex gnus-plain-save-name  @findex gnus-plain-save-name
7403  This is the default format, @dfn{babyl}.  Uses the function in the  This is the default format, @dfn{Babyl}.  Uses the function in the
7404  @code{gnus-rmail-save-name} variable to get a file name to save the  @code{gnus-rmail-save-name} variable to get a file name to save the
7405  article in.  The default is @code{gnus-plain-save-name}.  article in.  The default is @code{gnus-plain-save-name}.
7406    
# Line 6426  Append the article straight to an ordina Line 7419  Append the article straight to an ordina
7419  the @code{gnus-file-save-name} variable to get a file name to save the  the @code{gnus-file-save-name} variable to get a file name to save the
7420  article in.  The default is @code{gnus-numeric-save-name}.  article in.  The default is @code{gnus-numeric-save-name}.
7421    
7422    @item gnus-summary-write-to-file
7423    @findex gnus-summary-write-to-file
7424    Write the article straight to an ordinary file.  The file is
7425    overwritten if it exists.  Uses the function in the
7426    @code{gnus-file-save-name} variable to get a file name to save the
7427    article in.  The default is @code{gnus-numeric-save-name}.
7428    
7429  @item gnus-summary-save-body-in-file  @item gnus-summary-save-body-in-file
7430  @findex gnus-summary-save-body-in-file  @findex gnus-summary-save-body-in-file
7431  Append the article body to an ordinary file.  Uses the function in the  Append the article body to an ordinary file.  Uses the function in the
# Line 6454  reader to use this setting. Line 7454  reader to use this setting.
7454  @vindex gnus-article-save-directory  @vindex gnus-article-save-directory
7455  All of these functions, except for the last one, will save the article  All of these functions, except for the last one, will save the article
7456  in the @code{gnus-article-save-directory}, which is initialized from the  in the @code{gnus-article-save-directory}, which is initialized from the
7457  @code{SAVEDIR} environment variable.  This is @file{~/News/} by  @env{SAVEDIR} environment variable.  This is @file{~/News/} by
7458  default.  default.
7459    
7460  As you can see above, the functions use different functions to find a  As you can see above, the functions use different functions to find a
# Line 6478  File names like @file{~/News/Alt.andrea- Line 7478  File names like @file{~/News/Alt.andrea-
7478  @item gnus-plain-save-name  @item gnus-plain-save-name
7479  @findex gnus-plain-save-name  @findex gnus-plain-save-name
7480  File names like @file{~/News/alt.andrea-dworkin}.  File names like @file{~/News/alt.andrea-dworkin}.
7481    
7482    @item gnus-sender-save-name
7483    @findex gnus-sender-save-name
7484    File names like @file{~/News/larsi}.
7485  @end table  @end table
7486    
7487  @vindex gnus-split-methods  @vindex gnus-split-methods
7488  You can have Gnus suggest where to save articles by plonking a regexp into  You can have Gnus suggest where to save articles by plonking a regexp into
7489  the @code{gnus-split-methods} alist.  For instance, if you would like to  the @code{gnus-split-methods} alist.  For instance, if you would like to
7490  save articles related to Gnus in the file @file{gnus-stuff}, and articles  save articles related to Gnus in the file @file{gnus-stuff}, and articles
7491  related to VM in @code{vm-stuff}, you could set this variable to something  related to VM in @file{vm-stuff}, you could set this variable to something
7492  like:  like:
7493    
7494  @lisp  @lisp
# Line 6553  If you'd like to save articles in a hier Line 7557  If you'd like to save articles in a hier
7557  a spool, you could  a spool, you could
7558    
7559  @lisp  @lisp
7560  (setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy  (setq gnus-use-long-file-name '(not-save)) ; @r{to get a hierarchy}
7561  (setq gnus-default-article-saver  (setq gnus-default-article-saver
7562        'gnus-summary-save-in-file) ; no encoding        'gnus-summary-save-in-file)          ; @r{no encoding}
7563  @end lisp  @end lisp
7564    
7565  Then just save with @kbd{o}.  You'd then read this hierarchy with  Then just save with @kbd{o}.  You'd then read this hierarchy with
# Line 6572  Sometime users post articles (or series Line 7576  Sometime users post articles (or series
7576  encoded in some way or other.  Gnus can decode them for you.  encoded in some way or other.  Gnus can decode them for you.
7577    
7578  @menu  @menu
7579  * Uuencoded Articles::    Uudecode articles.  * Uuencoded Articles::          Uudecode articles.
7580  * Shell Archives::        Unshar articles.  * Shell Archives::              Unshar articles.
7581  * PostScript Files::      Split PostScript.  * PostScript Files::            Split PostScript.
7582  * Other Files::           Plain save and binhex.  * Other Files::                 Plain save and binhex.
7583  * Decoding Variables::    Variables for a happy decoding.  * Decoding Variables::          Variables for a happy decoding.
7584  * Viewing Files::         You want to look at the result of the decoding?  * Viewing Files::               You want to look at the result of the decoding?
7585  @end menu  @end menu
7586    
7587  @cindex series  @cindex series
# Line 6609  commands, and you have to mark the artic Line 7613  commands, and you have to mark the artic
7613  @table @kbd  @table @kbd
7614    
7615  @item X u  @item X u
7616  @kindex X u @r{(Summary)}  @kindex X u (Summary)
7617  @findex gnus-uu-decode-uu  @findex gnus-uu-decode-uu
7618  @c @icon{gnus-uu-decode-uu}  @c @icon{gnus-uu-decode-uu}
7619  Uudecodes the current series (@code{gnus-uu-decode-uu}).  Uudecodes the current series (@code{gnus-uu-decode-uu}).
7620    
7621  @item X U  @item X U
7622  @kindex X U @r{(Summary)}  @kindex X U (Summary)
7623  @findex gnus-uu-decode-uu-and-save  @findex gnus-uu-decode-uu-and-save
7624  Uudecodes and saves the current series  Uudecodes and saves the current series
7625  (@code{gnus-uu-decode-uu-and-save}).  (@code{gnus-uu-decode-uu-and-save}).
7626    
7627  @item X v u  @item X v u
7628  @kindex X v u @r{(Summary)}  @kindex X v u (Summary)
7629  @findex gnus-uu-decode-uu-view  @findex gnus-uu-decode-uu-view
7630  Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).  Uudecodes and views the current series (@code{gnus-uu-decode-uu-view}).
7631    
7632  @item X v U  @item X v U
7633  @kindex X v U @r{(Summary)}  @kindex X v U (Summary)
7634  @findex gnus-uu-decode-uu-and-save-view  @findex gnus-uu-decode-uu-and-save-view
7635  Uudecodes, views and saves the current series  Uudecodes, views and saves the current series
7636  (@code{gnus-uu-decode-uu-and-save-view}).  (@code{gnus-uu-decode-uu-and-save-view}).
# Line 6667  some commands to deal with these: Line 7671  some commands to deal with these:
7671  @table @kbd  @table @kbd
7672    
7673  @item X s  @item X s
7674  @kindex X s @r{(Summary)}  @kindex X s (Summary)
7675  @findex gnus-uu-decode-unshar  @findex gnus-uu-decode-unshar
7676  Unshars the current series (@code{gnus-uu-decode-unshar}).  Unshars the current series (@code{gnus-uu-decode-unshar}).
7677    
7678  @item X S  @item X S
7679  @kindex X S @r{(Summary)}  @kindex X S (Summary)
7680  @findex gnus-uu-decode-unshar-and-save  @findex gnus-uu-decode-unshar-and-save
7681  Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).  Unshars and saves the current series (@code{gnus-uu-decode-unshar-and-save}).
7682    
7683  @item X v s  @item X v s
7684  @kindex X v s @r{(Summary)}  @kindex X v s (Summary)
7685  @findex gnus-uu-decode-unshar-view  @findex gnus-uu-decode-unshar-view
7686  Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).  Unshars and views the current series (@code{gnus-uu-decode-unshar-view}).
7687    
7688  @item X v S  @item X v S
7689  @kindex X v S @r{(Summary)}  @kindex X v S (Summary)
7690  @findex gnus-uu-decode-unshar-and-save-view  @findex gnus-uu-decode-unshar-and-save-view
7691  Unshars, views and saves the current series  Unshars, views and saves the current series
7692  (@code{gnus-uu-decode-unshar-and-save-view}).  (@code{gnus-uu-decode-unshar-and-save-view}).
# Line 6696  Unshars, views and saves the current ser Line 7700  Unshars, views and saves the current ser
7700  @table @kbd  @table @kbd
7701    
7702  @item X p  @item X p
7703  @kindex X p @r{(Summary)}  @kindex X p (Summary)
7704  @findex gnus-uu-decode-postscript  @findex gnus-uu-decode-postscript
7705  Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).  Unpack the current PostScript series (@code{gnus-uu-decode-postscript}).
7706    
7707  @item X P  @item X P
7708  @kindex X P @r{(Summary)}  @kindex X P (Summary)
7709  @findex gnus-uu-decode-postscript-and-save  @findex gnus-uu-decode-postscript-and-save
7710  Unpack and save the current PostScript series  Unpack and save the current PostScript series
7711  (@code{gnus-uu-decode-postscript-and-save}).  (@code{gnus-uu-decode-postscript-and-save}).
7712    
7713  @item X v p  @item X v p
7714  @kindex X v p @r{(Summary)}  @kindex X v p (Summary)
7715  @findex gnus-uu-decode-postscript-view  @findex gnus-uu-decode-postscript-view
7716  View the current PostScript series  View the current PostScript series
7717  (@code{gnus-uu-decode-postscript-view}).  (@code{gnus-uu-decode-postscript-view}).
7718    
7719  @item X v P  @item X v P
7720  @kindex X v P @r{(Summary)}  @kindex X v P (Summary)
7721  @findex gnus-uu-decode-postscript-and-save-view  @findex gnus-uu-decode-postscript-and-save-view
7722  View and save the current PostScript series  View and save the current PostScript series
7723  (@code{gnus-uu-decode-postscript-and-save-view}).  (@code{gnus-uu-decode-postscript-and-save-view}).
# Line 6725  View and save the current PostScript ser Line 7729  View and save the current PostScript ser
7729    
7730  @table @kbd  @table @kbd
7731  @item X o  @item X o
7732  @kindex X o @r{(Summary)}  @kindex X o (Summary)
7733  @findex gnus-uu-decode-save  @findex gnus-uu-decode-save
7734  Save the current series  Save the current series
7735  (@code{gnus-uu-decode-save}).  (@code{gnus-uu-decode-save}).
7736    
7737  @item X b  @item X b
7738  @kindex X b @r{(Summary)}  @kindex X b (Summary)
7739  @findex gnus-uu-decode-binhex  @findex gnus-uu-decode-binhex
7740  Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This  Unbinhex the current series (@code{gnus-uu-decode-binhex}).  This
7741  doesn't really work yet.  doesn't really work yet.
# Line 6744  doesn't really work yet. Line 7748  doesn't really work yet.
7748  Adjective, not verb.  Adjective, not verb.
7749    
7750  @menu  @menu
7751  * Rule Variables::          Variables that say how a file is to be viewed.  * Rule Variables::              Variables that say how a file is to be viewed.
7752  * Other Decode Variables::  Other decode variables.  * Other Decode Variables::      Other decode variables.
7753  * Uuencoding and Posting::  Variables for customizing uuencoding.  * Uuencoding and Posting::      Variables for customizing uuencoding.
7754  @end menu  @end menu
7755    
7756    
# Line 6769  variables are of the form Line 7773  variables are of the form
7773  @vindex gnus-uu-user-view-rules  @vindex gnus-uu-user-view-rules
7774  @cindex sox  @cindex sox
7775  This variable is consulted first when viewing files.  If you wish to use,  This variable is consulted first when viewing files.  If you wish to use,
7776  for instance, @code{sox} to convert an @samp{.au} sound file, you could  for instance, @code{sox} to convert an @file{.au} sound file, you could
7777  say something like:  say something like:
7778  @lisp  @lisp
7779  (setq gnus-uu-user-view-rules  (setq gnus-uu-user-view-rules
# Line 6824  Files with name matching this regular ex Line 7828  Files with name matching this regular ex
7828    
7829  @item gnus-uu-ignore-files-by-type  @item gnus-uu-ignore-files-by-type
7830  @vindex gnus-uu-ignore-files-by-type  @vindex gnus-uu-ignore-files-by-type
7831  Files with a @sc{mime} type matching this variable won't be viewed.  Files with a @acronym{MIME} type matching this variable won't be viewed.
7832  Note that Gnus tries to guess what type the file is based on the name.  Note that Gnus tries to guess what type the file is based on the name.
7833  @code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly  @code{gnus-uu} is not a @acronym{MIME} package (yet), so this is slightly
7834  kludgey.  kludgey.
7835    
7836  @item gnus-uu-tmp-dir  @item gnus-uu-tmp-dir
# Line 6876  Hook run before sending a message to @co Line 7880  Hook run before sending a message to @co
7880  @vindex gnus-uu-view-with-metamail  @vindex gnus-uu-view-with-metamail
7881  @cindex metamail  @cindex metamail
7882  Non-@code{nil} means that @code{gnus-uu} will ignore the viewing  Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
7883  commands defined by the rule variables and just fudge a @sc{mime}  commands defined by the rule variables and just fudge a @acronym{MIME}
7884  content type based on the file name.  The result will be fed to  content type based on the file name.  The result will be fed to
7885  @code{metamail} for viewing.  @code{metamail} for viewing.
7886    
# Line 6915  Non-@code{nil} means that @code{gnus-uu} Line 7919  Non-@code{nil} means that @code{gnus-uu}
7919  thread.  This may not be smart, as no other decoder I have seen is able  thread.  This may not be smart, as no other decoder I have seen is able
7920  to follow threads when collecting uuencoded articles.  (Well, I have  to follow threads when collecting uuencoded articles.  (Well, I have
7921  seen one package that does that---@code{gnus-uu}, but somehow, I don't  seen one package that does that---@code{gnus-uu}, but somehow, I don't
7922  think that counts...) Default is @code{nil}.  think that counts@dots{}) Default is @code{nil}.
7923    
7924  @item gnus-uu-post-separate-description  @item gnus-uu-post-separate-description
7925  @vindex gnus-uu-post-separate-description  @vindex gnus-uu-post-separate-description
# Line 6981  writing, so there are tons of functions Line 7985  writing, so there are tons of functions
7985  these articles easier.  these articles easier.
7986    
7987  @menu  @menu
7988  * Article Highlighting::    You want to make the article look like fruit salad.  * Article Highlighting::        You want to make the article look like fruit salad.
7989  * Article Fontisizing::     Making emphasized text look nice.  * Article Fontisizing::         Making emphasized text look nice.
7990  * Article Hiding::          You also want to make certain info go away.  * Article Hiding::              You also want to make certain info go away.
7991  * Article Washing::         Lots of way-neat functions to make life better.  * Article Washing::             Lots of way-neat functions to make life better.
7992  * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.  * Article Header::              Doing various header transformations.
7993  * Article Date::            Grumble, UT!  * Article Buttons::             Click on URLs, Message-IDs, addresses and the like.
7994  * Article Signature::       What is a signature?  * Article Button Levels::       Controlling appearance of buttons.
7995  * Article Miscellanea::     Various other stuff.  * Article Date::                Grumble, UT!
7996    * Article Display::             Display various stuff---X-Face, Picons, Smileys
7997    * Article Signature::           What is a signature?
7998    * Article Miscellanea::         Various other stuff.
7999  @end menu  @end menu
8000    
8001    
# Line 7002  you want it to look like technicolor fru Line 8009  you want it to look like technicolor fru
8009  @table @kbd  @table @kbd
8010    
8011  @item W H a  @item W H a
8012  @kindex W H a @r{(Summary)}  @kindex W H a (Summary)
8013  @findex gnus-article-highlight  @findex gnus-article-highlight
8014  @findex gnus-article-maybe-highlight  @findex gnus-article-maybe-highlight
8015  Do much highlighting of the current article  Do much highlighting of the current article
# Line 7010  Do much highlighting of the current arti Line 8017  Do much highlighting of the current arti
8017  text, the signature, and adds buttons to the body and the head.  text, the signature, and adds buttons to the body and the head.
8018    
8019  @item W H h  @item W H h
8020  @kindex W H h @r{(Summary)}  @kindex W H h (Summary)
8021  @findex gnus-article-highlight-headers  @findex gnus-article-highlight-headers
8022  @vindex gnus-header-face-alist  @vindex gnus-header-face-alist
8023  Highlight the headers (@code{gnus-article-highlight-headers}).  The  Highlight the headers (@code{gnus-article-highlight-headers}).  The
# Line 7024  the header value.  The first match made Line 8031  the header value.  The first match made
8031  @var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.  @var{regexp} shouldn't have @samp{^} prepended---Gnus will add one.
8032    
8033  @item W H c  @item W H c
8034  @kindex W H c @r{(Summary)}  @kindex W H c (Summary)
8035  @findex gnus-article-highlight-citation  @findex gnus-article-highlight-citation
8036  Highlight cited text (@code{gnus-article-highlight-citation}).  Highlight cited text (@code{gnus-article-highlight-citation}).
8037    
# Line 7037  Some variables to customize the citation Line 8044  Some variables to customize the citation
8044  If the article size if bigger than this variable (which is 25000 by  If the article size if bigger than this variable (which is 25000 by
8045  default), no citation highlighting will be performed.  default), no citation highlighting will be performed.
8046    
 @item gnus-cite-prefix-regexp  
 @vindex gnus-cite-prefix-regexp  
 Regexp matching the longest possible citation prefix on a line.  
   
8047  @item gnus-cite-max-prefix  @item gnus-cite-max-prefix
8048  @vindex gnus-cite-max-prefix  @vindex gnus-cite-max-prefix
8049  Maximum possible length for a citation prefix (default 20).  Maximum possible length for a citation prefix (default 20).
# Line 7078  Regexp matching the end of an attributio Line 8081  Regexp matching the end of an attributio
8081  Face used for attribution lines.  It is merged with the face for the  Face used for attribution lines.  It is merged with the face for the
8082  cited text belonging to the attribution.  cited text belonging to the attribution.
8083    
8084    @item gnus-cite-ignore-quoted-from
8085    @vindex gnus-cite-ignore-quoted-from
8086    If non-@code{nil}, no citation highlighting will be performed on lines
8087    beginning with @samp{>From }.  Those lines may have been quoted by MTAs
8088    in order not to mix up with the envelope From line.  The default value
8089    is @code{t}.
8090    
8091  @end table  @end table
8092    
8093    
8094  @item W H s  @item W H s
8095  @kindex W H s @r{(Summary)}  @kindex W H s (Summary)
8096  @vindex gnus-signature-separator  @vindex gnus-signature-separator
8097  @vindex gnus-signature-face  @vindex gnus-signature-face
8098  @findex gnus-article-highlight-signature  @findex gnus-article-highlight-signature
# Line 7103  default. Line 8113  default.
8113  @cindex article emphasis  @cindex article emphasis
8114    
8115  @findex gnus-article-emphasize  @findex gnus-article-emphasize
8116  @kindex W e @r{(Summary)}  @kindex W e (Summary)
8117  People commonly add emphasis to words in news articles by writing things  People commonly add emphasis to words in news articles by writing things
8118  like @samp{_this_} or @samp{*this*} or @samp{/this/}.  Gnus can make  like @samp{_this_} or @samp{*this*} or @samp{/this/}.  Gnus can make
8119  this look nicer by running the article through the @kbd{W e}  this look nicer by running the article through the @kbd{W e}
# Line 7120  groupings will be hidden.)  The fourth i Line 8130  groupings will be hidden.)  The fourth i
8130  highlighting.  highlighting.
8131    
8132  @lisp  @lisp
8133  (setq gnus-article-emphasis  (setq gnus-emphasis-alist
8134        '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)        '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
8135          ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))          ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
8136  @end lisp  @end lisp
# Line 7174  too much cruft in most articles. Line 8184  too much cruft in most articles.
8184  @table @kbd  @table @kbd
8185    
8186  @item W W a  @item W W a
8187  @kindex W W a @r{(Summary)}  @kindex W W a (Summary)
8188  @findex gnus-article-hide  @findex gnus-article-hide
8189  Do quite a lot of hiding on the article buffer  Do quite a lot of hiding on the article buffer
8190  (@kbd{gnus-article-hide}).  In particular, this function will hide  (@kbd{gnus-article-hide}).  In particular, this function will hide
8191  headers, PGP, cited text and the signature.  headers, @acronym{PGP}, cited text and the signature.
8192    
8193  @item W W h  @item W W h
8194  @kindex W W h @r{(Summary)}  @kindex W W h (Summary)
8195  @findex gnus-article-hide-headers  @findex gnus-article-hide-headers
8196  Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding  Hide headers (@code{gnus-article-hide-headers}).  @xref{Hiding
8197  Headers}.  Headers}.
8198    
8199  @item W W b  @item W W b
8200  @kindex W W b @r{(Summary)}  @kindex W W b (Summary)
8201  @findex gnus-article-hide-boring-headers  @findex gnus-article-hide-boring-headers
8202  Hide headers that aren't particularly interesting  Hide headers that aren't particularly interesting
8203  (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.  (@code{gnus-article-hide-boring-headers}).  @xref{Hiding Headers}.
8204    
8205  @item W W s  @item W W s
8206  @kindex W W s @r{(Summary)}  @kindex W W s (Summary)
8207  @findex gnus-article-hide-signature  @findex gnus-article-hide-signature
8208  Hide signature (@code{gnus-article-hide-signature}).  @xref{Article  Hide signature (@code{gnus-article-hide-signature}).  @xref{Article
8209  Signature}.  Signature}.
8210    
8211  @item W W l  @item W W l
8212  @kindex W W l @r{(Summary)}  @kindex W W l (Summary)
8213  @findex gnus-article-hide-list-identifiers  @findex gnus-article-hide-list-identifiers
8214  @vindex gnus-list-identifiers  @vindex gnus-list-identifiers
8215  Strip list identifiers specified in @code{gnus-list-identifiers}.  These  Strip list identifiers specified in @code{gnus-list-identifiers}.  These
8216  are strings some mailing list servers add to the beginning of all  are strings some mailing list servers add to the beginning of all
8217  @code{Subject} headers---for example, @samp{[zebra 4711]}.  Any leading  @code{Subject} headers---for example, @samp{[zebra 4711]}.  Any leading
8218  @samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}  @samp{Re: } is skipped before stripping.  @code{gnus-list-identifiers}
8219  may not contain @code{\\(..\\)}.  may not contain @code{\\(..\\)}.
8220    
8221  @table @code  @table @code
# Line 7217  subject.  This can also be a list of reg Line 8227  subject.  This can also be a list of reg
8227    
8228  @end table  @end table
8229    
 @item W W p  
 @kindex W W p @r{(Summary)}  
 @findex gnus-article-hide-pgp  
 @vindex gnus-article-hide-pgp-hook  
 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The  
 @code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}  
 signature has been hidden.  For example, to automatically verify  
 articles that have signatures in them do:  
 @lisp  
 ;;; Hide pgp cruft if any.  
   
 (setq gnus-treat-strip-pgp t)  
   
 ;;; After hiding pgp, verify the message;  
 ;;; only happens if pgp signature is found.  
   
 (add-hook 'gnus-article-hide-pgp-hook  
           (lambda ()  
             (save-excursion  
               (set-buffer gnus-original-article-buffer)  
               (mc-verify))))  
 @end lisp  
   
8230  @item W W P  @item W W P
8231  @kindex W W P @r{(Summary)}  @kindex W W P (Summary)
8232  @findex gnus-article-hide-pem  @findex gnus-article-hide-pem
8233  Hide @sc{pem} (privacy enhanced messages) cruft  Hide @acronym{PEM} (privacy enhanced messages) cruft
8234  (@code{gnus-article-hide-pem}).  (@code{gnus-article-hide-pem}).
8235    
8236  @item W W B  @item W W B
8237  @kindex W W B @r{(Summary)}  @kindex W W B (Summary)
8238  @findex gnus-article-strip-banner  @findex gnus-article-strip-banner
8239    @vindex gnus-article-banner-alist
8240    @vindex gnus-article-address-banner-alist
8241  @cindex banner  @cindex banner
8242  @cindex OneList  @cindex OneList
8243  @cindex stripping advertisements  @cindex stripping advertisements
# Line 7265  signature should be removed, or other sy Line 8254  signature should be removed, or other sy
8254  corresponding regular expression in @code{gnus-article-banner-alist} is  corresponding regular expression in @code{gnus-article-banner-alist} is
8255  used.  used.
8256    
8257    Regardless of a group, you can hide things like advertisements only when
8258    the sender of an article has a certain mail address specified in
8259    @code{gnus-article-address-banner-alist}.
8260    
8261    @table @code
8262    
8263    @item gnus-article-address-banner-alist
8264    @vindex gnus-article-address-banner-alist
8265    Alist of mail addresses and banners.  Each element has the form
8266    @code{(@var{address} . @var{banner})}, where @var{address} is a regexp
8267    matching a mail address in the From header, @var{banner} is one of a
8268    symbol @code{signature}, an item in @code{gnus-article-banner-alist},
8269    a regexp and @code{nil}.  If @var{address} matches author's mail
8270    address, it will remove things like advertisements.  For example, if a
8271    sender has the mail address @samp{hail@@yoo-hoo.co.jp} and there is a
8272    banner something like @samp{Do You Yoo-hoo!?} in all articles he
8273    sends, you can use the following element to remove them:
8274    
8275    @lisp
8276    ("@@yoo-hoo\\.co\\.jp\\'" .
8277     "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
8278    @end lisp
8279    
8280    @end table
8281    
8282  @item W W c  @item W W c
8283  @kindex W W c @r{(Summary)}  @kindex W W c (Summary)
8284  @findex gnus-article-hide-citation  @findex gnus-article-hide-citation
8285  Hide citation (@code{gnus-article-hide-citation}).  Some variables for  Hide citation (@code{gnus-article-hide-citation}).  Some variables for
8286  customizing the hiding:  customizing the hiding:
# Line 7296  Number of lines of hidden text. Line 8310  Number of lines of hidden text.
8310  @item gnus-cited-lines-visible  @item gnus-cited-lines-visible
8311  @vindex gnus-cited-lines-visible  @vindex gnus-cited-lines-visible
8312  The number of lines at the beginning of the cited text to leave  The number of lines at the beginning of the cited text to leave
8313  shown. This can also be a cons cell with the number of lines at the top  shown.  This can also be a cons cell with the number of lines at the top
8314  and bottom of the text, respectively, to remain visible.  and bottom of the text, respectively, to remain visible.
8315    
8316  @end table  @end table
8317    
8318  @item W W C-c  @item W W C-c
8319  @kindex W W C-c @r{(Summary)}  @kindex W W C-c (Summary)
8320  @findex gnus-article-hide-citation-maybe  @findex gnus-article-hide-citation-maybe
8321    
8322  Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the  Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
# Line 7321  is hidden. Line 8335  is hidden.
8335  @end table  @end table
8336    
8337  @item W W C  @item W W C
8338  @kindex W W C @r{(Summary)}  @kindex W W C (Summary)
8339  @findex gnus-article-hide-citation-in-followups  @findex gnus-article-hide-citation-in-followups
8340  Hide cited text in articles that aren't roots  Hide cited text in articles that aren't roots
8341  (@code{gnus-article-hide-citation-in-followups}).  This isn't very  (@code{gnus-article-hide-citation-in-followups}).  This isn't very
# Line 7363  This is not really washing, it's sort of Line 8377  This is not really washing, it's sort of
8377  you type this, you see the article exactly as it exists on disk or on  you type this, you see the article exactly as it exists on disk or on
8378  the server.  the server.
8379    
8380    @item g
8381    Force redisplaying of the current article
8382    (@code{gnus-summary-show-article}).  This is also not really washing.
8383    If you type this, you see the article without any previously applied
8384    interactive Washing functions but with all default treatments
8385    (@pxref{Customizing Articles}).
8386    
8387  @item W l  @item W l
8388  @kindex W l @r{(Summary)}  @kindex W l (Summary)
8389  @findex gnus-summary-stop-page-breaking  @findex gnus-summary-stop-page-breaking
8390  Remove page breaks from the current article  Remove page breaks from the current article
8391  (@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article}, for page  (@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article}, for page
8392  delimiters.  delimiters.
8393    
8394  @item W r  @item W r
8395  @kindex W r @r{(Summary)}  @kindex W r (Summary)
8396  @findex gnus-summary-caesar-message  @findex gnus-summary-caesar-message
8397  @c @icon{gnus-summary-caesar-message}  @c @icon{gnus-summary-caesar-message}
8398  Do a Caesar rotate (rot13) on the article buffer  Do a Caesar rotate (rot13) on the article buffer
# Line 7379  Do a Caesar rotate (rot13) on the articl Line 8400  Do a Caesar rotate (rot13) on the articl
8400  Unreadable articles that tell you to read them with Caesar rotate or rot13.  Unreadable articles that tell you to read them with Caesar rotate or rot13.
8401  (Typically offensive jokes and such.)  (Typically offensive jokes and such.)
8402    
8403  It's commonly called @dfn{rot13} because each letter is rotated 13  It's commonly called ``rot13'' because each letter is rotated 13
8404  positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter  positions in the alphabet, e. g. @samp{B} (letter #2) -> @samp{O} (letter
8405  #15).  It is sometimes referred to as ``Caesar rotate'' because Caesar  #15).  It is sometimes referred to as ``Caesar rotate'' because Caesar
8406  is rumored to have employed this form of, uh, somewhat weak encryption.  is rumored to have employed this form of, uh, somewhat weak encryption.
8407    
8408    @item W m
8409    @kindex W m (Summary)
8410    @findex gnus-summary-morse-message
8411    Morse decode the article buffer (@code{gnus-summary-morse-message}).
8412    
8413  @item W t  @item W t
8414  @item t  @item t
8415  @kindex W t @r{(Summary)}  @kindex W t (Summary)
8416  @kindex t @r{(Summary)}  @kindex t (Summary)
8417  @findex gnus-summary-toggle-header  @findex gnus-summary-toggle-header
8418  Toggle whether to display all headers in the article buffer  Toggle whether to display all headers in the article buffer
8419  (@code{gnus-summary-toggle-header}).  (@code{gnus-summary-toggle-header}).
8420    
8421  @item W v  @item W v
8422  @kindex W v @r{(Summary)}  @kindex W v (Summary)
8423  @findex gnus-summary-verbose-header  @findex gnus-summary-verbose-headers
8424  Toggle whether to display all headers in the article buffer permanently  Toggle whether to display all headers in the article buffer permanently
8425  (@code{gnus-summary-verbose-header}).  (@code{gnus-summary-verbose-headers}).
8426    
8427  @item W o  @item W o
8428  @kindex W o @r{(Summary)}  @kindex W o (Summary)
8429  @findex gnus-article-treat-overstrike  @findex gnus-article-treat-overstrike
8430  Treat overstrike (@code{gnus-article-treat-overstrike}).  Treat overstrike (@code{gnus-article-treat-overstrike}).
8431    
8432  @item W d  @item W d
8433  @kindex W d @r{(Summary)}  @kindex W d (Summary)
8434  @findex gnus-article-treat-dumbquotes  @findex gnus-article-treat-dumbquotes
8435  @vindex gnus-article-dumbquotes-map  @vindex gnus-article-dumbquotes-map
8436  @cindex Smartquotes  @cindex Smartquotes
8437  @cindex M******** sm*rtq**t*s  @cindex M****s*** sm*rtq**t*s
8438  @cindex Latin 1  @cindex Latin 1
8439  Treat M******** sm*rtq**t*s according to  Treat M****s*** sm*rtq**t*s according to
8440  @code{gnus-article-dumbquotes-map}  @code{gnus-article-dumbquotes-map}
8441  (@code{gnus-article-treat-dumbquotes}).  Note that this function guesses  (@code{gnus-article-treat-dumbquotes}).  Note that this function guesses
8442  whether a character is a sm*rtq**t* or not, so it should only be used  whether a character is a sm*rtq**t* or not, so it should only be used
8443  interactively.  interactively.
8444    
8445  In reality, this function is translates a subset of the subset of the  Sm*rtq**t*s are M****s***'s unilateral extension to the character map in
8446  @code{cp1252} (or @code{Windows-1252}) character set that isn't in ISO  an attempt to provide more quoting characters.  If you see something
8447  Latin-1, including the quote characters @code{\222} and @code{\264}.  like @code{\222} or @code{\264} where you're expecting some kind of
8448  Messages in this character set often have a MIME header saying that  apostrophe or quotation mark, then try this wash.
8449  they are Latin-1.  
8450    @item W Y f
8451    @kindex W Y f (Summary)
8452    @findex gnus-article-outlook-deuglify-article
8453    @cindex Outlook Express
8454    Full deuglify of broken Outlook (Express) articles: Treat dumbquotes,
8455    unwrap lines, repair attribution and rearrange citation.
8456    (@code{gnus-article-outlook-deuglify-article}).
8457    
8458    @item W Y u
8459    @kindex W Y u (Summary)
8460    @findex gnus-article-outlook-unwrap-lines
8461    @vindex gnus-outlook-deuglify-unwrap-min
8462    @vindex gnus-outlook-deuglify-unwrap-max
8463    Unwrap lines that appear to be wrapped citation lines.  You can control
8464    what lines will be unwrapped by frobbing
8465    @code{gnus-outlook-deuglify-unwrap-min} and
8466    @code{gnus-outlook-deuglify-unwrap-max}, indicating the minimum and
8467    maximum length of an unwrapped citation line.
8468    (@code{gnus-article-outlook-unwrap-lines}).
8469    
8470    @item W Y a
8471    @kindex W Y a (Summary)
8472    @findex gnus-article-outlook-repair-attribution
8473    Repair a broken attribution line.@*
8474    (@code{gnus-article-outlook-repair-attribution}).
8475    
8476    @item W Y c
8477    @kindex W Y c (Summary)
8478    @findex gnus-article-outlook-rearrange-citation
8479    Repair broken citations by rearranging the text.
8480    (@code{gnus-article-outlook-rearrange-citation}).
8481    
8482  @item W w  @item W w
8483  @kindex W w @r{(Summary)}  @kindex W w (Summary)
8484  @findex gnus-article-fill-cited-article  @findex gnus-article-fill-cited-article
8485  Do word wrap (@code{gnus-article-fill-cited-article}).  Do word wrap (@code{gnus-article-fill-cited-article}).
8486    
# Line 7431  You can give the command a numerical pre Line 8488  You can give the command a numerical pre
8488  when filling.  when filling.
8489    
8490  @item W Q  @item W Q
8491  @kindex W Q @r{(Summary)}  @kindex W Q (Summary)
8492  @findex gnus-article-fill-long-lines  @findex gnus-article-fill-long-lines
8493  Fill long lines (@code{gnus-article-fill-long-lines}).  Fill long lines (@code{gnus-article-fill-long-lines}).
8494    
8495  @item W C  @item W C
8496  @kindex W C @r{(Summary)}  @kindex W C (Summary)
8497  @findex gnus-article-capitalize-sentences  @findex gnus-article-capitalize-sentences
8498  Capitalize the first word in each sentence  Capitalize the first word in each sentence
8499  (@code{gnus-article-capitalize-sentences}).  (@code{gnus-article-capitalize-sentences}).
8500    
8501  @item W c  @item W c
8502  @kindex W c @r{(Summary)}  @kindex W c (Summary)
8503  @findex gnus-article-remove-cr  @findex gnus-article-remove-cr
8504  Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF  Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
8505  (this takes care of DOS line endings), and then translate any remaining  (this takes care of DOS line endings), and then translate any remaining
# Line 7450  CRs into LF (this takes care of Mac line Line 8507  CRs into LF (this takes care of Mac line
8507  (@code{gnus-article-remove-cr}).  (@code{gnus-article-remove-cr}).
8508    
8509  @item W q  @item W q
8510  @kindex W q @r{(Summary)}  @kindex W q (Summary)
8511  @findex gnus-article-de-quoted-unreadable  @findex gnus-article-de-quoted-unreadable
8512  Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).  Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
8513  Quoted-Printable is one common @sc{mime} encoding employed when sending  Quoted-Printable is one common @acronym{MIME} encoding employed when
8514  non-ASCII (i. e., 8-bit) articles.  It typically makes strings like  sending non-@acronym{ASCII} (i.e., 8-bit) articles.  It typically
8515  @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very  makes strings like @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which
8516  readable to me.  Note that the this is usually done automatically by  doesn't look very readable to me.  Note that this is usually done
8517  Gnus if the message in question has a @code{Content-Transfer-Encoding}  automatically by Gnus if the message in question has a
8518  header that says that this encoding has been done.  @code{Content-Transfer-Encoding} header that says that this encoding
8519    has been done.  If a prefix is given, a charset will be asked for.
8520    
8521  @item W 6  @item W 6
8522  @kindex W 6 @r{(Summary)}  @kindex W 6 (Summary)
8523  @findex gnus-article-de-base64-unreadable  @findex gnus-article-de-base64-unreadable
8524  Treat base64 (@code{gnus-article-de-base64-unreadable}).  Treat base64 (@code{gnus-article-de-base64-unreadable}).  Base64 is
8525  Base64 is one common @sc{mime} encoding employed when sending non-ASCII  one common @acronym{MIME} encoding employed when sending
8526  (i. e., 8-bit) articles.  Note that the this is usually done  non-@acronym{ASCII} (i.e., 8-bit) articles.  Note that this is
8527  automatically by Gnus if the message in question has a  usually done automatically by Gnus if the message in question has a
8528  @code{Content-Transfer-Encoding} header that says that this encoding has  @code{Content-Transfer-Encoding} header that says that this encoding
8529  been done.  has been done.  If a prefix is given, a charset will be asked for.
8530    
8531  @item W Z  @item W Z
8532  @kindex W Z @r{(Summary)}  @kindex W Z (Summary)
8533  @findex gnus-article-decode-HZ  @findex gnus-article-decode-HZ
8534  Treat HZ or HZP (@code{gnus-article-decode-HZ}).  HZ (or HZP) is one  Treat HZ or HZP (@code{gnus-article-decode-HZ}).  HZ (or HZP) is one
8535  common encoding employed when sending Chinese articles.  It typically  common encoding employed when sending Chinese articles.  It typically
8536  makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.  makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
8537    
8538    @item W u
8539    @kindex W u (Summary)
8540    @findex gnus-article-unsplit-urls
8541    Remove newlines from within URLs.  Some mailers insert newlines into
8542    outgoing email messages to keep lines short.  This reformatting can
8543    split long URLs onto multiple lines.  Repair those URLs by removing
8544    the newlines (@code{gnus-article-unsplit-urls}).
8545    
8546  @item W h  @item W h
8547  @kindex W h @r{(Summary)}  @kindex W h (Summary)
8548  @findex gnus-article-wash-html  @findex gnus-article-wash-html
8549  Treat HTML (@code{gnus-article-wash-html}).  Treat @acronym{HTML} (@code{gnus-article-wash-html}).  Note that this is
8550  Note that the this is usually done automatically by Gnus if the message  usually done automatically by Gnus if the message in question has a
8551  in question has a @code{Content-Type} header that says that this type  @code{Content-Type} header that says that the message is @acronym{HTML}.
 has been done.  
8552    
8553  @item W f  If a prefix is given, a charset will be asked for.
8554  @kindex W f @r{(Summary)}  
8555  @cindex x-face  @vindex gnus-article-wash-function
8556  @findex gnus-article-display-x-face  The default is to use the function specified by
8557  @findex gnus-article-x-face-command  @code{mm-text-html-renderer} (@pxref{Display Customization, ,Display
8558  @vindex gnus-article-x-face-command  Customization, emacs-mime, The Emacs MIME Manual}) to convert the
8559  @vindex gnus-article-x-face-too-ugly  @acronym{HTML}, but this is controlled by the
8560  @iftex  @code{gnus-article-wash-function} variable.  Pre-defined functions you
8561  @iflatex  can use include:
8562  \include{xface}  
8563  @end iflatex  @table @code
8564  @end iftex  @item w3
8565  @anchor{X-Face}  Use Emacs/w3.
8566  Look for and display any X-Face headers  
8567  (@code{gnus-article-display-x-face}).  The command executed by this  @item w3m
8568  function is given by the @code{gnus-article-x-face-command} variable.  Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}.
8569  If this variable is a string, this string will be executed in a  
8570  sub-shell.  If it is a function, this function will be called with the  @item links
8571  face as the argument.  If the @code{gnus-article-x-face-too-ugly} (which  Use @uref{http://links.sf.net/, Links}.
8572  is a regexp) matches the @code{From} header, the face will not be shown.  
8573  The default action under Emacs is to fork off the @code{display}  @item lynx
8574  program@footnote{@code{display} is from the ImageMagick package.  For the  Use @uref{http://lynx.isc.org/, Lynx}.
8575  @code{uncompface} and @code{icontopbm} programs look for a package  
8576  like `compface' or `faces-xface' on a GNU/Linux system.}  @item html2text
8577  to view the face.  Under XEmacs or Emacs 21+ with suitable image  Use html2text---a simple @acronym{HTML} converter included with Gnus.
8578  support, the default action is to display the face before the  
8579  @code{From} header.  (It's nicer if XEmacs has been compiled with X-Face  @end table
 support---that will make display somewhat faster.  If there's no native  
 X-Face support, Gnus will try to convert the @code{X-Face} header using  
 external programs from the @code{pbmplus} package and  
 friends.@footnote{On a GNU/Linux system look for packages with names  
 like @code{netpbm} or @code{libgr-progs}.})  If you  
 want to have this function in the display hook, it should probably come  
 last.  
8580    
8581  @item W b  @item W b
8582  @kindex W b @r{(Summary)}  @kindex W b (Summary)
8583  @findex gnus-article-add-buttons  @findex gnus-article-add-buttons
8584  Add clickable buttons to the article (@code{gnus-article-add-buttons}).  Add clickable buttons to the article (@code{gnus-article-add-buttons}).
8585  @xref{Article Buttons}.  @xref{Article Buttons}.
8586    
8587  @item W B  @item W B
8588  @kindex W B @r{(Summary)}  @kindex W B (Summary)
8589  @findex gnus-article-add-buttons-to-head  @findex gnus-article-add-buttons-to-head
8590  Add clickable buttons to the article headers  Add clickable buttons to the article headers
8591  (@code{gnus-article-add-buttons-to-head}).  (@code{gnus-article-add-buttons-to-head}).
8592    
8593  @item W W H  @item W p
8594  @kindex W W H @r{(Summary)}  @kindex W p (Summary)
8595  @findex gnus-article-strip-headers-from-body  @findex gnus-article-verify-x-pgp-sig
8596    Verify a signed control message
8597    (@code{gnus-article-verify-x-pgp-sig}).  Control messages such as
8598    @code{newgroup} and @code{checkgroups} are usually signed by the
8599    hierarchy maintainer.  You need to add the @acronym{PGP} public key of
8600    the maintainer to your keyring to verify the
8601    message.@footnote{@acronym{PGP} keys for many hierarchies are
8602    available at @uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}}
8603    
8604    @item W s
8605    @kindex W s (Summary)
8606    @findex gnus-summary-force-verify-and-decrypt
8607    Verify a signed (@acronym{PGP}, @acronym{PGP/MIME} or
8608    @acronym{S/MIME}) message
8609    (@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
8610    
8611    @item W a
8612    @kindex W a (Summary)
8613    @findex gnus-article-strip-headers-in-body
8614  Strip headers like the @code{X-No-Archive} header from the beginning of  Strip headers like the @code{X-No-Archive} header from the beginning of
8615  article bodies (@code{gnus-article-strip-headers-from-body}).  article bodies (@code{gnus-article-strip-headers-in-body}).
8616    
8617  @item W E l  @item W E l
8618  @kindex W E l @r{(Summary)}  @kindex W E l (Summary)
8619  @findex gnus-article-strip-leading-blank-lines  @findex gnus-article-strip-leading-blank-lines
8620  Remove all blank lines from the beginning of the article  Remove all blank lines from the beginning of the article
8621  (@code{gnus-article-strip-leading-blank-lines}).  (@code{gnus-article-strip-leading-blank-lines}).
8622    
8623  @item W E m  @item W E m
8624  @kindex W E m @r{(Summary)}  @kindex W E m (Summary)
8625  @findex gnus-article-strip-multiple-blank-lines  @findex gnus-article-strip-multiple-blank-lines
8626  Replace all blank lines with empty lines and then all multiple empty  Replace all blank lines with empty lines and then all multiple empty
8627  lines with a single empty line.  lines with a single empty line.
8628  (@code{gnus-article-strip-multiple-blank-lines}).  (@code{gnus-article-strip-multiple-blank-lines}).
8629    
8630  @item W E t  @item W E t
8631  @kindex W E t @r{(Summary)}  @kindex W E t (Summary)
8632  @findex gnus-article-remove-trailing-blank-lines  @findex gnus-article-remove-trailing-blank-lines
8633  Remove all blank lines at the end of the article  Remove all blank lines at the end of the article
8634  (@code{gnus-article-remove-trailing-blank-lines}).  (@code{gnus-article-remove-trailing-blank-lines}).
8635    
8636  @item W E a  @item W E a
8637  @kindex W E a @r{(Summary)}  @kindex W E a (Summary)
8638  @findex gnus-article-strip-blank-lines  @findex gnus-article-strip-blank-lines
8639  Do all the three commands above  Do all the three commands above
8640  (@code{gnus-article-strip-blank-lines}).  (@code{gnus-article-strip-blank-lines}).
8641    
8642  @item W E A  @item W E A
8643  @kindex W E A @r{(Summary)}  @kindex W E A (Summary)
8644  @findex gnus-article-strip-all-blank-lines  @findex gnus-article-strip-all-blank-lines
8645  Remove all blank lines  Remove all blank lines
8646  (@code{gnus-article-strip-all-blank-lines}).  (@code{gnus-article-strip-all-blank-lines}).
8647    
8648  @item W E s  @item W E s
8649  @kindex W E s @r{(Summary)}  @kindex W E s (Summary)
8650  @findex gnus-article-strip-leading-space  @findex gnus-article-strip-leading-space
8651  Remove all white space from the beginning of all lines of the article  Remove all white space from the beginning of all lines of the article
8652  body (@code{gnus-article-strip-leading-space}).  body (@code{gnus-article-strip-leading-space}).
8653    
8654  @item W E e  @item W E e
8655  @kindex W E e @r{(Summary)}  @kindex W E e (Summary)
8656  @findex gnus-article-strip-trailing-space  @findex gnus-article-strip-trailing-space
8657  Remove all white space from the end of all lines of the article  Remove all white space from the end of all lines of the article
8658  body (@code{gnus-article-strip-trailing-space}).  body (@code{gnus-article-strip-trailing-space}).
# Line 7586  body (@code{gnus-article-strip-trailing- Line 8662  body (@code{gnus-article-strip-trailing-
8662  @xref{Customizing Articles}, for how to wash articles automatically.  @xref{Customizing Articles}, for how to wash articles automatically.
8663    
8664    
8665    @node Article Header
8666    @subsection Article Header
8667    
8668    These commands perform various transformations of article header.
8669    
8670    @table @kbd
8671    
8672    @item W G u
8673    @kindex W G u (Summary)
8674    @findex gnus-article-treat-unfold-headers
8675    Unfold folded header lines (@code{gnus-article-treat-unfold-headers}).
8676    
8677    @item W G n
8678    @kindex W G n (Summary)
8679    @findex gnus-article-treat-fold-newsgroups
8680    Fold the @code{Newsgroups} and @code{Followup-To} headers
8681    (@code{gnus-article-treat-fold-newsgroups}).
8682    
8683    @item W G f
8684    @kindex W G f (Summary)
8685    @findex gnus-article-treat-fold-headers
8686    Fold all the message headers
8687    (@code{gnus-article-treat-fold-headers}).
8688    
8689    @item W E w
8690    @kindex W E w (Summary)
8691    @findex gnus-article-remove-leading-whitespace
8692    Remove excessive whitespace from all headers
8693    (@code{gnus-article-remove-leading-whitespace}).
8694    
8695    @end table
8696    
8697    
8698  @node Article Buttons  @node Article Buttons
8699  @subsection Article Buttons  @subsection Article Buttons
8700  @cindex buttons  @cindex buttons
8701    
8702  People often include references to other stuff in articles, and it would  People often include references to other stuff in articles, and it would
8703  be nice if Gnus could just fetch whatever it is that people talk about  be nice if Gnus could just fetch whatever it is that people talk about
8704  with the minimum of fuzz when you hit @key{RET} or use the middle mouse  with the minimum of fuzz when you hit @kbd{RET} or use the middle mouse
8705  button on these references.  button on these references.
8706    
8707    @vindex gnus-button-man-handler
8708  Gnus adds @dfn{buttons} to certain standard references by default:  Gnus adds @dfn{buttons} to certain standard references by default:
8709  Well-formed URLs, mail addresses and Message-IDs.  This is controlled by  Well-formed URLs, mail addresses, Message-IDs, Info links, man pages and
8710  two variables, one that handles article bodies and one that handles  Emacs or Gnus related references.  This is controlled by two variables,
8711  article heads:  one that handles article bodies and one that handles article heads:
8712    
8713  @table @code  @table @code
8714    
# Line 7607  article heads: Line 8717  article heads:
8717  This is an alist where each entry has this form:  This is an alist where each entry has this form:
8718    
8719  @lisp  @lisp
8720  (REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)  (@var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
8721  @end lisp  @end lisp
8722    
8723  @table @var  @table @var
8724    
8725  @item regexp  @item regexp
8726  All text that match this regular expression will be considered an  All text that match this regular expression (case insensitive) will be
8727  external reference.  Here's a typical regexp that matches embedded URLs:  considered an external reference.  Here's a typical regexp that matches
8728  @samp{<URL:\\([^\n\r>]*\\)>}.  embedded URLs: @samp{<URL:\\([^\n\r>]*\\)>}.  This can also be a
8729    variable containing a regexp, useful variables to use include
8730    @code{gnus-button-url-regexp} and @code{gnus-button-mid-or-mail-regexp}.
8731    
8732  @item button-par  @item button-par
8733  Gnus has to know which parts of the matches is to be highlighted.  This  Gnus has to know which parts of the matches is to be highlighted.  This
# Line 7625  highlighted.  If you want it all highlig Line 8737  highlighted.  If you want it all highlig
8737  @item use-p  @item use-p
8738  This form will be @code{eval}ed, and if the result is non-@code{nil},  This form will be @code{eval}ed, and if the result is non-@code{nil},
8739  this is considered a match.  This is useful if you want extra sifting to  this is considered a match.  This is useful if you want extra sifting to
8740  avoid false matches.  avoid false matches.  Often variables named
8741    @code{gnus-button-@var{*}-level} are used here, @xref{Article Button
8742    Levels}, but any other form may be used too.
8743    
8744    @c @code{use-p} is @code{eval}ed only if @code{regexp} matches.
8745    
8746  @item function  @item function
8747  This function will be called when you click on this button.  This function will be called when you click on this button.
# Line 7649  article head only, and that each entry h Line 8765  article head only, and that each entry h
8765  used to say what headers to apply the buttonize coding to:  used to say what headers to apply the buttonize coding to:
8766    
8767  @lisp  @lisp
8768  (HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)  (@var{header} @var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
8769  @end lisp  @end lisp
8770    
8771  @var{header} is a regular expression.  @var{header} is a regular expression.
8772    @end table
8773    
8774    @subsubsection Related variables and functions
8775    
8776    @table @code
8777    @item gnus-button-@var{*}-level
8778    @xref{Article Button Levels}.
8779    
8780    @c Stuff related to gnus-button-browse-level
8781    
8782  @item gnus-button-url-regexp  @item gnus-button-url-regexp
8783  @vindex gnus-button-url-regexp  @vindex gnus-button-url-regexp
8784  A regular expression that matches embedded URLs.  It is used in the  A regular expression that matches embedded URLs.  It is used in the
8785  default values of the variables above.  default values of the variables above.
8786    
8787    @c Stuff related to gnus-button-man-level
8788    
8789    @item gnus-button-man-handler
8790    @vindex gnus-button-man-handler
8791    The function to use for displaying man pages.  It must take at least one
8792    argument with a string naming the man page.
8793    
8794    @c Stuff related to gnus-button-message-level
8795    
8796    @item gnus-button-mid-or-mail-regexp
8797    @vindex gnus-button-mid-or-mail-regexp
8798    Regular expression that matches a message ID or a mail address.
8799    
8800    @item gnus-button-prefer-mid-or-mail
8801    @vindex gnus-button-prefer-mid-or-mail
8802    This variable determines what to do when the button on a string as
8803    @samp{foo123@@bar.invalid} is pushed.  Strings like this can be either a
8804    message ID or a mail address.  If it is one of the symbols @code{mid} or
8805    @code{mail}, Gnus will always assume that the string is a message ID or
8806    a mail address, respectively.  If this variable is set to the symbol
8807    @code{ask}, always query the user what do do.  If it is a function, this
8808    function will be called with the string as its only argument.  The
8809    function must return @code{mid}, @code{mail}, @code{invalid} or
8810    @code{ask}.  The default value is the function
8811    @code{gnus-button-mid-or-mail-heuristic}.
8812    
8813    @item gnus-button-mid-or-mail-heuristic
8814    @findex gnus-button-mid-or-mail-heuristic
8815    Function that guesses whether its argument is a message ID or a mail
8816    address.  Returns @code{mid} if it's a message IDs, @code{mail} if
8817    it's a mail address, @code{ask} if unsure and @code{invalid} if the
8818    string is invalid.
8819    
8820    @item gnus-button-mid-or-mail-heuristic-alist
8821    @vindex gnus-button-mid-or-mail-heuristic-alist
8822    An alist of @code{(RATE . REGEXP)} pairs used by the function
8823    @code{gnus-button-mid-or-mail-heuristic}.
8824    
8825    @c Stuff related to gnus-button-tex-level
8826    
8827    @item gnus-button-ctan-handler
8828    @findex gnus-button-ctan-handler
8829    The function to use for displaying CTAN links.  It must take one
8830    argument, the string naming the URL.
8831    
8832    @item gnus-ctan-url
8833    @vindex gnus-ctan-url
8834    Top directory of a CTAN (Comprehensive TeX Archive Network) archive used
8835    by @code{gnus-button-ctan-handler}.
8836    
8837    @c Misc stuff
8838    
8839  @item gnus-article-button-face  @item gnus-article-button-face
8840  @vindex gnus-article-button-face  @vindex gnus-article-button-face
8841  Face used on buttons.  Face used on buttons.
# Line 7672  Face used when the mouse cursor is over Line 8849  Face used when the mouse cursor is over
8849  @xref{Customizing Articles}, for how to buttonize articles automatically.  @xref{Customizing Articles}, for how to buttonize articles automatically.
8850    
8851    
8852    @node Article Button Levels
8853    @subsection Article button levels
8854    @cindex button levels
8855    The higher the value of the variables @code{gnus-button-@var{*}-level},
8856    the more buttons will appear.  If the level is zero, no corresponding
8857    buttons are displayed.  With the default value (which is 5) you should
8858    already see quite a lot of buttons.  With higher levels, you will see
8859    more buttons, but you may also get more false positives.  To avoid them,
8860    you can set the variables @code{gnus-button-@var{*}-level} local to
8861    specific groups (@pxref{Group Parameters}).  Here's an example for the
8862    variable @code{gnus-parameters}:
8863    
8864    @lisp
8865    ;; @r{increase @code{gnus-button-*-level} in some groups:}
8866    (setq gnus-parameters
8867          '(("\\<\\(emacs\\|gnus\\)\\>" (gnus-button-emacs-level 10))
8868            ("\\<unix\\>"               (gnus-button-man-level 10))
8869            ("\\<tex\\>"                (gnus-button-tex-level 10))))
8870    @end lisp
8871    
8872    @table @code
8873    
8874    @item gnus-button-browse-level
8875    @vindex gnus-button-browse-level
8876    Controls the display of references to message IDs, mail addresses and
8877    news URLs.  Related variables and functions include
8878    @code{gnus-button-url-regexp}, @code{browse-url}, and
8879    @code{browse-url-browser-function}.
8880    
8881    @item gnus-button-emacs-level
8882    @vindex gnus-button-emacs-level
8883    Controls the display of Emacs or Gnus references.  Related functions are
8884    @code{gnus-button-handle-custom},
8885    @code{gnus-button-handle-describe-function},
8886    @code{gnus-button-handle-describe-variable},
8887    @code{gnus-button-handle-symbol},
8888    @code{gnus-button-handle-describe-key},
8889    @code{gnus-button-handle-apropos},
8890    @code{gnus-button-handle-apropos-command},
8891    @code{gnus-button-handle-apropos-variable},
8892    @code{gnus-button-handle-apropos-documentation}, and
8893    @code{gnus-button-handle-library}.
8894    
8895    @item gnus-button-man-level
8896    @vindex gnus-button-man-level
8897    Controls the display of references to (Unix) man pages.
8898    See @code{gnus-button-man-handler}.
8899    
8900    @item gnus-button-message-level
8901    @vindex gnus-button-message-level
8902    Controls the display of message IDs, mail addresses and news URLs.
8903    Related variables and functions include
8904    @code{gnus-button-mid-or-mail-regexp},
8905    @code{gnus-button-prefer-mid-or-mail},
8906    @code{gnus-button-mid-or-mail-heuristic}, and
8907    @code{gnus-button-mid-or-mail-heuristic-alist}.
8908    
8909    @item gnus-button-tex-level
8910    @vindex gnus-button-tex-level
8911    Controls the display of references to @TeX{} or LaTeX stuff, e.g. for CTAN
8912    URLs.  See the variables @code{gnus-ctan-url},
8913    @code{gnus-button-ctan-handler},
8914    @code{gnus-button-ctan-directory-regexp}, and
8915    @code{gnus-button-handle-ctan-bogus-regexp}.
8916    
8917    @end table
8918    
8919    
8920  @node Article Date  @node Article Date
8921  @subsection Article Date  @subsection Article Date
8922    
# Line 7682  when the article was sent. Line 8927  when the article was sent.
8927  @table @kbd  @table @kbd
8928    
8929  @item W T u  @item W T u
8930  @kindex W T u @r{(Summary)}  @kindex W T u (Summary)
8931  @findex gnus-article-date-ut  @findex gnus-article-date-ut
8932  Display the date in UT (aka. GMT, aka ZULU)  Display the date in UT (aka. GMT, aka ZULU)
8933  (@code{gnus-article-date-ut}).  (@code{gnus-article-date-ut}).
8934    
8935  @item W T i  @item W T i
8936  @kindex W T i @r{(Summary)}  @kindex W T i (Summary)
8937  @findex gnus-article-date-iso8601  @findex gnus-article-date-iso8601
8938  @cindex ISO 8601  @cindex ISO 8601
8939  Display the date in international format, aka. ISO 8601  Display the date in international format, aka. ISO 8601
8940  (@code{gnus-article-date-iso8601}).  (@code{gnus-article-date-iso8601}).
8941    
8942  @item W T l  @item W T l
8943  @kindex W T l @r{(Summary)}  @kindex W T l (Summary)
8944  @findex gnus-article-date-local  @findex gnus-article-date-local
8945  Display the date in the local timezone (@code{gnus-article-date-local}).  Display the date in the local timezone (@code{gnus-article-date-local}).
8946    
8947    @item W T p
8948    @kindex W T p (Summary)
8949    @findex gnus-article-date-english
8950    Display the date in a format that's easily pronounceable in English
8951    (@code{gnus-article-date-english}).
8952    
8953  @item W T s  @item W T s
8954  @kindex W T s @r{(Summary)}  @kindex W T s (Summary)
8955  @vindex gnus-article-time-format  @vindex gnus-article-time-format
8956  @findex gnus-article-date-user  @findex gnus-article-date-user
8957  @findex format-time-string  @findex format-time-string
# Line 7711  to @code{format-time-string}.  See the d Line 8962  to @code{format-time-string}.  See the d
8962  for a list of possible format specs.  for a list of possible format specs.
8963    
8964  @item W T e  @item W T e
8965  @kindex W T e @r{(Summary)}  @kindex W T e (Summary)
8966  @findex gnus-article-date-lapsed  @findex gnus-article-date-lapsed
8967  @findex gnus-start-date-timer  @findex gnus-start-date-timer
8968  @findex gnus-stop-date-timer  @findex gnus-stop-date-timer
# Line 7722  Say how much time has elapsed between th Line 8973  Say how much time has elapsed between th
8973  X-Sent: 6 weeks, 4 days, 1 hour, 3 minutes, 8 seconds ago  X-Sent: 6 weeks, 4 days, 1 hour, 3 minutes, 8 seconds ago
8974  @end example  @end example
8975    
8976    @vindex gnus-article-date-lapsed-new-header
8977  The value of @code{gnus-article-date-lapsed-new-header} determines  The value of @code{gnus-article-date-lapsed-new-header} determines
8978  whether this header will just be added below the old Date one, or will  whether this header will just be added below the old Date one, or will
8979  replace it.  replace it.
# Line 7735  If you want to have this line updated co Line 8987  If you want to have this line updated co
8987  (gnus-start-date-timer)  (gnus-start-date-timer)
8988  @end lisp  @end lisp
8989    
8990  in your @file{.gnus.el} file, or you can run it off of some hook.  If  in your @file{~/.gnus.el} file, or you can run it off of some hook.  If
8991  you want to stop the timer, you can use the @code{gnus-stop-date-timer}  you want to stop the timer, you can use the @code{gnus-stop-date-timer}
8992  command.  command.
8993    
8994  @item W T o  @item W T o
8995  @kindex W T o @r{(Summary)}  @kindex W T o (Summary)
8996  @findex gnus-article-date-original  @findex gnus-article-date-original
8997  Display the original date (@code{gnus-article-date-original}).  This can  Display the original date (@code{gnus-article-date-original}).  This can
8998  be useful if you normally use some other conversion function and are  be useful if you normally use some other conversion function and are
# Line 7754  that the article was posted in 1854.  Al Line 9006  that the article was posted in 1854.  Al
9006  preferred format automatically.  preferred format automatically.
9007    
9008    
9009    @node Article Display
9010    @subsection Article Display
9011    @cindex picons
9012    @cindex x-face
9013    @cindex smileys
9014    
9015    These commands add various frivolous display gimmicks to the article
9016    buffer in Emacs versions that support them.
9017    
9018    @code{X-Face} headers are small black-and-white images supplied by the
9019    message headers (@pxref{X-Face}).
9020    
9021    @code{Face} headers are small colored images supplied by the message
9022    headers (@pxref{Face}).
9023    
9024    Smileys are those little @samp{:-)} symbols that people like to litter
9025    their messages with (@pxref{Smileys}).
9026    
9027    Picons, on the other hand, reside on your own system, and Gnus will
9028    try to match the headers to what you have (@pxref{Picons}).
9029    
9030    All these functions are toggles---if the elements already exist,
9031    they'll be removed.
9032    
9033    @table @kbd
9034    @item W D x
9035    @kindex W D x (Summary)
9036    @findex gnus-article-display-x-face
9037    Display an @code{X-Face} in the @code{From} header.
9038    (@code{gnus-article-display-x-face}).
9039    
9040    @item W D d
9041    @kindex W D d (Summary)
9042    @findex gnus-article-display-face
9043    Display a @code{Face} in the @code{From} header.
9044    (@code{gnus-article-display-face}).
9045    
9046    @item W D s
9047    @kindex W D s (Summary)
9048    @findex gnus-treat-smiley
9049    Display smileys (@code{gnus-treat-smiley}).
9050    
9051    @item W D f
9052    @kindex W D f (Summary)
9053    @findex gnus-treat-from-picon
9054    Piconify the @code{From} header (@code{gnus-treat-from-picon}).
9055    
9056    @item W D m
9057    @kindex W D m (Summary)
9058    @findex gnus-treat-mail-picon
9059    Piconify all mail headers (i. e., @code{Cc}, @code{To})
9060    (@code{gnus-treat-mail-picon}).
9061    
9062    @item W D n
9063    @kindex W D n (Summary)
9064    @findex gnus-treat-newsgroups-picon
9065    Piconify all news headers (i. e., @code{Newsgroups} and
9066    @code{Followup-To}) (@code{gnus-treat-newsgroups-picon}).
9067    
9068    @item W D D
9069    @kindex W D D (Summary)
9070    @findex gnus-article-remove-images
9071    Remove all images from the article buffer
9072    (@code{gnus-article-remove-images}).
9073    
9074    @end table
9075    
9076    
9077    
9078  @node Article Signature  @node Article Signature
9079  @subsection Article Signature  @subsection Article Signature
9080  @cindex signatures  @cindex signatures
# Line 7771  from the end of the body towards the beg Line 9092  from the end of the body towards the beg
9092    
9093  @lisp  @lisp
9094  (setq gnus-signature-separator  (setq gnus-signature-separator
9095        '("^-- $"         ; The standard        '("^-- $"         ; @r{The standard}
9096          "^-- *$"        ; A common mangling          "^-- *$"        ; @r{A common mangling}
9097          "^-------*$"    ; Many people just use a looong          "^-------*$"    ; @r{Many people just use a looong}
9098                          ; line of dashes.  Shame!                          ; @r{line of dashes.  Shame!}
9099          "^ *--------*$" ; Double-shame!          "^ *--------*$" ; @r{Double-shame!}
9100          "^________*$"   ; Underscores are also popular          "^________*$"   ; @r{Underscores are also popular}
9101          "^========*$")) ; Pervert!          "^========*$")) ; @r{Pervert!}
9102  @end lisp  @end lisp
9103    
9104  The more permissive you are, the more likely it is that you'll get false  The more permissive you are, the more likely it is that you'll get false
# Line 7821  signature after all. Line 9142  signature after all.
9142    
9143  @table @kbd  @table @kbd
9144  @item A t  @item A t
9145  @kindex A t @r{(Summary)}  @kindex A t (Summary)
9146  @findex gnus-article-babel  @findex gnus-article-babel
9147  Translate the article from one language to another  Translate the article from one language to another
9148  (@code{gnus-article-babel}).  (@code{gnus-article-babel}).
# Line 7830  Translate the article from one language Line 9151  Translate the article from one language
9151    
9152    
9153  @node MIME Commands  @node MIME Commands
9154  @section @sc{mime} Commands  @section MIME Commands
9155  @cindex MIME decoding  @cindex MIME decoding
9156  @cindex attachments  @cindex attachments
9157  @cindex viewing attachments  @cindex viewing attachments
9158    
9159  The following commands all understand the numerical prefix.  For  The following commands all understand the numerical prefix.  For
9160  instance, @kbd{3 b} means ``view the third @sc{mime} part''.  instance, @kbd{3 b} means ``view the third @acronym{MIME} part''.
9161    
9162  @table @kbd  @table @kbd
9163  @item b  @item b
9164  @itemx K v  @itemx K v
9165  @kindex b @r{(Summary)}  @kindex b (Summary)
9166  @kindex K v @r{(Summary)}  @kindex K v (Summary)
9167  View the @sc{mime} part.  View the @acronym{MIME} part.
9168    
9169  @item K o  @item K o
9170  @kindex K o @r{(Summary)}  @kindex K o (Summary)
9171  Save the @sc{mime} part.  Save the @acronym{MIME} part.
9172    
9173  @item K c  @item K c
9174  @kindex K c @r{(Summary)}  @kindex K c (Summary)
9175  Copy the @sc{mime} part.  Copy the @acronym{MIME} part.
9176    
9177  @item K e  @item K e
9178  @kindex K e @r{(Summary)}  @kindex K e (Summary)
9179  View the @sc{mime} part externally.  View the @acronym{MIME} part externally.
9180    
9181  @item K i  @item K i
9182  @kindex K i @r{(Summary)}  @kindex K i (Summary)
9183  View the @sc{mime} part internally.  View the @acronym{MIME} part internally.
9184    
9185  @item K |  @item K |
9186  @kindex K | @r{(Summary)}  @kindex K | (Summary)
9187  Pipe the @sc{mime} part to an external command.  Pipe the @acronym{MIME} part to an external command.
9188  @end table  @end table
9189    
9190  The rest of these @sc{mime} commands do not use the numerical prefix in  The rest of these @acronym{MIME} commands do not use the numerical prefix in
9191  the same manner:  the same manner:
9192    
9193  @table @kbd  @table @kbd
9194  @item K b  @item K b
9195  @kindex K b @r{(Summary)}  @kindex K b (Summary)
9196  Make all the @sc{mime} parts have buttons in front of them.  This is  Make all the @acronym{MIME} parts have buttons in front of them.  This is
9197  mostly useful if you wish to save (or perform other actions) on inlined  mostly useful if you wish to save (or perform other actions) on inlined
9198  parts.  parts.
9199    
9200  @item K m  @item K m
9201  @kindex K m @r{(Summary)}  @kindex K m (Summary)
9202  @findex gnus-summary-repair-multipart  @findex gnus-summary-repair-multipart
9203  Some multipart messages are transmitted with missing or faulty headers.  Some multipart messages are transmitted with missing or faulty headers.
9204  This command will attempt to ``repair'' these messages so that they can  This command will attempt to ``repair'' these messages so that they can
# Line 7885  be viewed in a more pleasant manner Line 9206  be viewed in a more pleasant manner
9206  (@code{gnus-summary-repair-multipart}).  (@code{gnus-summary-repair-multipart}).
9207    
9208  @item X m  @item X m
9209  @kindex X m @r{(Summary)}  @kindex X m (Summary)
9210  @findex gnus-summary-save-parts  @findex gnus-summary-save-parts
9211  Save all parts matching a @sc{mime} type to a directory  Save all parts matching a @acronym{MIME} type to a directory
9212  (@code{gnus-summary-save-parts}).  Understands the process/prefix  (@code{gnus-summary-save-parts}).  Understands the process/prefix
9213  convention (@pxref{Process/Prefix}).  convention (@pxref{Process/Prefix}).
9214    
9215  @item M-t  @item M-t
9216  @kindex M-t @r{(Summary)}  @kindex M-t (Summary)
9217  @findex gnus-summary-display-buttonized  @findex gnus-summary-toggle-display-buttonized
9218  Toggle the buttonized display of the article buffer  Toggle the buttonized display of the article buffer
9219  (@code{gnus-summary-toggle-display-buttonized}).  (@code{gnus-summary-toggle-display-buttonized}).
9220    
9221  @item W M w  @item W M w
9222  @kindex W M w @r{(Summary)}  @kindex W M w (Summary)
9223    @findex gnus-article-decode-mime-words
9224  Decode RFC 2047-encoded words in the article headers  Decode RFC 2047-encoded words in the article headers
9225  (@code{gnus-article-decode-mime-words}).  (@code{gnus-article-decode-mime-words}).
9226    
9227  @item W M c  @item W M c
9228  @kindex W M c @r{(Summary)}  @kindex W M c (Summary)
9229    @findex gnus-article-decode-charset
9230  Decode encoded article bodies as well as charsets  Decode encoded article bodies as well as charsets
9231  (@code{gnus-article-decode-charset}).  (@code{gnus-article-decode-charset}).
9232    
9233  This command looks in the @code{Content-Type} header to determine the  This command looks in the @code{Content-Type} header to determine the
9234  charset.  If there is no such header in the article, you can give it a  charset.  If there is no such header in the article, you can give it a
9235  prefix, which will prompt for the charset to decode as.  In regional  prefix, which will prompt for the charset to decode as.  In regional
9236  groups where people post using some common encoding (but do not include  groups where people post using some common encoding (but do not
9237  MIME headers), you can set the @code{charset} group/topic parameter to  include @acronym{MIME} headers), you can set the @code{charset} group/topic
9238  the required charset (@pxref{Group Parameters}).  parameter to the required charset (@pxref{Group Parameters}).
9239    
9240  @item W M v  @item W M v
9241  @kindex W M v @r{(Summary)}  @kindex W M v (Summary)
9242  View all the @sc{mime} parts in the current article  @findex gnus-mime-view-all-parts
9243    View all the @acronym{MIME} parts in the current article
9244  (@code{gnus-mime-view-all-parts}).  (@code{gnus-mime-view-all-parts}).
9245    
9246  @end table  @end table
# Line 7926  Relevant variables: Line 9250  Relevant variables:
9250  @table @code  @table @code
9251  @item gnus-ignored-mime-types  @item gnus-ignored-mime-types
9252  @vindex gnus-ignored-mime-types  @vindex gnus-ignored-mime-types
9253  This is a list of regexps.  @sc{mime} types that match a regexp from  This is a list of regexps.  @acronym{MIME} types that match a regexp from
9254  this list will be completely ignored by Gnus.  The default value is  this list will be completely ignored by Gnus.  The default value is
9255  @code{nil}.  @code{nil}.
9256    
# Line 7937  To have all Vcards be ignored, you'd say Line 9261  To have all Vcards be ignored, you'd say
9261        '("text/x-vcard"))        '("text/x-vcard"))
9262  @end lisp  @end lisp
9263    
9264    @item gnus-article-loose-mime
9265    @vindex gnus-article-loose-mime
9266    If non-@code{nil}, Gnus won't require the @samp{MIME-Version} header
9267    before interpreting the message as a @acronym{MIME} message.  This helps
9268    when reading messages from certain broken mail user agents.  The
9269    default is @code{nil}.
9270    
9271    @item gnus-article-emulate-mime
9272    @vindex gnus-article-emulate-mime
9273    There are other, non-@acronym{MIME} encoding methods used.  The most common
9274    is @samp{uuencode}, but yEncode is also getting to be popular.  If
9275    this variable is non-@code{nil}, Gnus will look in message bodies to
9276    see if it finds these encodings, and if so, it'll run them through the
9277    Gnus @acronym{MIME} machinery.  The default is @code{t}.
9278    
9279  @item gnus-unbuttonized-mime-types  @item gnus-unbuttonized-mime-types
9280  @vindex gnus-unbuttonized-mime-types  @vindex gnus-unbuttonized-mime-types
9281  This is a list of regexps.  @sc{mime} types that match a regexp from  This is a list of regexps.  @acronym{MIME} types that match a regexp from
9282  this list won't have @sc{mime} buttons inserted unless they aren't  this list won't have @acronym{MIME} buttons inserted unless they aren't
9283  displayed.  The default value is @code{(".*/.*")}.  displayed or this variable is overridden by
9284    @code{gnus-buttonized-mime-types}.  The default value is
9285    @code{(".*/.*")}.  This variable is only used when
9286    @code{gnus-inhibit-mime-unbuttonizing} is @code{nil}.
9287    
9288    @item gnus-buttonized-mime-types
9289    @vindex gnus-buttonized-mime-types
9290    This is a list of regexps.  @acronym{MIME} types that match a regexp from
9291    this list will have @acronym{MIME} buttons inserted unless they aren't
9292    displayed.  This variable overrides
9293    @code{gnus-unbuttonized-mime-types}.  The default value is @code{nil}.
9294    This variable is only used when @code{gnus-inhibit-mime-unbuttonizing}
9295    is @code{nil}.
9296    
9297    To see e.g. security buttons but no other buttons, you could set this
9298    variable to @code{("multipart/signed")} and leave
9299    @code{gnus-unbuttonized-mime-types} at the default value.
9300    
9301    @item gnus-inhibit-mime-unbuttonizing
9302    @vindex gnus-inhibit-mime-unbuttonizing
9303    If this is non-@code{nil}, then all @acronym{MIME} parts get buttons.  The
9304    default value is @code{nil}.
9305    
9306  @item gnus-article-mime-part-function  @item gnus-article-mime-part-function
9307  @vindex gnus-article-mime-part-function  @vindex gnus-article-mime-part-function
9308  For each @sc{mime} part, this function will be called with the @sc{mime}  For each @acronym{MIME} part, this function will be called with the @acronym{MIME}
9309  handle as the parameter.  The function is meant to be used to allow  handle as the parameter.  The function is meant to be used to allow
9310  users to gather information from the article (e. g., add Vcard info to  users to gather information from the article (e. g., add Vcard info to
9311  the bbdb database) or to do actions based on parts (e. g., automatically  the bbdb database) or to do actions based on parts (e. g., automatically
# Line 7966  Here's an example function the does the Line 9326  Here's an example function the does the
9326    
9327  @vindex gnus-mime-multipart-functions  @vindex gnus-mime-multipart-functions
9328  @item gnus-mime-multipart-functions  @item gnus-mime-multipart-functions
9329  Alist of @sc{mime} multipart types and functions to handle them.  Alist of @acronym{MIME} multipart types and functions to handle them.
9330    
9331    @vindex mm-file-name-rewrite-functions
9332    @item mm-file-name-rewrite-functions
9333    List of functions used for rewriting file names of @acronym{MIME} parts.
9334    Each function takes a file name as input and returns a file name.
9335    
9336    Ready-made functions include@*
9337    @code{mm-file-name-delete-whitespace},
9338    @code{mm-file-name-trim-whitespace},
9339    @code{mm-file-name-collapse-whitespace}, and
9340    @code{mm-file-name-replace-whitespace}.  The later uses the value of
9341    the variable @code{mm-file-name-replace-whitespace} to replace each
9342    whitespace character in a file name with that string; default value
9343    is @code{"_"} (a single underscore).
9344    @findex mm-file-name-delete-whitespace
9345    @findex mm-file-name-trim-whitespace
9346    @findex mm-file-name-collapse-whitespace
9347    @findex mm-file-name-replace-whitespace
9348    @vindex mm-file-name-replace-whitespace
9349    
9350    The standard functions @code{capitalize}, @code{downcase},
9351    @code{upcase}, and @code{upcase-initials} may be useful, too.
9352    
9353    Everybody knows that whitespace characters in file names are evil,
9354    except those who don't know.  If you receive lots of attachments from
9355    such unenlightened users, you can make live easier by adding
9356    
9357    @lisp
9358    (setq mm-file-name-rewrite-functions
9359          '(mm-file-name-trim-whitespace
9360            mm-file-name-collapse-whitespace
9361            mm-file-name-replace-whitespace))
9362    @end lisp
9363    
9364    @noindent
9365    to your @file{~/.gnus.el} file.
9366    
9367  @end table  @end table
9368    
# Line 7975  Alist of @sc{mime} multipart types and f Line 9371  Alist of @sc{mime} multipart types and f
9371  @section Charsets  @section Charsets
9372  @cindex charsets  @cindex charsets
9373    
9374  People use different charsets, and we have @sc{mime} to let us know what  People use different charsets, and we have @acronym{MIME} to let us know what
9375  charsets they use.  Or rather, we wish we had.  Many people use  charsets they use.  Or rather, we wish we had.  Many people use
9376  newsreaders and mailers that do not understand or use @sc{mime}, and  newsreaders and mailers that do not understand or use @acronym{MIME}, and
9377  just send out messages without saying what character sets they use.  To  just send out messages without saying what character sets they use.  To
9378  help a bit with this, some local news hierarchies have policies that say  help a bit with this, some local news hierarchies have policies that say
9379  what character set is the default.  For instance, the @samp{fj}  what character set is the default.  For instance, the @samp{fj}
# Line 7985  hierarchy uses @code{iso-2022-jp-2}. Line 9381  hierarchy uses @code{iso-2022-jp-2}.
9381    
9382  @vindex gnus-group-charset-alist  @vindex gnus-group-charset-alist
9383  This knowledge is encoded in the @code{gnus-group-charset-alist}  This knowledge is encoded in the @code{gnus-group-charset-alist}
9384  variable, which is an alist of regexps (to match group names) and  variable, which is an alist of regexps (use the first item to match full
9385  default charsets to be used when reading these groups.  group names) and default charsets to be used when reading these groups.
9386    
9387  In addition, some people do use soi-disant @sc{mime}-aware agents that  @vindex gnus-newsgroup-ignored-charsets
9388  aren't.  These blithely mark messages as being in @code{iso-8859-1} even  In addition, some people do use soi-disant @acronym{MIME}-aware agents that
9389  if they really are in @code{koi-8}.  To help here, the  aren't.  These blithely mark messages as being in @code{iso-8859-1}
9390    even if they really are in @code{koi-8}.  To help here, the
9391  @code{gnus-newsgroup-ignored-charsets} variable can be used.  The  @code{gnus-newsgroup-ignored-charsets} variable can be used.  The
9392  charsets that are listed here will be ignored.  The variable can be set  charsets that are listed here will be ignored.  The variable can be
9393  on a group-by-group basis using the group parameters (@pxref{Group  set on a group-by-group basis using the group parameters (@pxref{Group
9394  Parameters}).  The default value is @code{(unknown-8bit)}, which is  Parameters}).  The default value is @code{(unknown-8bit x-unknown)},
9395  something some agents insist on having in there.  which includes values some agents insist on having in there.
9396    
9397  @vindex gnus-group-posting-charset-alist  @vindex gnus-group-posting-charset-alist
9398  When posting, @code{gnus-group-posting-charset-alist} is used to  When posting, @code{gnus-group-posting-charset-alist} is used to
9399  determine which charsets should not be encoded using the @sc{mime}  determine which charsets should not be encoded using the @acronym{MIME}
9400  encodings.  For instance, some hierarchies discourage using  encodings.  For instance, some hierarchies discourage using
9401  quoted-printable header encoding.  quoted-printable header encoding.
9402    
# Line 8029  encode using quoted-printable) or @code{ Line 9426  encode using quoted-printable) or @code{
9426    
9427  Other charset tricks that may be useful, although not Gnus-specific:  Other charset tricks that may be useful, although not Gnus-specific:
9428    
9429  If there are several @sc{mime} charsets that encode the same Emacs  If there are several @acronym{MIME} charsets that encode the same Emacs
9430  charset, you can choose what charset to use by saying the following:  charset, you can choose what charset to use by saying the following:
9431    
9432  @lisp  @lisp
# Line 8038  charset, you can choose what charset to Line 9435  charset, you can choose what charset to
9435  @end lisp  @end lisp
9436    
9437  This means that Russian will be encoded using @code{koi8-r} instead of  This means that Russian will be encoded using @code{koi8-r} instead of
9438  the default @code{iso-8859-5} @sc{mime} charset.  the default @code{iso-8859-5} @acronym{MIME} charset.
9439    
9440  If you want to read messages in @code{koi8-u}, you can cheat and say  If you want to read messages in @code{koi8-u}, you can cheat and say
9441    
# Line 8056  something like Line 9453  something like
9453  (define-coding-system-alias 'windows-1251 'cp1251)  (define-coding-system-alias 'windows-1251 'cp1251)
9454  @end lisp  @end lisp
9455    
 while if you use a non-Latin-1 language environment you could see the  
 Latin-1 subset of @code{windows-1252} using:  
   
 @lisp  
 (define-coding-system-alias 'windows-1252 'latin-1)  
 @end lisp  
   
9456    
9457  @node Article Commands  @node Article Commands
9458  @section Article Commands  @section Article Commands
# Line 8072  Latin-1 subset of @code{windows-1252} us Line 9462  Latin-1 subset of @code{windows-1252} us
9462  @item A P  @item A P
9463  @cindex PostScript  @cindex PostScript
9464  @cindex printing  @cindex printing
9465  @kindex A P @r{(Summary)}  @kindex A P (Summary)
9466  @vindex gnus-ps-print-hook  @vindex gnus-ps-print-hook
9467  @findex gnus-summary-print-article  @findex gnus-summary-print-article
9468  Generate and print a PostScript image of the article buffer  Generate and print a PostScript image of the article buffer
9469  (@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will be  (@code{gnus-summary-print-article}).  @code{gnus-ps-print-hook} will
9470  run just before printing the buffer.  be run just before printing the buffer.  An alternative way to print
9471    article is to use Muttprint (@pxref{Saving Articles}).
9472    
9473  @end table  @end table
9474    
# Line 8092  can't really see why you'd want that. Line 9483  can't really see why you'd want that.
9483  @table @kbd  @table @kbd
9484    
9485  @item C-c C-s C-n  @item C-c C-s C-n
9486  @kindex C-c C-s C-n @r{(Summary)}  @kindex C-c C-s C-n (Summary)
9487  @findex gnus-summary-sort-by-number  @findex gnus-summary-sort-by-number
9488  Sort by article number (@code{gnus-summary-sort-by-number}).  Sort by article number (@code{gnus-summary-sort-by-number}).
9489    
9490  @item C-c C-s C-a  @item C-c C-s C-a
9491  @kindex C-c C-s C-a @r{(Summary)}  @kindex C-c C-s C-a (Summary)
9492  @findex gnus-summary-sort-by-author  @findex gnus-summary-sort-by-author
9493  Sort by author (@code{gnus-summary-sort-by-author}).  Sort by author (@code{gnus-summary-sort-by-author}).
9494    
9495  @item C-c C-s C-s  @item C-c C-s C-s
9496  @kindex C-c C-s C-s @r{(Summary)}  @kindex C-c C-s C-s (Summary)
9497  @findex gnus-summary-sort-by-subject  @findex gnus-summary-sort-by-subject
9498  Sort by subject (@code{gnus-summary-sort-by-subject}).  Sort by subject (@code{gnus-summary-sort-by-subject}).
9499    
9500  @item C-c C-s C-d  @item C-c C-s C-d
9501  @kindex C-c C-s C-d @r{(Summary)}  @kindex C-c C-s C-d (Summary)
9502  @findex gnus-summary-sort-by-date  @findex gnus-summary-sort-by-date
9503  Sort by date (@code{gnus-summary-sort-by-date}).  Sort by date (@code{gnus-summary-sort-by-date}).
9504    
9505  @item C-c C-s C-l  @item C-c C-s C-l
9506  @kindex C-c C-s C-l @r{(Summary)}  @kindex C-c C-s C-l (Summary)
9507  @findex gnus-summary-sort-by-lines  @findex gnus-summary-sort-by-lines
9508  Sort by lines (@code{gnus-summary-sort-by-lines}).  Sort by lines (@code{gnus-summary-sort-by-lines}).
9509    
9510  @item C-c C-s C-c  @item C-c C-s C-c
9511  @kindex C-c C-s C-c @r{(Summary)}  @kindex C-c C-s C-c (Summary)
9512  @findex gnus-summary-sort-by-chars  @findex gnus-summary-sort-by-chars
9513  Sort by article length (@code{gnus-summary-sort-by-chars}).  Sort by article length (@code{gnus-summary-sort-by-chars}).
9514    
9515  @item C-c C-s C-i  @item C-c C-s C-i
9516  @kindex C-c C-s C-i @r{(Summary)}  @kindex C-c C-s C-i (Summary)
9517  @findex gnus-summary-sort-by-score  @findex gnus-summary-sort-by-score
9518  Sort by score (@code{gnus-summary-sort-by-score}).  Sort by score (@code{gnus-summary-sort-by-score}).
9519    
9520    @item C-c C-s C-r
9521    @kindex C-c C-s C-r (Summary)
9522    @findex gnus-summary-sort-by-random
9523    Randomize (@code{gnus-summary-sort-by-random}).
9524    
9525    @item C-c C-s C-o
9526    @kindex C-c C-s C-o (Summary)
9527    @findex gnus-summary-sort-by-original
9528    Sort using the default sorting method
9529    (@code{gnus-summary-sort-by-original}).
9530  @end table  @end table
9531    
9532  These functions will work both when you use threading and when you don't  These functions will work both when you use threading and when you don't
# Line 8142  Commands}). Line 9544  Commands}).
9544    
9545  @table @kbd  @table @kbd
9546  @item ^  @item ^
9547  @kindex ^ @r{(Summary)}  @kindex ^ (Summary)
9548  @findex gnus-summary-refer-parent-article  @findex gnus-summary-refer-parent-article
9549  If you'd like to read the parent of the current article, and it is not  If you'd like to read the parent of the current article, and it is not
9550  displayed in the summary buffer, you might still be able to.  That is,  displayed in the summary buffer, you might still be able to.  That is,
9551  if the current group is fetched by @sc{nntp}, the parent hasn't expired  if the current group is fetched by @acronym{NNTP}, the parent hasn't expired
9552  and the @code{References} in the current article are not mangled, you  and the @code{References} in the current article are not mangled, you
9553  can just press @kbd{^} or @kbd{A r}  can just press @kbd{^} or @kbd{A r}
9554  (@code{gnus-summary-refer-parent-article}).  If everything goes well,  (@code{gnus-summary-refer-parent-article}).  If everything goes well,
# Line 8160  grandparent and the grandgrandparent of Line 9562  grandparent and the grandgrandparent of
9562  @kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current  @kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
9563  article.  article.
9564    
9565  @item A R @r{(Summary)}  @item A R (Summary)
9566  @findex gnus-summary-refer-references  @findex gnus-summary-refer-references
9567  @kindex A R @r{(Summary)}  @kindex A R (Summary)
9568  Fetch all articles mentioned in the @code{References} header of the  Fetch all articles mentioned in the @code{References} header of the
9569  article (@code{gnus-summary-refer-references}).  article (@code{gnus-summary-refer-references}).
9570    
9571  @item A T @r{(Summary)}  @item A T (Summary)
9572  @findex gnus-summary-refer-thread  @findex gnus-summary-refer-thread
9573  @kindex A T @r{(Summary)}  @kindex A T (Summary)
9574  Display the full thread where the current article appears  Display the full thread where the current article appears
9575  (@code{gnus-summary-refer-thread}).  This command has to fetch all the  (@code{gnus-summary-refer-thread}).  This command has to fetch all the
9576  headers in the current group to work, so it usually takes a while.  If  headers in the current group to work, so it usually takes a while.  If
# Line 8184  fetch when doing this command.  The defa Line 9586  fetch when doing this command.  The defa
9586  the available headers will be fetched.  This variable can be overridden  the available headers will be fetched.  This variable can be overridden
9587  by giving the @kbd{A T} command a numerical prefix.  by giving the @kbd{A T} command a numerical prefix.
9588    
9589  @item M-^ @r{(Summary)}  @item M-^ (Summary)
9590  @findex gnus-summary-refer-article  @findex gnus-summary-refer-article
9591  @kindex M-^ @r{(Summary)}  @kindex M-^ (Summary)
9592  @cindex Message-ID  @cindex Message-ID
9593  @cindex fetching by Message-ID  @cindex fetching by Message-ID
9594  You can also ask the @sc{nntp} server for an arbitrary article, no  You can also ask the @acronym{NNTP} server for an arbitrary article, no
9595  matter what group it belongs to.  @kbd{M-^}  matter what group it belongs to.  @kbd{M-^}
9596  (@code{gnus-summary-refer-article}) will ask you for a  (@code{gnus-summary-refer-article}) will ask you for a
9597  @code{Message-ID}, which is one of those long, hard-to-read thingies  @code{Message-ID}, which is one of those long, hard-to-read thingies
# Line 8204  by giving this command a prefix. Line 9606  by giving this command a prefix.
9606  @vindex gnus-refer-article-method  @vindex gnus-refer-article-method
9607  If the group you are reading is located on a back end that does not  If the group you are reading is located on a back end that does not
9608  support fetching by @code{Message-ID} very well (like @code{nnspool}),  support fetching by @code{Message-ID} very well (like @code{nnspool}),
9609  you can set @code{gnus-refer-article-method} to an @sc{nntp} method.  It  you can set @code{gnus-refer-article-method} to an @acronym{NNTP} method.  It
9610  would, perhaps, be best if the @sc{nntp} server you consult is the one  would, perhaps, be best if the @acronym{NNTP} server you consult is the one
9611  updating the spool you are reading from, but that's not really  updating the spool you are reading from, but that's not really
9612  necessary.  necessary.
9613    
# Line 8215  is a list, Gnus will try all the methods Line 9617  is a list, Gnus will try all the methods
9617  match.  match.
9618    
9619  Here's an example setting that will first try the current method, and  Here's an example setting that will first try the current method, and
9620  then ask Deja if that fails:  then ask Google if that fails:
9621    
9622  @lisp  @lisp
9623  (setq gnus-refer-article-method  (setq gnus-refer-article-method
9624        '(current        '(current
9625          (nnweb "refer" (nnweb-type dejanews))))          (nnweb "google" (nnweb-type google))))
9626  @end lisp  @end lisp
9627    
9628  Most of the mail back ends support fetching by @code{Message-ID}, but do  Most of the mail back ends support fetching by @code{Message-ID}, but
9629  not do a particularly excellent job at it.  That is, @code{nnmbox} and  do not do a particularly excellent job at it.  That is, @code{nnmbox},
9630  @code{nnbabyl} are able to locate articles from any groups, while  @code{nnbabyl}, @code{nnmaildir}, @code{nnml}, are able to locate
9631  @code{nnml} and @code{nnfolder} are only able to locate articles that  articles from any groups, while @code{nnfolder}, and @code{nnimap} are
9632  have been posted to the current group.  (Anything else would be too time  only able to locate articles that have been posted to the current
9633  consuming.)  @code{nnmh} does not support this at all.  group.  (Anything else would be too time consuming.)  @code{nnmh} does
9634    not support this at all.
9635    
9636    
9637  @node Alternative Approaches  @node Alternative Approaches
# Line 8273  it selects just the article.  If given a Line 9676  it selects just the article.  If given a
9676  thread or article and pick it.  (The line number is normally displayed  thread or article and pick it.  (The line number is normally displayed
9677  at the beginning of the summary pick lines.)  at the beginning of the summary pick lines.)
9678    
9679  @item @key{SPC}  @item SPACE
9680  @kindex @key{SPC} (Pick)  @kindex SPACE (Pick)
9681  @findex gnus-pick-next-page  @findex gnus-pick-next-page
9682  Scroll the summary buffer up one page (@code{gnus-pick-next-page}).  If  Scroll the summary buffer up one page (@code{gnus-pick-next-page}).  If
9683  at the end of the buffer, start reading the picked articles.  at the end of the buffer, start reading the picked articles.
# Line 8289  thread if used at the first article of t Line 9692  thread if used at the first article of t
9692  just the article.  You can give this key a numerical prefix to unpick  just the article.  You can give this key a numerical prefix to unpick
9693  the thread or article at that line.  the thread or article at that line.
9694    
9695  @item @key{RET}  @item RET
9696  @kindex @key{RET} (Pick)  @kindex RET (Pick)
9697  @findex gnus-pick-start-reading  @findex gnus-pick-start-reading
9698  @vindex gnus-pick-display-summary  @vindex gnus-pick-display-summary
9699  Start reading the picked articles (@code{gnus-pick-start-reading}).  If  Start reading the picked articles (@code{gnus-pick-start-reading}).  If
# Line 8334  Variables}).  It accepts the same format Line 9737  Variables}).  It accepts the same format
9737  @findex gnus-binary-mode  @findex gnus-binary-mode
9738  @kindex M-x gnus-binary-mode  @kindex M-x gnus-binary-mode
9739  If you spend much time in binary groups, you may grow tired of hitting  If you spend much time in binary groups, you may grow tired of hitting
9740  @kbd{X u}, @kbd{n}, @key{RET} all the time.  @kbd{M-x gnus-binary-mode}  @kbd{X u}, @kbd{n}, @kbd{RET} all the time.  @kbd{M-x gnus-binary-mode}
9741  is a minor mode for summary buffers that makes all ordinary Gnus article  is a minor mode for summary buffers that makes all ordinary Gnus article
9742  selection functions uudecode series of articles and display the result  selection functions uudecode series of articles and display the result
9743  instead of just displaying the articles the normal way.  instead of just displaying the articles the normal way.
# Line 8410  Variables related to the display are: Line 9813  Variables related to the display are:
9813  @item gnus-tree-brackets  @item gnus-tree-brackets
9814  @vindex gnus-tree-brackets  @vindex gnus-tree-brackets
9815  This is used for differentiating between ``real'' articles and  This is used for differentiating between ``real'' articles and
9816  ``sparse'' articles.  The format is @code{((@var{real-open} . @var{real-close})  ``sparse'' articles.  The format is
9817  (@var{sparse-open} . @var{sparse-close}) (@var{dummy-open} . @var{dummy-close}))}, and the  @example
9818  default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.  ((@var{real-open} . @var{real-close})
9819     (@var{sparse-open} . @var{sparse-close})
9820     (@var{dummy-open} . @var{dummy-close}))
9821    @end example
9822    and the default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
9823    
9824  @item gnus-tree-parent-child-edges  @item gnus-tree-parent-child-edges
9825  @vindex gnus-tree-parent-child-edges  @vindex gnus-tree-parent-child-edges
# Line 8431  have several windows displayed side-by-s Line 9838  have several windows displayed side-by-s
9838  buffer is one of these, minimizing the tree window will also resize all  buffer is one of these, minimizing the tree window will also resize all
9839  other windows displayed next to it.  other windows displayed next to it.
9840    
9841    You may also wish to add the following hook to keep the window minimized
9842    at all times:
9843    
9844    @lisp
9845    (add-hook 'gnus-configure-windows-hook
9846              'gnus-tree-perhaps-minimize)
9847    @end lisp
9848    
9849  @item gnus-generate-tree-function  @item gnus-generate-tree-function
9850  @vindex gnus-generate-tree-function  @vindex gnus-generate-tree-function
9851  @findex gnus-generate-horizontal-tree  @findex gnus-generate-horizontal-tree
# Line 8457  Here's an example from a horizontal tree Line 9872  Here's an example from a horizontal tree
9872  Here's the same thread displayed in a vertical tree buffer:  Here's the same thread displayed in a vertical tree buffer:
9873    
9874  @example  @example
9875    @group
9876  @{***@}  @{***@}
9877    |--------------------------\-----\-----\    |--------------------------\-----\-----\
9878  (***)                         [Bjo] [Gun] [Gun]  (***)                         [Bjo] [Gun] [Gun]
# Line 8466  Here's the same thread displayed in a ve Line 9882  Here's the same thread displayed in a ve
9882  [Gun]       [Eri] [Eri] [odd]  [Gun]       [Eri] [Eri] [odd]
9883                            |                            |
9884                          [Paa]                          [Paa]
9885    @end group
9886  @end example  @end example
9887    
9888  If you're using horizontal trees, it might be nice to display the trees  If you're using horizontal trees, it might be nice to display the trees
9889  side-by-side with the summary buffer.  You could add something like the  side-by-side with the summary buffer.  You could add something like the
9890  following to your @file{.gnus.el} file:  following to your @file{~/.gnus.el} file:
9891    
9892  @lisp  @lisp
9893  (setq gnus-use-trees t  (setq gnus-use-trees t
# Line 8485  following to your @file{.gnus.el} file: Line 9902  following to your @file{.gnus.el} file:
9902               (article 1.0))))               (article 1.0))))
9903  @end lisp  @end lisp
9904    
9905  @xref{Windows Configuration}.  @xref{Window Layout}.
9906    
9907    
9908  @node Mail Group Commands  @node Mail Group Commands
# Line 8501  process/prefix convention (@pxref{Proces Line 9918  process/prefix convention (@pxref{Proces
9918  @table @kbd  @table @kbd
9919    
9920  @item B e  @item B e
9921  @kindex B e @r{(Summary)}  @kindex B e (Summary)
9922  @findex gnus-summary-expire-articles  @findex gnus-summary-expire-articles
9923  Expire all expirable articles in the group  Run all expirable articles in the current group through the expiry
9924  (@code{gnus-summary-expire-articles}).  process (@code{gnus-summary-expire-articles}).  That is, delete all
9925    expirable articles in the group that have been around for a while.
9926    (@pxref{Expiring Mail}).
9927    
9928  @item B C-M-e  @item B C-M-e
9929  @kindex B C-M-e @r{(Summary)}  @kindex B C-M-e (Summary)
9930  @findex gnus-summary-expire-articles-now  @findex gnus-summary-expire-articles-now
9931  Delete all the expirable articles in the group  Delete all the expirable articles in the group
9932  (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}  (@code{gnus-summary-expire-articles-now}).  This means that @strong{all}
9933  articles eligible for expiry in the current group will  articles eligible for expiry in the current group will
9934  disappear forever into that big @file{/dev/null} in the sky.  disappear forever into that big @file{/dev/null} in the sky.
9935    
9936  @item B @key{DEL}  @item B DEL
9937  @kindex B @key{DEL} @r{(Summary)}  @kindex B DEL (Summary)
9938  @findex gnus-summary-delete-article  @findex gnus-summary-delete-article
9939  @c @icon{gnus-summary-mail-delete}  @c @icon{gnus-summary-mail-delete}
9940  Delete the mail article.  This is ``delete'' as in ``delete it from your  Delete the mail article.  This is ``delete'' as in ``delete it from your
# Line 8523  disk forever and ever, never to return a Line 9942  disk forever and ever, never to return a
9942  (@code{gnus-summary-delete-article}).  (@code{gnus-summary-delete-article}).
9943    
9944  @item B m  @item B m
9945  @kindex B m @r{(Summary)}  @kindex B m (Summary)
9946  @cindex move mail  @cindex move mail
9947  @findex gnus-summary-move-article  @findex gnus-summary-move-article
9948  @vindex gnus-preserve-marks  @vindex gnus-preserve-marks
9949  Move the article from one mail group to another  Move the article from one mail group to another
9950  (@code{gnus-summary-move-article}).  Marks will be preserved if  (@code{gnus-summary-move-article}).  Marks will be preserved if
9951  @var{gnus-preserve-marks} is non-@code{nil} (which is the default).  @code{gnus-preserve-marks} is non-@code{nil} (which is the default).
9952    
9953  @item B c  @item B c
9954  @kindex B c @r{(Summary)}  @kindex B c (Summary)
9955  @cindex copy mail  @cindex copy mail
9956  @findex gnus-summary-copy-article  @findex gnus-summary-copy-article
9957  @c @icon{gnus-summary-mail-copy}  @c @icon{gnus-summary-mail-copy}
9958  Copy the article from one group (mail group or not) to a mail group  Copy the article from one group (mail group or not) to a mail group
9959  (@code{gnus-summary-copy-article}).  Marks will be preserved if  (@code{gnus-summary-copy-article}).  Marks will be preserved if
9960  @var{gnus-preserve-marks} is non-@code{nil} (which is the default).  @code{gnus-preserve-marks} is non-@code{nil} (which is the default).
9961    
9962  @item B B  @item B B
9963  @kindex B B @r{(Summary)}  @kindex B B (Summary)
9964  @cindex crosspost mail  @cindex crosspost mail
9965  @findex gnus-summary-crosspost-article  @findex gnus-summary-crosspost-article
9966  Crosspost the current article to some other group  Crosspost the current article to some other group
# Line 8550  the article in the other group, and the Line 9969  the article in the other group, and the
9969  be properly updated.  be properly updated.
9970    
9971  @item B i  @item B i
9972  @kindex B i @r{(Summary)}  @kindex B i (Summary)
9973  @findex gnus-summary-import-article  @findex gnus-summary-import-article
9974  Import an arbitrary file into the current mail newsgroup  Import an arbitrary file into the current mail newsgroup
9975  (@code{gnus-summary-import-article}).  You will be prompted for a file  (@code{gnus-summary-import-article}).  You will be prompted for a file
9976  name, a @code{From} header and a @code{Subject} header.  name, a @code{From} header and a @code{Subject} header.
9977    
9978    @item B I
9979    @kindex B I (Summary)
9980    @findex gnus-summary-create-article
9981    Create an empty article in the current mail newsgroups
9982    (@code{gnus-summary-create-article}).  You will be prompted for a
9983    @code{From} header and a @code{Subject} header.
9984    
9985  @item B r  @item B r
9986  @kindex B r @r{(Summary)}  @kindex B r (Summary)
9987  @findex gnus-summary-respool-article  @findex gnus-summary-respool-article
9988    @vindex gnus-summary-respool-default-method
9989  Respool the mail article (@code{gnus-summary-respool-article}).  Respool the mail article (@code{gnus-summary-respool-article}).
9990  @code{gnus-summary-respool-default-method} will be used as the default  @code{gnus-summary-respool-default-method} will be used as the default
9991  select method when respooling.  This variable is @code{nil} by default,  select method when respooling.  This variable is @code{nil} by default,
9992  which means that the current group select method will be used instead.  which means that the current group select method will be used instead.
9993  Marks will be preserved if @var{gnus-preserve-marks} is non-@code{nil}  Marks will be preserved if @code{gnus-preserve-marks} is non-@code{nil}
9994  (which is the default).  (which is the default).
9995    
9996  @item B w  @item B w
9997  @itemx e  @itemx e
9998  @kindex B w @r{(Summary)}  @kindex B w (Summary)
9999  @kindex e @r{(Summary)}  @kindex e (Summary)
10000  @findex gnus-summary-edit-article  @findex gnus-summary-edit-article
10001  @kindex C-c C-c @r{(Article)}  @kindex C-c C-c (Article)
10002    @findex gnus-summary-edit-article-done
10003  Edit the current article (@code{gnus-summary-edit-article}).  To finish  Edit the current article (@code{gnus-summary-edit-article}).  To finish
10004  editing and make the changes permanent, type @kbd{C-c C-c}  editing and make the changes permanent, type @kbd{C-c C-c}
10005  (@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the  (@code{gnus-summary-edit-article-done}).  If you give a prefix to the
10006  @kbd{C-c C-c} command, Gnus won't re-highlight the article.  @kbd{C-c C-c} command, Gnus won't re-highlight the article.
10007    
10008  @item B q  @item B q
10009  @kindex B q @r{(Summary)}  @kindex B q (Summary)
10010  @findex gnus-summary-respool-query  @findex gnus-summary-respool-query
10011  If you want to re-spool an article, you might be curious as to what group  If you want to re-spool an article, you might be curious as to what group
10012  the article will end up in before you do the re-spooling.  This command  the article will end up in before you do the re-spooling.  This command
10013  will tell you (@code{gnus-summary-respool-query}).  will tell you (@code{gnus-summary-respool-query}).
10014    
10015  @item B t  @item B t
10016  @kindex B t @r{(Summary)}  @kindex B t (Summary)
10017  @findex gnus-summary-respool-trace  @findex gnus-summary-respool-trace
10018  Similarly, this command will display all fancy splitting patterns used  Similarly, this command will display all fancy splitting patterns used
10019  when repooling, if any (@code{gnus-summary-respool-trace}).  when respooling, if any (@code{gnus-summary-respool-trace}).
10020    
10021  @item B p  @item B p
10022  @kindex B p @r{(Summary)}  @kindex B p (Summary)
10023  @findex gnus-summary-article-posted-p  @findex gnus-summary-article-posted-p
10024  Some people have a tendency to send you "courtesy" copies when they  Some people have a tendency to send you ``courtesy'' copies when they
10025  follow up to articles you have posted.  These usually have a  follow up to articles you have posted.  These usually have a
10026  @code{Newsgroups} header in them, but not always.  This command  @code{Newsgroups} header in them, but not always.  This command
10027  (@code{gnus-summary-article-posted-p}) will try to fetch the current  (@code{gnus-summary-article-posted-p}) will try to fetch the current
# Line 8604  it didn't find the article, it may have Line 10032  it didn't find the article, it may have
10032  propagation is much faster than news propagation, and the news copy may  propagation is much faster than news propagation, and the news copy may
10033  just not have arrived yet.  just not have arrived yet.
10034    
10035    @item K E
10036    @kindex K E (Summary)
10037    @findex gnus-article-encrypt-body
10038    @vindex gnus-article-encrypt-protocol
10039    Encrypt the body of an article (@code{gnus-article-encrypt-body}).
10040    The body is encrypted with the encryption protocol specified by the
10041    variable @code{gnus-article-encrypt-protocol}.
10042    
10043  @end table  @end table
10044    
10045  @vindex gnus-move-split-methods  @vindex gnus-move-split-methods
# Line 8628  suggestions you find reasonable.  (Note Line 10064  suggestions you find reasonable.  (Note
10064  @section Various Summary Stuff  @section Various Summary Stuff
10065    
10066  @menu  @menu
10067  * Summary Group Information::         Information oriented commands.  * Summary Group Information::   Information oriented commands.
10068  * Searching for Articles::            Multiple article commands.  * Searching for Articles::      Multiple article commands.
10069  * Summary Generation Commands::       (Re)generating the summary buffer.  * Summary Generation Commands::
10070  * Really Various Summary Commands::   Those pesky non-conformant commands.  * Really Various Summary Commands::  Those pesky non-conformant commands.
10071  @end menu  @end menu
10072    
10073  @table @code  @table @code
10074    @vindex gnus-summary-display-while-building
10075    @item gnus-summary-display-while-building
10076    If non-@code{nil}, show and update the summary buffer as it's being
10077    built.  If @code{t}, update the buffer after every line is inserted.
10078    If the value is an integer, @var{n}, update the display every @var{n}
10079    lines.  The default is @code{nil}.
10080    
10081    @vindex gnus-summary-display-arrow
10082    @item gnus-summary-display-arrow
10083    If non-@code{nil}, display an arrow in the fringe to indicate the
10084    current article.
10085    
10086  @vindex gnus-summary-mode-hook  @vindex gnus-summary-mode-hook
10087  @item gnus-summary-mode-hook  @item gnus-summary-mode-hook
10088  This hook is called when creating a summary mode buffer.  This hook is called when creating a summary mode buffer.
# Line 8685  the list in one particular group: Line 10133  the list in one particular group:
10133      articles))      articles))
10134  @end lisp  @end lisp
10135    
10136    @vindex gnus-newsgroup-variables
10137    @item gnus-newsgroup-variables
10138    A list of newsgroup (summary buffer) local variables, or cons of
10139    variables and their default values (when the default values are not
10140    @code{nil}), that should be made global while the summary buffer is
10141    active.  These variables can be used to set variables in the group
10142    parameters while still allowing them to affect operations done in
10143    other buffers.  For example:
10144    
10145    @lisp
10146    (setq gnus-newsgroup-variables
10147          '(message-use-followup-to
10148            (gnus-visible-headers .
10149     "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
10150    @end lisp
10151    
10152  @end table  @end table
10153    
10154    
# Line 8694  the list in one particular group: Line 10158  the list in one particular group:
10158  @table @kbd  @table @kbd
10159    
10160  @item H f  @item H f
10161  @kindex H f @r{(Summary)}  @kindex H f (Summary)
10162  @findex gnus-summary-fetch-faq  @findex gnus-summary-fetch-faq
10163  @vindex gnus-group-faq-directory  @vindex gnus-group-faq-directory
10164  Try to fetch the FAQ (list of frequently asked questions) for the  Try to fetch the @acronym{FAQ} (list of frequently asked questions)
10165  current group (@code{gnus-summary-fetch-faq}).  Gnus will try to get the  for the current group (@code{gnus-summary-fetch-faq}).  Gnus will try
10166  FAQ from @code{gnus-group-faq-directory}, which is usually a directory  to get the @acronym{FAQ} from @code{gnus-group-faq-directory}, which
10167  on a remote machine.  This variable can also be a list of directories.  is usually a directory on a remote machine.  This variable can also be
10168  In that case, giving a prefix to this command will allow you to choose  a list of directories.  In that case, giving a prefix to this command
10169  between the various sites.  @code{ange-ftp} or @code{efs} will probably  will allow you to choose between the various sites.  @code{ange-ftp}
10170  be used for fetching the file.  or @code{efs} will probably be used for fetching the file.
10171    
10172  @item H d  @item H d
10173  @kindex H d @r{(Summary)}  @kindex H d (Summary)
10174  @findex gnus-summary-describe-group  @findex gnus-summary-describe-group
10175  Give a brief description of the current group  Give a brief description of the current group
10176  (@code{gnus-summary-describe-group}).  If given a prefix, force  (@code{gnus-summary-describe-group}).  If given a prefix, force
10177  rereading the description from the server.  rereading the description from the server.
10178    
10179  @item H h  @item H h
10180  @kindex H h @r{(Summary)}  @kindex H h (Summary)
10181  @findex gnus-summary-describe-briefly  @findex gnus-summary-describe-briefly
10182  Give an extremely brief description of the most important summary  Give an extremely brief description of the most important summary
10183  keystrokes (@code{gnus-summary-describe-briefly}).  keystrokes (@code{gnus-summary-describe-briefly}).
10184    
10185  @item H i  @item H i
10186  @kindex H i @r{(Summary)}  @kindex H i (Summary)
10187  @findex gnus-info-find-node  @findex gnus-info-find-node
10188  Go to the Gnus info node (@code{gnus-info-find-node}).  Go to the Gnus info node (@code{gnus-info-find-node}).
10189  @end table  @end table
# Line 8731  Go to the Gnus info node (@code{gnus-inf Line 10195  Go to the Gnus info node (@code{gnus-inf
10195  @table @kbd  @table @kbd
10196    
10197  @item M-s  @item M-s
10198  @kindex M-s @r{(Summary)}  @kindex M-s (Summary)
10199  @findex gnus-summary-search-article-forward  @findex gnus-summary-search-article-forward
10200  Search through all subsequent articles for a regexp  Search through all subsequent (raw) articles for a regexp
10201  (@code{gnus-summary-search-article-forward}).  (@code{gnus-summary-search-article-forward}).
10202    
10203  @item M-r  @item M-r
10204  @kindex M-r @r{(Summary)}  @kindex M-r (Summary)
10205  @findex gnus-summary-search-article-backward  @findex gnus-summary-search-article-backward
10206  Search through all previous articles for a regexp  Search through all previous (raw) articles for a regexp
10207  (@code{gnus-summary-search-article-backward}).  (@code{gnus-summary-search-article-backward}).
10208    
10209  @item &  @item &
10210  @kindex & @r{(Summary)}  @kindex & (Summary)
10211  @findex gnus-summary-execute-command  @findex gnus-summary-execute-command
10212  This command will prompt you for a header, a regular expression to match  This command will prompt you for a header, a regular expression to match
10213  on this field, and a command to be executed if the match is made  on this field, and a command to be executed if the match is made
# Line 8751  on this field, and a command to be execu Line 10215  on this field, and a command to be execu
10215  string, the match is done on the entire article.  If given a prefix,  string, the match is done on the entire article.  If given a prefix,
10216  search backward instead.  search backward instead.
10217    
10218  For instance, @kbd{& @key{RET} some.*string #} will put the process mark on  For instance, @kbd{& RET some.*string RET #} will put the process mark on
10219  all articles that have heads or bodies that match @samp{some.*string}.  all articles that have heads or bodies that match @samp{some.*string}.
10220    
10221  @item M-&  @item M-&
10222  @kindex M-& @r{(Summary)}  @kindex M-& (Summary)
10223  @findex gnus-summary-universal-argument  @findex gnus-summary-universal-argument
10224  Perform any operation on all articles that have been marked with  Perform any operation on all articles that have been marked with
10225  the process mark (@code{gnus-summary-universal-argument}).  the process mark (@code{gnus-summary-universal-argument}).
# Line 8767  the process mark (@code{gnus-summary-uni Line 10231  the process mark (@code{gnus-summary-uni
10231  @table @kbd  @table @kbd
10232    
10233  @item Y g  @item Y g
10234  @kindex Y g @r{(Summary)}  @kindex Y g (Summary)
10235  @findex gnus-summary-prepare  @findex gnus-summary-prepare
10236  Regenerate the current summary buffer (@code{gnus-summary-prepare}).  Regenerate the current summary buffer (@code{gnus-summary-prepare}).
10237    
10238  @item Y c  @item Y c
10239  @kindex Y c @r{(Summary)}  @kindex Y c (Summary)
10240  @findex gnus-summary-insert-cached-articles  @findex gnus-summary-insert-cached-articles
10241  Pull all cached articles (for the current group) into the summary buffer  Pull all cached articles (for the current group) into the summary buffer
10242  (@code{gnus-summary-insert-cached-articles}).  (@code{gnus-summary-insert-cached-articles}).
10243    
10244    @item Y d
10245    @kindex Y d (Summary)
10246    @findex gnus-summary-insert-dormant-articles
10247    Pull all dormant articles (for the current group) into the summary buffer
10248    (@code{gnus-summary-insert-dormant-articles}).
10249    
10250  @end table  @end table
10251    
10252    
# Line 8787  Pull all cached articles (for the curren Line 10257  Pull all cached articles (for the curren
10257    
10258  @item A D  @item A D
10259  @itemx C-d  @itemx C-d
10260  @kindex C-d @r{(Summary)}  @kindex C-d (Summary)
10261  @kindex A D @r{(Summary)}  @kindex A D (Summary)
10262  @findex gnus-summary-enter-digest-group  @findex gnus-summary-enter-digest-group
10263  If the current article is a collection of other articles (for instance,  If the current article is a collection of other articles (for instance,
10264  a digest), you might use this command to enter a group based on the that  a digest), you might use this command to enter a group based on the that
# Line 8800  some format, you @kbd{C-d} and read thes Line 10270  some format, you @kbd{C-d} and read thes
10270  fashion.  fashion.
10271    
10272  @item C-M-d  @item C-M-d
10273  @kindex C-M-d @r{(Summary)}  @kindex C-M-d (Summary)
10274  @findex gnus-summary-read-document  @findex gnus-summary-read-document
10275  This command is very similar to the one above, but lets you gather  This command is very similar to the one above, but lets you gather
10276  several documents into one biiig group  several documents into one biiig group
# Line 8811  command understands the process/prefix c Line 10281  command understands the process/prefix c
10281  (@pxref{Process/Prefix}).  (@pxref{Process/Prefix}).
10282    
10283  @item C-t  @item C-t
10284  @kindex C-t @r{(Summary)}  @kindex C-t (Summary)
10285  @findex gnus-summary-toggle-truncation  @findex gnus-summary-toggle-truncation
10286  Toggle truncation of summary lines  Toggle truncation of summary lines
10287  (@code{gnus-summary-toggle-truncation}).  This will probably confuse the  (@code{gnus-summary-toggle-truncation}).  This will probably confuse the
# Line 8819  line centering function in the summary b Line 10289  line centering function in the summary b
10289  to have truncation switched off while reading articles.  to have truncation switched off while reading articles.
10290    
10291  @item =  @item =
10292  @kindex = @r{(Summary)}  @kindex = (Summary)
10293  @findex gnus-summary-expand-window  @findex gnus-summary-expand-window
10294  Expand the summary buffer window (@code{gnus-summary-expand-window}).  Expand the summary buffer window (@code{gnus-summary-expand-window}).
10295  If given a prefix, force an @code{article} window configuration.  If given a prefix, force an @code{article} window configuration.
10296    
10297  @item C-M-e  @item C-M-e
10298  @kindex C-M-e @r{(Summary)}  @kindex C-M-e (Summary)
10299  @findex gnus-summary-edit-parameters  @findex gnus-summary-edit-parameters
10300  Edit the group parameters (@pxref{Group Parameters}) of the current  Edit the group parameters (@pxref{Group Parameters}) of the current
10301  group (@code{gnus-summary-edit-parameters}).  group (@code{gnus-summary-edit-parameters}).
10302    
10303  @item C-M-a  @item C-M-a
10304  @kindex C-M-a @r{(Summary)}  @kindex C-M-a (Summary)
10305  @findex gnus-summary-customize-parameters  @findex gnus-summary-customize-parameters
10306  Customize the group parameters (@pxref{Group Parameters}) of the current  Customize the group parameters (@pxref{Group Parameters}) of the current
10307  group (@code{gnus-summary-customize-parameters}).  group (@code{gnus-summary-customize-parameters}).
# Line 8850  group and return you to the group buffer Line 10320  group and return you to the group buffer
10320  @table @kbd  @table @kbd
10321    
10322  @item Z Z  @item Z Z
10323    @itemx Z Q
10324  @itemx q  @itemx q
10325  @kindex Z Z @r{(Summary)}  @kindex Z Z (Summary)
10326  @kindex q @r{(Summary)}  @kindex Z Q (Summary)
10327    @kindex q (Summary)
10328  @findex gnus-summary-exit  @findex gnus-summary-exit
10329  @vindex gnus-summary-exit-hook  @vindex gnus-summary-exit-hook
10330  @vindex gnus-summary-prepare-exit-hook  @vindex gnus-summary-prepare-exit-hook
10331    @vindex gnus-group-no-more-groups-hook
10332  @c @icon{gnus-summary-exit}  @c @icon{gnus-summary-exit}
10333  Exit the current group and update all information on the group  Exit the current group and update all information on the group
10334  (@code{gnus-summary-exit}).  @code{gnus-summary-prepare-exit-hook} is  (@code{gnus-summary-exit}).  @code{gnus-summary-prepare-exit-hook} is
# Line 8867  group mode having no more (unread) group Line 10340  group mode having no more (unread) group
10340    
10341  @item Z E  @item Z E
10342  @itemx Q  @itemx Q
10343  @kindex Z E @r{(Summary)}  @kindex Z E (Summary)
10344  @kindex Q @r{(Summary)}  @kindex Q (Summary)
10345  @findex gnus-summary-exit-no-update  @findex gnus-summary-exit-no-update
10346  Exit the current group without updating any information on the group  Exit the current group without updating any information on the group
10347  (@code{gnus-summary-exit-no-update}).  (@code{gnus-summary-exit-no-update}).
10348    
10349  @item Z c  @item Z c
10350  @itemx c  @itemx c
10351  @kindex Z c @r{(Summary)}  @kindex Z c (Summary)
10352  @kindex c @r{(Summary)}  @kindex c (Summary)
10353  @findex gnus-summary-catchup-and-exit  @findex gnus-summary-catchup-and-exit
10354  @c @icon{gnus-summary-catchup-and-exit}  @c @icon{gnus-summary-catchup-and-exit}
10355  Mark all unticked articles in the group as read and then exit  Mark all unticked articles in the group as read and then exit
10356  (@code{gnus-summary-catchup-and-exit}).  (@code{gnus-summary-catchup-and-exit}).
10357    
10358  @item Z C  @item Z C
10359  @kindex Z C @r{(Summary)}  @kindex Z C (Summary)
10360  @findex gnus-summary-catchup-all-and-exit  @findex gnus-summary-catchup-all-and-exit
10361  Mark all articles, even the ticked ones, as read and then exit  Mark all articles, even the ticked ones, as read and then exit
10362  (@code{gnus-summary-catchup-all-and-exit}).  (@code{gnus-summary-catchup-all-and-exit}).
10363    
10364  @item Z n  @item Z n
10365  @kindex Z n @r{(Summary)}  @kindex Z n (Summary)
10366  @findex gnus-summary-catchup-and-goto-next-group  @findex gnus-summary-catchup-and-goto-next-group
10367  Mark all articles as read and go to the next group  Mark all articles as read and go to the next group
10368  (@code{gnus-summary-catchup-and-goto-next-group}).  (@code{gnus-summary-catchup-and-goto-next-group}).
10369    
10370  @item Z R  @item Z R
10371  @kindex Z R @r{(Summary)}  @itemx C-x C-s
10372    @kindex Z R (Summary)
10373    @kindex C-x C-s (Summary)
10374  @findex gnus-summary-reselect-current-group  @findex gnus-summary-reselect-current-group
10375  Exit this group, and then enter it again  Exit this group, and then enter it again
10376  (@code{gnus-summary-reselect-current-group}).  If given a prefix, select  (@code{gnus-summary-reselect-current-group}).  If given a prefix, select
# Line 8903  all articles, both read and unread. Line 10378  all articles, both read and unread.
10378    
10379  @item Z G  @item Z G
10380  @itemx M-g  @itemx M-g
10381  @kindex Z G @r{(Summary)}  @kindex Z G (Summary)
10382  @kindex M-g @r{(Summary)}  @kindex M-g (Summary)
10383  @findex gnus-summary-rescan-group  @findex gnus-summary-rescan-group
10384  @c @icon{gnus-summary-mail-get}  @c @icon{gnus-summary-mail-get}
10385  Exit the group, check for new articles in the group, and select the  Exit the group, check for new articles in the group, and select the
# Line 8912  group (@code{gnus-summary-rescan-group}) Line 10387  group (@code{gnus-summary-rescan-group})
10387  articles, both read and unread.  articles, both read and unread.
10388    
10389  @item Z N  @item Z N
10390  @kindex Z N @r{(Summary)}  @kindex Z N (Summary)
10391  @findex gnus-summary-next-group  @findex gnus-summary-next-group
10392  Exit the group and go to the next group  Exit the group and go to the next group
10393  (@code{gnus-summary-next-group}).  (@code{gnus-summary-next-group}).
10394    
10395  @item Z P  @item Z P
10396  @kindex Z P @r{(Summary)}  @kindex Z P (Summary)
10397  @findex gnus-summary-prev-group  @findex gnus-summary-prev-group
10398  Exit the group and go to the previous group  Exit the group and go to the previous group
10399  (@code{gnus-summary-prev-group}).  (@code{gnus-summary-prev-group}).
10400    
10401  @item Z s  @item Z s
10402  @kindex Z s @r{(Summary)}  @kindex Z s (Summary)
10403  @findex gnus-summary-save-newsrc  @findex gnus-summary-save-newsrc
10404  Save the current number of read/marked articles in the dribble buffer  Save the current number of read/marked articles in the dribble buffer
10405  and then save the dribble buffer (@code{gnus-summary-save-newsrc}).  If  and then save the dribble buffer (@code{gnus-summary-save-newsrc}).  If
# Line 8984  excessive crossposting (@pxref{Summary M Line 10459  excessive crossposting (@pxref{Summary M
10459    
10460  @cindex cross-posting  @cindex cross-posting
10461  @cindex Xref  @cindex Xref
10462  @cindex @sc{nov}  @cindex @acronym{NOV}
10463  One thing that may cause Gnus to not do the cross-posting thing  One thing that may cause Gnus to not do the cross-posting thing
10464  correctly is if you use an @sc{nntp} server that supports @sc{xover}  correctly is if you use an @acronym{NNTP} server that supports @sc{xover}
10465  (which is very nice, because it speeds things up considerably) which  (which is very nice, because it speeds things up considerably) which
10466  does not include the @code{Xref} header in its @sc{nov} lines.  This is  does not include the @code{Xref} header in its @acronym{NOV} lines.  This is
10467  Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing  Evil, but all too common, alas, alack.  Gnus tries to Do The Right Thing
10468  even with @sc{xover} by registering the @code{Xref} lines of all  even with @sc{xover} by registering the @code{Xref} lines of all
10469  articles you actually read, but if you kill the articles, or just mark  articles you actually read, but if you kill the articles, or just mark
# Line 8998  the cross reference mechanism. Line 10473  the cross reference mechanism.
10473    
10474  @cindex LIST overview.fmt  @cindex LIST overview.fmt
10475  @cindex overview.fmt  @cindex overview.fmt
10476  To check whether your @sc{nntp} server includes the @code{Xref} header  To check whether your @acronym{NNTP} server includes the @code{Xref} header
10477  in its overview files, try @samp{telnet your.nntp.server nntp},  in its overview files, try @samp{telnet your.nntp.server nntp},
10478  @samp{MODE READER} on @code{inn} servers, and then say @samp{LIST  @samp{MODE READER} on @code{inn} servers, and then say @samp{LIST
10479  overview.fmt}.  This may not work, but if it does, and the last line you  overview.fmt}.  This may not work, but if it does, and the last line you
# Line 9027  reasons. Line 10502  reasons.
10502    
10503  @enumerate  @enumerate
10504  @item  @item
10505  The @sc{nntp} server may fail to generate the @code{Xref} header.  This  The @acronym{NNTP} server may fail to generate the @code{Xref} header.  This
10506  is evil and not very common.  is evil and not very common.
10507    
10508  @item  @item
10509  The @sc{nntp} server may fail to include the @code{Xref} header in the  The @acronym{NNTP} server may fail to include the @code{Xref} header in the
10510  @file{.overview} data bases.  This is evil and all too common, alas.  @file{.overview} data bases.  This is evil and all too common, alas.
10511    
10512  @item  @item
10513  You may be reading the same group (or several related groups) from  You may be reading the same group (or several related groups) from
10514  different @sc{nntp} servers.  different @acronym{NNTP} servers.
10515    
10516  @item  @item
10517  You may be getting mail that duplicates articles posted to groups.  You may be getting mail that duplicates articles posted to groups.
# Line 9092  so that means that if you stop and start Line 10567  so that means that if you stop and start
10567  @code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up  @code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up
10568  to you to figure out, I think.  to you to figure out, I think.
10569    
10570    @node Security
10571    @section Security
10572    
10573    Gnus is able to verify signed messages or decrypt encrypted messages.
10574    The formats that are supported are @acronym{PGP}, @acronym{PGP/MIME}
10575    and @acronym{S/MIME}, however you need some external programs to get
10576    things to work:
10577    
10578    @enumerate
10579    @item
10580    To handle @acronym{PGP} and @acronym{PGP/MIME} messages, you have to
10581    install an OpenPGP implementation such as GnuPG.  The Lisp interface
10582    to GnuPG included with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG
10583    Manual}), but Mailcrypt and gpg.el are also supported.
10584    
10585    @item
10586    To handle @acronym{S/MIME} message, you need to install OpenSSL.  OpenSSL 0.9.6
10587    or newer is recommended.
10588    
10589    @end enumerate
10590    
10591    More information on how to set things up can be found in the message
10592    manual (@pxref{Security, ,Security, message, Message Manual}).
10593    
10594    @table @code
10595    @item mm-verify-option
10596    @vindex mm-verify-option
10597    Option of verifying signed parts.  @code{never}, not verify;
10598    @code{always}, always verify; @code{known}, only verify known
10599    protocols.  Otherwise, ask user.
10600    
10601    @item mm-decrypt-option
10602    @vindex mm-decrypt-option
10603    Option of decrypting encrypted parts.  @code{never}, no decryption;
10604    @code{always}, always decrypt; @code{known}, only decrypt known
10605    protocols.  Otherwise, ask user.
10606    
10607    @item mml1991-use
10608    @vindex mml1991-use
10609    Symbol indicating elisp interface to OpenPGP implementation for
10610    @acronym{PGP} messages.  The default is @code{pgg}, but
10611    @code{mailcrypt} and @code{gpg} are also supported although
10612    deprecated.
10613    
10614    @item mml2015-use
10615    @vindex mml2015-use
10616    Symbol indicating elisp interface to OpenPGP implementation for
10617    @acronym{PGP/MIME} messages.  The default is @code{pgg}, but
10618    @code{mailcrypt} and @code{gpg} are also supported although
10619    deprecated.
10620    
10621    @end table
10622    
10623    @cindex snarfing keys
10624    @cindex importing PGP keys
10625    @cindex PGP key ring import
10626    Snarfing OpenPGP keys (i.e., importing keys from articles into your
10627    key ring) is not supported explicitly through a menu item or command,
10628    rather Gnus do detect and label keys as @samp{application/pgp-keys},
10629    allowing you to specify whatever action you think is appropriate
10630    through the usual @acronym{MIME} infrastructure.  You can use a
10631    @file{~/.mailcap} entry (@pxref{mailcap, , mailcap, emacs-mime, The
10632    Emacs MIME Manual}) such as the following to import keys using GNU
10633    Privacy Guard when you click on the @acronym{MIME} button
10634    (@pxref{Using MIME}).
10635    
10636    @example
10637    application/pgp-keys; gpg --import --interactive --verbose; needsterminal
10638    @end example
10639    @noindent
10640    This happens to also be the default action defined in
10641    @code{mailcap-mime-data}.
10642    
10643    @node Mailing List
10644    @section Mailing List
10645    @cindex mailing list
10646    @cindex RFC 2396
10647    
10648    @kindex A M (summary)
10649    @findex gnus-mailing-list-insinuate
10650    Gnus understands some mailing list fields of RFC 2369.  To enable it,
10651    add a @code{to-list} group parameter (@pxref{Group Parameters}),
10652    possibly using @kbd{A M} (@code{gnus-mailing-list-insinuate}) in the
10653    summary buffer.
10654    
10655    That enables the following commands to the summary buffer:
10656    
10657    @table @kbd
10658    
10659    @item C-c C-n h
10660    @kindex C-c C-n h (Summary)
10661    @findex gnus-mailing-list-help
10662    Send a message to fetch mailing list help, if List-Help field exists.
10663    
10664    @item C-c C-n s
10665    @kindex C-c C-n s (Summary)
10666    @findex gnus-mailing-list-subscribe
10667    Send a message to subscribe the mailing list, if List-Subscribe field exists.
10668    
10669    @item C-c C-n u
10670    @kindex C-c C-n u (Summary)
10671    @findex gnus-mailing-list-unsubscribe
10672    Send a message to unsubscribe the mailing list, if List-Unsubscribe
10673    field exists.
10674    
10675    @item C-c C-n p
10676    @kindex C-c C-n p (Summary)
10677    @findex gnus-mailing-list-post
10678    Post to the mailing list, if List-Post field exists.
10679    
10680    @item C-c C-n o
10681    @kindex C-c C-n o (Summary)
10682    @findex gnus-mailing-list-owner
10683    Send a message to the mailing list owner, if List-Owner field exists.
10684    
10685    @item C-c C-n a
10686    @kindex C-c C-n a (Summary)
10687    @findex gnus-mailing-list-owner
10688    Browse the mailing list archive, if List-Archive field exists.
10689    
10690    @end table
10691    
10692  @node The Article Buffer  
10693  @chapter The Article Buffer  @node Article Buffer
10694    @chapter Article Buffer
10695  @cindex article buffer  @cindex article buffer
10696    
10697  The articles are displayed in the article buffer, of which there is only  The articles are displayed in the article buffer, of which there is only
# Line 9102  one.  All the summary buffers share the Line 10699  one.  All the summary buffers share the
10699  tell Gnus otherwise.  tell Gnus otherwise.
10700    
10701  @menu  @menu
10702  * Hiding Headers::        Deciding what headers should be displayed.  * Hiding Headers::              Deciding what headers should be displayed.
10703  * Using MIME::            Pushing articles through @sc{mime} before reading them.  * Using MIME::                  Pushing articles through @acronym{MIME} before reading them.
10704  * Customizing Articles::  Tailoring the look of the articles.  * Customizing Articles::        Tailoring the look of the articles.
10705  * Article Keymap::        Keystrokes available in the article buffer.  * Article Keymap::              Keystrokes available in the article buffer.
10706  * Misc Article::          Other stuff.  * Misc Article::                Other stuff.
10707  @end menu  @end menu
10708    
10709    
# Line 9124  who wrote the article, the date it was w Line 10721  who wrote the article, the date it was w
10721  article.  That's well and nice, but there's also lots of information  article.  That's well and nice, but there's also lots of information
10722  most people do not want to see---what systems the article has passed  most people do not want to see---what systems the article has passed
10723  through before reaching you, the @code{Message-ID}, the  through before reaching you, the @code{Message-ID}, the
10724  @code{References}, etc. ad nauseum---and you'll probably want to get rid  @code{References}, etc. ad nauseam---and you'll probably want to get rid
10725  of some of those lines.  If you want to keep all those lines in the  of some of those lines.  If you want to keep all those lines in the
10726  article buffer, you can set @code{gnus-show-all-headers} to @code{t}.  article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
10727    
# Line 9189  variable, will be displayed in random or Line 10786  variable, will be displayed in random or
10786  @findex gnus-article-hide-boring-headers  @findex gnus-article-hide-boring-headers
10787  @vindex gnus-boring-article-headers  @vindex gnus-boring-article-headers
10788  You can hide further boring headers by setting  You can hide further boring headers by setting
10789  @code{gnus-treat-hide-boring-header} to @code{head}.  What this function  @code{gnus-treat-hide-boring-headers} to @code{head}.  What this function
10790  does depends on the @code{gnus-boring-article-headers} variable.  It's a  does depends on the @code{gnus-boring-article-headers} variable.  It's a
10791  list, but this list doesn't actually contain header names.  Instead is  list, but this list doesn't actually contain header names.  Instead it
10792  lists various @dfn{boring conditions} that Gnus can check and remove  lists various @dfn{boring conditions} that Gnus can check and remove
10793  from sight.  from sight.
10794    
# Line 9203  Remove all empty headers. Line 10800  Remove all empty headers.
10800  Remove the @code{Followup-To} header if it is identical to the  Remove the @code{Followup-To} header if it is identical to the
10801  @code{Newsgroups} header.  @code{Newsgroups} header.
10802  @item reply-to  @item reply-to
10803  Remove the @code{Reply-To} header if it lists the same address as the  Remove the @code{Reply-To} header if it lists the same addresses as
10804  @code{From} header.  the @code{From} header, or if the @code{broken-reply-to} group
10805    parameter is set.
10806  @item newsgroups  @item newsgroups
10807  Remove the @code{Newsgroups} header if it only contains the current group  Remove the @code{Newsgroups} header if it only contains the current group
10808  name.  name.
10809    @item to-address
10810    Remove the @code{To} header if it only contains the address identical to
10811    the current group's @code{to-address} parameter.
10812    @item to-list
10813    Remove the @code{To} header if it only contains the address identical to
10814    the current group's @code{to-list} parameter.
10815    @item cc-list
10816    Remove the @code{CC} header if it only contains the address identical to
10817    the current group's @code{to-list} parameter.
10818  @item date  @item date
10819  Remove the @code{Date} header if the article is less than three days  Remove the @code{Date} header if the article is less than three days
10820  old.  old.
# Line 9217  Remove the @code{To} header if it is ver Line 10824  Remove the @code{To} header if it is ver
10824  Remove all @code{To} headers if there are more than one.  Remove all @code{To} headers if there are more than one.
10825  @end table  @end table
10826    
10827  To include the four three elements, you could say something like;  To include these three elements, you could say something like:
10828    
10829  @lisp  @lisp
10830  (setq gnus-boring-article-headers  (setq gnus-boring-article-headers
# Line 9228  This is also the default value for this Line 10835  This is also the default value for this
10835    
10836    
10837  @node Using MIME  @node Using MIME
10838  @section Using @sc{mime}  @section Using MIME
10839  @cindex @sc{mime}  @cindex @acronym{MIME}
10840    
10841  Mime is a standard for waving your hands through the air, aimlessly,  Mime is a standard for waving your hands through the air, aimlessly,
10842  while people stand around yawning.  while people stand around yawning.
10843    
10844  @sc{mime}, however, is a standard for encoding your articles, aimlessly,  @acronym{MIME}, however, is a standard for encoding your articles, aimlessly,
10845  while all newsreaders die of fear.  while all newsreaders die of fear.
10846    
10847  @sc{mime} may specify what character set the article uses, the encoding  @acronym{MIME} may specify what character set the article uses, the encoding
10848  of the characters, and it also makes it possible to embed pictures and  of the characters, and it also makes it possible to embed pictures and
10849  other naughty stuff in innocent-looking articles.  other naughty stuff in innocent-looking articles.
10850    
10851  @vindex gnus-display-mime-function  @vindex gnus-display-mime-function
10852  @findex gnus-display-mime  @findex gnus-display-mime
10853  Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function}  Gnus pushes @acronym{MIME} articles through @code{gnus-display-mime-function}
10854  to display the @sc{mime} parts.  This is @code{gnus-display-mime} by  to display the @acronym{MIME} parts.  This is @code{gnus-display-mime} by
10855  default, which creates a bundle of clickable buttons that can be used to  default, which creates a bundle of clickable buttons that can be used to
10856  display, save and manipulate the @sc{mime} objects.  display, save and manipulate the @acronym{MIME} objects.
10857    
10858  The following commands are available when you have placed point over a  The following commands are available when you have placed point over a
10859  @sc{mime} button:  @acronym{MIME} button:
10860    
10861  @table @kbd  @table @kbd
10862  @findex gnus-article-press-button  @findex gnus-article-press-button
10863  @item @key{RET} @r{(Article)}  @item RET (Article)
10864  @itemx Mouse-2 @r{(Article)}  @kindex RET (Article)
10865  Toggle displaying of the @sc{mime} object  @itemx BUTTON-2 (Article)
10866  (@code{gnus-article-press-button}).  Toggle displaying of the @acronym{MIME} object
10867    (@code{gnus-article-press-button}).  If built-in viewers can not display
10868    the object, Gnus resorts to external viewers in the @file{mailcap}
10869    files.  If a viewer has the @samp{copiousoutput} specification, the
10870    object is displayed inline.
10871    
10872  @findex gnus-mime-view-part  @findex gnus-mime-view-part
10873  @item M-@key{RET} @r{(Article)}  @item M-RET (Article)
10874  @itemx v @r{(Article)}  @kindex M-RET (Article)
10875  Prompt for a method, and then view the @sc{mime} object using this  @itemx v (Article)
10876    Prompt for a method, and then view the @acronym{MIME} object using this
10877  method (@code{gnus-mime-view-part}).  method (@code{gnus-mime-view-part}).
10878    
10879    @findex gnus-mime-view-part-as-type
10880    @item t (Article)
10881    @kindex t (Article)
10882    View the @acronym{MIME} object as if it were a different @acronym{MIME} media type
10883    (@code{gnus-mime-view-part-as-type}).
10884    
10885    @findex gnus-mime-view-part-as-charset
10886    @item C (Article)
10887    @kindex C (Article)
10888    Prompt for a charset, and then view the @acronym{MIME} object using this
10889    charset (@code{gnus-mime-view-part-as-charset}).
10890    
10891  @findex gnus-mime-save-part  @findex gnus-mime-save-part
10892  @item o @r{(Article)}  @item o (Article)
10893  Prompt for a file name, and then save the @sc{mime} object  @kindex o (Article)
10894    Prompt for a file name, and then save the @acronym{MIME} object
10895  (@code{gnus-mime-save-part}).  (@code{gnus-mime-save-part}).
10896    
10897  @findex gnus-mime-copy-part  @findex gnus-mime-save-part-and-strip
10898  @item c @r{(Article)}  @item C-o (Article)
10899  Copy the @sc{mime} object to a fresh buffer and display this buffer  @kindex C-o (Article)
10900  (@code{gnus-mime-copy-part}).  Prompt for a file name, then save the @acronym{MIME} object and strip it from
10901    the article.  Then proceed to article editing, where a reasonable
10902    suggestion is being made on how the altered article should look
10903    like.  The stripped @acronym{MIME} object will be referred via the
10904    message/external-body @acronym{MIME} type.
10905    (@code{gnus-mime-save-part-and-strip}).
10906    
10907    @findex gnus-mime-delete-part
10908    @item d (Article)
10909    @kindex d (Article)
10910    Delete the @acronym{MIME} object from the article and replace it with some
10911    information about the removed @acronym{MIME} object
10912    (@code{gnus-mime-delete-part}).
10913    
10914  @findex gnus-mime-view-part-as-type  @findex gnus-mime-copy-part
10915  @item t @r{(Article)}  @item c (Article)
10916  View the @sc{mime} object as if it were a different @sc{mime} media type  @kindex c (Article)
10917  (@code{gnus-mime-view-part-as-type}).  Copy the @acronym{MIME} object to a fresh buffer and display this buffer
10918    (@code{gnus-mime-copy-part}).  Compressed files like @file{.gz} and
10919  @findex gnus-mime-pipe-part  @file{.bz2} are automatically decompressed if
10920  @item | @r{(Article)}  @code{auto-compression-mode} is enabled (@pxref{Compressed Files,,
10921  Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).  Accessing Compressed Files, emacs, The Emacs Editor}).
10922    
10923    @findex gnus-mime-print-part
10924    @item p (Article)
10925    @kindex p (Article)
10926    Print the @acronym{MIME} object (@code{gnus-mime-print-part}).  This
10927    command respects the @samp{print=} specifications in the
10928    @file{.mailcap} file.
10929    
10930  @findex gnus-mime-inline-part  @findex gnus-mime-inline-part
10931  @item i @r{(Article)}  @item i (Article)
10932  Insert the contents of the @sc{mime} object into the buffer  @kindex i (Article)
10933    Insert the contents of the @acronym{MIME} object into the buffer
10934  (@code{gnus-mime-inline-part}) as text/plain.  If given a prefix, insert  (@code{gnus-mime-inline-part}) as text/plain.  If given a prefix, insert
10935  the raw contents without decoding.  If given a numerical prefix, you can  the raw contents without decoding.  If given a numerical prefix, you can
10936  do semi-manual charset stuff (see  do semi-manual charset stuff (see
10937  @code{gnus-summary-show-article-charset-alist} in @pxref{Paging the  @code{gnus-summary-show-article-charset-alist} in @ref{Paging the
10938  Article}).  Article}).
10939    
10940    @findex gnus-mime-view-part-internally
10941    @item E (Article)
10942    @kindex E (Article)
10943    View the @acronym{MIME} object with an internal viewer.  If no internal
10944    viewer is available, use an external viewer
10945    (@code{gnus-mime-view-part-internally}).
10946    
10947    @findex gnus-mime-view-part-externally
10948    @item e (Article)
10949    @kindex e (Article)
10950    View the @acronym{MIME} object with an external viewer.
10951    (@code{gnus-mime-view-part-externally}).
10952    
10953    @findex gnus-mime-pipe-part
10954    @item | (Article)
10955    @kindex | (Article)
10956    Output the @acronym{MIME} object to a process (@code{gnus-mime-pipe-part}).
10957    
10958  @findex gnus-mime-action-on-part  @findex gnus-mime-action-on-part
10959  @item . @r{(Article)}  @item . (Article)
10960  Interactively run an action on the @sc{mime} object  @kindex . (Article)
10961    Interactively run an action on the @acronym{MIME} object
10962  (@code{gnus-mime-action-on-part}).  (@code{gnus-mime-action-on-part}).
10963    
10964  @end table  @end table
10965    
10966  Gnus will display some @sc{mime} objects automatically.  The way Gnus  Gnus will display some @acronym{MIME} objects automatically.  The way Gnus
10967  determines which parts to do this with is described in the Emacs MIME  determines which parts to do this with is described in the Emacs
10968  manual.  @acronym{MIME} manual.
10969    
10970  It might be best to just use the toggling functions from the article  It might be best to just use the toggling functions from the article
10971  buffer to avoid getting nasty surprises.  (For instance, you enter the  buffer to avoid getting nasty surprises.  (For instance, you enter the
10972  group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has  group @samp{alt.sing-a-long} and, before you know it, @acronym{MIME} has
10973  decoded the sound file in the article and some horrible sing-a-long song  decoded the sound file in the article and some horrible sing-a-long song
10974  comes screaming out your speakers, and you can't find the volume button,  comes screaming out your speakers, and you can't find the volume button,
10975  because there isn't one, and people are starting to look at you, and you  because there isn't one, and people are starting to look at you, and you
# Line 9315  to look at you disdainfully, and you'll Line 10979  to look at you disdainfully, and you'll
10979    
10980  Any similarity to real events and people is purely coincidental.  Ahem.  Any similarity to real events and people is purely coincidental.  Ahem.
10981    
10982  Also see @pxref{MIME Commands}.  Also @pxref{MIME Commands}.
10983    
10984    
10985  @node Customizing Articles  @node Customizing Articles
# Line 9323  Also see @pxref{MIME Commands}. Line 10987  Also see @pxref{MIME Commands}.
10987  @cindex article customization  @cindex article customization
10988    
10989  A slew of functions for customizing how the articles are to look like  A slew of functions for customizing how the articles are to look like
10990  exist.  You can call these functions interactively, or you can have them  exist.  You can call these functions interactively
10991    (@pxref{Article Washing}), or you can have them
10992  called automatically when you select the articles.  called automatically when you select the articles.
10993    
10994  To have them called automatically, you should set the corresponding  To have them called automatically, you should set the corresponding
# Line 9371  predicate.  The following predicates are Line 11036  predicate.  The following predicates are
11036  @end enumerate  @end enumerate
11037    
11038  You may have noticed that the word @dfn{part} is used here.  This refers  You may have noticed that the word @dfn{part} is used here.  This refers
11039  to the fact that some messages are @sc{mime} multipart articles that may  to the fact that some messages are @acronym{MIME} multipart articles that may
11040  be divided into several parts.  Articles that are not multiparts are  be divided into several parts.  Articles that are not multiparts are
11041  considered to contain just a single part.  considered to contain just a single part.
11042    
# Line 9389  group.  Values in parenthesis are sugges Line 11054  group.  Values in parenthesis are sugges
11054  possible but those listed are probably sufficient for most people.  possible but those listed are probably sufficient for most people.
11055    
11056  @table @code  @table @code
 @item gnus-treat-highlight-signature (t, last)  
11057  @item gnus-treat-buttonize (t, integer)  @item gnus-treat-buttonize (t, integer)
11058  @item gnus-treat-buttonize-head (head)  @item gnus-treat-buttonize-head (head)
11059  @item gnus-treat-emphasize (t, head, integer)  
11060  @item gnus-treat-fill-article (t, integer)  @xref{Article Buttons}.
11061    
11062    @item gnus-treat-capitalize-sentences (t, integer)
11063    @item gnus-treat-overstrike (t, integer)
11064  @item gnus-treat-strip-cr (t, integer)  @item gnus-treat-strip-cr (t, integer)
 @item gnus-treat-hide-headers (head)  
 @item gnus-treat-hide-boring-headers (head)  
 @item gnus-treat-hide-signature (t, last)  
 @item gnus-treat-hide-citation (t, integer)  
 @item gnus-treat-strip-pgp (t, last, integer)  
 @item gnus-treat-strip-pem (t, last, integer)  
 @item gnus-treat-highlight-headers (head)  
 @item gnus-treat-highlight-citation (t, integer)  
 @item gnus-treat-highlight-signature (t, last, integer)  
 @item gnus-treat-date-ut (head)  
 @item gnus-treat-date-local (head)  
 @item gnus-treat-date-lapsed (head)  
 @item gnus-treat-date-original (head)  
11065  @item gnus-treat-strip-headers-in-body (t, integer)  @item gnus-treat-strip-headers-in-body (t, integer)
 @item gnus-treat-strip-trailing-blank-lines (t, last, integer)  
11066  @item gnus-treat-strip-leading-blank-lines (t, integer)  @item gnus-treat-strip-leading-blank-lines (t, integer)
11067  @item gnus-treat-strip-multiple-blank-lines (t, integer)  @item gnus-treat-strip-multiple-blank-lines (t, integer)
11068  @item gnus-treat-overstrike (t, integer)  @item gnus-treat-strip-pem (t, last, integer)
11069  @item gnus-treat-display-xface (head)  @item gnus-treat-strip-trailing-blank-lines (t, last, integer)
11070    @item gnus-treat-unsplit-urls (t, integer)
11071    @item gnus-treat-wash-html (t, integer)
11072    
11073    @xref{Article Washing}.
11074    
11075    @item gnus-treat-date-english (head)
11076    @item gnus-treat-date-iso8601 (head)
11077    @item gnus-treat-date-lapsed (head)
11078    @item gnus-treat-date-local (head)
11079    @item gnus-treat-date-original (head)
11080    @item gnus-treat-date-user-defined (head)
11081    @item gnus-treat-date-ut (head)
11082    
11083    @xref{Article Date}.
11084    
11085    @item gnus-treat-from-picon (head)
11086    @item gnus-treat-mail-picon (head)
11087    @item gnus-treat-newsgroups-picon (head)
11088    
11089    @xref{Picons}.
11090    
11091  @item gnus-treat-display-smileys (t, integer)  @item gnus-treat-display-smileys (t, integer)
11092  @item gnus-treat-display-picons (head)  
11093  @item gnus-treat-capitalize-sentences (t, integer)  @item gnus-treat-body-boundary (head)
11094    
11095    @vindex gnus-body-boundary-delimiter
11096    Adds a delimiter between header and body, the string used as delimiter
11097    is controlled by @code{gnus-body-boundary-delimiter}.
11098    
11099    @xref{Smileys}.
11100    
11101    @item gnus-treat-display-x-face (head)
11102    
11103    @xref{X-Face}.
11104    
11105    @item gnus-treat-display-face (head)
11106    
11107    @xref{Face}.
11108    
11109    @item gnus-treat-emphasize (t, head, integer)
11110    @item gnus-treat-fill-article (t, integer)
11111  @item gnus-treat-fill-long-lines (t, integer)  @item gnus-treat-fill-long-lines (t, integer)
11112    @item gnus-treat-hide-boring-headers (head)
11113    @item gnus-treat-hide-citation (t, integer)
11114    @item gnus-treat-hide-citation-maybe (t, integer)
11115    @item gnus-treat-hide-headers (head)
11116    @item gnus-treat-hide-signature (t, last)
11117    @item gnus-treat-strip-banner (t, last)
11118    @item gnus-treat-strip-list-identifiers (head)
11119    
11120    @xref{Article Hiding}.
11121    
11122    @item gnus-treat-highlight-citation (t, integer)
11123    @item gnus-treat-highlight-headers (head)
11124    @item gnus-treat-highlight-signature (t, last, integer)
11125    
11126    @xref{Article Highlighting}.
11127    
11128  @item gnus-treat-play-sounds  @item gnus-treat-play-sounds
11129  @item gnus-treat-translate  @item gnus-treat-translate
11130    @item gnus-treat-x-pgp-sig (head)
11131    
11132    @item gnus-treat-unfold-headers (head)
11133    @item gnus-treat-fold-headers (head)
11134    @item gnus-treat-fold-newsgroups (head)
11135    @item gnus-treat-leading-whitespace (head)
11136    
11137    @xref{Article Header}.
11138    
11139    
11140  @end table  @end table
11141    
11142  @vindex gnus-part-display-hook  @vindex gnus-part-display-hook
# Line 9443  A few additional keystrokes are availabl Line 11160  A few additional keystrokes are availabl
11160    
11161  @table @kbd  @table @kbd
11162    
11163  @item @key{SPC}  @item SPACE
11164  @kindex @key{SPC} @r{(Article)}  @kindex SPACE (Article)
11165  @findex gnus-article-next-page  @findex gnus-article-next-page
11166  Scroll forwards one page (@code{gnus-article-next-page}).  Scroll forwards one page (@code{gnus-article-next-page}).
11167    This is exactly the same as @kbd{h SPACE h}.
11168    
11169  @item @key{DEL}  @item DEL
11170  @kindex @key{DEL} @r{(Article)}  @kindex DEL (Article)
11171  @findex gnus-article-prev-page  @findex gnus-article-prev-page
11172  Scroll backwards one page (@code{gnus-article-prev-page}).  Scroll backwards one page (@code{gnus-article-prev-page}).
11173    This is exactly the same as @kbd{h DEL h}.
11174    
11175  @item C-c ^  @item C-c ^
11176  @kindex C-c ^ @r{(Article)}  @kindex C-c ^ (Article)
11177  @findex gnus-article-refer-article  @findex gnus-article-refer-article
11178  If point is in the neighborhood of a @code{Message-ID} and you press  If point is in the neighborhood of a @code{Message-ID} and you press
11179  @kbd{C-c ^}, Gnus will try to get that article from the server  @kbd{C-c ^}, Gnus will try to get that article from the server
11180  (@code{gnus-article-refer-article}).  (@code{gnus-article-refer-article}).
11181    
11182  @item C-c C-m  @item C-c C-m
11183  @kindex C-c C-m @r{(Article)}  @kindex C-c C-m (Article)
11184  @findex gnus-article-mail  @findex gnus-article-mail
11185  Send a reply to the address near point (@code{gnus-article-mail}).  If  Send a reply to the address near point (@code{gnus-article-mail}).  If
11186  given a prefix, include the mail.  given a prefix, include the mail.
11187    
11188  @item s  @item s
11189  @kindex s @r{(Article)}  @kindex s (Article)
11190  @findex gnus-article-show-summary  @findex gnus-article-show-summary
11191  Reconfigure the buffers so that the summary buffer becomes visible  Reconfigure the buffers so that the summary buffer becomes visible
11192  (@code{gnus-article-show-summary}).  (@code{gnus-article-show-summary}).
11193    
11194  @item ?  @item ?
11195  @kindex ? @r{(Article)}  @kindex ? (Article)
11196  @findex gnus-article-describe-briefly  @findex gnus-article-describe-briefly
11197  Give a very brief description of the available keystrokes  Give a very brief description of the available keystrokes
11198  (@code{gnus-article-describe-briefly}).  (@code{gnus-article-describe-briefly}).
11199    
11200  @item TAB  @item TAB
11201  @kindex TAB @r{(Article)}  @kindex TAB (Article)
11202  @findex gnus-article-next-button  @findex gnus-article-next-button
11203  Go to the next button, if any (@code{gnus-article-next-button}).  This  Go to the next button, if any (@code{gnus-article-next-button}).  This
11204  only makes sense if you have buttonizing turned on.  only makes sense if you have buttonizing turned on.
11205    
11206  @item M-TAB  @item M-TAB
11207  @kindex M-TAB @r{(Article)}  @kindex M-TAB (Article)
11208  @findex gnus-article-prev-button  @findex gnus-article-prev-button
11209  Go to the previous button, if any (@code{gnus-article-prev-button}).  Go to the previous button, if any (@code{gnus-article-prev-button}).
11210    
11211    @item R
11212    @kindex R (Article)
11213    @findex gnus-article-reply-with-original
11214    Send a reply to the current article and yank the current article
11215    (@code{gnus-article-reply-with-original}).  If given a prefix, make a
11216    wide reply.  If the region is active, only yank the text in the
11217    region.
11218    
11219    @item F
11220    @kindex F (Article)
11221    @findex gnus-article-followup-with-original
11222    Send a followup to the current article and yank the current article
11223    (@code{gnus-article-followup-with-original}).  If given a prefix, make
11224    a wide reply.  If the region is active, only yank the text in the
11225    region.
11226    
11227    
11228  @end table  @end table
11229    
11230    
# Line 9505  article buffer. Line 11241  article buffer.
11241    
11242  @vindex gnus-article-decode-hook  @vindex gnus-article-decode-hook
11243  @item gnus-article-decode-hook  @item gnus-article-decode-hook
11244  @cindex MIME  @cindex @acronym{MIME}
11245  Hook used to decode @sc{mime} articles.  The default value is  Hook used to decode @acronym{MIME} articles.  The default value is
11246  @code{(article-decode-charset article-decode-encoded-words)}  @code{(article-decode-charset article-decode-encoded-words)}
11247    
11248  @vindex gnus-article-prepare-hook  @vindex gnus-article-prepare-hook
# Line 9525  Hook called in article mode buffers. Line 11261  Hook called in article mode buffers.
11261  Syntax table used in article buffers.  It is initialized from  Syntax table used in article buffers.  It is initialized from
11262  @code{text-mode-syntax-table}.  @code{text-mode-syntax-table}.
11263    
11264    @vindex gnus-article-over-scroll
11265    @item gnus-article-over-scroll
11266    If non-@code{nil}, allow scrolling the article buffer even when there
11267    no more new text to scroll in.  The default is @code{nil}.
11268    
11269  @vindex gnus-article-mode-line-format  @vindex gnus-article-mode-line-format
11270  @item gnus-article-mode-line-format  @item gnus-article-mode-line-format
11271  This variable is a format string along the same lines as  This variable is a format string along the same lines as
# Line 9533  accepts the same format specifications a Line 11274  accepts the same format specifications a
11274  extensions:  extensions:
11275    
11276  @table @samp  @table @samp
11277    
11278  @item w  @item w
11279  The @dfn{wash status} of the article.  This is a short string with one  The @dfn{wash status} of the article.  This is a short string with one
11280  character for each possible article wash operation that may have been  character for each possible article wash operation that may have been
11281  performed.  performed.  The characters and their meaning:
11282    
11283    @table @samp
11284    
11285    @item c
11286    Displayed when cited text may be hidden in the article buffer.
11287    
11288    @item h
11289    Displayed when headers are hidden in the article buffer.
11290    
11291    @item p
11292    Displayed when article is digitally signed or encrypted, and Gnus has
11293    hidden the security headers.  (N.B. does not tell anything about
11294    security status, i.e. good or bad signature.)
11295    
11296    @item s
11297    Displayed when the signature has been hidden in the Article buffer.
11298    
11299    @item o
11300    Displayed when Gnus has treated overstrike characters in the article buffer.
11301    
11302    @item e
11303    Displayed when Gnus has treated emphasised strings in the article buffer.
11304    
11305    @end table
11306    
11307  @item m  @item m
11308  The number of @sc{mime} parts in the article.  The number of @acronym{MIME} parts in the article.
11309    
11310  @end table  @end table
11311    
11312  @vindex gnus-break-pages  @vindex gnus-break-pages
# Line 9553  paging will not be done. Line 11321  paging will not be done.
11321  @vindex gnus-page-delimiter  @vindex gnus-page-delimiter
11322  This is the delimiter mentioned above.  By default, it is @samp{^L}  This is the delimiter mentioned above.  By default, it is @samp{^L}
11323  (formfeed).  (formfeed).
11324    
11325    @cindex IDNA
11326    @cindex internationalized domain names
11327    @vindex gnus-use-idna
11328    @item gnus-use-idna
11329    This variable controls whether Gnus performs IDNA decoding of
11330    internationalized domain names inside @samp{From}, @samp{To} and
11331    @samp{Cc} headers.  This requires
11332    @uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this
11333    variable is only enabled if you have installed it.
11334    
11335  @end table  @end table
11336    
11337    
# Line 9565  This is the delimiter mentioned above. Line 11344  This is the delimiter mentioned above.
11344  @cindex reply  @cindex reply
11345  @cindex followup  @cindex followup
11346  @cindex post  @cindex post
11347    @cindex using gpg
11348    @cindex using s/mime
11349    @cindex using smime
11350    
11351  @kindex C-c C-c (Post)  @kindex C-c C-c (Post)
11352  All commands for posting and mailing will put you in a message buffer  All commands for posting and mailing will put you in a message buffer
11353  where you can edit the article all you like, before you send the  where you can edit the article all you like, before you send the
11354  article by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The  article by pressing @kbd{C-c C-c}.  @xref{Top, , Overview, message,
11355  Message Manual}.  Where the message will be posted/mailed to depends  Message Manual}.  Where the message will be posted/mailed to depends
11356  on your setup (@pxref{Posting Server}).  on your setup (@pxref{Posting Server}).
11357    
11358  @menu  @menu
11359  * Mail::                 Mailing and replying.  * Mail::                        Mailing and replying.
11360  * Posting Server::       What server should you post via?  * Posting Server::              What server should you post and mail via?
11361  * Mail and Post::        Mailing and posting at the same time.  * POP before SMTP::             You cannot send a mail unless you read a mail.
11362  * Archived Messages::    Where Gnus stores the messages you've sent.  * Mail and Post::               Mailing and posting at the same time.
11363  * Posting Styles::       An easier way to specify who you are.  * Archived Messages::           Where Gnus stores the messages you've sent.
11364  * Drafts::               Postponing messages and rejected messages.  * Posting Styles::              An easier way to specify who you are.
11365  * Rejected Articles::    What happens if the server doesn't like your article?  * Drafts::                      Postponing messages and rejected messages.
11366    * Rejected Articles::           What happens if the server doesn't like your article?
11367    * Signing and encrypting::      How to compose secure messages.
11368  @end menu  @end menu
11369    
11370  Also see @pxref{Canceling and Superseding} for information on how to  Also @pxref{Canceling and Superseding} for information on how to
11371  remove articles you shouldn't have posted.  remove articles you shouldn't have posted.
11372    
11373    
# Line 9596  Variables for customizing outgoing mail: Line 11380  Variables for customizing outgoing mail:
11380  @item gnus-uu-digest-headers  @item gnus-uu-digest-headers
11381  @vindex gnus-uu-digest-headers  @vindex gnus-uu-digest-headers
11382  List of regexps to match headers included in digested messages.  The  List of regexps to match headers included in digested messages.  The
11383  headers will be included in the sequence they are matched.  headers will be included in the sequence they are matched.  If
11384    @code{nil} include all headers.
11385    
11386  @item gnus-add-to-list  @item gnus-add-to-list
11387  @vindex gnus-add-to-list  @vindex gnus-add-to-list
11388  If non-@code{nil}, add a @code{to-list} group parameter to mail groups  If non-@code{nil}, add a @code{to-list} group parameter to mail groups
11389  that have none when you do a @kbd{a}.  that have none when you do a @kbd{a}.
11390    
11391    @item gnus-confirm-mail-reply-to-news
11392    @vindex gnus-confirm-mail-reply-to-news
11393    This can also be a function receiving the group name as the only
11394    parameter which should return non-@code{nil} if a confirmation is
11395    needed, or a regular expression matching group names, where
11396    confirmation is should be asked for.
11397    
11398    If you find yourself never wanting to reply to mail, but occasionally
11399    press R anyway, this variable might be for you.
11400    
11401    @item gnus-confirm-treat-mail-like-news
11402    @vindex gnus-confirm-treat-mail-like-news
11403    If non-@code{nil}, Gnus also requests confirmation according to
11404    @code{gnus-confirm-mail-reply-to-news} when replying to mail.  This is
11405    useful for treating mailing lists like newsgroups.
11406    
11407  @end table  @end table
11408    
11409    
# Line 9614  When you press those magical @kbd{C-c C- Line 11415  When you press those magical @kbd{C-c C-
11415    
11416  Thank you for asking.  I hate you.  Thank you for asking.  I hate you.
11417    
11418  @vindex gnus-post-method  It can be quite complicated.
11419    
11420  It can be quite complicated.  Normally, Gnus will use the same native  @vindex gnus-post-method
11421  server.  However.  If your native server doesn't allow posting, just  When posting news, Message usually invokes @code{message-send-news}
11422  reading, you probably want to use some other server to post your  (@pxref{News Variables, , News Variables, message, Message Manual}).
11423  (extremely intelligent and fabulously interesting) articles.  You can  Normally, Gnus will post using the same select method as you're
11424  then set the @code{gnus-post-method} to some other method:  reading from (which might be convenient if you're reading lots of
11425    groups from different private servers).  However.  If the server
11426    you're reading from doesn't allow posting, just reading, you probably
11427    want to use some other server to post your (extremely intelligent and
11428    fabulously interesting) articles.  You can then set the
11429    @code{gnus-post-method} to some other method:
11430    
11431  @lisp  @lisp
11432  (setq gnus-post-method '(nnspool ""))  (setq gnus-post-method '(nnspool ""))
# Line 9629  then set the @code{gnus-post-method} to Line 11435  then set the @code{gnus-post-method} to
11435  Now, if you've done this, and then this server rejects your article, or  Now, if you've done this, and then this server rejects your article, or
11436  this server is down, what do you do then?  To override this variable you  this server is down, what do you do then?  To override this variable you
11437  can use a non-zero prefix to the @kbd{C-c C-c} command to force using  can use a non-zero prefix to the @kbd{C-c C-c} command to force using
11438  the ``current'' server for posting.  the ``current'' server, to get back the default behavior, for posting.
11439    
11440  If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,  If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
11441  Gnus will prompt you for what method to use for posting.  Gnus will prompt you for what method to use for posting.
# Line 9638  You can also set @code{gnus-post-method} Line 11444  You can also set @code{gnus-post-method}
11444  If that's the case, Gnus will always prompt you for what method to use  If that's the case, Gnus will always prompt you for what method to use
11445  for posting.  for posting.
11446    
11447  Finally, if you want to always post using the same select method as  Finally, if you want to always post using the native select method,
11448  you're reading from (which might be convenient if you're reading lots of  you can set this variable to @code{native}.
11449  groups from different private servers), you can set this variable to  
11450  @code{current}.  When sending mail, Message invokes @code{message-send-mail-function}.
11451    The default function, @code{message-send-mail-with-sendmail}, pipes
11452    your article to the @code{sendmail} binary for further queuing and
11453    sending.  When your local system is not configured for sending mail
11454    using @code{sendmail}, and you have access to a remote @acronym{SMTP}
11455    server, you can set @code{message-send-mail-function} to
11456    @code{smtpmail-send-it} and make sure to setup the @code{smtpmail}
11457    package correctly.  An example:
11458    
11459    @lisp
11460    (setq message-send-mail-function 'smtpmail-send-it
11461          smtpmail-default-smtp-server "YOUR SMTP HOST")
11462    @end lisp
11463    
11464    To the thing similar to this, there is
11465    @code{message-smtpmail-send-it}.  It is useful if your @acronym{ISP}
11466    requires the @acronym{POP}-before-@acronym{SMTP} authentication.
11467    @xref{POP before SMTP}.
11468    
11469    Other possible choices for @code{message-send-mail-function} includes
11470    @code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
11471    and @code{feedmail-send-it}.
11472    
11473    @node POP before SMTP
11474    @section POP before SMTP
11475    @cindex pop before smtp
11476    @findex message-smtpmail-send-it
11477    @findex mail-source-touch-pop
11478    
11479    Does your @acronym{ISP} require the @acronym{POP}-before-@acronym{SMTP}
11480    authentication?  It is whether you need to connect to the @acronym{POP}
11481    mail server within a certain time before sending mails.  If so, there is
11482    a convenient way.  To do that, put the following lines in your
11483    @file{~/.gnus.el} file:
11484    
11485    @lisp
11486    (setq message-send-mail-function 'message-smtpmail-send-it)
11487    (add-hook 'message-send-mail-hook 'mail-source-touch-pop)
11488    @end lisp
11489    
11490    @noindent
11491    It means to let Gnus connect to the @acronym{POP} mail server in advance
11492    whenever you send a mail.  The @code{mail-source-touch-pop} function
11493    does only a @acronym{POP} authentication according to the value of
11494    @code{mail-sources} without fetching mails, just before sending a mail.
11495    Note that you have to use @code{message-smtpmail-send-it} which runs
11496    @code{message-send-mail-hook} rather than @code{smtpmail-send-it} and
11497    set the value of @code{mail-sources} for a @acronym{POP} connection
11498    correctly.  @xref{Mail Sources}.
11499    
11500    If you have two or more @acronym{POP} mail servers set in
11501    @code{mail-sources}, you may want to specify one of them to
11502    @code{mail-source-primary-source} as the @acronym{POP} mail server to be
11503    used for the @acronym{POP}-before-@acronym{SMTP} authentication.  If it
11504    is your primary @acronym{POP} mail server (i.e., you are fetching mails
11505    mainly from that server), you can set it permanently as follows:
11506    
11507    @lisp
11508    (setq mail-source-primary-source
11509          '(pop :server "pop3.mail.server"
11510                :password "secret"))
11511    @end lisp
11512    
11513    @noindent
11514    Otherwise, bind it dynamically only when performing the
11515    @acronym{POP}-before-@acronym{SMTP} authentication as follows:
11516    
11517    @lisp
11518    (add-hook 'message-send-mail-hook
11519              (lambda ()
11520                (let ((mail-source-primary-source
11521                       '(pop :server "pop3.mail.server"
11522                             :password "secret")))
11523                  (mail-source-touch-pop))))
11524    @end lisp
11525    
11526  @node Mail and Post  @node Mail and Post
11527  @section Mail and Post  @section Mail and Post
# Line 9656  posting: Line 11535  posting:
11535  @cindex mailing lists  @cindex mailing lists
11536    
11537  If your news server offers groups that are really mailing lists  If your news server offers groups that are really mailing lists
11538  gatewayed to the @sc{nntp} server, you can read those groups without  gatewayed to the @acronym{NNTP} server, you can read those groups without
11539  problems, but you can't post/followup to them without some difficulty.  problems, but you can't post/followup to them without some difficulty.
11540  One solution is to add a @code{to-address} to the group parameters  One solution is to add a @code{to-address} to the group parameters
11541  (@pxref{Group Parameters}).  An easier thing to do is set the  (@pxref{Group Parameters}).  An easier thing to do is set the
# Line 9665  really are mailing lists.  Then, at leas Line 11544  really are mailing lists.  Then, at leas
11544  lists will work most of the time.  Posting to these groups (@kbd{a}) is  lists will work most of the time.  Posting to these groups (@kbd{a}) is
11545  still a pain, though.  still a pain, though.
11546    
11547    @item gnus-user-agent
11548    @vindex gnus-user-agent
11549    @cindex User-Agent
11550    
11551    This variable controls which information should be exposed in the
11552    User-Agent header.  It can be one of the symbols @code{gnus} (show only
11553    Gnus version), @code{emacs-gnus} (show only Emacs and Gnus versions),
11554    @code{emacs-gnus-config} (same as @code{emacs-gnus} plus system
11555    configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus
11556    system type) or a custom string.  If you set it to a string, be sure to
11557    use a valid format, see RFC 2616.
11558    
11559  @end table  @end table
11560    
11561  You may want to do spell-checking on messages that you send out.  Or, if  You may want to do spell-checking on messages that you send out.  Or, if
# Line 9684  you're in, you could say something like Line 11575  you're in, you could say something like
11575  (add-hook 'gnus-select-group-hook  (add-hook 'gnus-select-group-hook
11576            (lambda ()            (lambda ()
11577              (cond              (cond
11578               ((string-match "^de\\." gnus-newsgroup-name)               ((string-match
11579                   "^de\\." (gnus-group-real-name gnus-newsgroup-name))
11580                (ispell-change-dictionary "deutsch"))                (ispell-change-dictionary "deutsch"))
11581               (t               (t
11582                (ispell-change-dictionary "english")))))                (ispell-change-dictionary "english")))))
# Line 9704  store the messages.  If you want to disa Line 11596  store the messages.  If you want to disa
11596  @code{gnus-message-archive-group} variable should be @code{nil}, which  @code{gnus-message-archive-group} variable should be @code{nil}, which
11597  is the default.  is the default.
11598    
11599    For archiving interesting messages in a group you read, see the
11600    @kbd{B c} (@code{gnus-summary-copy-article}) command (@pxref{Mail
11601    Group Commands}).
11602    
11603  @vindex gnus-message-archive-method  @vindex gnus-message-archive-method
11604  @code{gnus-message-archive-method} says what virtual server Gnus is to  @code{gnus-message-archive-method} says what virtual server Gnus is to
11605  use to store sent messages.  The default is:  use to store sent messages.  The default is:
# Line 9737  determined by the @code{gnus-message-arc Line 11633  determined by the @code{gnus-message-arc
11633    
11634  This variable can be used to do the following:  This variable can be used to do the following:
11635    
11636  @itemize @bullet  @table @asis
11637  @item a string  @item a string
11638  Messages will be saved in that group.  Messages will be saved in that group.
11639    
# Line 9750  has the default value shown above.  Then Line 11646  has the default value shown above.  Then
11646  messages are stored in @samp{nnfolder+archive:foo}, but if you use the  messages are stored in @samp{nnfolder+archive:foo}, but if you use the
11647  value @code{"nnml:foo"}, then outgoing messages will be stored in  value @code{"nnml:foo"}, then outgoing messages will be stored in
11648  @samp{nnml:foo}.  @samp{nnml:foo}.
11649    
11650  @item a list of strings  @item a list of strings
11651  Messages will be saved in all those groups.  Messages will be saved in all those groups.
11652    
11653  @item an alist of regexps, functions and forms  @item an alist of regexps, functions and forms
11654  When a key ``matches'', the result is used.  When a key ``matches'', the result is used.
11655    
11656  @item @code{nil}  @item @code{nil}
11657  No message archiving will take place.  This is the default.  No message archiving will take place.  This is the default.
11658  @end itemize  @end table
11659    
11660  Let's illustrate:  Let's illustrate:
11661    
# Line 9796  messages in one file per month: Line 11695  messages in one file per month:
11695            (concat "mail." (format-time-string "%Y-%m")))))            (concat "mail." (format-time-string "%Y-%m")))))
11696  @end lisp  @end lisp
11697    
11698  (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to  @c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
11699  use a different value for @code{gnus-message-archive-group} there.)  @c use a different value for @code{gnus-message-archive-group} there.)
11700    
11701  Now, when you send a message off, it will be stored in the appropriate  Now, when you send a message off, it will be stored in the appropriate
11702  group.  (If you want to disable storing for just one particular message,  group.  (If you want to disable storing for just one particular message,
# Line 9830  of names). Line 11729  of names).
11729    
11730  This variable can be used instead of @code{gnus-message-archive-group},  This variable can be used instead of @code{gnus-message-archive-group},
11731  but the latter is the preferred method.  but the latter is the preferred method.
11732    
11733    @item gnus-gcc-mark-as-read
11734    @vindex gnus-gcc-mark-as-read
11735    If non-@code{nil}, automatically mark @code{Gcc} articles as read.
11736    
11737    @item gnus-gcc-externalize-attachments
11738    @vindex gnus-gcc-externalize-attachments
11739    If @code{nil}, attach files as normal parts in Gcc copies; if a regexp
11740    and matches the Gcc group name, attach files as external parts; if it is
11741    @code{all}, attach local files as external parts; if it is other
11742    non-@code{nil}, the behavior is the same as @code{all}, but it may be
11743    changed in the future.
11744    
11745  @end table  @end table
11746    
11747    
# Line 9873  signature and the @samp{What me?} @code{ Line 11785  signature and the @samp{What me?} @code{
11785    
11786  The first element in each style is called the @code{match}.  If it's a  The first element in each style is called the @code{match}.  If it's a
11787  string, then Gnus will try to regexp match it against the group name.  string, then Gnus will try to regexp match it against the group name.
11788  If it is the symbol @code{header}, then Gnus will look for header that  If it is the form @code{(header @var{match} @var{regexp})}, then Gnus
11789  match the next element in the match, and compare that to the last header  will look in the original article for a header whose name is
11790  in the match.  If it's a function symbol, that function will be called  @var{match} and compare that @var{regexp}.  @var{match} and
11791  with no arguments.  If it's a variable symbol, then the variable will be  @var{regexp} are strings.  (The original article is the one you are
11792    replying or following up to.  If you are not composing a reply or a
11793    followup, then there is nothing to match against.)  If the
11794    @code{match} is a function symbol, that function will be called with
11795    no arguments.  If it's a variable symbol, then the variable will be
11796  referenced.  If it's a list, then that list will be @code{eval}ed.  In  referenced.  If it's a list, then that list will be @code{eval}ed.  In
11797  any case, if this returns a non-@code{nil} value, then the style is said  any case, if this returns a non-@code{nil} value, then the style is
11798  to @dfn{match}.  said to @dfn{match}.
11799    
11800  Each style may contain a arbitrary amount of @dfn{attributes}.  Each  Each style may contain an arbitrary amount of @dfn{attributes}.  Each
11801  attribute consists of a @code{(@var{name} . @var{value})} pair.  The  attribute consists of a @code{(@var{name} @var{value})} pair.  In
11802  attribute name can be one of @code{signature}, @code{signature-file},  addition, you can also use the @code{(@var{name} :file @var{value})}
11803  @code{organization}, @code{address}, @code{name} or @code{body}.  The  form or the @code{(@var{name} :value @var{value})} form.  Where
11804  attribute name can also be a string.  In that case, this will be used as  @code{:file} signifies @var{value} represents a file name and its
11805  a header name, and the value will be inserted in the headers of the  contents should be used as the attribute value, @code{:value} signifies
11806  article; if the value is @code{nil}, the header name will be removed.  @var{value} does not represent a file name explicitly.  The attribute
11807  If the attribute name is @code{eval}, the form is evaluated, and the  name can be one of:
11808  result is thrown away.  
11809    @itemize @bullet
11810    @item @code{signature}
11811    @item @code{signature-file}
11812    @item @code{x-face-file}
11813    @item @code{address}, overriding @code{user-mail-address}
11814    @item @code{name}, overriding @code{(user-full-name)}
11815    @item @code{body}
11816    @end itemize
11817    
11818    The attribute name can also be a string or a symbol.  In that case,
11819    this will be used as a header name, and the value will be inserted in
11820    the headers of the article; if the value is @code{nil}, the header
11821    name will be removed.  If the attribute name is @code{eval}, the form
11822    is evaluated, and the result is thrown away.
11823    
11824  The attribute value can be a string (used verbatim), a function with  The attribute value can be a string (used verbatim), a function with
11825  zero arguments (the return value will be used), a variable (its value  zero arguments (the return value will be used), a variable (its value
11826  will be used) or a list (it will be @code{eval}ed and the return value  will be used) or a list (it will be @code{eval}ed and the return value
11827  will be used).  The functions and sexps are called/@code{eval}ed in the  will be used).  The functions and sexps are called/@code{eval}ed in the
11828  message buffer that is being set up.  The headers of the current article  message buffer that is being set up.  The headers of the current article
11829  are available through the @code{message-reply-headers} variable.  are available through the @code{message-reply-headers} variable, which
11830    is a vector of the following headers: number subject from date id
11831    references chars lines xref extra.
11832    
11833    @vindex message-reply-headers
11834    
11835  If you wish to check whether the message you are about to compose is  If you wish to check whether the message you are about to compose is
11836  meant to be a news article or a mail message, you can check the values  meant to be a news article or a mail message, you can check the values
# Line 9916  So here's a new example: Line 11850  So here's a new example:
11850           (organization "People's Front Against MWM"))           (organization "People's Front Against MWM"))
11851          ("^rec.humor"          ("^rec.humor"
11852           (signature my-funny-signature-randomizer))           (signature my-funny-signature-randomizer))
11853          ((equal (system-name) "gnarly")          ((equal (system-name) "gnarly")  ;; @r{A form}
11854           (signature my-quote-randomizer))           (signature my-quote-randomizer))
11855          ((message-news-p)          (message-news-p        ;; @r{A function symbol}
11856           (signature my-news-signature))           (signature my-news-signature))
11857          (header "From\\|To" "larsi.*org"          (window-system         ;; @r{A value symbol}
11858                  (Organization "Somewhere, Inc."))           ("X-Window-System" (format "%s" window-system)))
11859          ((posting-from-work-p)          ;; @r{If I'm replying to Larsi, set the Organization header.}
11860            ((header "from" "larsi.*org")
11861             (Organization "Somewhere, Inc."))
11862            ((posting-from-work-p) ;; @r{A user defined function}
11863           (signature-file "~/.work-signature")           (signature-file "~/.work-signature")
11864           (address "user@@bar.foo")           (address "user@@bar.foo")
11865           (body "You are fired.\n\nSincerely, your boss.")           (body "You are fired.\n\nSincerely, your boss.")
# Line 9968  read---all articles in the group are per Line 11905  read---all articles in the group are per
11905    
11906  If the group doesn't exist, it will be created and you'll be subscribed  If the group doesn't exist, it will be created and you'll be subscribed
11907  to it.  The only way to make it disappear from the Group buffer is to  to it.  The only way to make it disappear from the Group buffer is to
11908  unsubscribe it.  unsubscribe it.  The special properties of the draft group comes from
11909    a group property (@pxref{Group Parameters}), and if lost the group
11910    behaves like any other group.  This means the commands below will not
11911    be available.  To restore the special properties of the group, the
11912    simplest way is to kill the group, using @kbd{C-k}, and restart
11913    Gnus.  The group is automatically created again with the
11914    correct parameters.  The content of the group is not lost.
11915    
11916  @c @findex gnus-dissociate-buffer-from-draft  @c @findex gnus-dissociate-buffer-from-draft
11917  @c @kindex C-c M-d (Mail)  @c @kindex C-c M-d (Mail)
# Line 9999  Rejected articles will also be put in th Line 11942  Rejected articles will also be put in th
11942  Articles}).  Articles}).
11943    
11944  @findex gnus-draft-send-all-messages  @findex gnus-draft-send-all-messages
11945    @kindex D s (Draft)
11946  @findex gnus-draft-send-message  @findex gnus-draft-send-message
11947    @kindex D S (Draft)
11948  If you have lots of rejected messages you want to post (or mail) without  If you have lots of rejected messages you want to post (or mail) without
11949  doing further editing, you can use the @kbd{D s} command  doing further editing, you can use the @kbd{D s} command
11950  (@code{gnus-draft-send-message}).  This command understands the  (@code{gnus-draft-send-message}).  This command understands the
# Line 10007  process/prefix convention (@pxref{Proces Line 11952  process/prefix convention (@pxref{Proces
11952  command (@code{gnus-draft-send-all-messages}) will ship off all messages  command (@code{gnus-draft-send-all-messages}) will ship off all messages
11953  in the buffer.  in the buffer.
11954    
11955    @findex gnus-draft-toggle-sending
11956    @kindex D t (Draft)
11957  If you have some messages that you wish not to send, you can use the  If you have some messages that you wish not to send, you can use the
11958  @kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message  @kbd{D t} (@code{gnus-draft-toggle-sending}) command to mark the message
11959  as unsendable.  This is a toggling command.  as unsendable.  This is a toggling command.
# Line 10031  The rejected articles will automatically Line 11978  The rejected articles will automatically
11978  (@pxref{Drafts}).  When the server comes back up again, you'd then  (@pxref{Drafts}).  When the server comes back up again, you'd then
11979  typically enter that group and send all the articles off.  typically enter that group and send all the articles off.
11980    
11981    @node Signing and encrypting
11982    @section Signing and encrypting
11983    @cindex using gpg
11984    @cindex using s/mime
11985    @cindex using smime
11986    
11987    Gnus can digitally sign and encrypt your messages, using vanilla
11988    @acronym{PGP} format or @acronym{PGP/MIME} or @acronym{S/MIME}.  For
11989    decoding such messages, see the @code{mm-verify-option} and
11990    @code{mm-decrypt-option} options (@pxref{Security}).
11991    
11992    @vindex gnus-message-replysign
11993    @vindex gnus-message-replyencrypt
11994    @vindex gnus-message-replysignencrypted
11995    Often, you would like to sign replies to people who send you signed
11996    messages.  Even more often, you might want to encrypt messages which
11997    are in reply to encrypted messages.  Gnus offers
11998    @code{gnus-message-replysign} to enable the former, and
11999    @code{gnus-message-replyencrypt} for the latter.  In addition, setting
12000    @code{gnus-message-replysignencrypted} (on by default) will sign
12001    automatically encrypted messages.
12002    
12003    Instructing @acronym{MML} to perform security operations on a
12004    @acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
12005    signing and the @kbd{C-c C-m c} key map for encryption, as follows.
12006    
12007    @table @kbd
12008    
12009    @item C-c C-m s s
12010    @kindex C-c C-m s s (Message)
12011    @findex mml-secure-message-sign-smime
12012    
12013    Digitally sign current message using @acronym{S/MIME}.
12014    
12015    @item C-c C-m s o
12016    @kindex C-c C-m s o (Message)
12017    @findex mml-secure-message-sign-pgp
12018    
12019    Digitally sign current message using @acronym{PGP}.
12020    
12021    @item C-c C-m s p
12022    @kindex C-c C-m s p (Message)
12023    @findex mml-secure-message-sign-pgp
12024    
12025    Digitally sign current message using @acronym{PGP/MIME}.
12026    
12027    @item C-c C-m c s
12028    @kindex C-c C-m c s (Message)
12029    @findex mml-secure-message-encrypt-smime
12030    
12031    Digitally encrypt current message using @acronym{S/MIME}.
12032    
12033    @item C-c C-m c o
12034    @kindex C-c C-m c o (Message)
12035    @findex mml-secure-message-encrypt-pgp
12036    
12037    Digitally encrypt current message using @acronym{PGP}.
12038    
12039    @item C-c C-m c p
12040    @kindex C-c C-m c p (Message)
12041    @findex mml-secure-message-encrypt-pgpmime
12042    
12043    Digitally encrypt current message using @acronym{PGP/MIME}.
12044    
12045    @item C-c C-m C-n
12046    @kindex C-c C-m C-n (Message)
12047    @findex mml-unsecure-message
12048    Remove security related @acronym{MML} tags from message.
12049    
12050    @end table
12051    
12052    @xref{Security, ,Security, message, Message Manual}, for more information.
12053    
12054  @node Select Methods  @node Select Methods
12055  @chapter Select Methods  @chapter Select Methods
# Line 10039  typically enter that group and send all Line 12058  typically enter that group and send all
12058    
12059  A @dfn{foreign group} is a group not read by the usual (or  A @dfn{foreign group} is a group not read by the usual (or
12060  default) means.  It could be, for instance, a group from a different  default) means.  It could be, for instance, a group from a different
12061  @sc{nntp} server, it could be a virtual group, or it could be your own  @acronym{NNTP} server, it could be a virtual group, or it could be your own
12062  personal mail group.  personal mail group.
12063    
12064  A foreign group (or any group, really) is specified by a @dfn{name} and  A foreign group (or any group, really) is specified by a @dfn{name} and
# Line 10050  name}.  There may be additional elements Line 12069  name}.  There may be additional elements
12069  value may have special meaning for the back end in question.  value may have special meaning for the back end in question.
12070    
12071  One could say that a select method defines a @dfn{virtual server}---so  One could say that a select method defines a @dfn{virtual server}---so
12072  we do just that (@pxref{The Server Buffer}).  we do just that (@pxref{Server Buffer}).
12073    
12074  The @dfn{name} of the group is the name the back end will recognize the  The @dfn{name} of the group is the name the back end will recognize the
12075  group as.  group as.
12076    
12077  For instance, the group @samp{soc.motss} on the @sc{nntp} server  For instance, the group @samp{soc.motss} on the @acronym{NNTP} server
12078  @samp{some.where.edu} will have the name @samp{soc.motss} and select  @samp{some.where.edu} will have the name @samp{soc.motss} and select
12079  method @code{(nntp "some.where.edu")}.  Gnus will call this group  method @code{(nntp "some.where.edu")}.  Gnus will call this group
12080  @samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}  @samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}
# Line 10064  back end just knows this group as @samp{ Line 12083  back end just knows this group as @samp{
12083  The different methods all have their peculiarities, of course.  The different methods all have their peculiarities, of course.
12084    
12085  @menu  @menu
12086  * The Server Buffer::     Making and editing virtual servers.  * Server Buffer::               Making and editing virtual servers.
12087  * Getting News::          Reading USENET news with Gnus.  * Getting News::                Reading USENET news with Gnus.
12088  * Getting Mail::          Reading your personal mail with Gnus.  * Getting Mail::                Reading your personal mail with Gnus.
12089  * Browsing the Web::      Getting messages from a plethora of Web sources.  * Browsing the Web::            Getting messages from a plethora of Web sources.
12090  * Other Sources::         Reading directories, files, SOUP packets.  * IMAP::                        Using Gnus as a @acronym{IMAP} client.
12091  * Combined Groups::       Combining groups into one group.  * Other Sources::               Reading directories, files, SOUP packets.
12092  * Gnus Unplugged::        Reading news and mail offline.  * Combined Groups::             Combining groups into one group.
12093    * Gnus Unplugged::              Reading news and mail offline.
12094  @end menu  @end menu
12095    
12096    
12097  @node The Server Buffer  @node Server Buffer
12098  @section The Server Buffer  @section Server Buffer
12099    
12100  Traditionally, a @dfn{server} is a machine or a piece of software that  Traditionally, a @dfn{server} is a machine or a piece of software that
12101  one connects to, and then requests information from.  Gnus does not  one connects to, and then requests information from.  Gnus does not
# Line 10085  the actual media and Gnus, so we might j Line 12105  the actual media and Gnus, so we might j
12105  back end represents a virtual server.  back end represents a virtual server.
12106    
12107  For instance, the @code{nntp} back end may be used to connect to several  For instance, the @code{nntp} back end may be used to connect to several
12108  different actual @sc{nntp} servers, or, perhaps, to many different ports  different actual @acronym{NNTP} servers, or, perhaps, to many different ports
12109  on the same actual @sc{nntp} server.  You tell Gnus which back end to  on the same actual @acronym{NNTP} server.  You tell Gnus which back end to
12110  use, and what parameters to set by specifying a @dfn{select method}.  use, and what parameters to set by specifying a @dfn{select method}.
12111    
12112  These select method specifications can sometimes become quite  These select method specifications can sometimes become quite
12113  complicated---say, for instance, that you want to read from the  complicated---say, for instance, that you want to read from the
12114  @sc{nntp} server @samp{news.funet.fi} on port number 13, which  @acronym{NNTP} server @samp{news.funet.fi} on port number 13, which
12115  hangs if queried for @sc{nov} headers and has a buggy select.  Ahem.  hangs if queried for @acronym{NOV} headers and has a buggy select.  Ahem.
12116  Anyway, if you had to specify that for each group that used this  Anyway, if you had to specify that for each group that used this
12117  server, that would be too much work, so Gnus offers a way of naming  server, that would be too much work, so Gnus offers a way of naming
12118  select methods, which is what you do in the server buffer.  select methods, which is what you do in the server buffer.
# Line 10101  To enter the server buffer, use the @kbd Line 12121  To enter the server buffer, use the @kbd
12121  (@code{gnus-group-enter-server-mode}) command in the group buffer.  (@code{gnus-group-enter-server-mode}) command in the group buffer.
12122    
12123  @menu  @menu
12124  * Server Buffer Format::      You can customize the look of this buffer.  * Server Buffer Format::        You can customize the look of this buffer.
12125  * Server Commands::           Commands to manipulate servers.  * Server Commands::             Commands to manipulate servers.
12126  * Example Methods::           Examples server specifications.  * Example Methods::             Examples server specifications.
12127  * Creating a Virtual Server:: An example session.  * Creating a Virtual Server::   An example session.
12128  * Server Variables::          Which variables to set.  * Server Variables::            Which variables to set.
12129  * Servers and Methods::       You can use server names as select methods.  * Servers and Methods::         You can use server names as select methods.
12130  * Unavailable Servers::       Some servers you try to contact may be down.  * Unavailable Servers::         Some servers you try to contact may be down.
12131  @end menu  @end menu
12132    
12133  @vindex gnus-server-mode-hook  @vindex gnus-server-mode-hook
# Line 10170  Add a new server (@code{gnus-server-add- Line 12190  Add a new server (@code{gnus-server-add-
12190  @findex gnus-server-edit-server  @findex gnus-server-edit-server
12191  Edit a server (@code{gnus-server-edit-server}).  Edit a server (@code{gnus-server-edit-server}).
12192    
12193  @item @key{SPC}  @item SPACE
12194  @kindex @key{SPC} (Server)  @kindex SPACE (Server)
12195  @findex gnus-server-read-server  @findex gnus-server-read-server
12196  Browse the current server (@code{gnus-server-read-server}).  Browse the current server (@code{gnus-server-read-server}).
12197    
# Line 10273  Here's the method for a public spool: Line 12293  Here's the method for a public spool:
12293  @cindex proxy  @cindex proxy
12294  @cindex firewall  @cindex firewall
12295    
12296  If you are behind a firewall and only have access to the @sc{nntp}  If you are behind a firewall and only have access to the @acronym{NNTP}
12297  server from the firewall machine, you can instruct Gnus to @code{rlogin}  server from the firewall machine, you can instruct Gnus to @code{rlogin}
12298  on the firewall machine and telnet from there to the @sc{nntp} server.  on the firewall machine and telnet from there to the @acronym{NNTP} server.
12299  Doing this can be rather fiddly, but your virtual server definition  Doing this can be rather fiddly, but your virtual server definition
12300  should probably look something like this:  should probably look something like this:
12301    
12302  @lisp  @lisp
12303  (nntp "firewall"  (nntp "firewall"
12304        (nntp-address "the.firewall.machine")        (nntp-open-connection-function nntp-open-via-rlogin-and-telnet)
12305        (nntp-open-connection-function nntp-open-rlogin)        (nntp-via-address "the.firewall.machine")
12306        (nntp-end-of-line "\n")        (nntp-address "the.real.nntp.host")
12307        (nntp-rlogin-parameters        (nntp-end-of-line "\n"))
        ("telnet" "the.real.nntp.host" "nntp")))  
12308  @end lisp  @end lisp
12309    
12310  If you want to use the wonderful @code{ssh} program to provide a  If you want to use the wonderful @code{ssh} program to provide a
12311  compressed connection over the modem line, you could create a virtual  compressed connection over the modem line, you could add the following
12312  server that would look something like this:  configuration to the example above:
12313    
12314    @lisp
12315          (nntp-via-rlogin-command "ssh")
12316    @end lisp
12317    
12318    See also @code{nntp-via-rlogin-command-switches}.
12319    
12320    If you're behind a firewall, but have direct access to the outside world
12321    through a wrapper command like "runsocks", you could open a socksified
12322    telnet connection to the news server as follows:
12323    
12324  @lisp  @lisp
12325  (nntp "news"  (nntp "outside"
12326         (nntp-address "copper.uio.no")        (nntp-pre-command "runsocks")
12327         (nntp-rlogin-program "ssh")        (nntp-open-connection-function nntp-open-via-telnet)
12328         (nntp-open-connection-function nntp-open-rlogin)        (nntp-address "the.news.server")
12329         (nntp-end-of-line "\n")        (nntp-end-of-line "\n"))
        (nntp-rlogin-parameters  
         ("telnet" "news.uio.no" "nntp")))  
12330  @end lisp  @end lisp
12331    
12332  This means that you have to have set up @code{ssh-agent} correctly to  This means that you have to have set up @code{ssh-agent} correctly to
# Line 10315  If you're saving lots of articles in the Line 12342  If you're saving lots of articles in the
12342  articles, you may want to create a virtual server to read the cache.  articles, you may want to create a virtual server to read the cache.
12343    
12344  First you need to add a new server.  The @kbd{a} command does that.  It  First you need to add a new server.  The @kbd{a} command does that.  It
12345  would probably be best to use @code{nnspool} to read the cache.  You  would probably be best to use @code{nnml} to read the cache.  You
12346  could also use @code{nnml} or @code{nnmh}, though.  could also use @code{nnspool} or @code{nnmh}, though.
12347    
12348  Type @kbd{a nnspool @key{RET} cache @key{RET}}.  Type @kbd{a nnml RET cache RET}.
12349    
12350  You should now have a brand new @code{nnspool} virtual server called  You should now have a brand new @code{nnml} virtual server called
12351  @samp{cache}.  You now need to edit it to have the right definitions.  @samp{cache}.  You now need to edit it to have the right definitions.
12352  Type @kbd{e} to edit the server.  You'll be entered into a buffer that  Type @kbd{e} to edit the server.  You'll be entered into a buffer that
12353  will contain the following:  will contain the following:
12354    
12355  @lisp  @lisp
12356  (nnspool "cache")  (nnml "cache")
12357  @end lisp  @end lisp
12358    
12359  Change that to:  Change that to:
12360    
12361  @lisp  @lisp
12362  (nnspool "cache"  (nnml "cache"
12363           (nnspool-spool-directory "~/News/cache/")           (nnml-directory "~/News/cache/")
12364           (nnspool-nov-directory "~/News/cache/")           (nnml-active-file "~/News/cache/active"))
          (nnspool-active-file "~/News/cache/active"))  
12365  @end lisp  @end lisp
12366    
12367  Type @kbd{C-c C-c} to return to the server buffer.  If you now press  Type @kbd{C-c C-c} to return to the server buffer.  If you now press
12368  @key{RET} over this virtual server, you should be entered into a browse  @kbd{RET} over this virtual server, you should be entered into a browse
12369  buffer, and you should be able to enter any of the groups displayed.  buffer, and you should be able to enter any of the groups displayed.
12370    
12371    
12372  @node Server Variables  @node Server Variables
12373  @subsection Server Variables  @subsection Server Variables
12374    @cindex server variables
12375    @cindex server parameters
12376    
12377  One sticky point when defining variables (both on back ends and in Emacs  One sticky point when defining variables (both on back ends and in Emacs
12378  in general) is that some variables are typically initialized from other  in general) is that some variables are typically initialized from other
12379  variables when the definition of the variables is being loaded.  If you  variables when the definition of the variables is being loaded.  If you
12380  change the "base" variable after the variables have been loaded, you  change the ``base'' variable after the variables have been loaded, you
12381  won't change the "derived" variables.  won't change the ``derived'' variables.
12382    
12383  This typically affects directory and file variables.  For instance,  This typically affects directory and file variables.  For instance,
12384  @code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}  @code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}
# Line 10369  manual, but here's an example @code{nnml Line 12397  manual, but here's an example @code{nnml
12397        (nnml-newsgroups-file "~/my-mail/newsgroups"))        (nnml-newsgroups-file "~/my-mail/newsgroups"))
12398  @end lisp  @end lisp
12399    
12400    Server variables are often called @dfn{server parameters}.
12401    
12402  @node Servers and Methods  @node Servers and Methods
12403  @subsection Servers and Methods  @subsection Servers and Methods
# Line 10401  it will regard that server as ``down''. Line 12430  it will regard that server as ``down''.
12430  So, what happens if the machine was only feeling unwell temporarily?  So, what happens if the machine was only feeling unwell temporarily?
12431  How do you test to see whether the machine has come up again?  How do you test to see whether the machine has come up again?
12432    
12433  You jump to the server buffer (@pxref{The Server Buffer}) and poke it  You jump to the server buffer (@pxref{Server Buffer}) and poke it
12434  with the following commands:  with the following commands:
12435    
12436  @table @kbd  @table @kbd
# Line 10442  Close the connections to all servers in Line 12471  Close the connections to all servers in
12471  Remove all marks to whether Gnus was denied connection from any servers  Remove all marks to whether Gnus was denied connection from any servers
12472  (@code{gnus-server-remove-denials}).  (@code{gnus-server-remove-denials}).
12473    
12474    @item L
12475    @kindex L (Server)
12476    @findex gnus-server-offline-server
12477    Set server status to offline (@code{gnus-server-offline-server}).
12478    
12479  @end table  @end table
12480    
12481    
# Line 10451  Remove all marks to whether Gnus was den Line 12485  Remove all marks to whether Gnus was den
12485  @cindex news back ends  @cindex news back ends
12486    
12487  A newsreader is normally used for reading news.  Gnus currently provides  A newsreader is normally used for reading news.  Gnus currently provides
12488  only two methods of getting news---it can read from an @sc{nntp} server,  only two methods of getting news---it can read from an @acronym{NNTP} server,
12489  or it can read from a local spool.  or it can read from a local spool.
12490    
12491  @menu  @menu
12492  * NNTP::               Reading news from an @sc{nntp} server.  * NNTP::                        Reading news from an @acronym{NNTP} server.
12493  * News Spool::         Reading news from the local spool.  * News Spool::                  Reading news from the local spool.
12494  @end menu  @end menu
12495    
12496    
12497  @node NNTP  @node NNTP
12498  @subsection @sc{nntp}  @subsection NNTP
12499  @cindex nntp  @cindex nntp
12500    
12501  Subscribing to a foreign group from an @sc{nntp} server is rather easy.  Subscribing to a foreign group from an @acronym{NNTP} server is rather easy.
12502  You just specify @code{nntp} as method and the address of the @sc{nntp}  You just specify @code{nntp} as method and the address of the @acronym{NNTP}
12503  server as the, uhm, address.  server as the, uhm, address.
12504    
12505  If the @sc{nntp} server is located at a non-standard port, setting the  If the @acronym{NNTP} server is located at a non-standard port, setting the
12506  third element of the select method to this port number should allow you  third element of the select method to this port number should allow you
12507  to connect to the right port.  You'll have to edit the group info for  to connect to the right port.  You'll have to edit the group info for
12508  that (@pxref{Foreign Groups}).  that (@pxref{Foreign Groups}).
# Line 10486  server: Line 12520  server:
12520  @vindex nntp-server-opened-hook  @vindex nntp-server-opened-hook
12521  @cindex @sc{mode reader}  @cindex @sc{mode reader}
12522  @cindex authinfo  @cindex authinfo
12523  @cindex authentication  @cindex authentification
12524  @cindex nntp authentication  @cindex nntp authentification
12525  @findex nntp-send-authinfo  @findex nntp-send-authinfo
12526  @findex nntp-send-mode-reader  @findex nntp-send-mode-reader
12527  is run after a connection has been made.  It can be used to send  is run after a connection has been made.  It can be used to send
12528  commands to the @sc{nntp} server after it has been contacted.  By  commands to the @acronym{NNTP} server after it has been contacted.  By
12529  default it sends the command @code{MODE READER} to the server with the  default it sends the command @code{MODE READER} to the server with the
12530  @code{nntp-send-mode-reader} function.  This function should always be  @code{nntp-send-mode-reader} function.  This function should always be
12531  present in this hook.  present in this hook.
# Line 10500  present in this hook. Line 12534  present in this hook.
12534  @vindex nntp-authinfo-function  @vindex nntp-authinfo-function
12535  @findex nntp-send-authinfo  @findex nntp-send-authinfo
12536  @vindex nntp-authinfo-file  @vindex nntp-authinfo-file
12537  This function will be used to send @samp{AUTHINFO} to the @sc{nntp}  This function will be used to send @samp{AUTHINFO} to the @acronym{NNTP}
12538  server.  The default function is @code{nntp-send-authinfo}, which looks  server.  The default function is @code{nntp-send-authinfo}, which looks
12539  through your @file{~/.authinfo} (or whatever you've set the  through your @file{~/.authinfo} (or whatever you've set the
12540  @code{nntp-authinfo-file} variable to) for applicable entries.  If none  @code{nntp-authinfo-file} variable to) for applicable entries.  If none
# Line 10582  nntpd 1.5.11t, since that command chokes Line 12616  nntpd 1.5.11t, since that command chokes
12616    
12617  @item nntp-maximum-request  @item nntp-maximum-request
12618  @vindex nntp-maximum-request  @vindex nntp-maximum-request
12619  If the @sc{nntp} server doesn't support @sc{nov} headers, this back end  If the @acronym{NNTP} server doesn't support @acronym{NOV} headers, this back end
12620  will collect headers by sending a series of @code{head} commands.  To  will collect headers by sending a series of @code{head} commands.  To
12621  speed things up, the back end sends lots of these commands without  speed things up, the back end sends lots of these commands without
12622  waiting for reply, and then reads all the replies.  This is controlled  waiting for reply, and then reads all the replies.  This is controlled
# Line 10592  your network is buggy, you should set th Line 12626  your network is buggy, you should set th
12626  @item nntp-connection-timeout  @item nntp-connection-timeout
12627  @vindex nntp-connection-timeout  @vindex nntp-connection-timeout
12628  If you have lots of foreign @code{nntp} groups that you connect to  If you have lots of foreign @code{nntp} groups that you connect to
12629  regularly, you're sure to have problems with @sc{nntp} servers not  regularly, you're sure to have problems with @acronym{NNTP} servers not
12630  responding properly, or being too loaded to reply within reasonable  responding properly, or being too loaded to reply within reasonable
12631  time.  This is can lead to awkward problems, which can be helped  time.  This is can lead to awkward problems, which can be helped
12632  somewhat by setting @code{nntp-connection-timeout}.  This is an integer  somewhat by setting @code{nntp-connection-timeout}.  This is an integer
# Line 10606  no timeouts are done. Line 12640  no timeouts are done.
12640  @c @cindex dynamic IP addresses  @c @cindex dynamic IP addresses
12641  @c If you're running Gnus on a machine that has a dynamically assigned  @c If you're running Gnus on a machine that has a dynamically assigned
12642  @c address, Gnus may become confused.  If the address of your machine  @c address, Gnus may become confused.  If the address of your machine
12643  @c changes after connecting to the @sc{nntp} server, Gnus will simply sit  @c changes after connecting to the @acronym{NNTP} server, Gnus will simply sit
12644  @c waiting forever for replies from the server.  To help with this  @c waiting forever for replies from the server.  To help with this
12645  @c unfortunate problem, you can set this command to a number.  Gnus will  @c unfortunate problem, you can set this command to a number.  Gnus will
12646  @c then, if it sits waiting for a reply from the server longer than that  @c then, if it sits waiting for a reply from the server longer than that
# Line 10622  no timeouts are done. Line 12656  no timeouts are done.
12656    
12657  @item nntp-server-hook  @item nntp-server-hook
12658  @vindex nntp-server-hook  @vindex nntp-server-hook
12659  This hook is run as the last step when connecting to an @sc{nntp}  This hook is run as the last step when connecting to an @acronym{NNTP}
12660  server.  server.
12661    
12662  @findex nntp-open-rlogin  @item nntp-buggy-select
12663  @findex nntp-open-telnet  @vindex nntp-buggy-select
12664  @findex nntp-open-network-stream  Set this to non-@code{nil} if your select routine is buggy.
12665    
12666    @item nntp-nov-is-evil
12667    @vindex nntp-nov-is-evil
12668    If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this
12669    variable to @code{t}, but @code{nntp} usually checks automatically whether @acronym{NOV}
12670    can be used.
12671    
12672    @item nntp-xover-commands
12673    @vindex nntp-xover-commands
12674    @cindex @acronym{NOV}
12675    @cindex XOVER
12676    List of strings used as commands to fetch @acronym{NOV} lines from a
12677    server.  The default value of this variable is @code{("XOVER"
12678    "XOVERVIEW")}.
12679    
12680    @item nntp-nov-gap
12681    @vindex nntp-nov-gap
12682    @code{nntp} normally sends just one big request for @acronym{NOV} lines to
12683    the server.  The server responds with one huge list of lines.  However,
12684    if you have read articles 2-5000 in the group, and only want to read
12685    article 1 and 5001, that means that @code{nntp} will fetch 4999 @acronym{NOV}
12686    lines that you will not need.  This variable says how
12687    big a gap between two consecutive articles is allowed to be before the
12688    @code{XOVER} request is split into several request.  Note that if your
12689    network is fast, setting this variable to a really small number means
12690    that fetching will probably be slower.  If this variable is @code{nil},
12691    @code{nntp} will never split requests.  The default is 5.
12692    
12693    @item nntp-prepare-server-hook
12694    @vindex nntp-prepare-server-hook
12695    A hook run before attempting to connect to an @acronym{NNTP} server.
12696    
12697    @item nntp-warn-about-losing-connection
12698    @vindex nntp-warn-about-losing-connection
12699    If this variable is non-@code{nil}, some noise will be made when a
12700    server closes connection.
12701    
12702    @item nntp-record-commands
12703    @vindex nntp-record-commands
12704    If non-@code{nil}, @code{nntp} will log all commands it sends to the
12705    @acronym{NNTP} server (along with a timestamp) in the @samp{*nntp-log*}
12706    buffer.  This is useful if you are debugging a Gnus/@acronym{NNTP} connection
12707    that doesn't seem to work.
12708    
12709  @item nntp-open-connection-function  @item nntp-open-connection-function
12710  @vindex nntp-open-connection-function  @vindex nntp-open-connection-function
12711  This function is used to connect to the remote system.  Four pre-made  It is possible to customize how the connection to the nntp server will
12712  functions are supplied:  be opened.  If you specify an @code{nntp-open-connection-function}
12713    parameter, Gnus will use that function to establish the connection.
12714    Five pre-made functions are supplied.  These functions can be grouped in
12715    two categories: direct connection functions (three pre-made), and
12716    indirect ones (two pre-made).
12717    
12718    @item nntp-prepare-post-hook
12719    @vindex nntp-prepare-post-hook
12720    A hook run just before posting an article.  If there is no
12721    @code{Message-ID} header in the article and the news server provides the
12722    recommended ID, it will be added to the article before running this
12723    hook.  It is useful to make @code{Cancel-Lock} headers even if you
12724    inhibit Gnus to add a @code{Message-ID} header, you could say:
12725    
12726    @lisp
12727    (add-hook 'nntp-prepare-post-hook 'canlock-insert-header)
12728    @end lisp
12729    
12730    Note that not all servers support the recommended ID.  This works for
12731    INN versions 2.3.0 and later, for instance.
12732    
12733    @item nntp-read-timeout
12734    @vindex nntp-read-timeout
12735    How long nntp should wait between checking for the end of output.
12736    Shorter values mean quicker response, but is more CPU intensive.  The
12737    default is 0.1 seconds.  If you have a slow line to the server (and
12738    don't like to see Emacs eat your available CPU power), you might set
12739    this to, say, 1.
12740    
12741    @end table
12742    
12743    @menu
12744    * Direct Functions::            Connecting directly to the server.
12745    * Indirect Functions::          Connecting indirectly to the server.
12746    * Common Variables::            Understood by several connection functions.
12747    @end menu
12748    
12749    
12750    @node Direct Functions
12751    @subsubsection Direct Functions
12752    @cindex direct connection functions
12753    
12754    These functions are called direct because they open a direct connection
12755    between your machine and the @acronym{NNTP} server.  The behavior of these
12756    functions is also affected by commonly understood variables
12757    (@pxref{Common Variables}).
12758    
12759  @table @code  @table @code
12760    @findex nntp-open-network-stream
12761  @item nntp-open-network-stream  @item nntp-open-network-stream
12762  This is the default, and simply connects to some port or other on the  This is the default, and simply connects to some port or other on the
12763  remote system.  remote system.
12764    
12765  @item nntp-open-rlogin  @findex nntp-open-tls-stream
12766  Does an @samp{rlogin} on the  @item nntp-open-tls-stream
12767  remote system, and then does a @samp{telnet} to the @sc{nntp} server  Opens a connection to a server over a @dfn{secure} channel.  To use
12768  available there.  this you must have @uref{http://www.gnu.org/software/gnutls/, GNUTLS}
12769    installed.  You then define a server as follows:
12770    
12771  @code{nntp-open-rlogin}-related variables:  @lisp
12772    ;; @r{"nntps" is port 563 and is predefined in our @file{/etc/services}}
12773    ;; @r{however, @samp{gnutls-cli -p} doesn't like named ports.}
12774    ;;
12775    (nntp "snews.bar.com"
12776          (nntp-open-connection-function nntp-open-tls-stream)
12777          (nntp-port-number )
12778          (nntp-address "snews.bar.com"))
12779    @end lisp
12780    
12781  @table @code  @findex nntp-open-ssl-stream
12782    @item nntp-open-ssl-stream
12783    Opens a connection to a server over a @dfn{secure} channel.  To use
12784    this you must have @uref{http://www.openssl.org, OpenSSL} or
12785    @uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL, SSLeay} installed.  You
12786    then define a server as follows:
12787    
12788  @item nntp-rlogin-program  @lisp
12789  @vindex nntp-rlogin-program  ;; @r{"snews" is port 563 and is predefined in our @file{/etc/services}}
12790  Program used to log in on remote machines.  The default is @samp{rsh},  ;; @r{however, @samp{openssl s_client -port} doesn't like named ports.}
12791  but @samp{ssh} is a popular alternative.  ;;
12792    (nntp "snews.bar.com"
12793          (nntp-open-connection-function nntp-open-ssl-stream)
12794          (nntp-port-number 563)
12795          (nntp-address "snews.bar.com"))
12796    @end lisp
12797    
12798  @item nntp-rlogin-parameters  @findex nntp-open-telnet-stream
12799  @vindex nntp-rlogin-parameters  @item nntp-open-telnet-stream
12800  This list will be used as the parameter list given to @code{rsh}.  Opens a connection to an @acronym{NNTP} server by simply @samp{telnet}'ing
12801    it.  You might wonder why this function exists, since we have the
12802    default @code{nntp-open-network-stream} which would do the job.  (One
12803    of) the reason(s) is that if you are behind a firewall but have direct
12804    connections to the outside world thanks to a command wrapper like
12805    @code{runsocks}, you can use it like this:
12806    
12807  @item nntp-rlogin-user-name  @lisp
12808  @vindex nntp-rlogin-user-name  (nntp "socksified"
12809  User name on the remote system.        (nntp-pre-command "runsocks")
12810          (nntp-open-connection-function nntp-open-telnet-stream)
12811          (nntp-address "the.news.server"))
12812    @end lisp
12813    
12814    With the default method, you would need to wrap your whole Emacs
12815    session, which is not a good idea.
12816  @end table  @end table
12817    
 @item nntp-open-telnet  
 Does a @samp{telnet} to the remote system and then another @samp{telnet}  
 to get to the @sc{nntp} server.  
12818    
12819  @code{nntp-open-telnet}-related variables:  @node Indirect Functions
12820    @subsubsection Indirect Functions
12821    @cindex indirect connection functions
12822    
12823    These functions are called indirect because they connect to an
12824    intermediate host before actually connecting to the @acronym{NNTP} server.
12825    All of these functions and related variables are also said to belong to
12826    the ``via'' family of connection: they're all prefixed with ``via'' to make
12827    things cleaner.  The behavior of these functions is also affected by
12828    commonly understood variables (@pxref{Common Variables}).
12829    
12830  @table @code  @table @code
12831  @item nntp-telnet-command  @item nntp-open-via-rlogin-and-telnet
12832  @vindex nntp-telnet-command  @findex nntp-open-via-rlogin-and-telnet
12833  Command used to start @code{telnet}.  Does an @samp{rlogin} on a remote system, and then does a @samp{telnet}
12834    to the real @acronym{NNTP} server from there.  This is useful for instance if
12835    you need to connect to a firewall machine first.
12836    
12837  @item nntp-telnet-switches  @code{nntp-open-via-rlogin-and-telnet}-specific variables:
 @vindex nntp-telnet-switches  
 List of strings to be used as the switches to the @code{telnet} command.  
12838    
12839  @item nntp-telnet-user-name  @table @code
12840  @vindex nntp-telnet-user-name  @item nntp-via-rlogin-command
12841  User name for log in on the remote system.  @vindex nntp-via-rlogin-command
12842    Command used to log in on the intermediate host.  The default is
12843  @item nntp-telnet-passwd  @samp{rsh}, but @samp{ssh} is a popular alternative.
 @vindex nntp-telnet-passwd  
 Password to use when logging in.  
   
 @item nntp-telnet-parameters  
 @vindex nntp-telnet-parameters  
 A list of strings executed as a command after logging in  
 via @code{telnet}.  
   
 @item nntp-telnet-shell-prompt  
 @vindex nntp-telnet-shell-prompt  
 Regexp matching the shell prompt on the remote machine.  The default is  
 @samp{bash\\|\$ *\r?$\\|> *\r?}.  
   
 @item nntp-open-telnet-envuser  
 @vindex nntp-open-telnet-envuser  
 If non-@code{nil}, the @code{telnet} session (client and server both)  
 will support the @code{ENVIRON} option and not prompt for login name.  
 This works for Solaris @code{telnet}, for instance.  
12844    
12845    @item nntp-via-rlogin-command-switches
12846    @vindex nntp-via-rlogin-command-switches
12847    List of strings to be used as the switches to
12848    @code{nntp-via-rlogin-command}.  The default is @code{nil}.  If you use
12849    @samp{ssh} for @code{nntp-via-rlogin-command}, you may set this to
12850    @samp{("-C")} in order to compress all data connections, otherwise set
12851    this to @samp{("-t" "-e" "none")} or @samp{("-C" "-t" "-e" "none")} if
12852    the telnet command requires a pseudo-tty allocation on an intermediate
12853    host.
12854  @end table  @end table
12855    
12856  @findex nntp-open-ssl-stream  @item nntp-open-via-telnet-and-telnet
12857  @item nntp-open-ssl-stream  @findex nntp-open-via-telnet-and-telnet
12858  Opens a connection to a server over a @dfn{secure} channel.  To use this  Does essentially the same, but uses @samp{telnet} instead of
12859  you must have SSLeay installed  @samp{rlogin} to connect to the intermediate host.
 (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need  
 @file{ssl.el} (from the W3 distribution, for instance).  You then  
 define a server as follows:  
12860    
12861  @lisp  @code{nntp-open-via-telnet-and-telnet}-specific variables:
12862  ;; Type `C-c C-c' after you've finished editing.  
12863  ;;  @table @code
12864  ;; "snews" is port 563 and is predefined  @item nntp-via-telnet-command
12865  ;; in our /etc/services  @vindex nntp-via-telnet-command
12866  ;;  Command used to @code{telnet} the intermediate host.  The default is
12867  (nntp "snews.bar.com"  @samp{telnet}.
12868        (nntp-open-connection-function  
12869          nntp-open-ssl-stream)  @item nntp-via-telnet-switches
12870        (nntp-port-number "snews")  @vindex nntp-via-telnet-switches
12871        (nntp-address "snews.bar.com"))  List of strings to be used as the switches to the
12872  @end lisp  @code{nntp-via-telnet-command} command.  The default is @samp{("-8")}.
12873    
12874    @item nntp-via-user-password
12875    @vindex nntp-via-user-password
12876    Password to use when logging in on the intermediate host.
12877    
12878    @item nntp-via-envuser
12879    @vindex nntp-via-envuser
12880    If non-@code{nil}, the intermediate @code{telnet} session (client and
12881    server both) will support the @code{ENVIRON} option and not prompt for
12882    login name.  This works for Solaris @code{telnet}, for instance.
12883    
12884    @item nntp-via-shell-prompt
12885    @vindex nntp-via-shell-prompt
12886    Regexp matching the shell prompt on the intermediate host.  The default
12887    is @samp{bash\\|\$ *\r?$\\|> *\r?}.
12888    
12889  @end table  @end table
12890    
12891  @item nntp-end-of-line  @end table
 @vindex nntp-end-of-line  
 String to use as end-of-line marker when talking to the @sc{nntp}  
 server.  This is @samp{\r\n} by default, but should be @samp{\n} when  
 using @code{rlogin} to talk to the server.  
12892    
 @item nntp-rlogin-user-name  
 @vindex nntp-rlogin-user-name  
 User name on the remote system when using the @code{rlogin} connect  
 function.  
12893    
12894  @item nntp-address  Here are some additional variables that are understood by all the above
12895  @vindex nntp-address  functions:
 The address of the remote system running the @sc{nntp} server.  
12896    
12897  @item nntp-port-number  @table @code
 @vindex nntp-port-number  
 Port number to connect to when using the @code{nntp-open-network-stream}  
 connect function.  
12898    
12899  @item nntp-buggy-select  @item nntp-via-user-name
12900  @vindex nntp-buggy-select  @vindex nntp-via-user-name
12901  Set this to non-@code{nil} if your select routine is buggy.  User name to use when connecting to the intermediate host.
12902    
12903  @item nntp-nov-is-evil  @item nntp-via-address
12904  @vindex nntp-nov-is-evil  @vindex nntp-via-address
12905  If the @sc{nntp} server does not support @sc{nov}, you could set this  Address of the intermediate host to connect to.
 variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}  
 can be used.  
12906    
12907  @item nntp-xover-commands  @end table
 @vindex nntp-xover-commands  
 @cindex nov  
 @cindex XOVER  
 List of strings used as commands to fetch @sc{nov} lines from a  
 server.  The default value of this variable is @code{("XOVER"  
 "XOVERVIEW")}.  
12908    
 @item nntp-nov-gap  
 @vindex nntp-nov-gap  
 @code{nntp} normally sends just one big request for @sc{nov} lines to  
 the server.  The server responds with one huge list of lines.  However,  
 if you have read articles 2-5000 in the group, and only want to read  
 article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}  
 lines that you will not need.  This variable says how  
 big a gap between two consecutive articles is allowed to be before the  
 @code{XOVER} request is split into several request.  Note that if your  
 network is fast, setting this variable to a really small number means  
 that fetching will probably be slower.  If this variable is @code{nil},  
 @code{nntp} will never split requests.  The default is 5.  
12909    
12910  @item nntp-prepare-server-hook  @node Common Variables
12911  @vindex nntp-prepare-server-hook  @subsubsection Common Variables
 A hook run before attempting to connect to an @sc{nntp} server.  
12912    
12913  @item nntp-warn-about-losing-connection  The following variables affect the behavior of all, or several of the
12914  @vindex nntp-warn-about-losing-connection  pre-made connection functions.  When not specified, all functions are
12915  If this variable is non-@code{nil}, some noise will be made when a  affected.
 server closes connection.  
12916    
12917  @item nntp-record-commands  @table @code
12918  @vindex nntp-record-commands  
12919  If non-@code{nil}, @code{nntp} will log all commands it sends to the  @item nntp-pre-command
12920  @sc{nntp} server (along with a timestamp) in the @samp{*nntp-log*}  @vindex nntp-pre-command
12921  buffer.  This is useful if you are debugging a Gnus/@sc{nntp} connection  A command wrapper to use when connecting through a non native
12922  that doesn't seem to work.  connection function (all except @code{nntp-open-network-stream},
12923    @code{nntp-open-tls-stream}, and @code{nntp-open-ssl-stream}.  This is
12924    where you would put a @samp{SOCKS} wrapper for instance.
12925    
12926    @item nntp-address
12927    @vindex nntp-address
12928    The address of the @acronym{NNTP} server.
12929    
12930    @item nntp-port-number
12931    @vindex nntp-port-number
12932    Port number to connect to the @acronym{NNTP} server.  The default is
12933    @samp{nntp}.  If you use @acronym{NNTP} over
12934    @acronym{tls}/@acronym{ssl}, you may want to use integer ports rather
12935    than named ports (i.e, use @samp{563} instead of @samp{snews} or
12936    @samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may
12937    not work with named ports.
12938    
12939    @item nntp-end-of-line
12940    @vindex nntp-end-of-line
12941    String to use as end-of-line marker when talking to the @acronym{NNTP}
12942    server.  This is @samp{\r\n} by default, but should be @samp{\n} when
12943    using a non native connection function.
12944    
12945    @item nntp-telnet-command
12946    @vindex nntp-telnet-command
12947    Command to use when connecting to the @acronym{NNTP} server through
12948    @samp{telnet}.  This is @emph{not} for an intermediate host.  This is
12949    just for the real @acronym{NNTP} server.  The default is
12950    @samp{telnet}.
12951    
12952    @item nntp-telnet-switches
12953    @vindex nntp-telnet-switches
12954    A list of switches to pass to @code{nntp-telnet-command}.  The default
12955    is @samp{("-8")}.
12956    
12957  @end table  @end table
12958    
# Line 10831  Where @code{nnspool} looks for the artic Line 12992  Where @code{nnspool} looks for the artic
12992    
12993  @item nnspool-nov-directory  @item nnspool-nov-directory
12994  @vindex nnspool-nov-directory  @vindex nnspool-nov-directory
12995  Where @code{nnspool} will look for @sc{nov} files.  This is normally  Where @code{nnspool} will look for @acronym{NOV} files.  This is normally@*
12996  @file{/usr/spool/news/over.view/}.  @file{/usr/spool/news/over.view/}.
12997    
12998  @item nnspool-lib-dir  @item nnspool-lib-dir
# Line 10856  The name of the active date file. Line 13017  The name of the active date file.
13017    
13018  @item nnspool-nov-is-evil  @item nnspool-nov-is-evil
13019  @vindex nnspool-nov-is-evil  @vindex nnspool-nov-is-evil
13020  If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files  If non-@code{nil}, @code{nnspool} won't try to use any @acronym{NOV} files
13021  that it finds.  that it finds.
13022    
13023  @item nnspool-sift-nov-with-sed  @item nnspool-sift-nov-with-sed
13024  @vindex nnspool-sift-nov-with-sed  @vindex nnspool-sift-nov-with-sed
13025  @cindex sed  @cindex sed
13026  If non-@code{nil}, which is the default, use @code{sed} to get the  If non-@code{nil}, which is the default, use @code{sed} to get the
13027  relevant portion from the overview file.  If nil, @code{nnspool} will  relevant portion from the overview file.  If @code{nil},
13028  load the entire file into a buffer and process it there.  @code{nnspool} will load the entire file into a buffer and process it
13029    there.
13030    
13031  @end table  @end table
13032    
# Line 10878  Reading mail with a newsreader---isn't t Line 13040  Reading mail with a newsreader---isn't t
13040  course.  course.
13041    
13042  @menu  @menu
13043  * Mail in a Newsreader::         Important introductory notes.  * Mail in a Newsreader::        Important introductory notes.
13044  * Getting Started Reading Mail:: A simple cookbook example.  * Getting Started Reading Mail::  A simple cookbook example.
13045  * Splitting Mail::               How to create mail groups.  * Splitting Mail::              How to create mail groups.
13046  * Mail Sources::                 How to tell Gnus where to get mail from.  * Mail Sources::                How to tell Gnus where to get mail from.
13047  * Mail Back End Variables::      Variables for customizing mail handling.  * Mail Back End Variables::     Variables for customizing mail handling.
13048  * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.  * Fancy Mail Splitting::        Gnus can do hairy splitting of incoming mail.
13049  * Group Mail Splitting::         Use group customize to drive mail splitting.  * Group Mail Splitting::        Use group customize to drive mail splitting.
13050  * Incorporating Old Mail::       What about the old mail you have?  * Incorporating Old Mail::      What about the old mail you have?
13051  * Expiring Mail::                Getting rid of unwanted mail.  * Expiring Mail::               Getting rid of unwanted mail.
13052  * Washing Mail::                 Removing gruft from the mail you get.  * Washing Mail::                Removing cruft from the mail you get.
13053  * Duplicates::                   Dealing with duplicated mail.  * Duplicates::                  Dealing with duplicated mail.
13054  * Not Reading Mail::             Using mail back ends for reading other files.  * Not Reading Mail::            Using mail back ends for reading other files.
13055  * Choosing a Mail Back End::     Gnus can read a variety of mail formats.  * Choosing a Mail Back End::    Gnus can read a variety of mail formats.
13056  @end menu  @end menu
13057    
13058    
# Line 10917  deleted?  How awful! Line 13079  deleted?  How awful!
13079  But, no, it means that old messages are @dfn{expired} according to some  But, no, it means that old messages are @dfn{expired} according to some
13080  scheme or other.  For news messages, the expire process is controlled by  scheme or other.  For news messages, the expire process is controlled by
13081  the news administrator; for mail, the expire process is controlled by  the news administrator; for mail, the expire process is controlled by
13082  you.  The expire process for mail is covered in depth in @pxref{Expiring  you.  The expire process for mail is covered in depth in @ref{Expiring
13083  Mail}.  Mail}.
13084    
13085  What many Gnus users find, after using it a while for both news and  What many Gnus users find, after using it a while for both news and
# Line 10925  mail, is that the transport mechanism ha Line 13087  mail, is that the transport mechanism ha
13087  they want to treat a message.  they want to treat a message.
13088    
13089  Many people subscribe to several mailing lists.  These are transported  Many people subscribe to several mailing lists.  These are transported
13090  via SMTP, and are therefore mail.  But we might go for weeks without  via @acronym{SMTP}, and are therefore mail.  But we might go for weeks without
13091  answering, or even reading these messages very carefully.  We may not  answering, or even reading these messages very carefully.  We may not
13092  need to save them because if we should need to read one again, they are  need to save them because if we should need to read one again, they are
13093  archived somewhere else.  archived somewhere else.
13094    
13095  Some people have local news groups which have only a handful of readers.  Some people have local news groups which have only a handful of readers.
13096  These are transported via @sc{nntp}, and are therefore news.  But we may need  These are transported via @acronym{NNTP}, and are therefore news.  But we may need
13097  to read and answer a large fraction of the messages very carefully in  to read and answer a large fraction of the messages very carefully in
13098  order to do our work.  And there may not be an archive, so we may need  order to do our work.  And there may not be an archive, so we may need
13099  to save the interesting messages the same way we would personal mail.  to save the interesting messages the same way we would personal mail.
# Line 10966  It's quite easy to use Gnus to read your Line 13128  It's quite easy to use Gnus to read your
13128  mail back end of your choice into @code{gnus-secondary-select-methods},  mail back end of your choice into @code{gnus-secondary-select-methods},
13129  and things will happen automatically.  and things will happen automatically.
13130    
13131  For instance, if you want to use @code{nnml} (which is a "one file per  For instance, if you want to use @code{nnml} (which is a ``one file per
13132  mail" back end), you could put the following in your @file{.gnus} file:  mail'' back end), you could put the following in your @file{~/.gnus.el} file:
13133    
13134  @lisp  @lisp
13135  (setq gnus-secondary-select-methods  (setq gnus-secondary-select-methods '((nnml "")))
       '((nnml "private")))  
13136  @end lisp  @end lisp
13137    
13138  Now, the next time you start Gnus, this back end will be queried for new  Now, the next time you start Gnus, this back end will be queried for new
13139  articles, and it will move all the messages in your spool file to its  articles, and it will move all the messages in your spool file to its
13140  directory, which is @code{~/Mail/} by default.  The new group that will  directory, which is @file{~/Mail/} by default.  The new group that will
13141  be created (@samp{mail.misc}) will be subscribed, and you can read it  be created (@samp{mail.misc}) will be subscribed, and you can read it
13142  like any other group.  like any other group.
13143    
# Line 11003  Especially @pxref{Choosing a Mail Back E Line 13164  Especially @pxref{Choosing a Mail Back E
13164  @subsection Splitting Mail  @subsection Splitting Mail
13165  @cindex splitting mail  @cindex splitting mail
13166  @cindex mail splitting  @cindex mail splitting
13167    @cindex mail filtering (splitting)
13168    
13169  @vindex nnmail-split-methods  @vindex nnmail-split-methods
13170  The @code{nnmail-split-methods} variable says how the incoming mail is  The @code{nnmail-split-methods} variable says how the incoming mail is
# Line 11027  insert sub-expressions from the matched Line 13189  insert sub-expressions from the matched
13189  ("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")  ("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
13190  @end lisp  @end lisp
13191    
13192    @noindent
13193    In that case, @code{nnmail-split-lowercase-expanded} controls whether
13194    the inserted text should be made lowercase.  @xref{Fancy Mail Splitting}.
13195    
13196  The second element can also be a function.  In that case, it will be  The second element can also be a function.  In that case, it will be
13197  called narrowed to the headers with the first element of the rule as the  called narrowed to the headers with the first element of the rule as the
13198  argument.  It should return a non-@code{nil} value if it thinks that the  argument.  It should return a non-@code{nil} value if it thinks that the
13199  mail belongs in that group.  mail belongs in that group.
13200    
13201  The last of these groups should always be a general one, and the regular  The last of these groups should always be a general one, and the regular
13202  expression should @emph{always} be @samp{} so that it matches any mails  expression should @emph{always} be @samp{*} so that it matches any mails
13203  that haven't been matched by any of the other regexps.  (These rules are  that haven't been matched by any of the other regexps.  (These rules are
13204  processed from the beginning of the alist toward the end.  The first  processed from the beginning of the alist toward the end.  The first
13205  rule to make a match will "win", unless you have crossposting enabled.  rule to make a match will ``win'', unless you have crossposting enabled.
13206  In that case, all matching rules will "win".)  In that case, all matching rules will ``win''.)
13207    
13208  If you like to tinker with this yourself, you can set this variable to a  If you like to tinker with this yourself, you can set this variable to a
13209  function of your choice.  This function will be called without any  function of your choice.  This function will be called without any
# Line 11048  thinks should carry this mail message. Line 13214  thinks should carry this mail message.
13214  Note that the mail back ends are free to maul the poor, innocent,  Note that the mail back ends are free to maul the poor, innocent,
13215  incoming headers all they want to.  They all add @code{Lines} headers;  incoming headers all they want to.  They all add @code{Lines} headers;
13216  some add @code{X-Gnus-Group} headers; most rename the Unix mbox  some add @code{X-Gnus-Group} headers; most rename the Unix mbox
13217  @samp{From } line to something else.  @code{From<SPACE>} line to something else.
13218    
13219  @vindex nnmail-crosspost  @vindex nnmail-crosspost
13220  The mail back ends all support cross-posting.  If several regexps match,  The mail back ends all support cross-posting.  If several regexps match,
13221  the mail will be ``cross-posted'' to all those groups.  the mail will be ``cross-posted'' to all those groups.
13222  @code{nnmail-crosspost} says whether to use this mechanism or not.  Note  @code{nnmail-crosspost} says whether to use this mechanism or not.  Note
13223  that no articles are crossposted to the general (@samp{}) group.  that no articles are crossposted to the general (@samp{*}) group.
13224    
13225  @vindex nnmail-crosspost-link-function  @vindex nnmail-crosspost-link-function
13226  @cindex crosspost  @cindex crosspost
# Line 11066  links.  If that's the case for you, set Line 13232  links.  If that's the case for you, set
13232  variable is @code{add-name-to-file} by default.)  variable is @code{add-name-to-file} by default.)
13233    
13234  @kindex M-x nnmail-split-history  @kindex M-x nnmail-split-history
13235  @kindex nnmail-split-history  @findex nnmail-split-history
13236  If you wish to see where the previous mail split put the messages, you  If you wish to see where the previous mail split put the messages, you
13237  can use the @kbd{M-x nnmail-split-history} command.  If you wish to see  can use the @kbd{M-x nnmail-split-history} command.  If you wish to see
13238  where re-spooling messages would put the messages, you can use  where re-spooling messages would put the messages, you can use
13239  @code{gnus-summary-respool-trace} and related commands (@pxref{Mail  @code{gnus-summary-respool-trace} and related commands (@pxref{Mail
13240  Group Commands}).  Group Commands}).
13241    
13242    @vindex nnmail-split-header-length-limit
13243    Header lines longer than the value of
13244    @code{nnmail-split-header-length-limit} are excluded from the split
13245    function.
13246    
13247    @vindex nnmail-mail-splitting-charset
13248    @vindex nnmail-mail-splitting-decodes
13249    By default the splitting codes @acronym{MIME} decodes headers so you
13250    can match on non-@acronym{ASCII} strings.  The
13251    @code{nnmail-mail-splitting-charset} variable specifies the default
13252    charset for decoding.  The behaviour can be turned off completely by
13253    binding @code{nnmail-mail-splitting-decodes} to @code{nil}, which is
13254    useful if you want to match articles based on the raw header data.
13255    
13256    @vindex nnmail-resplit-incoming
13257    By default, splitting is performed on all incoming messages.  If you
13258    specify a @code{directory} entry for the variable @code{mail-sources}
13259    (@pxref{Mail Source Specifiers}), however, then splitting does
13260    @emph{not} happen by default.  You can set the variable
13261    @code{nnmail-resplit-incoming} to a non-@code{nil} value to make
13262    splitting happen even in this case.  (This variable has no effect on
13263    other kinds of entries.)
13264    
13265  Gnus gives you all the opportunity you could possibly want for shooting  Gnus gives you all the opportunity you could possibly want for shooting
13266  yourself in the foot.  Let's say you create a group that will contain  yourself in the foot.  Let's say you create a group that will contain
13267  all the mail you get from your boss.  And then you accidentally  all the mail you get from your boss.  And then you accidentally
# Line 11087  month's rent money. Line 13276  month's rent money.
13276  @node Mail Sources  @node Mail Sources
13277  @subsection Mail Sources  @subsection Mail Sources
13278    
13279  Mail can be gotten from many different sources---the mail spool, from a  Mail can be gotten from many different sources---the mail spool, from
13280  POP mail server, from a procmail directory, or from a maildir, for  a @acronym{POP} mail server, from a procmail directory, or from a
13281  instance.  maildir, for instance.
13282    
13283  @menu  @menu
13284  * Mail Source Specifiers::       How to specify what a mail source is.  * Mail Source Specifiers::      How to specify what a mail source is.
13285  * Mail Source Customization::    Some variables that influence things.  * Mail Source Customization::   Some variables that influence things.
13286  * Fetching Mail::                Using the mail source specifiers.  * Fetching Mail::               Using the mail source specifiers.
13287  @end menu  @end menu
13288    
13289    
# Line 11130  Keywords: Line 13319  Keywords:
13319    
13320  @table @code  @table @code
13321  @item :path  @item :path
13322  The file name.  Defaults to the value of the @code{MAIL}  The file name.  Defaults to the value of the @env{MAIL}
13323  environment variable or @file{/usr/mail/spool/user-name}.  environment variable or the value of @code{rmail-spool-directory}
13324    (usually something like @file{/usr/mail/spool/user-name}).
13325    
13326    @item :prescript
13327    @itemx :postscript
13328    Script run before/after fetching mail.
13329  @end table  @end table
13330    
13331  An example file mail source:  An example file mail source:
# Line 11146  Or using the default file name: Line 13340  Or using the default file name:
13340  (file)  (file)
13341  @end lisp  @end lisp
13342    
13343  If the mail spool file is not located on the local machine, it's best to  If the mail spool file is not located on the local machine, it's best
13344  use POP or @sc{imap} or the like to fetch the mail.  You can not use ange-ftp  to use @acronym{POP} or @acronym{IMAP} or the like to fetch the mail.
13345  file names here---it has no way to lock the mail spool while moving the  You can not use ange-ftp file names here---it has no way to lock the
13346  mail.  mail spool while moving the mail.
13347    
13348  If it's impossible to set up a proper server, you can use ssh instead.  If it's impossible to set up a proper server, you can use ssh instead.
13349    
# Line 11174  Alter this script to fit find the @samp{ Line 13368  Alter this script to fit find the @samp{
13368    
13369    
13370  @item directory  @item directory
13371  Get mail from several files in a directory.  This is typically used when  @vindex nnmail-scan-directory-mail-source-once
13372  you have procmail split the incoming mail into several files.  Setting  Get mail from several files in a directory.  This is typically used
13373  @code{nnmail-scan-directory-mail-source-once} to non-nil force Gnus to  when you have procmail split the incoming mail into several files.
13374  scan the mail source only once.  That is, there is a one-to-one correspondence between files in that
13375    directory and groups, so that mail from the file @file{foo.bar.spool}
13376    will be put in the group @code{foo.bar}.  (You can change the suffix
13377    to be used instead of @code{.spool}.)  Setting
13378    @code{nnmail-scan-directory-mail-source-once} to non-@code{nil} forces
13379    Gnus to scan the mail source only once.  This is particularly useful
13380    if you want to scan mail groups at a specified level.
13381    
13382    @vindex nnmail-resplit-incoming
13383    There is also the variable @code{nnmail-resplit-incoming}, if you set
13384    that to a non-@code{nil} value, then the normal splitting process is
13385    applied to all the files from the directory, @ref{Splitting Mail}.
13386    
13387  Keywords:  Keywords:
13388    
# Line 11210  An example directory mail source: Line 13415  An example directory mail source:
13415  @end lisp  @end lisp
13416    
13417  @item pop  @item pop
13418  Get mail from a POP server.  Get mail from a @acronym{POP} server.
13419    
13420  Keywords:  Keywords:
13421    
13422  @table @code  @table @code
13423  @item :server  @item :server
13424  The name of the POP server.  The default is taken from the  The name of the @acronym{POP} server.  The default is taken from the
13425  @code{MAILHOST} environment variable.  @env{MAILHOST} environment variable.
13426    
13427  @item :port  @item :port
13428  The port number of the POP server.  This can be a number (e.g.@:  The port number of the @acronym{POP} server.  This can be a number (eg,
13429  @samp{:port 110}) or a string (e.g.@: @samp{:port "pop3"}).  If it is a  @samp{:port 1234}) or a string (eg, @samp{:port "pop3"}).  If it is a
13430  string, it should be a service name as listed in @file{/etc/services} on  string, it should be a service name as listed in @file{/etc/services} on
13431  Unix systems.  The default is @samp{"pop3"}.  On some systems you might  Unix systems.  The default is @samp{"pop3"}.  On some systems you might
13432  need to specify it as @samp{"pop-3"} instead.  need to specify it as @samp{"pop-3"} instead.
13433    
13434  @item :user  @item :user
13435  The user name to give to the POP server.  The default is the login  The user name to give to the @acronym{POP} server.  The default is the login
13436  name.  name.
13437    
13438  @item :password  @item :password
13439  The password to give to the POP server.  If not specified, the user is  The password to give to the @acronym{POP} server.  If not specified,
13440  prompted.  the user is prompted.
13441    
13442  @item :program  @item :program
13443  The program to use to fetch mail from the POP server.  This should be  The program to use to fetch mail from the @acronym{POP} server.  This
13444  a @code{format}-like string.  Here's an example:  should be a @code{format}-like string.  Here's an example:
13445    
13446  @example  @example
13447  fetchmail %u@@%s -P %p %t  fetchmail %u@@%s -P %p %t
# Line 11274  A script to be run after fetching the ma Line 13479  A script to be run after fetching the ma
13479  the @code{:program} keyword.  This can also be a function to be run.  the @code{:program} keyword.  This can also be a function to be run.
13480    
13481  @item :function  @item :function
13482  The function to use to fetch mail from the POP server.  The function is  The function to use to fetch mail from the @acronym{POP} server.  The
13483  called with one parameter---the name of the file where the mail should  function is called with one parameter---the name of the file where the
13484  be moved to.  mail should be moved to.
13485    
13486  @item :authentication  @item :authentication
13487  This can be either the symbol @code{password} or the symbol @code{apop}  This can be either the symbol @code{password} or the symbol @code{apop}
# Line 11286  and says what authentication scheme to u Line 13491  and says what authentication scheme to u
13491  @end table  @end table
13492    
13493  If the @code{:program} and @code{:function} keywords aren't specified,  If the @code{:program} and @code{:function} keywords aren't specified,
13494  @code{pop3-movemail} will be used.  @code{pop3-movemail} will be used.  If the
13495    @code{pop3-leave-mail-on-server} is non-@code{nil} the mail is to be
13496    left on the POP server after fetching.
13497    
13498  Here are some examples.  Fetch from the default POP server, using the  Here are some examples.  Fetch from the default @acronym{POP} server,
13499  default user name, and default fetcher:  using the default user name, and default fetcher:
13500    
13501  @lisp  @lisp
13502  (pop)  (pop)
# Line 11318  Keywords: Line 13525  Keywords:
13525  @table @code  @table @code
13526  @item :path  @item :path
13527  The name of the directory where the mails are stored.  The default is  The name of the directory where the mails are stored.  The default is
13528  taken from the @code{MAILDIR} environment variable or  taken from the @env{MAILDIR} environment variable or
13529  @samp{~/Maildir/}.  @file{~/Maildir/}.
13530  @item :subdirs  @item :subdirs
13531  The subdirectories of the Maildir.  The default is  The subdirectories of the Maildir.  The default is
13532  @samp{("new" "cur")}.  @samp{("new" "cur")}.
# Line 11347  Two example maildir mail sources: Line 13554  Two example maildir mail sources:
13554  @end lisp  @end lisp
13555    
13556  @item imap  @item imap
13557  Get mail from a @sc{imap} server.  If you don't want to use @sc{imap}  Get mail from a @acronym{IMAP} server.  If you don't want to use
13558  as intended, as a network mail reading protocol (ie with nnimap), for  @acronym{IMAP} as intended, as a network mail reading protocol (ie
13559  some reason or other, Gnus let you treat it similar to a POP server  with nnimap), for some reason or other, Gnus let you treat it similar
13560  and fetches articles from a given @sc{imap} mailbox.  @xref{IMAP}, for  to a @acronym{POP} server and fetches articles from a given
13561  more information.  @acronym{IMAP} mailbox.  @xref{IMAP}, for more information.
13562    
13563    Note that for the Kerberos, GSSAPI, @acronym{TLS}/@acronym{SSL} and STARTTLS support you
13564    may need external programs and libraries, @xref{IMAP}.
13565    
13566  Keywords:  Keywords:
13567    
13568  @table @code  @table @code
13569  @item :server  @item :server
13570  The name of the @sc{imap} server.  The default is taken from the  The name of the @acronym{IMAP} server.  The default is taken from the
13571  @code{MAILHOST} environment variable.  @env{MAILHOST} environment variable.
13572    
13573  @item :port  @item :port
13574  The port number of the @sc{imap} server.  The default is @samp{143}, or  The port number of the @acronym{IMAP} server.  The default is @samp{143}, or
13575  @samp{993} for SSL connections.  @samp{993} for @acronym{TLS}/@acronym{SSL} connections.
13576    
13577  @item :user  @item :user
13578  The user name to give to the @sc{imap} server.  The default is the login  The user name to give to the @acronym{IMAP} server.  The default is the login
13579  name.  name.
13580    
13581  @item :password  @item :password
13582  The password to give to the @sc{imap} server.  If not specified, the user is  The password to give to the @acronym{IMAP} server.  If not specified, the user is
13583  prompted.  prompted.
13584    
13585  @item :stream  @item :stream
13586  What stream to use for connecting to the server, this is one of the  What stream to use for connecting to the server, this is one of the
13587  symbols in @code{imap-stream-alist}.  Right now, this means  symbols in @code{imap-stream-alist}.  Right now, this means
13588  @samp{kerberos4}, @samp{ssl} or the default @samp{network}.  @samp{gssapi}, @samp{kerberos4}, @samp{starttls}, @samp{tls},
13589    @samp{ssl}, @samp{shell} or the default @samp{network}.
13590    
13591  @item :authentication  @item :authentication
13592  Which authenticator to use for authenticating to the server, this is one  Which authenticator to use for authenticating to the server, this is
13593  of the symbols in @code{imap-authenticator-alist}.  Right now, this  one of the symbols in @code{imap-authenticator-alist}.  Right now,
13594  means @samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default  this means @samp{gssapi}, @samp{kerberos4}, @samp{digest-md5},
13595  @samp{login}.  @samp{cram-md5}, @samp{anonymous} or the default @samp{login}.
13596    
13597  @item :program  @item :program
13598  When using the `shell' :stream, the contents of this variable is  When using the `shell' :stream, the contents of this variable is
13599  mapped into the `imap-shell-program' variable.  This should be a  mapped into the @code{imap-shell-program} variable.  This should be a
13600  @code{format}-like string (or list of strings).  Here's an example:  @code{format}-like string (or list of strings).  Here's an example:
13601    
13602  @example  @example
# Line 11399  The valid format specifier characters ar Line 13610  The valid format specifier characters ar
13610  The name of the server.  The name of the server.
13611    
13612  @item l  @item l
13613  User name from `imap-default-user'.  User name from @code{imap-default-user}.
13614    
13615  @item p  @item p
13616  The port number of the server.  The port number of the server.
# Line 11415  which normally is the mailbox which rece Line 13626  which normally is the mailbox which rece
13626  @item :predicate  @item :predicate
13627  The predicate used to find articles to fetch.  The default, @samp{UNSEEN  The predicate used to find articles to fetch.  The default, @samp{UNSEEN
13628  UNDELETED}, is probably the best choice for most people, but if you  UNDELETED}, is probably the best choice for most people, but if you
13629  sometimes peek in your mailbox with a @sc{imap} client and mark some  sometimes peek in your mailbox with a @acronym{IMAP} client and mark some
13630  articles as read (or; SEEN) you might want to set this to @samp{nil}.  articles as read (or; SEEN) you might want to set this to @samp{1:*}.
13631  Then all articles in the mailbox is fetched, no matter what.  For a  Then all articles in the mailbox is fetched, no matter what.  For a
13632  complete list of predicates, see RFC 2060 §6.4.4.  complete list of predicates, see RFC 2060 section 6.4.4.
13633    
13634  @item :fetchflag  @item :fetchflag
13635  How to flag fetched articles on the server, the default @samp{\Deleted}  How to flag fetched articles on the server, the default @samp{\Deleted}
13636  will mark them as deleted, an alternative would be @samp{\Seen} which  will mark them as deleted, an alternative would be @samp{\Seen} which
13637  would simply mark them as read.  These are the two most likely choices,  would simply mark them as read.  These are the two most likely choices,
13638  but more flags are defined in RFC 2060 §2.3.2.  but more flags are defined in RFC 2060 section 2.3.2.
13639    
13640  @item :dontexpunge  @item :dontexpunge
13641  If non-nil, don't remove all articles marked as deleted in the mailbox  If non-@code{nil}, don't remove all articles marked as deleted in the
13642  after finishing the fetch.  mailbox after finishing the fetch.
13643    
13644  @end table  @end table
13645    
13646  An example @sc{imap} mail source:  An example @acronym{IMAP} mail source:
13647    
13648  @lisp  @lisp
13649  (imap :server "mail.mycorp.com"  (imap :server "mail.mycorp.com"
# Line 11441  An example @sc{imap} mail source: Line 13652  An example @sc{imap} mail source:
13652  @end lisp  @end lisp
13653    
13654  @item webmail  @item webmail
13655  Get mail from a webmail server, such as www.hotmail.com,  Get mail from a webmail server, such as @uref{http://www.hotmail.com/},
13656  webmail.netscape.com, www.netaddress.com, www.my-deja.com.  @uref{http://webmail.netscape.com/}, @uref{http://www.netaddress.com/},
13657    @uref{http://mail.yahoo.com/}.
 NOTE: Now mail.yahoo.com provides POP3 service, so @sc{pop} mail source  
 is suggested.  
13658    
13659  NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is  NOTE: Webmail largely depends on cookies.  A "one-line-cookie" patch is
13660  required for url "4.0pre.46".  required for url "4.0pre.46".
13661    
13662  WARNING: Mails may lost.  NO WARRANTY.  WARNING: Mails may be lost.  NO WARRANTY.
13663    
13664  Keywords:  Keywords:
13665    
# Line 11468  The password to give to the webmail serv Line 13677  The password to give to the webmail serv
13677  prompted.  prompted.
13678    
13679  @item :dontexpunge  @item :dontexpunge
13680  If non-nil, only fetch unread articles and don't move them to trash  If non-@code{nil}, only fetch unread articles and don't move them to
13681  folder after finishing the fetch.  trash folder after finishing the fetch.
13682    
13683  @end table  @end table
13684    
# Line 11490  Keywords: Line 13699  Keywords:
13699    
13700  @table @code  @table @code
13701  @item :plugged  @item :plugged
13702  If non-nil, fetch the mail even when Gnus is unplugged.  If you use  If non-@code{nil}, fetch the mail even when Gnus is unplugged.  If you
13703  directory source to get mail, you can specify it as in this example:  use directory source to get mail, you can specify it as in this
13704    example:
13705    
13706  @lisp  @lisp
13707  (setq mail-sources  (setq mail-sources
# Line 11537  variables. Line 13747  variables.
13747  @table @code  @table @code
13748  @item mail-source-crash-box  @item mail-source-crash-box
13749  @vindex mail-source-crash-box  @vindex mail-source-crash-box
13750  File where mail will be stored while processing it.  The default is  File where mail will be stored while processing it.  The default is@*
13751  @file{~/.emacs-mail-crash-box}.  @file{~/.emacs-mail-crash-box}.
13752    
13753  @item mail-source-delete-incoming  @item mail-source-delete-incoming
13754  @vindex mail-source-delete-incoming  @vindex mail-source-delete-incoming
13755  If non-@code{nil}, delete incoming files after handling them.  If non-@code{nil}, delete incoming files after handling them.  If
13756    @code{t}, delete the files immediately, if @code{nil}, never delete any
13757    files.  If a positive number, delete files older than number of days
13758    (This will only happen, when receiving new mail).  You may also set
13759    @code{mail-source-delete-incoming} to @code{nil} and call
13760    @code{mail-source-delete-old-incoming} from a hook or interactively.
13761    
13762    @item mail-source-delete-old-incoming-confirm
13763    @vindex mail-source-delete-old-incoming-confirm
13764    If non-@code{nil}, ask for for confirmation before deleting old incoming
13765    files.  This variable only applies when
13766    @code{mail-source-delete-incoming} is a positive number.
13767    
13768    @item mail-source-ignore-errors
13769    @vindex mail-source-ignore-errors
13770    If non-@code{nil}, ignore errors when reading mail from a mail source.
13771    
13772  @item mail-source-directory  @item mail-source-directory
13773  @vindex mail-source-directory  @vindex mail-source-directory
# Line 11562  relevant if @code{mail-source-delete-inc Line 13787  relevant if @code{mail-source-delete-inc
13787  @vindex mail-source-default-file-modes  @vindex mail-source-default-file-modes
13788  All new mail files will get this file mode.  The default is 384.  All new mail files will get this file mode.  The default is 384.
13789    
13790    @item mail-source-movemail-program
13791    @vindex mail-source-movemail-program
13792    If non-@code{nil}, name of program for fetching new mail.  If
13793    @code{nil}, @code{movemail} in @var{exec-directory}.
13794    
13795  @end table  @end table
13796    
13797    
# Line 11578  If this variable (and the obsolescent @c Line 13808  If this variable (and the obsolescent @c
13808  @code{nil}, the mail back ends will never attempt to fetch mail by  @code{nil}, the mail back ends will never attempt to fetch mail by
13809  themselves.  themselves.
13810    
13811  If you want to fetch mail both from your local spool as well as a POP  If you want to fetch mail both from your local spool as well as a
13812  mail server, you'd say something like:  @acronym{POP} mail server, you'd say something like:
13813    
13814  @lisp  @lisp
13815  (setq mail-sources  (setq mail-sources
# Line 11623  use this hook to notify any mail watch p Line 13853  use this hook to notify any mail watch p
13853    
13854  @vindex nnmail-split-hook  @vindex nnmail-split-hook
13855  @item nnmail-split-hook  @item nnmail-split-hook
13856  @findex article-decode-encoded-words  @findex gnus-article-decode-encoded-words
13857  @findex RFC 1522 decoding  @cindex RFC 1522 decoding
13858  @findex RFC 2047 decoding  @cindex RFC 2047 decoding
13859  Hook run in the buffer where the mail headers of each message is kept  Hook run in the buffer where the mail headers of each message is kept
13860  just before the splitting based on these headers is done.  The hook is  just before the splitting based on these headers is done.  The hook is
13861  free to modify the buffer contents in any way it sees fit---the buffer  free to modify the buffer contents in any way it sees fit---the buffer
# Line 11646  is done).  Here's and example of using t Line 13876  is done).  Here's and example of using t
13876  default file modes the new mail files get:  default file modes the new mail files get:
13877    
13878  @lisp  @lisp
13879  (add-hook 'gnus-pre-get-new-mail-hook  (add-hook 'nnmail-pre-get-new-mail-hook
13880            (lambda () (set-default-file-modes 511)))            (lambda () (set-default-file-modes 511)))
13881    
13882  (add-hook 'gnus-post-get-new-mail-hook  (add-hook 'nnmail-post-get-new-mail-hook
13883            (lambda () (set-default-file-modes 551)))            (lambda () (set-default-file-modes 551)))
13884  @end lisp  @end lisp
13885    
# Line 11672  If non-@code{nil}, put the @code{Message Line 13902  If non-@code{nil}, put the @code{Message
13902  the back end (via @code{Gcc}, for instance) into the mail duplication  the back end (via @code{Gcc}, for instance) into the mail duplication
13903  discovery cache.  The default is @code{nil}.  discovery cache.  The default is @code{nil}.
13904    
13905    @item nnmail-cache-ignore-groups
13906    @vindex nnmail-cache-ignore-groups
13907    This can be a regular expression or a list of regular expressions.
13908    Group names that match any of the regular expressions will never be
13909    recorded in the @code{Message-ID} cache.
13910    
13911    This can be useful, for example, when using Fancy Splitting
13912    (@pxref{Fancy Mail Splitting}) together with the function
13913    @code{nnmail-split-fancy-with-parent}.
13914    
13915  @end table  @end table
13916    
13917    
# Line 11690  play with the @code{nnmail-split-fancy} Line 13930  play with the @code{nnmail-split-fancy}
13930  Let's look at an example value of this variable first:  Let's look at an example value of this variable first:
13931    
13932  @lisp  @lisp
13933  ;; Messages from the mailer daemon are not crossposted to any of  ;; @r{Messages from the mailer daemon are not crossposted to any of}
13934  ;; the ordinary groups.  Warnings are put in a separate group  ;; @r{the ordinary groups.  Warnings are put in a separate group}
13935  ;; from real errors.  ;; @r{from real errors.}
13936  (| ("from" mail (| ("subject" "warn.*" "mail.warning")  (| ("from" mail (| ("subject" "warn.*" "mail.warning")
13937                     "mail.misc"))                     "mail.misc"))
13938     ;; Non-error messages are crossposted to all relevant     ;; @r{Non-error messages are crossposted to all relevant}
13939     ;; groups, but we don't crosspost between the group for the     ;; @r{groups, but we don't crosspost between the group for the}
13940     ;; (ding) list and the group for other (ding) related mail.     ;; @r{(ding) list and the group for other (ding) related mail.}
13941     (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")     (& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
13942           ("subject" "ding" "ding.misc"))           ("subject" "ding" "ding.misc"))
13943        ;; Other mailing lists...        ;; @r{Other mailing lists@dots{}}
13944        (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")        (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
13945        (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")        (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
13946        ;; Both lists below have the same suffix, so prevent        ;; @r{Both lists below have the same suffix, so prevent}
13947        ;; cross-posting to mkpkg.list of messages posted only to        ;; @r{cross-posting to mkpkg.list of messages posted only to}
13948        ;; the bugs- list, but allow cross-posting when the        ;; @r{the bugs- list, but allow cross-posting when the}
13949        ;; message was really cross-posted.        ;; @r{message was really cross-posted.}
13950        (any "bugs-mypackage@@somewhere" "mypkg.bugs")        (any "bugs-mypackage@@somewhere" "mypkg.bugs")
13951        (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list")        (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list")
13952        ;; People...        ;; @r{People@dots{}}
13953        (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))        (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
13954     ;; Unmatched mail goes to the catch all group.     ;; @r{Unmatched mail goes to the catch all group.}
13955     "misc.misc")     "misc.misc")
13956  @end lisp  @end lisp
13957    
13958  This variable has the format of a @dfn{split}.  A split is a (possibly)  This variable has the format of a @dfn{split}.  A split is a
13959  recursive structure where each split may contain other splits.  Here are  (possibly) recursive structure where each split may contain other
13960  the five possible split syntaxes:  splits.  Here are the possible split syntaxes:
   
 @enumerate  
   
 @item  
 @samp{group}: If the split is a string, that will be taken as a group  
 name.  Normal regexp match expansion will be done.  See below for  
 examples.  
   
 @item  
 @code{(@var{field} @var{value} @code{[-} @var{restrict}  
 @code{[@dots{}]}@code{]} @var{split})}: If the split is a list, the  
 first element of which is a string, then store the message as  
 specified by @var{split}, if header @var{field} (a regexp) contains  
 @var{value} (also a regexp).  If @var{restrict} (yet another regexp)  
 matches some string after @var{field} and before the end of the  
 matched @var{value}, the @var{split} is ignored.  If none of the  
 @var{restrict} clauses match, @var{split} is processed.  
13961    
13962  @item  @table @code
 @code{(| @var{split}@dots{})}: If the split is a list, and the first  
 element is @code{|} (vertical bar), then process each @var{split} until  
 one of them matches.  A @var{split} is said to match if it will cause  
 the mail message to be stored in one or more groups.  
13963    
13964  @item  @item group
13965  @code{(& @var{split}@dots{})}: If the split is a list, and the first  If the split is a string, that will be taken as a group name.  Normal
13966  element is @code{&}, then process all @var{split}s in the list.  regexp match expansion will be done.  See below for examples.
13967    
13968    @item (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @var{split})
13969    If the split is a list, the first element of which is a string, then
13970    store the message as specified by @var{split}, if header @var{field}
13971    (a regexp) contains @var{value} (also a regexp).  If @var{restrict}
13972    (yet another regexp) matches some string after @var{field} and before
13973    the end of the matched @var{value}, the @var{split} is ignored.  If
13974    none of the @var{restrict} clauses match, @var{split} is processed.
13975    
13976    @item (| @var{split} @dots{})
13977    If the split is a list, and the first element is @code{|} (vertical
13978    bar), then process each @var{split} until one of them matches.  A
13979    @var{split} is said to match if it will cause the mail message to be
13980    stored in one or more groups.
13981    
13982    @item (& @var{split} @dots{})
13983    If the split is a list, and the first element is @code{&}, then
13984    process all @var{split}s in the list.
13985    
13986  @item  @item junk
13987  @code{junk}: If the split is the symbol @code{junk}, then don't save  If the split is the symbol @code{junk}, then don't save (i.e., delete)
13988  this message.  Use with extreme caution.  this message.  Use with extreme caution.
13989    
13990  @item  @item (: @var{function} @var{arg1} @var{arg2} @dots{})
13991  @code{(: @var{function} @var{arg1} @var{arg2} @dots{})}:  If the split is  If the split is a list, and the first element is @samp{:}, then the
13992  a list, and the first element is @code{:}, then the second element will  second element will be called as a function with @var{args} given as
13993  be called as a function with @var{args} given as arguments.  The  arguments.  The function should return a @var{split}.
 function should return a @var{split}.  
13994    
13995    @cindex body split
13996  For instance, the following function could be used to split based on the  For instance, the following function could be used to split based on the
13997  body of the messages:  body of the messages:
13998    
13999  @lisp  @lisp
14000  (defun split-on-body ()  (defun split-on-body ()
14001    (save-excursion    (save-excursion
14002      (set-buffer " *nnmail incoming*")      (save-restriction
14003      (goto-char (point-min))        (widen)
14004      (when (re-search-forward "Some.*string" nil t)        (goto-char (point-min))
14005        "string.group")))        (when (re-search-forward "Some.*string" nil t)
14006  @end lisp          "string.group"))))
14007    @end lisp
14008    
14009    The buffer is narrowed to the message in question when @var{function}
14010    is run.  That's why @code{(widen)} needs to be called after
14011    @code{save-excursion} and @code{save-restriction} in the example
14012    above.  Also note that with the nnimap backend, message bodies will
14013    not be downloaded by default.  You need to set
14014    @code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
14015    IMAP}).
14016    
14017    @item (! @var{func} @var{split})
14018    If the split is a list, and the first element is @code{!}, then
14019    @var{split} will be processed, and @var{func} will be called as a
14020    function with the result of @var{split} as argument.  @var{func}
14021    should return a split.
14022    
14023  @item  @item nil
14024  @code{(! @var{func} @var{split})}: If the split is a list, and the first  If the split is @code{nil}, it is ignored.
 element is @code{!}, then SPLIT will be processed, and FUNC will be  
 called as a function with the result of SPLIT as argument.  FUNC should  
 return a split.  
   
 @item  
 @code{nil}: If the split is @code{nil}, it is ignored.  
14025    
14026  @end enumerate  @end table
14027    
14028  In these splits, @var{field} must match a complete field name.  In these splits, @var{field} must match a complete field name.
14029  @var{value} must match a complete word according to the fundamental mode  @var{value} must match a complete word according to the fundamental mode
# Line 11786  field names or words.  In other words, a Line 14032  field names or words.  In other words, a
14032  @samp{\<} and @samp{\>} pairs.  @samp{\<} and @samp{\>} pairs.
14033    
14034  @vindex nnmail-split-abbrev-alist  @vindex nnmail-split-abbrev-alist
14035  @var{field} and @var{value} can also be lisp symbols, in that case they  @var{field} and @var{value} can also be Lisp symbols, in that case
14036  are expanded as specified by the variable  they are expanded as specified by the variable
14037  @code{nnmail-split-abbrev-alist}.  This is an alist of cons cells, where  @code{nnmail-split-abbrev-alist}.  This is an alist of cons cells,
14038  the @code{car} of a cell contains the key, and the @code{cdr} contains the associated  where the @sc{car} of a cell contains the key, and the @sc{cdr}
14039  value.  contains the associated value.  Predefined entries in
14040    @code{nnmail-split-abbrev-alist} include:
14041    
14042    @table @code
14043    @item from
14044    Matches the @samp{From}, @samp{Sender} and @samp{Resent-From} fields.
14045    @item to
14046    Matches the @samp{To}, @samp{Cc}, @samp{Apparently-To},
14047    @samp{Resent-To} and @samp{Resent-Cc} fields.
14048    @item any
14049    Is the union of the @code{from} and @code{to} entries.
14050    @end table
14051    
14052  @vindex nnmail-split-fancy-syntax-table  @vindex nnmail-split-fancy-syntax-table
14053  @code{nnmail-split-fancy-syntax-table} is the syntax table in effect  @code{nnmail-split-fancy-syntax-table} is the syntax table in effect
# Line 11812  matched string will be substituted.  Sim Line 14069  matched string will be substituted.  Sim
14069  up to @samp{\\9} will be substituted with the text matched by the  up to @samp{\\9} will be substituted with the text matched by the
14070  groupings 1 through 9.  groupings 1 through 9.
14071    
14072    @vindex nnmail-split-lowercase-expanded
14073    Where @code{nnmail-split-lowercase-expanded} controls whether the
14074    lowercase of the matched string should be used for the substitution.
14075    Setting it as non-@code{nil} is useful to avoid the creation of multiple
14076    groups when users send to an address using different case
14077    (i.e. mailing-list@@domain vs Mailing-List@@Domain).  The default value
14078    is @code{t}.
14079    
14080    @vindex nnmail-split-fancy-match-partial-words
14081    @code{nnmail-split-fancy-match-partial-words} controls whether partial
14082    words are matched during fancy splitting.
14083    
14084    Normally, regular expressions given in @code{nnmail-split-fancy} are
14085    implicitly surrounded by @code{\<...\>} markers, which are word
14086    delimiters.  If this variable is true, they are not implicitly
14087    surrounded by anything.
14088    
14089    @example
14090    (any "joe" "joemail")
14091    @end example
14092    
14093    In this example, messages sent from @samp{joedavis@@foo.org} will
14094    normally not be filed in @samp{joemail}.  With
14095    @code{nnmail-split-fancy-match-partial-words} set to t, however, the
14096    match will happen.  In effect, the requirement of a word boundary is
14097    removed and instead the match becomes more like a grep.
14098    
14099  @findex nnmail-split-fancy-with-parent  @findex nnmail-split-fancy-with-parent
14100  @code{nnmail-split-fancy-with-parent} is a function which allows you to  @code{nnmail-split-fancy-with-parent} is a function which allows you to
14101  split followups into the same groups their parents are in.  Sometimes  split followups into the same groups their parents are in.  Sometimes
# Line 11822  string into the subject line, you have t Line 14106  string into the subject line, you have t
14106  messages into the right group.  With this function, you only have to do  messages into the right group.  With this function, you only have to do
14107  it once per thread.  it once per thread.
14108    
14109  To use this feature, you have to set @code{nnmail-treat-duplicates} to a  To use this feature, you have to set @code{nnmail-treat-duplicates}
14110  non-nil value.  And then you can include  and @code{nnmail-cache-accepted-message-ids} to a non-@code{nil}
14111  @code{nnmail-split-fancy-with-parent} using the colon feature, like so:  value.  And then you can include @code{nnmail-split-fancy-with-parent}
14112  @lisp  using the colon feature, like so:
14113  (setq nnmail-split-fancy  @lisp
14114    (setq nnmail-treat-duplicates 'warn     ; @r{or @code{delete}}
14115          nnmail-cache-accepted-message-ids t
14116          nnmail-split-fancy
14117        '(| (: nnmail-split-fancy-with-parent)        '(| (: nnmail-split-fancy-with-parent)
14118            ;; other splits go here            ;; @r{other splits go here}
14119          ))          ))
14120  @end lisp  @end lisp
14121    
14122  This feature works as follows: when @code{nnmail-treat-duplicates} is  This feature works as follows: when @code{nnmail-treat-duplicates} is
14123  non-nil, Gnus records the message id of every message it sees in the  non-@code{nil}, Gnus records the message id of every message it sees
14124  file specified by the variable @code{nnmail-message-id-cache-file},  in the file specified by the variable
14125  together with the group it is in (the group is omitted for non-mail  @code{nnmail-message-id-cache-file}, together with the group it is in
14126  messages).  When mail splitting is invoked, the function  (the group is omitted for non-mail messages).  When mail splitting is
14127  @code{nnmail-split-fancy-with-parent} then looks at the References (and  invoked, the function @code{nnmail-split-fancy-with-parent} then looks
14128  In-Reply-To) header of each message to split and searches the file  at the References (and In-Reply-To) header of each message to split
14129  specified by @code{nnmail-message-id-cache-file} for the message ids.  and searches the file specified by @code{nnmail-message-id-cache-file}
14130  When it has found a parent, it returns the corresponding group name.  It  for the message ids.  When it has found a parent, it returns the
14131  is recommended that you set @code{nnmail-message-id-cache-length} to a  corresponding group name unless the group name matches the regexp
14132    @code{nnmail-split-fancy-with-parent-ignore-groups}.  It is
14133    recommended that you set @code{nnmail-message-id-cache-length} to a
14134  somewhat higher number than the default so that the message ids are  somewhat higher number than the default so that the message ids are
14135  still in the cache.  (A value of 5000 appears to create a file some 300  still in the cache.  (A value of 5000 appears to create a file some
14136  kBytes in size.)  300 kBytes in size.)
14137  @vindex nnmail-cache-accepted-message-ids  @vindex nnmail-cache-accepted-message-ids
14138  When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus  When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus
14139  also records the message ids of moved articles, so that the followup  also records the message ids of moved articles, so that the followup
14140  messages goes into the new group.  messages goes into the new group.
14141    
14142    Also see the variable @code{nnmail-cache-ignore-groups} if you don't
14143    want certain groups to be recorded in the cache.  For example, if all
14144    outgoing messages are written to an ``outgoing'' group, you could set
14145    @code{nnmail-cache-ignore-groups} to match that group name.
14146    Otherwise, answers to all your messages would end up in the
14147    ``outgoing'' group.
14148    
14149    
14150  @node Group Mail Splitting  @node Group Mail Splitting
14151  @subsection Group Mail Splitting  @subsection Group Mail Splitting
# Line 11859  messages goes into the new group. Line 14155  messages goes into the new group.
14155  @findex gnus-group-split  @findex gnus-group-split
14156  If you subscribe to dozens of mailing lists but you don't want to  If you subscribe to dozens of mailing lists but you don't want to
14157  maintain mail splitting rules manually, group mail splitting is for you.  maintain mail splitting rules manually, group mail splitting is for you.
14158  You just have to set @var{to-list} and/or @var{to-address} in group  You just have to set @code{to-list} and/or @code{to-address} in group
14159  parameters or group customization and set @code{nnmail-split-methods} to  parameters or group customization and set @code{nnmail-split-methods} to
14160  @code{gnus-group-split}.  This splitting function will scan all groups  @code{gnus-group-split}.  This splitting function will scan all groups
14161  for those parameters and split mail accordingly, i.e., messages posted  for those parameters and split mail accordingly, i.e., messages posted
14162  from or to the addresses specified in the parameters @var{to-list} or  from or to the addresses specified in the parameters @code{to-list} or
14163  @var{to-address} of a mail group will be stored in that group.  @code{to-address} of a mail group will be stored in that group.
14164    
14165  Sometimes, mailing lists have multiple addresses, and you may want mail  Sometimes, mailing lists have multiple addresses, and you may want mail
14166  splitting to recognize them all: just set the @var{extra-aliases} group  splitting to recognize them all: just set the @code{extra-aliases} group
14167  parameter to the list of additional addresses and it's done.  If you'd  parameter to the list of additional addresses and it's done.  If you'd
14168  rather use a regular expression, set @var{split-regexp}.  rather use a regular expression, set @code{split-regexp}.
14169    
14170  All these parameters in a group will be used to create an  All these parameters in a group will be used to create an
14171  @code{nnmail-split-fancy} split, in which the @var{field} is @samp{any},  @code{nnmail-split-fancy} split, in which the @var{field} is @samp{any},
14172  the @var{value} is a single regular expression that matches  the @var{value} is a single regular expression that matches
14173  @var{to-list}, @var{to-address}, all of @var{extra-aliases} and all  @code{to-list}, @code{to-address}, all of @code{extra-aliases} and all
14174  matches of @var{split-regexp}, and the @var{split} is the name of the  matches of @code{split-regexp}, and the @var{split} is the name of the
14175  group.  @var{restrict}s are also supported: just set the  group.  @var{restrict}s are also supported: just set the
14176  @var{split-exclude} parameter to a list of regular expressions.  @code{split-exclude} parameter to a list of regular expressions.
14177    
14178  If you can't get the right split to be generated using all these  If you can't get the right split to be generated using all these
14179  parameters, or you just need something fancier, you can set the  parameters, or you just need something fancier, you can set the
14180  parameter @var{split-spec} to an @code{nnmail-split-fancy} split.  In  parameter @code{split-spec} to an @code{nnmail-split-fancy} split.  In
14181  this case, all other aforementioned parameters will be ignored by  this case, all other aforementioned parameters will be ignored by
14182  @code{gnus-group-split}.  In particular, @var{split-spec} may be set to  @code{gnus-group-split}.  In particular, @code{split-spec} may be set to
14183  @code{nil}, in which case the group will be ignored by  @code{nil}, in which case the group will be ignored by
14184  @code{gnus-group-split}.  @code{gnus-group-split}.
14185    
# Line 11892  this case, all other aforementioned para Line 14188  this case, all other aforementioned para
14188  by defining a single @code{&} fancy split containing one split for each  by defining a single @code{&} fancy split containing one split for each
14189  group.  If a message doesn't match any split, it will be stored in the  group.  If a message doesn't match any split, it will be stored in the
14190  group named in @code{gnus-group-split-default-catch-all-group}, unless  group named in @code{gnus-group-split-default-catch-all-group}, unless
14191  some group has @var{split-spec} set to @code{catch-all}, in which case  some group has @code{split-spec} set to @code{catch-all}, in which case
14192  that group is used as the catch-all group.  Even though this variable is  that group is used as the catch-all group.  Even though this variable is
14193  often used just to name a group, it may also be set to an arbitrarily  often used just to name a group, it may also be set to an arbitrarily
14194  complex fancy split (after all, a group name is a fancy split), and this  complex fancy split (after all, a group name is a fancy split), and this
# Line 11934  may use it for only some of them, by usi Line 14230  may use it for only some of them, by usi
14230  splits like this:  splits like this:
14231    
14232  @lisp  @lisp
14233  (: gnus-mlsplt-fancy GROUPS NO-CROSSPOST CATCH-ALL)  (: gnus-group-split-fancy @var{groups} @var{no-crosspost} @var{catch-all})
14234  @end lisp  @end lisp
14235    
14236  @var{groups} may be a regular expression or a list of group names whose  @var{groups} may be a regular expression or a list of group names whose
14237  parameters will be scanned to generate the output split.  parameters will be scanned to generate the output split.
14238  @var{no-crosspost} can be used to disable cross-posting; in this case, a  @var{no-crosspost} can be used to disable cross-posting; in this case, a
14239  single @code{|} split will be output.  @var{catch-all} is the fallback  single @code{|} split will be output.  @var{catch-all} is the fall back
14240  fancy split, used like @var{gnus-group-split-default-catch-all-group}.  fancy split, used like @code{gnus-group-split-default-catch-all-group}.
14241  If @var{catch-all} is @code{nil}, or if @var{split-regexp} matches the  If @var{catch-all} is @code{nil}, or if @code{split-regexp} matches the
14242  empty string in any selected group, no catch-all split will be issued.  empty string in any selected group, no catch-all split will be issued.
14243  Otherwise, if some group has @var{split-spec} set to @code{catch-all},  Otherwise, if some group has @code{split-spec} set to @code{catch-all},
14244  this group will override the value of the @var{catch-all} argument.  this group will override the value of the @var{catch-all} argument.
14245    
14246  @findex gnus-group-split-setup  @findex gnus-group-split-setup
# Line 11958  sets @code{nnmail-split-methods} to @cod Line 14254  sets @code{nnmail-split-methods} to @cod
14254  scanned once, no matter how many messages are split.  scanned once, no matter how many messages are split.
14255    
14256  @findex gnus-group-split-update  @findex gnus-group-split-update
14257  However, if you change group parameters, you have to update  However, if you change group parameters, you'd have to update
14258  @code{nnmail-split-fancy} manually.  You can do it by running  @code{nnmail-split-fancy} manually.  You can do it by running
14259  @code{gnus-group-split-update}.  If you'd rather have it updated  @code{gnus-group-split-update}.  If you'd rather have it updated
14260  automatically, just tell @code{gnus-group-split-setup} to do it for  automatically, just tell @code{gnus-group-split-setup} to do it for
14261  you.  For example, add to your @file{.gnus}:  you.  For example, add to your @file{~/.gnus.el}:
14262    
14263  @lisp  @lisp
14264  (gnus-group-split-setup AUTO-UPDATE CATCH-ALL)  (gnus-group-split-setup @var{auto-update} @var{catch-all})
14265  @end lisp  @end lisp
14266    
14267  If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}  If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
# Line 11982  by @code{gnus-group-split-update}, this Line 14278  by @code{gnus-group-split-update}, this
14278    
14279  @node Incorporating Old Mail  @node Incorporating Old Mail
14280  @subsection Incorporating Old Mail  @subsection Incorporating Old Mail
14281    @cindex incorporating old mail
14282    @cindex import old mail
14283    
14284  Most people have lots of old mail stored in various file formats.  If  Most people have lots of old mail stored in various file formats.  If
14285  you have set up Gnus to read mail using one of the spiffy Gnus mail  you have set up Gnus to read mail using one of the spiffy Gnus mail
# Line 12003  Here's how: Line 14301  Here's how:
14301  Go to the group buffer.  Go to the group buffer.
14302    
14303  @item  @item
14304  Type @kbd{G f} and give the name of the mbox file when prompted to create an  Type @kbd{G f} and give the file name to the mbox file when prompted to create an
14305  @code{nndoc} group from the mbox file (@pxref{Foreign Groups}).  @code{nndoc} group from the mbox file (@pxref{Foreign Groups}).
14306    
14307  @item  @item
14308  Type @key{SPC} to enter the newly created group.  Type @kbd{SPACE} to enter the newly created group.
14309    
14310  @item  @item
14311  Type @kbd{M P b} to process-mark all articles in this group's buffer  Type @kbd{M P b} to process-mark all articles in this group's buffer
# Line 12046  Gnus will not delete your old, read mail Line 14344  Gnus will not delete your old, read mail
14344  course.  course.
14345    
14346  To make Gnus get rid of your unwanted mail, you have to mark the  To make Gnus get rid of your unwanted mail, you have to mark the
14347  articles as @dfn{expirable}.  This does not mean that the articles will  articles as @dfn{expirable}.  (With the default key bindings, this means
14348  disappear right away, however.  In general, a mail article will be  that you have to type @kbd{E}.)  This does not mean that the articles
14349    will disappear right away, however.  In general, a mail article will be
14350  deleted from your system if, 1) it is marked as expirable, AND 2) it is  deleted from your system if, 1) it is marked as expirable, AND 2) it is
14351  more than one week old.  If you do not mark an article as expirable, it  more than one week old.  If you do not mark an article as expirable, it
14352  will remain on your system until hell freezes over.  This bears  will remain on your system until hell freezes over.  This bears
14353  repeating one more time, with some spurious capitalizations: IF you do  repeating one more time, with some spurious capitalizations: IF you do
14354  NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.  NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
14355    
14356    You do not have to mark articles as expirable by hand.  Gnus provides
14357    two features, called ``auto-expire'' and ``total-expire'', that can help you
14358    with this.  In a nutshell, ``auto-expire'' means that Gnus hits @kbd{E}
14359    for you when you select an article.  And ``total-expire'' means that Gnus
14360    considers all articles as expirable that are read.  So, in addition to
14361    the articles marked @samp{E}, also the articles marked @samp{r},
14362    @samp{R}, @samp{O}, @samp{K}, @samp{Y} and so on are considered
14363    expirable.
14364    
14365    When should either auto-expire or total-expire be used?  Most people
14366    who are subscribed to mailing lists split each list into its own group
14367    and then turn on auto-expire or total-expire for those groups.
14368    (@xref{Splitting Mail}, for more information on splitting each list
14369    into its own group.)
14370    
14371    Which one is better, auto-expire or total-expire?  It's not easy to
14372    answer.  Generally speaking, auto-expire is probably faster.  Another
14373    advantage of auto-expire is that you get more marks to work with: for
14374    the articles that are supposed to stick around, you can still choose
14375    between tick and dormant and read marks.  But with total-expire, you
14376    only have dormant and ticked to choose from.  The advantage of
14377    total-expire is that it works well with adaptive scoring (@pxref{Adaptive
14378    Scoring}).  Auto-expire works with normal scoring but not with adaptive
14379    scoring.
14380    
14381  @vindex gnus-auto-expirable-newsgroups  @vindex gnus-auto-expirable-newsgroups
14382  You do not have to mark articles as expirable by hand.  Groups that  Groups that match the regular expression
14383  match the regular expression @code{gnus-auto-expirable-newsgroups} will  @code{gnus-auto-expirable-newsgroups} will have all articles that you
14384  have all articles that you read marked as expirable automatically.  All  read marked as expirable automatically.  All articles marked as
14385  articles marked as expirable have an @samp{E} in the first  expirable have an @samp{E} in the first column in the summary buffer.
 column in the summary buffer.  
14386    
14387  By default, if you have auto expiry switched on, Gnus will mark all the  By default, if you have auto expiry switched on, Gnus will mark all the
14388  articles you read as expirable, no matter if they were read or unread  articles you read as expirable, no matter if they were read or unread
14389  before.  To avoid having articles marked as read marked as expirable  before.  To avoid having articles marked as read marked as expirable
14390  automatically, you can put something like the following in your  automatically, you can put something like the following in your
14391  @file{.gnus} file:  @file{~/.gnus.el} file:
14392    
14393  @vindex gnus-mark-article-hook  @vindex gnus-mark-article-hook
14394  @lisp  @lisp
# Line 12077  automatically, you can put something lik Line 14400  automatically, you can put something lik
14400  Note that making a group auto-expirable doesn't mean that all read  Note that making a group auto-expirable doesn't mean that all read
14401  articles are expired---only the articles marked as expirable  articles are expired---only the articles marked as expirable
14402  will be expired.  Also note that using the @kbd{d} command won't make  will be expired.  Also note that using the @kbd{d} command won't make
14403  groups expirable---only semi-automatic marking of articles as read will  articles expirable---only semi-automatic marking of articles as read will
14404  mark the articles as expirable in auto-expirable groups.  mark the articles as expirable in auto-expirable groups.
14405    
14406  Let's say you subscribe to a couple of mailing lists, and you want the  Let's say you subscribe to a couple of mailing lists, and you want the
# Line 12134  change the expiry period (@pxref{Group P Line 14457  change the expiry period (@pxref{Group P
14457    
14458  @vindex nnmail-expiry-target  @vindex nnmail-expiry-target
14459  The normal action taken when expiring articles is to delete them.  The normal action taken when expiring articles is to delete them.
14460  However, in some circumstances it might make more sense to move them to  However, in some circumstances it might make more sense to move them
14461  other groups instead of deleting them.  The variable @code{nnmail-expiry-target}  to other groups instead of deleting them.  The variable
14462  (and the @code{expiry-target} group parameter) controls this.  The  @code{nnmail-expiry-target} (and the @code{expiry-target} group
14463  variable supplies a default value for all groups, which can be  parameter) controls this.  The variable supplies a default value for
14464  overridden for specific groups by the group parameter.  all groups, which can be overridden for specific groups by the group
14465  default value is @code{delete}, but this can also be a string (which  parameter.  default value is @code{delete}, but this can also be a
14466  should be the name of the group the message should be moved to), or a  string (which should be the name of the group the message should be
14467  function (which will be called in a buffer narrowed to the message in  moved to), or a function (which will be called in a buffer narrowed to
14468  question, and with the name of the group being moved from as its  the message in question, and with the name of the group being moved
14469  parameter) which should return a target -- either a group name or  from as its parameter) which should return a target---either a group
14470  @code{delete}.  name or @code{delete}.
14471    
14472  Here's an example for specifying a group name:  Here's an example for specifying a group name:
14473  @lisp  @lisp
14474  (setq nnmail-expiry-target "nnml:expired")  (setq nnmail-expiry-target "nnml:expired")
14475  @end lisp  @end lisp
14476    
14477    @findex nnmail-fancy-expiry-target
14478    @vindex nnmail-fancy-expiry-targets
14479    Gnus provides a function @code{nnmail-fancy-expiry-target} which will
14480    expire mail to groups according to the variable
14481    @code{nnmail-fancy-expiry-targets}.  Here's an example:
14482    
14483    @lisp
14484     (setq nnmail-expiry-target 'nnmail-fancy-expiry-target
14485           nnmail-fancy-expiry-targets
14486           '((to-from "boss" "nnfolder:Work")
14487             ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
14488             ("from" ".*" "nnfolder:Archive-%Y")))
14489    @end lisp
14490    
14491    With this setup, any mail that has @code{IMPORTANT} in its Subject
14492    header and was sent in the year @code{YYYY} and month @code{MMM}, will
14493    get expired to the group @code{nnfolder:IMPORTANT.YYYY.MMM}.  If its
14494    From or To header contains the string @code{boss}, it will get expired
14495    to @code{nnfolder:Work}.  All other mail will get expired to
14496    @code{nnfolder:Archive-YYYY}.
14497    
14498  @vindex nnmail-keep-last-article  @vindex nnmail-keep-last-article
14499  If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never  If @code{nnmail-keep-last-article} is non-@code{nil}, Gnus will never
# Line 12200  laugh. Line 14543  laugh.
14543    
14544  Gnus provides a plethora of functions for washing articles while  Gnus provides a plethora of functions for washing articles while
14545  displaying them, but it might be nicer to do the filtering before  displaying them, but it might be nicer to do the filtering before
14546  storing the mail to disc.  For that purpose, we have three hooks and  storing the mail to disk.  For that purpose, we have three hooks and
14547  various functions that can be put in these hooks.  various functions that can be put in these hooks.
14548    
14549  @table @code  @table @code
# Line 12229  cleaning up the headers.  Functions that Line 14572  cleaning up the headers.  Functions that
14572  Clear leading white space that ``helpful'' listservs have added to the  Clear leading white space that ``helpful'' listservs have added to the
14573  headers to make them look nice.  Aaah.  headers to make them look nice.  Aaah.
14574    
14575    (Note that this function works on both the header on the body of all
14576    messages, so it is a potentially dangerous function to use (if a body
14577    of a message contains something that looks like a header line).  So
14578    rather than fix the bug, it is of course the right solution to make it
14579    into a feature by documenting it.)
14580    
14581  @item nnmail-remove-list-identifiers  @item nnmail-remove-list-identifiers
14582  @findex nnmail-remove-list-identifiers  @findex nnmail-remove-list-identifiers
14583  Some list servers add an identifier---for example, @samp{(idm)}---to the  Some list servers add an identifier---for example, @samp{(idm)}---to the
# Line 12251  This can also be done non-destructively Line 14600  This can also be done non-destructively
14600    
14601  @item nnmail-remove-tabs  @item nnmail-remove-tabs
14602  @findex nnmail-remove-tabs  @findex nnmail-remove-tabs
14603  Translate all tab characters into space characters.  Translate all @samp{TAB} characters into @samp{SPACE} characters.
14604    
14605  @item nnmail-fix-eudora-headers  @item nnmail-fix-eudora-headers
14606  @findex nnmail-fix-eudora-headers  @findex nnmail-fix-eudora-headers
# Line 12311  methods: Line 14660  methods:
14660    
14661  @lisp  @lisp
14662  (setq nnmail-split-fancy  (setq nnmail-split-fancy
14663        '(| ;; Messages duplicates go to a separate group.        '(| ;; @r{Messages duplicates go to a separate group.}
14664            ("gnus-warning" "duplication of message" "duplicate")          ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
14665            ;; Message from daemons, postmaster, and the like to another.          ;; @r{Message from daemons, postmaster, and the like to another.}
14666            (any mail "mail.misc")          (any mail "mail.misc")
14667            ;; Other rules.          ;; @r{Other rules.}
14668            [ ... ] ))          [...] ))
14669  @end lisp  @end lisp
14670    @noindent
14671  Or something like:  Or something like:
14672  @lisp  @lisp
14673  (setq nnmail-split-methods  (setq nnmail-split-methods
14674        '(("duplicates" "^Gnus-Warning:")        '(("duplicates" "^Gnus-Warning:.*duplicate")
14675          ;; Other rules.          ;; @r{Other rules.}
14676          [...]))          [...]))
14677  @end lisp  @end lisp
14678    
# Line 12351  mail, which should help. Line 14700  mail, which should help.
14700  @vindex nnmh-get-new-mail  @vindex nnmh-get-new-mail
14701  @vindex nnfolder-get-new-mail  @vindex nnfolder-get-new-mail
14702  This might be too much, if, for instance, you are reading mail quite  This might be too much, if, for instance, you are reading mail quite
14703  happily with @code{nnml} and just want to peek at some old @sc{rmail}  happily with @code{nnml} and just want to peek at some old Rmail
14704  file you have stashed away with @code{nnbabyl}.  All back ends have  file you have stashed away with @code{nnbabyl}.  All back ends have
14705  variables called back-end-@code{get-new-mail}.  If you want to disable  variables called back-end-@code{get-new-mail}.  If you want to disable
14706  the @code{nnbabyl} mail reading, you edit the virtual server for the  the @code{nnbabyl} mail reading, you edit the virtual server for the
# Line 12369  Gnus will read the mail spool when you a Line 14718  Gnus will read the mail spool when you a
14718  file is first copied to your home directory.  What happens after that  file is first copied to your home directory.  What happens after that
14719  depends on what format you want to store your mail in.  depends on what format you want to store your mail in.
14720    
14721  There are five different mail back ends in the standard Gnus, and more  There are six different mail back ends in the standard Gnus, and more
14722  back ends are available separately.  The mail back end most people use  back ends are available separately.  The mail back end most people use
14723  (because it is the fastest and most flexible) is @code{nnml}  (because it is possibly the fastest) is @code{nnml} (@pxref{Mail
14724  (@pxref{Mail Spool}).  Spool}).
14725    
14726  @menu  @menu
14727  * Unix Mail Box::               Using the (quite) standard Un*x mbox.  * Unix Mail Box::               Using the (quite) standard Un*x mbox.
14728  * Rmail Babyl::                 Emacs programs use the rmail babyl format.  * Rmail Babyl::                 Emacs programs use the Rmail Babyl format.
14729  * Mail Spool::                  Store your mail in a private spool?  * Mail Spool::                  Store your mail in a private spool?
14730  * MH Spool::                    An mhspool-like back end.  * MH Spool::                    An mhspool-like back end.
14731    * Maildir::                     Another one-file-per-message format.
14732  * Mail Folders::                Having one file for each group.  * Mail Folders::                Having one file for each group.
14733  * Comparing Mail Back Ends::    An in-depth looks at pros and cons.  * Comparing Mail Back Ends::    An in-depth looks at pros and cons.
14734  @end menu  @end menu
# Line 12400  Virtual server settings: Line 14750  Virtual server settings:
14750  @table @code  @table @code
14751  @item nnmbox-mbox-file  @item nnmbox-mbox-file
14752  @vindex nnmbox-mbox-file  @vindex nnmbox-mbox-file
14753  The name of the mail box in the user's home directory.  The name of the mail box in the user's home directory.  Default is
14754    @file{~/mbox}.
14755    
14756  @item nnmbox-active-file  @item nnmbox-active-file
14757  @vindex nnmbox-active-file  @vindex nnmbox-active-file
14758  The name of the active file for the mail box.  The name of the active file for the mail box.  Default is
14759    @file{~/.mbox-active}.
14760    
14761  @item nnmbox-get-new-mail  @item nnmbox-get-new-mail
14762  @vindex nnmbox-get-new-mail  @vindex nnmbox-get-new-mail
14763  If non-@code{nil}, @code{nnmbox} will read incoming mail and split it  If non-@code{nil}, @code{nnmbox} will read incoming mail and split it
14764  into groups.  into groups.  Default is @code{t}.
14765  @end table  @end table
14766    
14767    
14768  @node Rmail Babyl  @node Rmail Babyl
14769  @subsubsection Rmail Babyl  @subsubsection Rmail Babyl
14770  @cindex nnbabyl  @cindex nnbabyl
14771  @cindex rmail mbox  @cindex Rmail mbox
14772    
14773  @vindex nnbabyl-active-file  @vindex nnbabyl-active-file
14774  @vindex nnbabyl-mbox-file  @vindex nnbabyl-mbox-file
14775  The @dfn{nnbabyl} back end will use a babyl mail box (aka. @dfn{rmail  The @dfn{nnbabyl} back end will use a Babyl mail box (aka. @dfn{Rmail
14776  mbox}) to store mail.  @code{nnbabyl} will add extra headers to each  mbox}) to store mail.  @code{nnbabyl} will add extra headers to each
14777  mail article to say which group it belongs in.  mail article to say which group it belongs in.
14778    
# Line 12429  Virtual server settings: Line 14781  Virtual server settings:
14781  @table @code  @table @code
14782  @item nnbabyl-mbox-file  @item nnbabyl-mbox-file
14783  @vindex nnbabyl-mbox-file  @vindex nnbabyl-mbox-file
14784  The name of the rmail mbox file.  The name of the Rmail mbox file.  The default is @file{~/RMAIL}
14785    
14786  @item nnbabyl-active-file  @item nnbabyl-active-file
14787  @vindex nnbabyl-active-file  @vindex nnbabyl-active-file
14788  The name of the active file for the rmail box.  The name of the active file for the rmail box.  The default is
14789    @file{~/.rmail-active}
14790    
14791  @item nnbabyl-get-new-mail  @item nnbabyl-get-new-mail
14792  @vindex nnbabyl-get-new-mail  @vindex nnbabyl-get-new-mail
14793  If non-@code{nil}, @code{nnbabyl} will read incoming mail.  If non-@code{nil}, @code{nnbabyl} will read incoming mail.  Default is
14794    @code{t}
14795  @end table  @end table
14796    
14797    
14798  @node Mail Spool  @node Mail Spool
14799  @subsubsection Mail Spool  @subsubsection Mail Spool
14800  @cindex nnml  @cindex nnml
14801  @cindex mail @sc{nov} spool  @cindex mail @acronym{NOV} spool
14802    
14803  The @dfn{nnml} spool mail format isn't compatible with any other known  The @dfn{nnml} spool mail format isn't compatible with any other known
14804  format.  It should be used with some caution.  format.  It should be used with some caution.
# Line 12469  to trudge through a big mbox file just t Line 14823  to trudge through a big mbox file just t
14823    
14824  @code{nnml} is probably the slowest back end when it comes to article  @code{nnml} is probably the slowest back end when it comes to article
14825  splitting.  It has to create lots of files, and it also generates  splitting.  It has to create lots of files, and it also generates
14826  @sc{nov} databases for the incoming mails.  This makes it the fastest  @acronym{NOV} databases for the incoming mails.  This makes it possibly the
14827  back end when it comes to reading mail.  fastest back end when it comes to reading mail.
14828    
14829    @cindex self contained nnml servers
14830    @cindex marks
14831    When the marks file is used (which it is by default), @code{nnml}
14832    servers have the property that you may backup them using @code{tar} or
14833    similar, and later be able to restore them into Gnus (by adding the
14834    proper @code{nnml} server) and have all your marks be preserved.  Marks
14835    for a group is usually stored in the @code{.marks} file (but see
14836    @code{nnml-marks-file-name}) within each @code{nnml} group's directory.
14837    Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
14838    to restore the group (after restoring the backup into the nnml
14839    directory).
14840    
14841    If for some reason you believe your @file{.marks} files are screwed
14842    up, you can just delete them all.  Gnus will then correctly regenerate
14843    them next time it starts.
14844    
14845  Virtual server settings:  Virtual server settings:
14846    
14847  @table @code  @table @code
14848  @item nnml-directory  @item nnml-directory
14849  @vindex nnml-directory  @vindex nnml-directory
14850  All @code{nnml} directories will be placed under this directory.  All @code{nnml} directories will be placed under this directory.  The
14851    default is the value of @code{message-directory} (whose default value
14852    is @file{~/Mail}).
14853    
14854  @item nnml-active-file  @item nnml-active-file
14855  @vindex nnml-active-file  @vindex nnml-active-file
14856  The active file for the @code{nnml} server.  The active file for the @code{nnml} server.  The default is
14857    @file{~/Mail/active}.
14858    
14859  @item nnml-newsgroups-file  @item nnml-newsgroups-file
14860  @vindex nnml-newsgroups-file  @vindex nnml-newsgroups-file
14861  The @code{nnml} group descriptions file.  @xref{Newsgroups File  The @code{nnml} group descriptions file.  @xref{Newsgroups File
14862  Format}.  Format}.  The default is @file{~/Mail/newsgroups}.
14863    
14864  @item nnml-get-new-mail  @item nnml-get-new-mail
14865  @vindex nnml-get-new-mail  @vindex nnml-get-new-mail
14866  If non-@code{nil}, @code{nnml} will read incoming mail.  If non-@code{nil}, @code{nnml} will read incoming mail.  The default is
14867    @code{t}.
14868    
14869  @item nnml-nov-is-evil  @item nnml-nov-is-evil
14870  @vindex nnml-nov-is-evil  @vindex nnml-nov-is-evil
14871  If non-@code{nil}, this back end will ignore any @sc{nov} files.  If non-@code{nil}, this back end will ignore any @acronym{NOV} files.  The
14872    default is @code{nil}.
14873    
14874  @item nnml-nov-file-name  @item nnml-nov-file-name
14875  @vindex nnml-nov-file-name  @vindex nnml-nov-file-name
14876  The name of the @sc{nov} files.  The default is @file{.overview}.  The name of the @acronym{NOV} files.  The default is @file{.overview}.
14877    
14878  @item nnml-prepare-save-mail-hook  @item nnml-prepare-save-mail-hook
14879  @vindex nnml-prepare-save-mail-hook  @vindex nnml-prepare-save-mail-hook
14880  Hook run narrowed to an article before saving.  Hook run narrowed to an article before saving.
14881    
14882    @item nnml-marks-is-evil
14883    @vindex nnml-marks-is-evil
14884    If non-@code{nil}, this back end will ignore any @sc{marks} files.  The
14885    default is @code{nil}.
14886    
14887    @item nnml-marks-file-name
14888    @vindex nnml-marks-file-name
14889    The name of the @dfn{marks} files.  The default is @file{.marks}.
14890    
14891    @item nnml-use-compressed-files
14892    @vindex nnml-use-compressed-files
14893    If non-@code{nil}, @code{nnml} will allow using compressed message
14894    files.
14895    
14896  @end table  @end table
14897    
14898  @findex nnml-generate-nov-databases  @findex nnml-generate-nov-databases
14899  If your @code{nnml} groups and @sc{nov} files get totally out of whack,  If your @code{nnml} groups and @acronym{NOV} files get totally out of
14900  you can do a complete update by typing @kbd{M-x  whack, you can do a complete update by typing @kbd{M-x
14901  nnml-generate-nov-databases}.  This command will trawl through the  nnml-generate-nov-databases}.  This command will trawl through the
14902  entire @code{nnml} hierarchy, looking at each and every article, so it  entire @code{nnml} hierarchy, looking at each and every article, so it
14903  might take a while to complete.  A better interface to this  might take a while to complete.  A better interface to this
# Line 12522  Commands}). Line 14911  Commands}).
14911  @cindex mh-e mail spool  @cindex mh-e mail spool
14912    
14913  @code{nnmh} is just like @code{nnml}, except that is doesn't generate  @code{nnmh} is just like @code{nnml}, except that is doesn't generate
14914  @sc{nov} databases and it doesn't keep an active file.  This makes  @acronym{NOV} databases and it doesn't keep an active file or marks
14915  @code{nnmh} a @emph{much} slower back end than @code{nnml}, but it also  file.  This makes @code{nnmh} a @emph{much} slower back end than
14916  makes it easier to write procmail scripts for.  @code{nnml}, but it also makes it easier to write procmail scripts
14917    for.
14918    
14919  Virtual server settings:  Virtual server settings:
14920    
14921  @table @code  @table @code
14922  @item nnmh-directory  @item nnmh-directory
14923  @vindex nnmh-directory  @vindex nnmh-directory
14924  All @code{nnmh} directories will be located under this directory.  All @code{nnmh} directories will be located under this directory.  The
14925    default is the value of @code{message-directory} (whose default is
14926    @file{~/Mail})
14927    
14928  @item nnmh-get-new-mail  @item nnmh-get-new-mail
14929  @vindex nnmh-get-new-mail  @vindex nnmh-get-new-mail
14930  If non-@code{nil}, @code{nnmh} will read incoming mail.  If non-@code{nil}, @code{nnmh} will read incoming mail.  The default is
14931    @code{t}.
14932    
14933  @item nnmh-be-safe  @item nnmh-be-safe
14934  @vindex nnmh-be-safe  @vindex nnmh-be-safe
14935  If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make  If non-@code{nil}, @code{nnmh} will go to ridiculous lengths to make
14936  sure that the articles in the folder are actually what Gnus thinks they  sure that the articles in the folder are actually what Gnus thinks
14937  are.  It will check date stamps and stat everything in sight, so  they are.  It will check date stamps and stat everything in sight, so
14938  setting this to @code{t} will mean a serious slow-down.  If you never  setting this to @code{t} will mean a serious slow-down.  If you never
14939  use anything but Gnus to read the @code{nnmh} articles, you do not have  use anything but Gnus to read the @code{nnmh} articles, you do not
14940  to set this variable to @code{t}.  have to set this variable to @code{t}.  The default is @code{nil}.
14941  @end table  @end table
14942    
14943    
14944    @node Maildir
14945    @subsubsection Maildir
14946    @cindex nnmaildir
14947    @cindex maildir
14948    
14949    @code{nnmaildir} stores mail in the maildir format, with each maildir
14950    corresponding to a group in Gnus.  This format is documented here:
14951    @uref{http://cr.yp.to/proto/maildir.html} and here:
14952    @uref{http://www.qmail.org/man/man5/maildir.html}.  @code{nnmaildir}
14953    also stores extra information in the @file{.nnmaildir/} directory
14954    within a maildir.
14955    
14956    Maildir format was designed to allow concurrent deliveries and
14957    reading, without needing locks.  With other back ends, you would have
14958    your mail delivered to a spool of some kind, and then you would
14959    configure Gnus to split mail from that spool into your groups.  You
14960    can still do that with @code{nnmaildir}, but the more common
14961    configuration is to have your mail delivered directly to the maildirs
14962    that appear as group in Gnus.
14963    
14964    @code{nnmaildir} is designed to be perfectly reliable: @kbd{C-g} will
14965    never corrupt its data in memory, and @code{SIGKILL} will never
14966    corrupt its data in the filesystem.
14967    
14968    @code{nnmaildir} stores article marks and @acronym{NOV} data in each
14969    maildir.  So you can copy a whole maildir from one Gnus setup to
14970    another, and you will keep your marks.
14971    
14972    Virtual server settings:
14973    
14974    @table @code
14975    @item directory
14976    For each of your @code{nnmaildir} servers (it's very unlikely that
14977    you'd need more than one), you need to create a directory and populate
14978    it with maildirs or symlinks to maildirs (and nothing else; do not
14979    choose a directory already used for other purposes).  Each maildir
14980    will be represented in Gnus as a newsgroup on that server; the
14981    filename of the symlink will be the name of the group.  Any filenames
14982    in the directory starting with @samp{.} are ignored.  The directory is
14983    scanned when you first start Gnus, and each time you type @kbd{g} in
14984    the group buffer; if any maildirs have been removed or added,
14985    @code{nnmaildir} notices at these times.
14986    
14987    The value of the @code{directory} parameter should be a Lisp form
14988    which is processed by @code{eval} and @code{expand-file-name} to get
14989    the path of the directory for this server.  The form is @code{eval}ed
14990    only when the server is opened; the resulting string is used until the
14991    server is closed.  (If you don't know about forms and @code{eval},
14992    don't worry---a simple string will work.)  This parameter is not
14993    optional; you must specify it.  I don't recommend using
14994    @code{"~/Mail"} or a subdirectory of it; several other parts of Gnus
14995    use that directory by default for various things, and may get confused
14996    if @code{nnmaildir} uses it too.  @code{"~/.nnmaildir"} is a typical
14997    value.
14998    
14999    @item target-prefix
15000    This should be a Lisp form which is processed by @code{eval} and
15001    @code{expand-file-name}.  The form is @code{eval}ed only when the
15002    server is opened; the resulting string is used until the server is
15003    closed.
15004    
15005    When you create a group on an @code{nnmaildir} server, the maildir is
15006    created with @code{target-prefix} prepended to its name, and a symlink
15007    pointing to that maildir is created, named with the plain group name.
15008    So if @code{directory} is @code{"~/.nnmaildir"} and
15009    @code{target-prefix} is @code{"../maildirs/"}, then when you create
15010    the group @code{foo}, @code{nnmaildir} will create
15011    @file{~/.nnmaildir/../maildirs/foo} as a maildir, and will create
15012    @file{~/.nnmaildir/foo} as a symlink pointing to
15013    @file{../maildirs/foo}.
15014    
15015    You can set @code{target-prefix} to a string without any slashes to
15016    create both maildirs and symlinks in the same @code{directory}; in
15017    this case, any maildirs found in @code{directory} whose names start
15018    with @code{target-prefix} will not be listed as groups (but the
15019    symlinks pointing to them will be).
15020    
15021    As a special case, if @code{target-prefix} is @code{""} (the default),
15022    then when you create a group, the maildir will be created in
15023    @code{directory} without a corresponding symlink.  Beware that you
15024    cannot use @code{gnus-group-delete-group} on such groups without the
15025    @code{force} argument.
15026    
15027    @item directory-files
15028    This should be a function with the same interface as
15029    @code{directory-files} (such as @code{directory-files} itself).  It is
15030    used to scan the server's @code{directory} for maildirs.  This
15031    parameter is optional; the default is
15032    @code{nnheader-directory-files-safe} if
15033    @code{nnheader-directory-files-is-safe} is @code{nil}, and
15034    @code{directory-files} otherwise.
15035    (@code{nnheader-directory-files-is-safe} is checked only once when the
15036    server is opened; if you want to check it each time the directory is
15037    scanned, you'll have to provide your own function that does that.)
15038    
15039    @item get-new-mail
15040    If non-@code{nil}, then after scanning for new mail in the group
15041    maildirs themselves as usual, this server will also incorporate mail
15042    the conventional Gnus way, from @code{mail-sources} according to
15043    @code{nnmail-split-methods} or @code{nnmail-split-fancy}.  The default
15044    value is @code{nil}.
15045    
15046    Do @emph{not} use the same maildir both in @code{mail-sources} and as
15047    an @code{nnmaildir} group.  The results might happen to be useful, but
15048    that would be by chance, not by design, and the results might be
15049    different in the future.  If your split rules create new groups,
15050    remember to supply a @code{create-directory} server parameter.
15051    @end table
15052    
15053    @subsubsection Group parameters
15054    
15055    @code{nnmaildir} uses several group parameters.  It's safe to ignore
15056    all this; the default behavior for @code{nnmaildir} is the same as the
15057    default behavior for other mail back ends: articles are deleted after
15058    one week, etc.  Except for the expiry parameters, all this
15059    functionality is unique to @code{nnmaildir}, so you can ignore it if
15060    you're just trying to duplicate the behavior you already have with
15061    another back end.
15062    
15063    If the value of any of these parameters is a vector, the first element
15064    is evaluated as a Lisp form and the result is used, rather than the
15065    original value.  If the value is not a vector, the value itself is
15066    evaluated as a Lisp form.  (This is why these parameters use names
15067    different from those of other, similar parameters supported by other
15068    back ends: they have different, though similar, meanings.)  (For
15069    numbers, strings, @code{nil}, and @code{t}, you can ignore the
15070    @code{eval} business again; for other values, remember to use an extra
15071    quote and wrap the value in a vector when appropriate.)
15072    
15073    @table @code
15074    @item expire-age
15075    An integer specifying the minimum age, in seconds, of an article
15076    before it will be expired, or the symbol @code{never} to specify that
15077    articles should never be expired.  If this parameter is not set,
15078    @code{nnmaildir} falls back to the usual
15079    @code{nnmail-expiry-wait}(@code{-function}) variables (overrideable by
15080    the @code{expiry-wait}(@code{-function}) group parameters.  If you
15081    wanted a value of 3 days, you could use something like @code{[(* 3 24
15082    60 60)]}; @code{nnmaildir} will evaluate the form and use the result.
15083    An article's age is measured starting from the article file's
15084    modification time.  Normally, this is the same as the article's
15085    delivery time, but editing an article makes it younger.  Moving an
15086    article (other than via expiry) may also make an article younger.
15087    
15088    @item expire-group
15089    If this is set to a string such as a full Gnus group name, like
15090    @example
15091    "backend+server.address.string:group.name"
15092    @end example
15093    and if it is not the name of the same group that the parameter belongs
15094    to, then articles will be moved to the specified group during expiry
15095    before being deleted.  @emph{If this is set to an @code{nnmaildir}
15096    group, the article will be just as old in the destination group as it
15097    was in the source group.}  So be careful with @code{expire-age} in the
15098    destination group.  If this is set to the name of the same group that
15099    the parameter belongs to, then the article is not expired at all.  If
15100    you use the vector form, the first element is evaluated once for each
15101    article.  So that form can refer to
15102    @code{nnmaildir-article-file-name}, etc., to decide where to put the
15103    article.  @emph{If this parameter is not set, @code{nnmaildir} does
15104    not fall back to the @code{expiry-target} group parameter or the
15105    @code{nnmail-expiry-target} variable.}
15106    
15107    @item read-only
15108    If this is set to @code{t}, @code{nnmaildir} will treat the articles
15109    in this maildir as read-only.  This means: articles are not renamed
15110    from @file{new/} into @file{cur/}; articles are only found in
15111    @file{new/}, not @file{cur/}; articles are never deleted; articles
15112    cannot be edited.  @file{new/} is expected to be a symlink to the
15113    @file{new/} directory of another maildir---e.g., a system-wide mailbox
15114    containing a mailing list of common interest.  Everything in the
15115    maildir outside @file{new/} is @emph{not} treated as read-only, so for
15116    a shared mailbox, you do still need to set up your own maildir (or
15117    have write permission to the shared mailbox); your maildir just won't
15118    contain extra copies of the articles.
15119    
15120    @item directory-files
15121    A function with the same interface as @code{directory-files}.  It is
15122    used to scan the directories in the maildir corresponding to this
15123    group to find articles.  The default is the function specified by the
15124    server's @code{directory-files} parameter.
15125    
15126    @item distrust-Lines:
15127    If non-@code{nil}, @code{nnmaildir} will always count the lines of an
15128    article, rather than use the @code{Lines:} header field.  If
15129    @code{nil}, the header field will be used if present.
15130    
15131    @item always-marks
15132    A list of mark symbols, such as @code{['(read expire)]}.  Whenever
15133    Gnus asks @code{nnmaildir} for article marks, @code{nnmaildir} will
15134    say that all articles have these marks, regardless of whether the
15135    marks stored in the filesystem say so.  This is a proof-of-concept
15136    feature that will probably be removed eventually; it ought to be done
15137    in Gnus proper, or abandoned if it's not worthwhile.
15138    
15139    @item never-marks
15140    A list of mark symbols, such as @code{['(tick expire)]}.  Whenever
15141    Gnus asks @code{nnmaildir} for article marks, @code{nnmaildir} will
15142    say that no articles have these marks, regardless of whether the marks
15143    stored in the filesystem say so.  @code{never-marks} overrides
15144    @code{always-marks}.  This is a proof-of-concept feature that will
15145    probably be removed eventually; it ought to be done in Gnus proper, or
15146    abandoned if it's not worthwhile.
15147    
15148    @item nov-cache-size
15149    An integer specifying the size of the @acronym{NOV} memory cache.  To
15150    speed things up, @code{nnmaildir} keeps @acronym{NOV} data in memory
15151    for a limited number of articles in each group.  (This is probably not
15152    worthwhile, and will probably be removed in the future.)  This
15153    parameter's value is noticed only the first time a group is seen after
15154    the server is opened---i.e., when you first start Gnus, typically.
15155    The @acronym{NOV} cache is never resized until the server is closed
15156    and reopened.  The default is an estimate of the number of articles
15157    that would be displayed in the summary buffer: a count of articles
15158    that are either marked with @code{tick} or not marked with
15159    @code{read}, plus a little extra.
15160    @end table
15161    
15162    @subsubsection Article identification
15163    Articles are stored in the @file{cur/} subdirectory of each maildir.
15164    Each article file is named like @code{uniq:info}, where @code{uniq}
15165    contains no colons.  @code{nnmaildir} ignores, but preserves, the
15166    @code{:info} part.  (Other maildir readers typically use this part of
15167    the filename to store marks.)  The @code{uniq} part uniquely
15168    identifies the article, and is used in various places in the
15169    @file{.nnmaildir/} subdirectory of the maildir to store information
15170    about the corresponding article.  The full pathname of an article is
15171    available in the variable @code{nnmaildir-article-file-name} after you
15172    request the article in the summary buffer.
15173    
15174    @subsubsection NOV data
15175    An article identified by @code{uniq} has its @acronym{NOV} data (used
15176    to generate lines in the summary buffer) stored in
15177    @code{.nnmaildir/nov/uniq}.  There is no
15178    @code{nnmaildir-generate-nov-databases} function.  (There isn't much
15179    need for it---an article's @acronym{NOV} data is updated automatically
15180    when the article or @code{nnmail-extra-headers} has changed.)  You can
15181    force @code{nnmaildir} to regenerate the @acronym{NOV} data for a
15182    single article simply by deleting the corresponding @acronym{NOV}
15183    file, but @emph{beware}: this will also cause @code{nnmaildir} to
15184    assign a new article number for this article, which may cause trouble
15185    with @code{seen} marks, the Agent, and the cache.
15186    
15187    @subsubsection Article marks
15188    An article identified by @code{uniq} is considered to have the mark
15189    @code{flag} when the file @file{.nnmaildir/marks/flag/uniq} exists.
15190    When Gnus asks @code{nnmaildir} for a group's marks, @code{nnmaildir}
15191    looks for such files and reports the set of marks it finds.  When Gnus
15192    asks @code{nnmaildir} to store a new set of marks, @code{nnmaildir}
15193    creates and deletes the corresponding files as needed.  (Actually,
15194    rather than create a new file for each mark, it just creates hard
15195    links to @file{.nnmaildir/markfile}, to save inodes.)
15196    
15197    You can invent new marks by creating a new directory in
15198    @file{.nnmaildir/marks/}.  You can tar up a maildir and remove it from
15199    your server, untar it later, and keep your marks.  You can add and
15200    remove marks yourself by creating and deleting mark files.  If you do
15201    this while Gnus is running and your @code{nnmaildir} server is open,
15202    it's best to exit all summary buffers for @code{nnmaildir} groups and
15203    type @kbd{s} in the group buffer first, and to type @kbd{g} or
15204    @kbd{M-g} in the group buffer afterwards.  Otherwise, Gnus might not
15205    pick up the changes, and might undo them.
15206    
15207    
15208  @node Mail Folders  @node Mail Folders
15209  @subsubsection Mail Folders  @subsubsection Mail Folders
15210  @cindex nnfolder  @cindex nnfolder
15211  @cindex mbox folders  @cindex mbox folders
15212  @cindex mail folders  @cindex mail folders
15213    
15214  @code{nnfolder} is a back end for storing each mail group in a separate  @code{nnfolder} is a back end for storing each mail group in a
15215  file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}  separate file.  Each file is in the standard Un*x mbox format.
15216  will add extra headers to keep track of article numbers and arrival  @code{nnfolder} will add extra headers to keep track of article
15217  dates.  numbers and arrival dates.
15218    
15219    @cindex self contained nnfolder servers
15220    @cindex marks
15221    When the marks file is used (which it is by default), @code{nnfolder}
15222    servers have the property that you may backup them using @code{tar} or
15223    similar, and later be able to restore them into Gnus (by adding the
15224    proper @code{nnfolder} server) and have all your marks be preserved.
15225    Marks for a group is usually stored in a file named as the mbox file
15226    with @code{.mrk} concatenated to it (but see
15227    @code{nnfolder-marks-file-suffix}) within the @code{nnfolder}
15228    directory.  Individual @code{nnfolder} groups are also possible to
15229    backup, use @kbd{G m} to restore the group (after restoring the backup
15230    into the @code{nnfolder} directory).
15231    
15232  Virtual server settings:  Virtual server settings:
15233    
15234  @table @code  @table @code
15235  @item nnfolder-directory  @item nnfolder-directory
15236  @vindex nnfolder-directory  @vindex nnfolder-directory
15237  All the @code{nnfolder} mail boxes will be stored under this directory.  All the @code{nnfolder} mail boxes will be stored under this
15238    directory.  The default is the value of @code{message-directory}
15239    (whose default is @file{~/Mail})
15240    
15241  @item nnfolder-active-file  @item nnfolder-active-file
15242  @vindex nnfolder-active-file  @vindex nnfolder-active-file
15243  The name of the active file.  The name of the active file.  The default is @file{~/Mail/active}.
15244    
15245  @item nnfolder-newsgroups-file  @item nnfolder-newsgroups-file
15246  @vindex nnfolder-newsgroups-file  @vindex nnfolder-newsgroups-file
15247  The name of the group descriptions file.  @xref{Newsgroups File Format}.  The name of the group descriptions file.  @xref{Newsgroups File
15248    Format}.  The default is @file{~/Mail/newsgroups}
15249    
15250  @item nnfolder-get-new-mail  @item nnfolder-get-new-mail
15251  @vindex nnfolder-get-new-mail  @vindex nnfolder-get-new-mail
15252  If non-@code{nil}, @code{nnfolder} will read incoming mail.  If non-@code{nil}, @code{nnfolder} will read incoming mail.  The
15253    default is @code{t}
15254    
15255  @item nnfolder-save-buffer-hook  @item nnfolder-save-buffer-hook
15256  @vindex nnfolder-save-buffer-hook  @vindex nnfolder-save-buffer-hook
15257  @cindex backup files  @cindex backup files
15258  Hook run before saving the folders.  Note that Emacs does the normal  Hook run before saving the folders.  Note that Emacs does the normal
15259  backup renaming of files even with the @code{nnfolder} buffers.  If you  backup renaming of files even with the @code{nnfolder} buffers.  If
15260  wish to switch this off, you could say something like the following in  you wish to switch this off, you could say something like the
15261  your @file{.emacs} file:  following in your @file{.emacs} file:
15262    
15263  @lisp  @lisp
15264  (defun turn-off-backup ()  (defun turn-off-backup ()
# Line 12599  Hook run in a buffer narrowed to the mes Line 15273  Hook run in a buffer narrowed to the mes
15273  This function can be used to copy the message to somewhere else, or to  This function can be used to copy the message to somewhere else, or to
15274  extract some information from it before removing it.  extract some information from it before removing it.
15275    
15276    @item nnfolder-nov-is-evil
15277    @vindex nnfolder-nov-is-evil
15278    If non-@code{nil}, this back end will ignore any @acronym{NOV} files.  The
15279    default is @code{nil}.
15280    
15281    @item nnfolder-nov-file-suffix
15282    @vindex nnfolder-nov-file-suffix
15283    The extension for @acronym{NOV} files.  The default is @file{.nov}.
15284    
15285    @item nnfolder-nov-directory
15286    @vindex nnfolder-nov-directory
15287    The directory where the @acronym{NOV} files should be stored.  If
15288    @code{nil}, @code{nnfolder-directory} is used.
15289    
15290    @item nnfolder-marks-is-evil
15291    @vindex nnfolder-marks-is-evil
15292    If non-@code{nil}, this back end will ignore any @sc{marks} files.  The
15293    default is @code{nil}.
15294    
15295    @item nnfolder-marks-file-suffix
15296    @vindex nnfolder-marks-file-suffix
15297    The extension for @sc{marks} files.  The default is @file{.mrk}.
15298    
15299    @item nnfolder-marks-directory
15300    @vindex nnfolder-marks-directory
15301    The directory where the @sc{marks} files should be stored.  If
15302    @code{nil}, @code{nnfolder-directory} is used.
15303    
15304  @end table  @end table
15305    
15306    
# Line 12620  and so selection of a suitable back end Line 15322  and so selection of a suitable back end
15322  mail within spitting distance of Gnus.  mail within spitting distance of Gnus.
15323    
15324  The same concept exists for Usenet itself: Though access to articles is  The same concept exists for Usenet itself: Though access to articles is
15325  typically done by @sc{nntp} these days, once upon a midnight dreary, everyone  typically done by @acronym{NNTP} these days, once upon a midnight dreary, everyone
15326  in the world got at Usenet by running a reader on the machine where the  in the world got at Usenet by running a reader on the machine where the
15327  articles lay (the machine which today we call an @sc{nntp} server), and  articles lay (the machine which today we call an @acronym{NNTP} server), and
15328  access was by the reader stepping into the articles' directory spool  access was by the reader stepping into the articles' directory spool
15329  area directly.  One can still select between either the @code{nntp} or  area directly.  One can still select between either the @code{nntp} or
15330  @code{nnspool} back ends, to select between these methods, if one happens  @code{nnspool} back ends, to select between these methods, if one happens
# Line 12661  was used for mail landing on the system, Line 15363  was used for mail landing on the system,
15363  format to which mail was converted, primarily involving creating a  format to which mail was converted, primarily involving creating a
15364  spool-file-like entity with a scheme for inserting Babyl-specific  spool-file-like entity with a scheme for inserting Babyl-specific
15365  headers and status bits above the top of each message in the file.  headers and status bits above the top of each message in the file.
15366  RMAIL was Emacs' first mail reader, it was written by Richard Stallman,  Rmail was Emacs' first mail reader, it was written by Richard Stallman,
15367  and Stallman came out of that TOPS/Babyl environment, so he wrote RMAIL  and Stallman came out of that TOPS/Babyl environment, so he wrote Rmail
15368  to understand the mail files folks already had in existence.  Gnus (and  to understand the mail files folks already had in existence.  Gnus (and
15369  VM, for that matter) continue to support this format because it's  VM, for that matter) continue to support this format because it's
15370  perceived as having some good qualities in those mailer-specific  perceived as having some good qualities in those mailer-specific
15371  headers/status bits stuff.  RMAIL itself still exists as well, of  headers/status bits stuff.  Rmail itself still exists as well, of
15372  course, and is still maintained by Stallman.  course, and is still maintained by Stallman.
15373    
15374  Both of the above forms leave your mail in a single file on your  Both of the above forms leave your mail in a single file on your
15375  filesystem, and they must parse that entire file each time you take a  file system, and they must parse that entire file each time you take a
15376  look at your mail.  look at your mail.
15377    
15378  @item nnml  @item nnml
# Line 12684  Usenet-style active file (analogous to w Line 15386  Usenet-style active file (analogous to w
15386  CNews-based news system in (for instance) @file{/var/lib/news/active},  CNews-based news system in (for instance) @file{/var/lib/news/active},
15387  or what is returned via the @samp{NNTP LIST} verb) and also creates  or what is returned via the @samp{NNTP LIST} verb) and also creates
15388  @dfn{overview} files for efficient group entry, as has been defined for  @dfn{overview} files for efficient group entry, as has been defined for
15389  @sc{nntp} servers for some years now.  It is slower in mail-splitting,  @acronym{NNTP} servers for some years now.  It is slower in mail-splitting,
15390  due to the creation of lots of files, updates to the @code{nnml} active  due to the creation of lots of files, updates to the @code{nnml} active
15391  file, and additions to overview files on a per-message basis, but it is  file, and additions to overview files on a per-message basis, but it is
15392  extremely fast on access because of what amounts to the indexing support  extremely fast on access because of what amounts to the indexing support
15393  provided by the active file and overviews.  provided by the active file and overviews.
15394    
15395  @code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the  @code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the
15396  resource which defines available places in the filesystem to put new  resource which defines available places in the file system to put new
15397  files.  Sysadmins take a dim view of heavy inode occupation within  files.  Sysadmins take a dim view of heavy inode occupation within
15398  tight, shared filesystems.  But if you live on a personal machine where  tight, shared file systems.  But if you live on a personal machine where
15399  the filesystem is your own and space is not at a premium, @code{nnml}  the file system is your own and space is not at a premium, @code{nnml}
15400  wins big.  wins big.
15401    
15402  It is also problematic using this back end if you are living in a  It is also problematic using this back end if you are living in a
# Line 12705  tiny files. Line 15407  tiny files.
15407    
15408  The Rand MH mail-reading system has been around UNIX systems for a very  The Rand MH mail-reading system has been around UNIX systems for a very
15409  long time; it operates by splitting one's spool file of messages into  long time; it operates by splitting one's spool file of messages into
15410  individual files, but with little or no indexing support -- @code{nnmh}  individual files, but with little or no indexing support---@code{nnmh}
15411  is considered to be semantically equivalent to ``@code{nnml} without  is considered to be semantically equivalent to ``@code{nnml} without
15412  active file or overviews''.  This is arguably the worst choice, because  active file or overviews''.  This is arguably the worst choice, because
15413  one gets the slowness of individual file creation married to the  one gets the slowness of individual file creation married to the
# Line 12715  slowness of access parsing when learning Line 15417  slowness of access parsing when learning
15417    
15418  Basically the effect of @code{nnfolder} is @code{nnmbox} (the first  Basically the effect of @code{nnfolder} is @code{nnmbox} (the first
15419  method described above) on a per-group basis.  That is, @code{nnmbox}  method described above) on a per-group basis.  That is, @code{nnmbox}
15420  itself puts *all* one's mail in one file; @code{nnfolder} provides a  itself puts @emph{all} one's mail in one file; @code{nnfolder} provides a
15421  little bit of optimization to this so that each of one's mail groups has  little bit of optimization to this so that each of one's mail groups has
15422  a Unix mail box file.  It's faster than @code{nnmbox} because each group  a Unix mail box file.  It's faster than @code{nnmbox} because each group
15423  can be parsed separately, and still provides the simple Unix mail box  can be parsed separately, and still provides the simple Unix mail box
# Line 12728  messages, @code{nnfolder} is not the bes Line 15430  messages, @code{nnfolder} is not the bes
15430  only a moderate amount of mail, @code{nnfolder} is probably the most  only a moderate amount of mail, @code{nnfolder} is probably the most
15431  friendly mail back end all over.  friendly mail back end all over.
15432    
15433    @item nnmaildir
15434    
15435    For configuring expiry and other things, @code{nnmaildir} uses
15436    incompatible group parameters, slightly different from those of other
15437    mail back ends.
15438    
15439    @code{nnmaildir} is largely similar to @code{nnml}, with some notable
15440    differences.  Each message is stored in a separate file, but the
15441    filename is unrelated to the article number in Gnus.  @code{nnmaildir}
15442    also stores the equivalent of @code{nnml}'s overview files in one file
15443    per article, so it uses about twice as many inodes as @code{nnml}.  (Use
15444    @code{df -i} to see how plentiful your inode supply is.)  If this slows
15445    you down or takes up very much space, consider switching to
15446    @uref{http://www.namesys.com/, ReiserFS} or another non-block-structured
15447    file system.
15448    
15449    Since maildirs don't require locking for delivery, the maildirs you use
15450    as groups can also be the maildirs your mail is directly delivered to.
15451    This means you can skip Gnus' mail splitting if your mail is already
15452    organized into different mailboxes during delivery.  A @code{directory}
15453    entry in @code{mail-sources} would have a similar effect, but would
15454    require one set of mailboxes for spooling deliveries (in mbox format,
15455    thus damaging message bodies), and another set to be used as groups (in
15456    whatever format you like).  A maildir has a built-in spool, in the
15457    @code{new/} subdirectory.  Beware that currently, mail moved from
15458    @code{new/} to @code{cur/} instead of via mail splitting will not
15459    undergo treatment such as duplicate checking.
15460    
15461    @code{nnmaildir} stores article marks for a given group in the
15462    corresponding maildir, in a way designed so that it's easy to manipulate
15463    them from outside Gnus.  You can tar up a maildir, unpack it somewhere
15464    else, and still have your marks.  @code{nnml} also stores marks, but
15465    it's not as easy to work with them from outside Gnus as with
15466    @code{nnmaildir}.
15467    
15468    @code{nnmaildir} uses a significant amount of memory to speed things up.
15469    (It keeps in memory some of the things that @code{nnml} stores in files
15470    and that @code{nnmh} repeatedly parses out of message files.)  If this
15471    is a problem for you, you can set the @code{nov-cache-size} group
15472    parameter to something small (0 would probably not work, but 1 probably
15473    would) to make it use less memory.  This caching will probably be
15474    removed in the future.
15475    
15476    Startup is likely to be slower with @code{nnmaildir} than with other
15477    back ends.  Everything else is likely to be faster, depending in part
15478    on your file system.
15479    
15480    @code{nnmaildir} does not use @code{nnoo}, so you cannot use @code{nnoo}
15481    to write an @code{nnmaildir}-derived back end.
15482    
15483  @end table  @end table
15484    
15485    
# Line 12759  Gnus has been getting a bit of a collect Line 15511  Gnus has been getting a bit of a collect
15511  interfaces to these sources.  interfaces to these sources.
15512    
15513  @menu  @menu
15514  * Web Searches::          Creating groups from articles that match a string.  * Archiving Mail::
15515  * Slashdot::              Reading the Slashdot comments.  * Web Searches::                Creating groups from articles that match a string.
15516  * Ultimate::              The Ultimate Bulletin Board systems.  * Slashdot::                    Reading the Slashdot comments.
15517  * Web Archive::           Reading mailing list archived on web.  * Ultimate::                    The Ultimate Bulletin Board systems.
15518  * Customizing w3::        Doing stuff to Emacs/w3 from Gnus.  * Web Archive::                 Reading mailing list archived on web.
15519    * RSS::                         Reading RDF site summary.
15520    * Customizing w3::              Doing stuff to Emacs/w3 from Gnus.
15521  @end menu  @end menu
15522    
15523  All the web sources require Emacs/w3 and the url library to work.  All the web sources require Emacs/w3 and the url library to work.
15524    
15525  The main caveat with all these web sources is that they probably won't  The main caveat with all these web sources is that they probably won't
15526  work for a very long time.  Gleaning information from the @sc{html} data  work for a very long time.  Gleaning information from the @acronym{HTML} data
15527  is guesswork at best, and when the layout is altered, the Gnus back end  is guesswork at best, and when the layout is altered, the Gnus back end
15528  will fail.  If you have reasonably new versions of these back ends,  will fail.  If you have reasonably new versions of these back ends,
15529  though, you should be ok.  though, you should be ok.
# Line 12780  cases, it makes a lot of sense to let th Line 15534  cases, it makes a lot of sense to let th
15534  Unplugged}) handle downloading articles, and then you can read them at  Unplugged}) handle downloading articles, and then you can read them at
15535  leisure from your local disk.  No more World Wide Wait for you.  leisure from your local disk.  No more World Wide Wait for you.
15536    
15537    @node Archiving Mail
15538    @subsection Archiving Mail
15539    @cindex archiving mail
15540    @cindex backup of mail
15541    
15542    Some of the back ends, notably @code{nnml}, @code{nnfolder}, and
15543    @code{nnmaildir}, now actually store the article marks with each group.
15544    For these servers, archiving and restoring a group while preserving
15545    marks is fairly simple.
15546    
15547    (Preserving the group level and group parameters as well still
15548    requires ritual dancing and sacrifices to the @file{.newsrc.eld} deity
15549    though.)
15550    
15551    To archive an entire @code{nnml}, @code{nnfolder}, or @code{nnmaildir}
15552    server, take a recursive copy of the server directory.  There is no need
15553    to shut down Gnus, so archiving may be invoked by @code{cron} or
15554    similar.  You restore the data by restoring the directory tree, and
15555    adding a server definition pointing to that directory in Gnus.  The
15556    @ref{Article Backlog}, @ref{Asynchronous Fetching} and other things
15557    might interfere with overwriting data, so you may want to shut down Gnus
15558    before you restore the data.
15559    
15560    It is also possible to archive individual @code{nnml},
15561    @code{nnfolder}, or @code{nnmaildir} groups, while preserving marks.
15562    For @code{nnml} or @code{nnmaildir}, you copy all files in the group's
15563    directory.  For @code{nnfolder} you need to copy both the base folder
15564    file itself (@file{FOO}, say), and the marks file (@file{FOO.mrk} in
15565    this example).  Restoring the group is done with @kbd{G m} from the Group
15566    buffer.  The last step makes Gnus notice the new directory.
15567    @code{nnmaildir} notices the new directory automatically, so @kbd{G m}
15568    is unnecessary in that case.
15569    
15570  @node Web Searches  @node Web Searches
15571  @subsection Web Searches  @subsection Web Searches
15572  @cindex nnweb  @cindex nnweb
15573  @cindex DejaNews  @cindex Google
15574  @cindex Alta Vista  @cindex dejanews
15575  @cindex InReference  @cindex gmane
15576  @cindex Usenet searches  @cindex Usenet searches
15577  @cindex searching the Usenet  @cindex searching the Usenet
15578    
# Line 12809  pattern), you are likely to get the arti Line 15595  pattern), you are likely to get the arti
15595  manner.  Not even using duplicate suppression (@pxref{Duplicate  manner.  Not even using duplicate suppression (@pxref{Duplicate
15596  Suppression}) will help, since @code{nnweb} doesn't even know the  Suppression}) will help, since @code{nnweb} doesn't even know the
15597  @code{Message-ID} of the articles before reading them using some search  @code{Message-ID} of the articles before reading them using some search
15598  engines (DejaNews, for instance).  The only possible way to keep track  engines (Google, for instance).  The only possible way to keep track
15599  of which articles you've read is by scoring on the @code{Date}  of which articles you've read is by scoring on the @code{Date}
15600  header---mark all articles posted before the last date you read the  header---mark all articles posted before the last date you read the
15601  group as read.  group as read.
# Line 12830  Virtual server variables: Line 15616  Virtual server variables:
15616  @item nnweb-type  @item nnweb-type
15617  @vindex nnweb-type  @vindex nnweb-type
15618  What search engine type is being used.  The currently supported types  What search engine type is being used.  The currently supported types
15619  are @code{dejanews}, @code{dejanewsold}, @code{altavista} and  are @code{google}, @code{dejanews}, and @code{gmane}.  Note that
15620  @code{reference}.  @code{dejanews} is an alias to @code{google}.
15621    
15622  @item nnweb-search  @item nnweb-search
15623  @vindex nnweb-search  @vindex nnweb-search
# Line 12840  The search string to feed to the search Line 15626  The search string to feed to the search
15626  @item nnweb-max-hits  @item nnweb-max-hits
15627  @vindex nnweb-max-hits  @vindex nnweb-max-hits
15628  Advisory maximum number of hits per search to display.  The default is  Advisory maximum number of hits per search to display.  The default is
15629  100.  999.
15630    
15631  @item nnweb-type-definition  @item nnweb-type-definition
15632  @vindex nnweb-type-definition  @vindex nnweb-type-definition
# Line 12875  Format string URL to fetch an article by Line 15661  Format string URL to fetch an article by
15661  @cindex Slashdot  @cindex Slashdot
15662  @cindex nnslashdot  @cindex nnslashdot
15663    
15664  Slashdot (@uref{http://slashdot.org/}) is a popular news site, with  @uref{http://slashdot.org/, Slashdot} is a popular news site, with
15665  lively discussion following the news articles.  @code{nnslashdot} will  lively discussion following the news articles.  @code{nnslashdot} will
15666  let you read this forum in a convenient manner.  let you read this forum in a convenient manner.
15667    
15668  The easiest way to read this source is to put something like the  The easiest way to read this source is to put something like the
15669  following in your @file{.gnus.el} file:  following in your @file{~/.gnus.el} file:
15670    
15671  @lisp  @lisp
15672  (setq gnus-secondary-select-methods  (setq gnus-secondary-select-methods
# Line 12894  groups.  (Note that the default subscrip Line 15680  groups.  (Note that the default subscrip
15680  groups as zombies.  Other methods are available (@pxref{Subscription  groups as zombies.  Other methods are available (@pxref{Subscription
15681  Methods}).  Methods}).
15682    
15683  If you want to remove an old @code{nnslashdot} group, the @kbd{G @key{DEL}}  If you want to remove an old @code{nnslashdot} group, the @kbd{G DEL}
15684  command is the most handy tool (@pxref{Foreign Groups}).  command is the most handy tool (@pxref{Foreign Groups}).
15685    
15686  When following up to @code{nnslashdot} comments (or posting new  When following up to @code{nnslashdot} comments (or posting new
15687  comments), some light @sc{html}izations will be performed.  In  comments), some light @acronym{HTML}izations will be performed.  In
15688  particular, text quoted with @samp{> } will be quoted with  particular, text quoted with @samp{> } will be quoted with
15689  @code{blockquote} instead, and signatures will have @code{br} added to  @samp{blockquote} instead, and signatures will have @samp{br} added to
15690  the end of each line.  Other than that, you can just write @sc{html}  the end of each line.  Other than that, you can just write @acronym{HTML}
15691  directly into the message buffer.  Note that Slashdot filters out some  directly into the message buffer.  Note that Slashdot filters out some
15692  @sc{html} forms.  @acronym{HTML} forms.
15693    
15694  The following variables can be altered to change its behavior:  The following variables can be altered to change its behavior:
15695    
# Line 12914  default is @code{t}.  To be able to disp Line 15700  default is @code{t}.  To be able to disp
15700  has to retrieve absolutely all comments in a group upon entry.  If a  has to retrieve absolutely all comments in a group upon entry.  If a
15701  threaded display is not required, @code{nnslashdot} will only retrieve  threaded display is not required, @code{nnslashdot} will only retrieve
15702  the comments that are actually wanted by the user.  Threading is nicer,  the comments that are actually wanted by the user.  Threading is nicer,
15703  but much, much slower than untreaded.  but much, much slower than unthreaded.
15704    
15705  @item nnslashdot-login-name  @item nnslashdot-login-name
15706  @vindex nnslashdot-login-name  @vindex nnslashdot-login-name
# Line 12927  The password to use when posting. Line 15713  The password to use when posting.
15713  @item nnslashdot-directory  @item nnslashdot-directory
15714  @vindex nnslashdot-directory  @vindex nnslashdot-directory
15715  Where @code{nnslashdot} will store its files.  The default is  Where @code{nnslashdot} will store its files.  The default is
15716  @samp{~/News/slashdot/}.  @file{~/News/slashdot/}.
15717    
15718  @item nnslashdot-active-url  @item nnslashdot-active-url
15719  @vindex nnslashdot-active-url  @vindex nnslashdot-active-url
15720  The @sc{url} format string that will be used to fetch the information on  The @acronym{URL} format string that will be used to fetch the
15721  news articles and comments.  Default:  information on news articles and comments.  The default is@*
15722  @samp{http://slashdot.org/search.pl?section=&min=%d}.  @samp{http://slashdot.org/search.pl?section=&min=%d}.
15723    
15724  @item nnslashdot-comments-url  @item nnslashdot-comments-url
15725  @vindex nnslashdot-comments-url  @vindex nnslashdot-comments-url
15726  The @sc{url} format string that will be used to fetch comments.  The  The @acronym{URL} format string that will be used to fetch comments.
 default is  
 @samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d}.  
15727    
15728  @item nnslashdot-article-url  @item nnslashdot-article-url
15729  @vindex nnslashdot-article-url  @vindex nnslashdot-article-url
15730  The @sc{url} format string that will be used to fetch the news article.  The  The @acronym{URL} format string that will be used to fetch the news
15731  default is  article.  The default is
15732  @samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.  @samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.
15733    
15734  @item nnslashdot-threshold  @item nnslashdot-threshold
# Line 12965  updated.  The default is 0. Line 15749  updated.  The default is 0.
15749  @cindex nnultimate  @cindex nnultimate
15750  @cindex Ultimate Bulletin Board  @cindex Ultimate Bulletin Board
15751    
15752  The Ultimate Bulletin Board (@uref{http://www.ultimatebb.com/}) is  @uref{http://www.ultimatebb.com/, The Ultimate Bulletin Board} is
15753  probably the most popular Web bulletin board system used.  It has a  probably the most popular Web bulletin board system used.  It has a
15754  quite regular and nice interface, and it's possible to get the  quite regular and nice interface, and it's possible to get the
15755  information Gnus needs to keep groups updated.  information Gnus needs to keep groups updated.
15756    
15757  The easiest way to get started with @code{nnultimate} is to say  The easiest way to get started with @code{nnultimate} is to say
15758  something like the following in the group buffer:  @kbd{B nnultimate @key{RET}  something like the following in the group buffer:  @kbd{B nnultimate RET
15759  http://www.tcj.com/messboard/ubbcgi/ @key{RET}}.  (Substitute the @sc{url}  http://www.tcj.com/messboard/ubbcgi/ RET}.  (Substitute the @acronym{URL}
15760  (not including @samp{Ultimate.cgi} or the like at the end) for a forum  (not including @samp{Ultimate.cgi} or the like at the end) for a forum
15761  you're interested in; there's quite a list of them on the Ultimate web  you're interested in; there's quite a list of them on the Ultimate web
15762  site.)  Then subscribe to the groups you're interested in from the  site.)  Then subscribe to the groups you're interested in from the
# Line 12983  The following @code{nnultimate} variable Line 15767  The following @code{nnultimate} variable
15767  @table @code  @table @code
15768  @item nnultimate-directory  @item nnultimate-directory
15769  @vindex nnultimate-directory  @vindex nnultimate-directory
15770  The directory where @code{nnultimate} stores its files.  The default is  The directory where @code{nnultimate} stores its files.  The default is@*
15771  @samp{~/News/ultimate/}.  @file{~/News/ultimate/}.
15772  @end table  @end table
15773    
15774    
# Line 12999  Some mailing lists only have archives on Line 15783  Some mailing lists only have archives on
15783  interface, and it's possible to get the information Gnus needs to keep  interface, and it's possible to get the information Gnus needs to keep
15784  groups updated.  groups updated.
15785    
15786    @findex gnus-group-make-warchive-group
15787  The easiest way to get started with @code{nnwarchive} is to say  The easiest way to get started with @code{nnwarchive} is to say
15788  something like the following in the group buffer: @kbd{M-x  something like the following in the group buffer: @kbd{M-x
15789  gnus-group-make-warchive-group @key{RET} an_egroup @key{RET} egroups @key{RET}  gnus-group-make-warchive-group RET @var{an_egroup} RET egroups RET
15790  www.egroups.com @key{RET} your@@email.address @key{RET}}.  (Substitute the  www.egroups.com RET @var{your@@email.address} RET}.  (Substitute the
15791  @sc{an_egroup} with the mailing list you subscribed, the  @var{an_egroup} with the mailing list you subscribed, the
15792  @sc{your@@email.address} with your email address.), or to browse the  @var{your@@email.address} with your email address.), or to browse the
15793  back end by @kbd{B nnwarchive @key{RET} mail-archive @key{RET}}.  back end by @kbd{B nnwarchive RET mail-archive RET}.
15794    
15795  The following @code{nnwarchive} variables can be altered:  The following @code{nnwarchive} variables can be altered:
15796    
15797  @table @code  @table @code
15798  @item nnwarchive-directory  @item nnwarchive-directory
15799  @vindex nnwarchive-directory  @vindex nnwarchive-directory
15800  The directory where @code{nnwarchive} stores its files.  The default is  The directory where @code{nnwarchive} stores its files.  The default is@*
15801  @samp{~/News/warchive/}.  @file{~/News/warchive/}.
15802    
15803  @item nnwarchive-login  @item nnwarchive-login
15804  @vindex nnwarchive-login  @vindex nnwarchive-login
# Line 13024  The account name on the web server. Line 15809  The account name on the web server.
15809  The password for your account on the web server.  The password for your account on the web server.
15810  @end table  @end table
15811    
15812    @node RSS
15813    @subsection RSS
15814    @cindex nnrss
15815    @cindex RSS
15816    
15817    Some web sites have an RDF Site Summary (@acronym{RSS}).
15818    @acronym{RSS} is a format for summarizing headlines from news related
15819    sites (such as BBC or CNN).  But basically anything list-like can be
15820    presented as an @acronym{RSS} feed: weblogs, changelogs or recent
15821    changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}).
15822    
15823    @acronym{RSS} has a quite regular and nice interface, and it's
15824    possible to get the information Gnus needs to keep groups updated.
15825    
15826    @kindex G R (Summary)
15827    Use @kbd{G R} from the summary buffer to subscribe to a feed---you
15828    will be prompted for the location of the feed.
15829    
15830    An easy way to get started with @code{nnrss} is to say something like
15831    the following in the group buffer: @kbd{B nnrss RET y}, then
15832    subscribe to groups.
15833    
15834    The following @code{nnrss} variables can be altered:
15835    
15836    @table @code
15837    @item nnrss-directory
15838    @vindex nnrss-directory
15839    The directory where @code{nnrss} stores its files.  The default is
15840    @file{~/News/rss/}.
15841    
15842    @item nnrss-use-local
15843    @vindex nnrss-use-local
15844    @findex nnrss-generate-download-script
15845    If you set @code{nnrss-use-local} to @code{t}, @code{nnrss} will read
15846    the feeds from local files in @code{nnrss-directory}.  You can use
15847    the command @code{nnrss-generate-download-script} to generate a
15848    download script using @command{wget}.
15849    @end table
15850    
15851    The following code may be helpful, if you want to show the description in
15852    the summary buffer.
15853    
15854    @lisp
15855    (add-to-list 'nnmail-extra-headers nnrss-description-field)
15856    (setq gnus-summary-line-format "%U%R%z%I%(%[%4L: %-15,15f%]%) %s%uX\n")
15857    
15858    (defun gnus-user-format-function-X (header)
15859      (let ((descr
15860             (assq nnrss-description-field (mail-header-extra header))))
15861        (if descr (concat "\n\t" (cdr descr)) "")))
15862    @end lisp
15863    
15864    The following code may be useful to open an nnrss url directly from the
15865    summary buffer.
15866    @lisp
15867    (require 'browse-url)
15868    
15869    (defun browse-nnrss-url( arg )
15870      (interactive "p")
15871      (let ((url (assq nnrss-url-field
15872                       (mail-header-extra
15873                        (gnus-data-header
15874                         (assq (gnus-summary-article-number)
15875                               gnus-newsgroup-data))))))
15876        (if url
15877            (progn
15878              (browse-url (cdr url))
15879              (gnus-summary-mark-as-read-forward 1))
15880          (gnus-summary-scroll-up arg))))
15881    
15882    (eval-after-load "gnus"
15883      #'(define-key gnus-summary-mode-map
15884          (kbd "<RET>") 'browse-nnrss-url))
15885    (add-to-list 'nnmail-extra-headers nnrss-url-field)
15886    @end lisp
15887    
15888  @node Customizing w3  @node Customizing w3
15889  @subsection Customizing w3  @subsection Customizing w3
# Line 13052  browser like Netscape).  Here's one way: Line 15912  browser like Netscape).  Here's one way:
15912  @end lisp  @end lisp
15913    
15914  Put that in your @file{.emacs} file, and hitting links in w3-rendered  Put that in your @file{.emacs} file, and hitting links in w3-rendered
15915  @sc{html} in the Gnus article buffers will use @code{browse-url} to  @acronym{HTML} in the Gnus article buffers will use @code{browse-url} to
15916  follow the link.  follow the link.
15917    
15918    
15919    @node IMAP
15920    @section IMAP
15921    @cindex nnimap
15922    @cindex @acronym{IMAP}
15923    
15924    @acronym{IMAP} is a network protocol for reading mail (or news, or @dots{}),
15925    think of it as a modernized @acronym{NNTP}.  Connecting to a @acronym{IMAP}
15926    server is much similar to connecting to a news server, you just
15927    specify the network address of the server.
15928    
15929    @acronym{IMAP} has two properties.  First, @acronym{IMAP} can do
15930    everything that @acronym{POP} can, it can hence be viewed as a
15931    @acronym{POP++}.  Secondly, @acronym{IMAP} is a mail storage protocol,
15932    similar to @acronym{NNTP} being a news storage protocol---however,
15933    @acronym{IMAP} offers more features than @acronym{NNTP} because news
15934    is more or less read-only whereas mail is read-write.
15935    
15936    If you want to use @acronym{IMAP} as a @acronym{POP++}, use an imap
15937    entry in @code{mail-sources}.  With this, Gnus will fetch mails from
15938    the @acronym{IMAP} server and store them on the local disk.  This is
15939    not the usage described in this section---@xref{Mail Sources}.
15940    
15941    If you want to use @acronym{IMAP} as a mail storage protocol, use an nnimap
15942    entry in @code{gnus-secondary-select-methods}.  With this, Gnus will
15943    manipulate mails stored on the @acronym{IMAP} server.  This is the kind of
15944    usage explained in this section.
15945    
15946    A server configuration in @file{~/.gnus.el} with a few @acronym{IMAP}
15947    servers might look something like the following.  (Note that for
15948    @acronym{TLS}/@acronym{SSL}, you need external programs and libraries,
15949    see below.)
15950    
15951    @lisp
15952    (setq gnus-secondary-select-methods
15953          '((nnimap "simpleserver") ; @r{no special configuration}
15954            ; @r{perhaps a ssh port forwarded server:}
15955            (nnimap "dolk"
15956                    (nnimap-address "localhost")
15957                    (nnimap-server-port 1430))
15958            ; @r{a UW server running on localhost}
15959            (nnimap "barbar"
15960                    (nnimap-server-port 143)
15961                    (nnimap-address "localhost")
15962                    (nnimap-list-pattern ("INBOX" "mail/*")))
15963            ; @r{anonymous public cyrus server:}
15964            (nnimap "cyrus.andrew.cmu.edu"
15965                    (nnimap-authenticator anonymous)
15966                    (nnimap-list-pattern "archive.*")
15967                    (nnimap-stream network))
15968            ; @r{a ssl server on a non-standard port:}
15969            (nnimap "vic20"
15970                    (nnimap-address "vic20.somewhere.com")
15971                    (nnimap-server-port 9930)
15972                    (nnimap-stream ssl))))
15973    @end lisp
15974    
15975    After defining the new server, you can subscribe to groups on the
15976    server using normal Gnus commands such as @kbd{U} in the Group Buffer
15977    (@pxref{Subscription Commands}) or via the Server Buffer
15978    (@pxref{Server Buffer}).
15979    
15980    The following variables can be used to create a virtual @code{nnimap}
15981    server:
15982    
15983    @table @code
15984    
15985    @item nnimap-address
15986    @vindex nnimap-address
15987    
15988    The address of the remote @acronym{IMAP} server.  Defaults to the virtual
15989    server name if not specified.
15990    
15991    @item nnimap-server-port
15992    @vindex nnimap-server-port
15993    Port on server to contact.  Defaults to port 143, or 993 for @acronym{TLS}/@acronym{SSL}.
15994    
15995    Note that this should be an integer, example server specification:
15996    
15997    @lisp
15998    (nnimap "mail.server.com"
15999            (nnimap-server-port 4711))
16000    @end lisp
16001    
16002    @item nnimap-list-pattern
16003    @vindex nnimap-list-pattern
16004    String or list of strings of mailboxes to limit available groups to.
16005    This is used when the server has very many mailboxes and you're only
16006    interested in a few---some servers export your home directory via
16007    @acronym{IMAP}, you'll probably want to limit the mailboxes to those in
16008    @file{~/Mail/*} then.
16009    
16010    The string can also be a cons of REFERENCE and the string as above, what
16011    REFERENCE is used for is server specific, but on the University of
16012    Washington server it's a directory that will be concatenated with the
16013    mailbox.
16014    
16015    Example server specification:
16016    
16017    @lisp
16018    (nnimap "mail.server.com"
16019            (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
16020                                   ("~friend/Mail/" . "list/*"))))
16021    @end lisp
16022    
16023    @item nnimap-stream
16024    @vindex nnimap-stream
16025    The type of stream used to connect to your server.  By default, nnimap
16026    will detect and automatically use all of the below, with the exception
16027    of @acronym{TLS}/@acronym{SSL}.  (@acronym{IMAP} over
16028    @acronym{TLS}/@acronym{SSL} is being replaced by STARTTLS, which can
16029    be automatically detected, but it's not widely deployed yet.)
16030    
16031    Example server specification:
16032    
16033    @lisp
16034    (nnimap "mail.server.com"
16035            (nnimap-stream ssl))
16036    @end lisp
16037    
16038    Please note that the value of @code{nnimap-stream} is a symbol!
16039    
16040    @itemize @bullet
16041    @item
16042    @dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5).  Requires the
16043    @samp{gsasl} or @samp{imtest} program.
16044    @item
16045    @dfn{kerberos4:} Connect with Kerberos 4.  Requires the @samp{imtest} program.
16046    @item
16047    @dfn{starttls:} Connect via the STARTTLS extension (similar to
16048    @acronym{TLS}/@acronym{SSL}).  Requires the external library @samp{starttls.el} and program
16049    @samp{starttls}.
16050    @item
16051    @dfn{tls:} Connect through @acronym{TLS}.  Requires GNUTLS (the program
16052    @samp{gnutls-cli}).
16053    @item
16054    @dfn{ssl:} Connect through @acronym{SSL}.  Requires OpenSSL (the program
16055    @samp{openssl}) or SSLeay (@samp{s_client}).
16056    @item
16057    @dfn{shell:} Use a shell command to start @acronym{IMAP} connection.
16058    @item
16059    @dfn{network:} Plain, TCP/IP network connection.
16060    @end itemize
16061    
16062    @vindex imap-kerberos4-program
16063    The @samp{imtest} program is shipped with Cyrus IMAPD.  If you're
16064    using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version
16065    1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
16066    to make @code{imap.el} use a pty instead of a pipe when communicating
16067    with @samp{imtest}.  You will then suffer from a line length
16068    restrictions on @acronym{IMAP} commands, which might make Gnus seem to hang
16069    indefinitely if you have many articles in a mailbox.  The variable
16070    @code{imap-kerberos4-program} contain parameters to pass to the imtest
16071    program.
16072    
16073    For @acronym{TLS} connection, the @code{gnutls-cli} program from GNUTLS is
16074    needed.  It is available from
16075    @uref{http://www.gnu.org/software/gnutls/}.
16076    
16077    @vindex imap-gssapi-program
16078    This parameter specifies a list of command lines that invoke a GSSAPI
16079    authenticated @acronym{IMAP} stream in a subshell.  They are tried
16080    sequentially until a connection is made, or the list has been
16081    exhausted.  By default, @samp{gsasl} from GNU SASL, available from
16082    @uref{http://www.gnu.org/software/gsasl/}, and the @samp{imtest}
16083    program from Cyrus IMAPD (see @code{imap-kerberos4-program}), are
16084    tried.
16085    
16086    @vindex imap-ssl-program
16087    For @acronym{SSL} connections, the OpenSSL program is available from
16088    @uref{http://www.openssl.org/}.  OpenSSL was formerly known as SSLeay,
16089    and nnimap support it too---although the most recent versions of
16090    SSLeay, 0.9.x, are known to have serious bugs making it
16091    useless.  Earlier versions, especially 0.8.x, of SSLeay are known to
16092    work.  The variable @code{imap-ssl-program} contain parameters to pass
16093    to OpenSSL/SSLeay.
16094    
16095    @vindex imap-shell-program
16096    @vindex imap-shell-host
16097    For @acronym{IMAP} connections using the @code{shell} stream, the variable
16098    @code{imap-shell-program} specify what program to call.
16099    
16100    @item nnimap-authenticator
16101    @vindex nnimap-authenticator
16102    
16103    The authenticator used to connect to the server.  By default, nnimap
16104    will use the most secure authenticator your server is capable of.
16105    
16106    Example server specification:
16107    
16108    @lisp
16109    (nnimap "mail.server.com"
16110            (nnimap-authenticator anonymous))
16111    @end lisp
16112    
16113    Please note that the value of @code{nnimap-authenticator} is a symbol!
16114    
16115    @itemize @bullet
16116    @item
16117    @dfn{gssapi:} GSSAPI (usually kerberos 5) authentication.  Requires
16118    external program @code{gsasl} or @code{imtest}.
16119    @item
16120    @dfn{kerberos4:} Kerberos 4 authentication.  Requires external program
16121    @code{imtest}.
16122    @item
16123    @dfn{digest-md5:} Encrypted username/password via DIGEST-MD5.  Requires
16124    external library @code{digest-md5.el}.
16125    @item
16126    @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
16127    @item
16128    @dfn{login:} Plain-text username/password via LOGIN.
16129    @item
16130    @dfn{anonymous:} Login as ``anonymous'', supplying your email address as password.
16131    @end itemize
16132    
16133    @item nnimap-expunge-on-close
16134    @cindex expunging
16135    @vindex nnimap-expunge-on-close
16136    Unlike Parmenides the @acronym{IMAP} designers have decided things that
16137    don't exist actually do exist.  More specifically, @acronym{IMAP} has
16138    this concept of marking articles @code{Deleted} which doesn't actually
16139    delete them, and this (marking them @code{Deleted}, that is) is what
16140    nnimap does when you delete an article in Gnus (with @kbd{B DEL} or
16141    similar).
16142    
16143    Since the articles aren't really removed when we mark them with the
16144    @code{Deleted} flag we'll need a way to actually delete them.  Feel like
16145    running in circles yet?
16146    
16147    Traditionally, nnimap has removed all articles marked as @code{Deleted}
16148    when closing a mailbox but this is now configurable by this server
16149    variable.
16150    
16151    The possible options are:
16152    
16153    @table @code
16154    
16155    @item always
16156    The default behavior, delete all articles marked as ``Deleted'' when
16157    closing a mailbox.
16158    @item never
16159    Never actually delete articles.  Currently there is no way of showing
16160    the articles marked for deletion in nnimap, but other @acronym{IMAP} clients
16161    may allow you to do this.  If you ever want to run the EXPUNGE command
16162    manually, @xref{Expunging mailboxes}.
16163    @item ask
16164    When closing mailboxes, nnimap will ask if you wish to expunge deleted
16165    articles or not.
16166    
16167    @end table
16168    
16169    @item nnimap-importantize-dormant
16170    @vindex nnimap-importantize-dormant
16171    
16172    If non-@code{nil} (the default), marks dormant articles as ticked (as
16173    well), for other @acronym{IMAP} clients.  Within Gnus, dormant articles will
16174    naturally still (only) be marked as dormant.  This is to make dormant
16175    articles stand out, just like ticked articles, in other @acronym{IMAP}
16176    clients.  (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP}
16177    has only one.)
16178    
16179    Probably the only reason for frobing this would be if you're trying
16180    enable per-user persistent dormant flags, using something like:
16181    
16182    @lisp
16183    (setcdr (assq 'dormant nnimap-mark-to-flag-alist)
16184            (format "gnus-dormant-%s" (user-login-name)))
16185    (setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
16186            (format "KEYWORD gnus-dormant-%s" (user-login-name)))
16187    @end lisp
16188    
16189    In this case, you would not want the per-user dormant flag showing up
16190    as ticked for other users.
16191    
16192    @item nnimap-expunge-search-string
16193    @cindex expunging
16194    @vindex nnimap-expunge-search-string
16195    
16196    This variable contain the @acronym{IMAP} search command sent to server when
16197    searching for articles eligible for expiring.  The default is
16198    @code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
16199    UID set and the second @code{%s} is replaced by a date.
16200    
16201    Probably the only useful value to change this to is
16202    @code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
16203    messages instead of the internal article date.  See section 6.4.4 of
16204    RFC 2060 for more information on valid strings.
16205    
16206    @item nnimap-authinfo-file
16207    @vindex nnimap-authinfo-file
16208    
16209    A file containing credentials used to log in on servers.  The format is
16210    (almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
16211    variable @code{nntp-authinfo-file} for exact syntax; also see
16212    @ref{NNTP}.
16213    
16214    @item nnimap-need-unselect-to-notice-new-mail
16215    @vindex nnimap-need-unselect-to-notice-new-mail
16216    
16217    Unselect mailboxes before looking for new mail in them.  Some servers
16218    seem to need this under some circumstances; it was reported that
16219    Courier 1.7.1 did.
16220    
16221    @end table
16222    
16223    @menu
16224    * Splitting in IMAP::           Splitting mail with nnimap.
16225    * Expiring in IMAP::            Expiring mail with nnimap.
16226    * Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
16227    * Expunging mailboxes::         Equivalent of a ``compress mailbox'' button.
16228    * A note on namespaces::        How to (not) use @acronym{IMAP} namespace in Gnus.
16229    * Debugging IMAP::              What to do when things don't work.
16230    @end menu
16231    
16232    
16233    
16234    @node Splitting in IMAP
16235    @subsection Splitting in IMAP
16236    @cindex splitting imap mail
16237    
16238    Splitting is something Gnus users have loved and used for years, and now
16239    the rest of the world is catching up.  Yeah, dream on, not many
16240    @acronym{IMAP} servers have server side splitting and those that have
16241    splitting seem to use some non-standard protocol.  This means that
16242    @acronym{IMAP} support for Gnus has to do its own splitting.
16243    
16244    And it does.
16245    
16246    (Incidentally, people seem to have been dreaming on, and Sieve has
16247    gaining a market share and is supported by several IMAP servers.
16248    Fortunately, Gnus support it too, @xref{Sieve Commands}.)
16249    
16250    Here are the variables of interest:
16251    
16252    @table @code
16253    
16254    @item nnimap-split-crosspost
16255    @cindex splitting, crosspost
16256    @cindex crosspost
16257    @vindex nnimap-split-crosspost
16258    
16259    If non-@code{nil}, do crossposting if several split methods match the
16260    mail.  If @code{nil}, the first match in @code{nnimap-split-rule}
16261    found will be used.
16262    
16263    Nnmail equivalent: @code{nnmail-crosspost}.
16264    
16265    @item nnimap-split-inbox
16266    @cindex splitting, inbox
16267    @cindex inbox
16268    @vindex nnimap-split-inbox
16269    
16270    A string or a list of strings that gives the name(s) of @acronym{IMAP}
16271    mailboxes to split from.  Defaults to @code{nil}, which means that
16272    splitting is disabled!
16273    
16274    @lisp
16275    (setq nnimap-split-inbox
16276          '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
16277    @end lisp
16278    
16279    No nnmail equivalent.
16280    
16281    @item nnimap-split-rule
16282    @cindex splitting, rules
16283    @vindex nnimap-split-rule
16284    
16285    New mail found in @code{nnimap-split-inbox} will be split according to
16286    this variable.
16287    
16288    This variable contains a list of lists, where the first element in the
16289    sublist gives the name of the @acronym{IMAP} mailbox to move articles
16290    matching the regexp in the second element in the sublist.  Got that?
16291    Neither did I, we need examples.
16292    
16293    @lisp
16294    (setq nnimap-split-rule
16295          '(("INBOX.nnimap"
16296             "^Sender: owner-nnimap@@vic20.globalcom.se")
16297            ("INBOX.junk"    "^Subject:.*MAKE MONEY")
16298            ("INBOX.private" "")))
16299    @end lisp
16300    
16301    This will put all articles from the nnimap mailing list into mailbox
16302    INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
16303    into INBOX.junk and everything else in INBOX.private.
16304    
16305    The first string may contain @samp{\\1} forms, like the ones used by
16306    replace-match to insert sub-expressions from the matched text.  For
16307    instance:
16308    
16309    @lisp
16310    ("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
16311    @end lisp
16312    
16313    The first element can also be the symbol @code{junk} to indicate that
16314    matching messages should simply be deleted.  Use with care.
16315    
16316    The second element can also be a function.  In that case, it will be
16317    called with the first element of the rule as the argument, in a buffer
16318    containing the headers of the article.  It should return a
16319    non-@code{nil} value if it thinks that the mail belongs in that group.
16320    
16321    Nnmail users might recollect that the last regexp had to be empty to
16322    match all articles (like in the example above).  This is not required in
16323    nnimap.  Articles not matching any of the regexps will not be moved out
16324    of your inbox.  (This might affect performance if you keep lots of
16325    unread articles in your inbox, since the splitting code would go over
16326    them every time you fetch new mail.)
16327    
16328    These rules are processed from the beginning of the alist toward the
16329    end.  The first rule to make a match will ``win'', unless you have
16330    crossposting enabled.  In that case, all matching rules will ``win''.
16331    
16332    This variable can also have a function as its value, the function will
16333    be called with the headers narrowed and should return a group where it
16334    thinks the article should be split to.  See @code{nnimap-split-fancy}.
16335    
16336    The splitting code tries to create mailboxes if it needs to.
16337    
16338    To allow for different split rules on different virtual servers, and
16339    even different split rules in different inboxes on the same server,
16340    the syntax of this variable have been extended along the lines of:
16341    
16342    @lisp
16343    (setq nnimap-split-rule
16344          '(("my1server"    (".*" (("ding"    "ding@@gnus.org")
16345                                   ("junk"    "From:.*Simon"))))
16346            ("my2server"    ("INBOX" nnimap-split-fancy))
16347            ("my[34]server" (".*" (("private" "To:.*Simon")
16348                                   ("junk"    my-junk-func))))))
16349    @end lisp
16350    
16351    The virtual server name is in fact a regexp, so that the same rules
16352    may apply to several servers.  In the example, the servers
16353    @code{my3server} and @code{my4server} both use the same rules.
16354    Similarly, the inbox string is also a regexp.  The actual splitting
16355    rules are as before, either a function, or a list with group/regexp or
16356    group/function elements.
16357    
16358    Nnmail equivalent: @code{nnmail-split-methods}.
16359    
16360    @item nnimap-split-predicate
16361    @cindex splitting
16362    @vindex nnimap-split-predicate
16363    
16364    Mail matching this predicate in @code{nnimap-split-inbox} will be
16365    split, it is a string and the default is @samp{UNSEEN UNDELETED}.
16366    
16367    This might be useful if you use another @acronym{IMAP} client to read mail in
16368    your inbox but would like Gnus to split all articles in the inbox
16369    regardless of readedness.  Then you might change this to
16370    @samp{UNDELETED}.
16371    
16372    @item nnimap-split-fancy
16373    @cindex splitting, fancy
16374    @findex nnimap-split-fancy
16375    @vindex nnimap-split-fancy
16376    
16377    It's possible to set @code{nnimap-split-rule} to
16378    @code{nnmail-split-fancy} if you want to use fancy
16379    splitting.  @xref{Fancy Mail Splitting}.
16380    
16381    However, to be able to have different fancy split rules for nnmail and
16382    nnimap back ends you can set @code{nnimap-split-rule} to
16383    @code{nnimap-split-fancy} and define the nnimap specific fancy split
16384    rule in @code{nnimap-split-fancy}.
16385    
16386    Example:
16387    
16388    @lisp
16389    (setq nnimap-split-rule 'nnimap-split-fancy
16390          nnimap-split-fancy ...)
16391    @end lisp
16392    
16393    Nnmail equivalent: @code{nnmail-split-fancy}.
16394    
16395    @item nnimap-split-download-body
16396    @findex nnimap-split-download-body
16397    @vindex nnimap-split-download-body
16398    
16399    Set to non-@code{nil} to download entire articles during splitting.
16400    This is generally not required, and will slow things down
16401    considerably.  You may need it if you want to use an advanced
16402    splitting function that analyses the body to split the article.
16403    
16404    @end table
16405    
16406    @node Expiring in IMAP
16407    @subsection Expiring in IMAP
16408    @cindex expiring imap mail
16409    
16410    Even though @code{nnimap} is not a proper @code{nnmail} derived back
16411    end, it supports most features in regular expiring (@pxref{Expiring
16412    Mail}).  Unlike splitting in @acronym{IMAP} (@pxref{Splitting in
16413    IMAP}) it does not clone the @code{nnmail} variables (i.e., creating
16414    @var{nnimap-expiry-wait}) but reuse the @code{nnmail} variables.  What
16415    follows below are the variables used by the @code{nnimap} expiry
16416    process.
16417    
16418    A note on how the expire mark is stored on the @acronym{IMAP} server is
16419    appropriate here as well.  The expire mark is translated into a
16420    @code{imap} client specific mark, @code{gnus-expire}, and stored on the
16421    message.  This means that likely only Gnus will understand and treat
16422    the @code{gnus-expire} mark properly, although other clients may allow
16423    you to view client specific flags on the message.  It also means that
16424    your server must support permanent storage of client specific flags on
16425    messages.  Most do, fortunately.
16426    
16427    @table @code
16428    
16429    @item nnmail-expiry-wait
16430    @item nnmail-expiry-wait-function
16431    
16432    These variables are fully supported.  The expire value can be a
16433    number, the symbol @code{immediate} or @code{never}.
16434    
16435    @item nnmail-expiry-target
16436    
16437    This variable is supported, and internally implemented by calling the
16438    @code{nnmail} functions that handle this.  It contains an optimization
16439    that if the destination is a @acronym{IMAP} group on the same server, the
16440    article is copied instead of appended (that is, uploaded again).
16441    
16442    @end table
16443    
16444    @node Editing IMAP ACLs
16445    @subsection Editing IMAP ACLs
16446    @cindex editing imap acls
16447    @cindex Access Control Lists
16448    @cindex Editing @acronym{IMAP} ACLs
16449    @kindex G l (Group)
16450    @findex gnus-group-nnimap-edit-acl
16451    
16452    ACL stands for Access Control List.  ACLs are used in @acronym{IMAP} for
16453    limiting (or enabling) other users access to your mail boxes.  Not all
16454    @acronym{IMAP} servers support this, this function will give an error if it
16455    doesn't.
16456    
16457    To edit an ACL for a mailbox, type @kbd{G l}
16458    (@code{gnus-group-edit-nnimap-acl}) and you'll be presented with an ACL
16459    editing window with detailed instructions.
16460    
16461    Some possible uses:
16462    
16463    @itemize @bullet
16464    @item
16465    Giving ``anyone'' the ``lrs'' rights (lookup, read, keep seen/unseen flags)
16466    on your mailing list mailboxes enables other users on the same server to
16467    follow the list without subscribing to it.
16468    @item
16469    At least with the Cyrus server, you are required to give the user
16470    ``anyone'' posting ("p") capabilities to have ``plussing'' work (that is,
16471    mail sent to user+mailbox@@domain ending up in the @acronym{IMAP} mailbox
16472    INBOX.mailbox).
16473    @end itemize
16474    
16475    @node Expunging mailboxes
16476    @subsection Expunging mailboxes
16477    @cindex expunging
16478    
16479    @cindex expunge
16480    @cindex manual expunging
16481    @kindex G x (Group)
16482    @findex gnus-group-nnimap-expunge
16483    
16484    If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
16485    you may want the option of expunging all deleted articles in a mailbox
16486    manually.  This is exactly what @kbd{G x} does.
16487    
16488    Currently there is no way of showing deleted articles, you can just
16489    delete them.
16490    
16491    @node A note on namespaces
16492    @subsection A note on namespaces
16493    @cindex IMAP namespace
16494    @cindex namespaces
16495    
16496    The @acronym{IMAP} protocol has a concept called namespaces, described
16497    by the following text in the RFC:
16498    
16499    @display
16500    5.1.2.  Mailbox Namespace Naming Convention
16501    
16502       By convention, the first hierarchical element of any mailbox name
16503       which begins with "#" identifies the "namespace" of the remainder of
16504       the name.  This makes it possible to disambiguate between different
16505       types of mailbox stores, each of which have their own namespaces.
16506    
16507          For example, implementations which offer access to USENET
16508          newsgroups MAY use the "#news" namespace to partition the USENET
16509          newsgroup namespace from that of other mailboxes.  Thus, the
16510          comp.mail.misc newsgroup would have an mailbox name of
16511          "#news.comp.mail.misc", and the name "comp.mail.misc" could refer
16512          to a different object (e.g. a user's private mailbox).
16513    @end display
16514    
16515    While there is nothing in this text that warrants concern for the
16516    @acronym{IMAP} implementation in Gnus, some servers use namespace
16517    prefixes in a way that does not work with how Gnus uses mailbox names.
16518    
16519    Specifically, University of Washington's @acronym{IMAP} server uses
16520    mailbox names like @code{#driver.mbx/read-mail} which are valid only
16521    in the @sc{create} and @sc{append} commands.  After the mailbox is
16522    created (or a messages is appended to a mailbox), it must be accessed
16523    without the namespace prefix, i.e. @code{read-mail}.  Since Gnus do
16524    not make it possible for the user to guarantee that user entered
16525    mailbox names will only be used with the CREATE and APPEND commands,
16526    you should simply not use the namespace prefixed mailbox names in
16527    Gnus.
16528    
16529    See the UoW IMAPD documentation for the @code{#driver.*/} prefix
16530    for more information on how to use the prefixes.  They are a power
16531    tool and should be used only if you are sure what the effects are.
16532    
16533    @node Debugging IMAP
16534    @subsection Debugging IMAP
16535    @cindex IMAP debugging
16536    @cindex protocol dump (IMAP)
16537    
16538    @acronym{IMAP} is a complex protocol, more so than @acronym{NNTP} or
16539    @acronym{POP3}.  Implementation bugs are not unlikely, and we do our
16540    best to fix them right away.  If you encounter odd behaviour, chances
16541    are that either the server or Gnus is buggy.
16542    
16543    If you are familiar with network protocols in general, you will
16544    probably be able to extract some clues from the protocol dump of the
16545    exchanges between Gnus and the server.  Even if you are not familiar
16546    with network protocols, when you include the protocol dump in
16547    @acronym{IMAP}-related bug reports you are helping us with data
16548    critical to solving the problem.  Therefore, we strongly encourage you
16549    to include the protocol dump when reporting IMAP bugs in Gnus.
16550    
16551    
16552    @vindex imap-log
16553    Because the protocol dump, when enabled, generates lots of data, it is
16554    disabled by default.  You can enable it by setting @code{imap-log} as
16555    follows:
16556    
16557    @lisp
16558    (setq imap-log t)
16559    @end lisp
16560    
16561    This instructs the @code{imap.el} package to log any exchanges with
16562    the server.  The log is stored in the buffer @samp{*imap-log*}.  Look
16563    for error messages, which sometimes are tagged with the keyword
16564    @code{BAD} - but when submitting a bug, make sure to include all the
16565    data.
16566    
16567  @node Other Sources  @node Other Sources
16568  @section Other Sources  @section Other Sources
16569    
# Line 13064  below allow Gnus to view directories and Line 16572  below allow Gnus to view directories and
16572  newsgroups.  newsgroups.
16573    
16574  @menu  @menu
16575  * Directory Groups::      You can read a directory as if it was a newsgroup.  * Directory Groups::            You can read a directory as if it was a newsgroup.
16576  * Anything Groups::       Dired?  Who needs dired?  * Anything Groups::             Dired?  Who needs dired?
16577  * Document Groups::       Single files can be the basis of a group.  * Document Groups::             Single files can be the basis of a group.
16578  * SOUP::                  Reading @sc{soup} packets ``offline''.  * SOUP::                        Reading @sc{soup} packets ``offline''.
16579  * Mail-To-News Gateways:: Posting articles via mail-to-news gateways.  * Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
 * IMAP::                  Using Gnus as a @sc{imap} client.  
16580  @end menu  @end menu
16581    
16582    
# Line 13093  enter the @code{ange-ftp} file name Line 16600  enter the @code{ange-ftp} file name
16600  @code{ange-ftp} or @code{efs} will actually allow you to read this  @code{ange-ftp} or @code{efs} will actually allow you to read this
16601  directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!  directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
16602    
16603  @code{nndir} will use @sc{nov} files if they are present.  @code{nndir} will use @acronym{NOV} files if they are present.
16604    
16605  @code{nndir} is a ``read-only'' back end---you can't delete or expire  @code{nndir} is a ``read-only'' back end---you can't delete or expire
16606  articles with this method.  You can use @code{nnmh} or @code{nnml} for  articles with this method.  You can use @code{nnmh} or @code{nnml} for
# Line 13175  Name of the map files. Line 16682  Name of the map files.
16682  as a newsgroup.  Several files types are supported:  as a newsgroup.  Several files types are supported:
16683    
16684  @table @code  @table @code
16685  @cindex babyl  @cindex Babyl
16686  @cindex rmail mbox  @cindex Rmail mbox
16687    
16688  @item babyl  @item babyl
16689  The babyl (rmail) mail box.  The Babyl (Rmail) mail box.
16690  @cindex mbox  @cindex mbox
16691  @cindex Unix mbox  @cindex Unix mbox
16692    
# Line 13205  Forwarded articles. Line 16712  Forwarded articles.
16712  Netscape mail boxes.  Netscape mail boxes.
16713    
16714  @item mime-parts  @item mime-parts
16715  MIME multipart messages.  @acronym{MIME} multipart messages.
16716    
16717  @item standard-digest  @item standard-digest
16718  The standard (RFC 1153) digest format.  The standard (RFC 1153) digest format.
16719    
16720    @item mime-digest
16721    A @acronym{MIME} digest of messages.
16722    
16723    @item lanl-gov-announce
16724    Announcement messages from LANL Gov Announce.
16725    
16726    @item rfc822-forward
16727    A message forwarded according to RFC822.
16728    
16729    @item outlook
16730    The Outlook mail box.
16731    
16732    @item oe-dbx
16733    The Outlook Express dbx mail box.
16734    
16735    @item exim-bounce
16736    A bounce message from the Exim MTA.
16737    
16738    @item forward
16739    A message forwarded according to informal rules.
16740    
16741    @item rfc934
16742    An RFC934-forwarded message.
16743    
16744    @item mailman
16745    A mailman digest.
16746    
16747    @item clari-briefs
16748    A digest of Clarinet brief news items.
16749    
16750  @item slack-digest  @item slack-digest
16751  Non-standard digest format---matches most things, but does it badly.  Non-standard digest format---matches most things, but does it badly.
16752    
16753    @item mail-in-mail
16754    The last resort.
16755  @end table  @end table
16756    
16757  You can also use the special ``file type'' @code{guess}, which means  You can also use the special ``file type'' @code{guess}, which means
# Line 13242  Virtual server variables: Line 16782  Virtual server variables:
16782  This should be one of @code{mbox}, @code{babyl}, @code{digest},  This should be one of @code{mbox}, @code{babyl}, @code{digest},
16783  @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},  @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
16784  @code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},  @code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
16785  @code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.  @code{slack-digest}, @code{clari-briefs}, @code{nsmail}, @code{outlook},
16786    @code{oe-dbx}, @code{mailman}, and @code{mail-in-mail} or @code{guess}.
16787    
16788  @item nndoc-post-type  @item nndoc-post-type
16789  @vindex nndoc-post-type  @vindex nndoc-post-type
# Line 13367  the head from the body may contain a sin Line 16908  the head from the body may contain a sin
16908  run through @code{nndoc-unquote-dashes} before being delivered.  run through @code{nndoc-unquote-dashes} before being delivered.
16909    
16910  To hook your own document definition into @code{nndoc}, use the  To hook your own document definition into @code{nndoc}, use the
16911  @code{nndoc-add-type} function.  It takes two parameters---the first is  @code{nndoc-add-type} function.  It takes two parameters---the first
16912  the definition itself and the second (optional) parameter says where in  is the definition itself and the second (optional) parameter says
16913  the document type definition alist to put this definition.  The alist is  where in the document type definition alist to put this definition.
16914  traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document  The alist is traversed sequentially, and
16915  is of @code{mmdf} type, and so on.  These type predicates should return  @code{nndoc-@var{type}-type-p} is called for a given type @var{type}.
16916  @code{nil} if the document is not of the correct type; @code{t} if it is  So @code{nndoc-mmdf-type-p} is called to see whether a document is of
16917  of the correct type; and a number if the document might be of the  @code{mmdf} type, and so on.  These type predicates should return
16918  correct type.  A high number means high probability; a low number means  @code{nil} if the document is not of the correct type; @code{t} if it
16919  low probability with @samp{0} being the lowest valid number.  is of the correct type; and a number if the document might be of the
16920    correct type.  A high number means high probability; a low number
16921    means low probability with @samp{0} being the lowest valid number.
16922    
16923    
16924  @node SOUP  @node SOUP
# Line 13473  So you basically have a bipartite system Line 17016  So you basically have a bipartite system
17016  reading and Gnus for packing/sending these @sc{soup} packets.  reading and Gnus for packing/sending these @sc{soup} packets.
17017    
17018  @menu  @menu
17019  * SOUP Commands::     Commands for creating and sending @sc{soup} packets  * SOUP Commands::               Commands for creating and sending @sc{soup} packets
17020  * SOUP Groups::       A back end for reading @sc{soup} packets.  * SOUP Groups::                 A back end for reading @sc{soup} packets.
17021  * SOUP Replies::      How to enable @code{nnsoup} to take over mail and news.  * SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
17022  @end menu  @end menu
17023    
17024    
# Line 13486  These are commands for creating and mani Line 17029  These are commands for creating and mani
17029    
17030  @table @kbd  @table @kbd
17031  @item G s b  @item G s b
17032  @kindex G s b @r{(Group)}  @kindex G s b (Group)
17033  @findex gnus-group-brew-soup  @findex gnus-group-brew-soup
17034  Pack all unread articles in the current group  Pack all unread articles in the current group
17035  (@code{gnus-group-brew-soup}).  This command understands the  (@code{gnus-group-brew-soup}).  This command understands the
17036  process/prefix convention.  process/prefix convention.
17037    
17038  @item G s w  @item G s w
17039  @kindex G s w @r{(Group)}  @kindex G s w (Group)
17040  @findex gnus-soup-save-areas  @findex gnus-soup-save-areas
17041  Save all @sc{soup} data files (@code{gnus-soup-save-areas}).  Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
17042    
17043  @item G s s  @item G s s
17044  @kindex G s s @r{(Group)}  @kindex G s s (Group)
17045  @findex gnus-soup-send-replies  @findex gnus-soup-send-replies
17046  Send all replies from the replies packet  Send all replies from the replies packet
17047  (@code{gnus-soup-send-replies}).  (@code{gnus-soup-send-replies}).
17048    
17049  @item G s p  @item G s p
17050  @kindex G s p @r{(Group)}  @kindex G s p (Group)
17051  @findex gnus-soup-pack-packet  @findex gnus-soup-pack-packet
17052  Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).  Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
17053    
17054  @item G s r  @item G s r
17055  @kindex G s r @r{(Group)}  @kindex G s r (Group)
17056  @findex nnsoup-pack-replies  @findex nnsoup-pack-replies
17057  Pack all replies into a replies packet (@code{nnsoup-pack-replies}).  Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
17058    
17059  @item O s  @item O s
17060  @kindex O s @r{(Summary)}  @kindex O s (Summary)
17061  @findex gnus-soup-add-article  @findex gnus-soup-add-article
17062  This summary-mode command adds the current article to a @sc{soup} packet  This summary-mode command adds the current article to a @sc{soup} packet
17063  (@code{gnus-soup-add-article}).  It understands the process/prefix  (@code{gnus-soup-add-article}).  It understands the process/prefix
# Line 13566  Regular expression matching @sc{soup} re Line 17109  Regular expression matching @sc{soup} re
17109    
17110    
17111  @node SOUP Groups  @node SOUP Groups
17112  @subsubsection @sc{soup} Groups  @subsubsection SOUP Groups
17113  @cindex nnsoup  @cindex nnsoup
17114    
17115  @code{nnsoup} is the back end for reading @sc{soup} packets.  It will  @code{nnsoup} is the back end for reading @sc{soup} packets.  It will
# Line 13590  The default is @file{~/SOUP/}. Line 17133  The default is @file{~/SOUP/}.
17133  @item nnsoup-replies-directory  @item nnsoup-replies-directory
17134  @vindex nnsoup-replies-directory  @vindex nnsoup-replies-directory
17135  All replies will be stored in this directory before being packed into a  All replies will be stored in this directory before being packed into a
17136  reply packet.  The default is @file{~/SOUP/replies/"}.  reply packet.  The default is @file{~/SOUP/replies/}.
17137    
17138  @item nnsoup-replies-format-type  @item nnsoup-replies-format-type
17139  @vindex nnsoup-replies-format-type  @vindex nnsoup-replies-format-type
# Line 13697  For instance, an article with this @code Line 17240  For instance, an article with this @code
17240  Newsgroups: alt.religion.emacs  Newsgroups: alt.religion.emacs
17241  @end example  @end example
17242    
17243  will get this @code{From} header inserted:  will get this @code{To} header inserted:
17244    
17245  @example  @example
17246  To: alt-religion-emacs@@GATEWAY  To: alt-religion-emacs@@GATEWAY
# Line 13717  Creates a @code{To} header that looks li Line 17260  Creates a @code{To} header that looks li
17260  @item nngateway-mail2news-header-transformation  @item nngateway-mail2news-header-transformation
17261  Creates a @code{To} header that looks like  Creates a @code{To} header that looks like
17262  @code{nngateway-address}.  @code{nngateway-address}.
17263    @end table
17264    
17265    @end table
17266    
17267  Here's an example:  Here's an example:
17268    
# Line 13728  Here's an example: Line 17274  Here's an example:
17274           nngateway-mail2news-header-transformation)))           nngateway-mail2news-header-transformation)))
17275  @end lisp  @end lisp
17276    
 @end table  
   
   
 @end table  
   
17277  So, to use this, simply say something like:  So, to use this, simply say something like:
17278    
17279  @lisp  @lisp
# Line 13741  So, to use this, simply say something li Line 17282  So, to use this, simply say something li
17282    
17283    
17284    
 @node IMAP  
 @subsection @sc{imap}  
 @cindex nnimap  
 @cindex @sc{imap}  
   
 @sc{imap} is a network protocol for reading mail (or news, or@dots{}),  
 think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap}  
 server is much similar to connecting to a news server, you just  
 specify the network address of the server.  
   
 @sc{imap} has two properties.  First, @sc{imap} can do everything that  
 POP can, it can hence be viewed as POP++.  Secondly, @sc{imap} is a  
 mail storage protocol, similar to @sc{nntp} being a news storage  
 protocol.  (@sc{imap} offers more features than @sc{nntp} because news  
 is more or less read-only whereas mail is read-write.)  
   
 If you want to use @sc{imap} as POP++, use an imap entry in  
 mail-sources.  With this, Gnus will fetch mails from the @sc{imap}  
 server and store them on the local disk.  This is not the usage  
 described in this section.  @xref{Mail Sources}.  
   
 If you want to use @sc{imap} as a mail storage protocol, use an nnimap  
 entry in gnus-secondary-select-methods.  With this, Gnus will  
 manipulate mails stored on the @sc{imap} server.  This is the kind of  
 usage explained in this section.  
   
 A server configuration in @code{~/.gnus} with a few @sc{imap} servers  
 might look something like this:  
   
 @lisp  
 (setq gnus-secondary-select-methods  
       '((nnimap "simpleserver") ; no special configuration  
         ; perhaps a ssh port forwarded server:  
         (nnimap "dolk"  
                 (nnimap-address "localhost")  
                 (nnimap-server-port 1430))  
         ; a UW server running on localhost  
         (nnimap "barbar"  
                 (nnimap-server-port 143)  
                 (nnimap-address "localhost")  
                 (nnimap-list-pattern ("INBOX" "mail/*")))  
         ; anonymous public cyrus server:  
         (nnimap "cyrus.andrew.cmu.edu"  
                 (nnimap-authenticator anonymous)  
                 (nnimap-list-pattern "archive.*")  
                 (nnimap-stream network))  
         ; a ssl server on a non-standard port:  
         (nnimap "vic20"  
                 (nnimap-address "vic20.somewhere.com")  
                 (nnimap-server-port 9930)  
                 (nnimap-stream ssl))))  
 @end lisp  
   
 The following variables can be used to create a virtual @code{nnimap}  
 server:  
   
 @table @code  
   
 @item nnimap-address  
 @vindex nnimap-address  
   
 The address of the remote @sc{imap} server.  Defaults to the virtual  
 server name if not specified.  
   
 @item nnimap-server-port  
 @vindex nnimap-server-port  
 Port on server to contact.  Defaults to port 143, or 993 for SSL.  
   
 Note that this should be a integer, example server specification:  
   
 @lisp  
 (nnimap "mail.server.com"  
         (nnimap-server-port 4711))  
 @end lisp  
   
 @item nnimap-list-pattern  
 @vindex nnimap-list-pattern  
 String or list of strings of mailboxes to limit available groups to.  
 This is used when the server has very many mailboxes and you're only  
 interested in a few -- some servers export your home directory via  
 @sc{imap}, you'll probably want to limit the mailboxes to those in  
 @file{~/Mail/*} then.  
   
 The string can also be a cons of REFERENCE and the string as above, what  
 REFERENCE is used for is server specific, but on the University of  
 Washington server it's a directory that will be concatenated with the  
 mailbox.  
   
 Example server specification:  
   
 @lisp  
 (nnimap "mail.server.com"  
         (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"  
                                ("~friend/Mail/" . "list/*"))))  
 @end lisp  
   
 @item nnimap-stream  
 @vindex nnimap-stream  
 The type of stream used to connect to your server.  By default, nnimap  
 will detect and automatically use all of the below, with the exception  
 of SSL. (SSL is being replaced by STARTTLS, which can be automatically  
 detected, but it's not widely deployed yet).  
   
 Example server specification:  
   
 @lisp  
 (nnimap "mail.server.com"  
         (nnimap-stream ssl))  
 @end lisp  
   
 Please note that the value of @code{nnimap-stream} is a symbol!  
   
 @itemize @bullet  
 @item  
 @dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5).  Requires the  
 @command{imtest} program.  
 @item  
 @dfn{kerberos4:} Connect with Kerberos 4.  Requires the  
 @command{imtest} program.  
 @item  
 @dfn{starttls:} Connect via the STARTTLS extension (similar to  
 SSL)@.  Requires the library @file{starttls.el} and program  
 @command{starttls}.  
 @item  
 @dfn{ssl:} Connect through SSL@.  Requires OpenSSL (the  
 program @command{openssl}) or SSLeay (@command{s_client}).  
 @item  
 @dfn{shell:} Use a shell command to start an @sc{imap} connection.  
 @item  
 @dfn{network:} Plain, TCP/IP network connection.  
 @end itemize  
   
 @vindex imap-kerberos4-program  
 The @command{imtest} program is shipped with Cyrus IMAPD@.  Nnimap supports  
 both @command{imtest} version 1.5.x and version 1.6.x.  The variable  
 @code{imap-kerberos4-program} contains parameters to pass to the  
 @command{imtest} program.  
   
 @vindex imap-ssl-program  
 For SSL connections, the OpenSSL program is available from  
 @uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,  
 and nnimap supports it too.  However, the most recent versions of  
 SSLeay, 0.9.x, are known to have serious bugs making it  
 useless.  Earlier versions, especially 0.8.x, of SSLeay are known to  
 work. The variable @code{imap-ssl-program} contains parameters to pass  
 to OpenSSL/SSLeay.  
   
 @vindex imap-shell-program  
 @vindex imap-shell-host  
 For @sc{imap} connections using the @code{shell} stream, the variable  
 @code{imap-shell-program} specifies what program to call.  
   
 @item nnimap-authenticator  
 @vindex nnimap-authenticator  
   
 The authenticator used to connect to the server.  By default, nnimap  
 will use the most secure authenticator your server supports.  
   
 Example server specification:  
   
 @lisp  
 (nnimap "mail.server.com"  
         (nnimap-authenticator anonymous))  
 @end lisp  
   
 Please note that the value of @code{nnimap-authenticator} is a symbol!  
   
 @itemize @bullet  
 @item  
 @dfn{gssapi:} GSSAPI (usually Kerberos 5) authentication.  Requires the  
 external program @command{imtest}.  
 @item  
 @dfn{kerberos4:} Kerberos authentication.  Requires the external program  
 @command{imtest}.  
 @item  
 @dfn{digest-md5:} Encrypted username/password via DIGEST-MD5@.  Requires  
 external library @command{digest-md5.el}.  
 @item  
 @dfn{cram-md5:} Encrypted username/password via CRAM-MD5.  
 @item  
 @dfn{login:} Plain-text username/password via LOGIN.  
 @item  
 @dfn{anonymous:} Login as `anonymous', supplying your email address as  
 password.  
 @end itemize  
   
 @item nnimap-expunge-on-close  
 @cindex Expunging  
 @vindex nnimap-expunge-on-close  
 Unlike Parmenides, the @sc{imap} designers decided that things that  
 don't exist actually do exist.  More specifically, @sc{imap} has  
 the concept of marking articles @code{Deleted} which doesn't actually  
 delete them, and this (marking them @code{Deleted}, that is) is what  
 nnimap does when you delete a article in Gnus (with @kbd{G @key{DEL}} or  
 similar).  
   
 Since the articles aren't really removed when we mark them with the  
 @code{Deleted} flag we'll need a way to actually delete them.  Feel like  
 running in circles yet?  
   
 Traditionally, nnimap has removed all articles marked as @code{Deleted}  
 when closing a mailbox but this is now configurable by this server  
 variable.  
   
 The possible options are:  
   
 @table @code  
   
 @item always  
 The default behavior, delete all articles marked as "Deleted" when  
 closing a mailbox.  
 @item never  
 Never actually delete articles.  Currently there is no way of showing  
 the articles marked for deletion in nnimap, but other @sc{imap} clients  
 may allow you to do this.  If you ever want to run the EXPUNGE command  
 manually, @xref{Expunging mailboxes}.  
 @item ask  
 When closing mailboxes, nnimap will ask if you wish to expunge deleted  
 articles or not.  
   
 @end table  
   
 @item nnimap-authinfo-file  
 @vindex nnimap-authinfo-file  
   
 A file containing credentials used to log in on servers.  The format  
 is (almost) the same as the @code{ftp} @file{~/.netrc} file.  See  
 `nntp-authinfo-file' for exact syntax.  
   
 A file containing credentials used to log in on servers.  The format is  
 (almost) the same as the @code{ftp} @file{~/.netrc} file.  See the  
 variable @code{nntp-authinfo-file} for exact syntax; also see  
 @xref{NNTP}.  
   
 @end table  
   
 @menu  
 * Splitting in IMAP::     Splitting mail with nnimap.  
 * Editing IMAP ACLs::     Limiting/enabling other users access to a mailbox.  
 * Expunging mailboxes::   Equivalent of a "compress mailbox" button.  
 @end menu  
   
   
   
 @node Splitting in IMAP  
 @subsubsection Splitting in @sc{imap}  
 @cindex splitting imap mail  
   
 Splitting is something Gnus users have loved and used for years, and now  
 the rest of the world is catching up.  Yeah, dream on; not many  
 @sc{imap} servers have server side splitting and those that have splitting  
 seem to use some non-standard protocol.  This means that @sc{imap}  
 support for Gnus has to do its own splitting.  
   
 And it does.  
   
 Here are the variables of interest:  
   
 @table @code  
   
 @item nnimap-split-crosspost  
 @cindex splitting, crosspost  
 @cindex crosspost  
 @vindex nnimap-split-crosspost  
   
 If non-nil, do crossposting if several split methods match the mail.  If  
 nil, the first match in @code{nnimap-split-rule} found will be used.  
   
 Nnmail equivalent: @code{nnmail-crosspost}.  
   
 @item nnimap-split-inbox  
 @cindex splitting, inbox  
 @cindex inbox  
 @vindex nnimap-split-inbox  
   
 A string or a list of strings that gives the name(s) of @sc{imap}  
 mailboxes to split from.  Defaults to @code{nil}, which means that  
 splitting is disabled!  
   
 @lisp  
 (setq nnimap-split-inbox  
       '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))  
 @end lisp  
   
 No nnmail equivalent.  
   
 @item nnimap-split-rule  
 @cindex Splitting, rules  
 @vindex nnimap-split-rule  
   
 New mail found in @code{nnimap-split-inbox} will be split according to  
 this variable.  
   
 This variable contains a list of lists, where the first element in the  
 sublist gives the name of the @sc{imap} mailbox to move articles  
 matching the regexp in the second element in the sublist.  Got that?  
 Neither did I, we need examples.  
   
 @lisp  
 (setq nnimap-split-rule  
       '(("INBOX.nnimap"  
          "^Sender: owner-nnimap@@vic20.globalcom.se")  
         ("INBOX.junk"    "^Subject:.*MAKE MONEY")  
         ("INBOX.private" "")))  
 @end lisp  
   
 This will put all articles from the nnimap mailing list into mailbox  
 INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line  
 into INBOX.spam and everything else in INBOX.private.  
   
 The first string may contain @samp{\\@var{digit}} forms, like the ones used by  
 replace-match to insert sub-expressions from the matched text.  For  
 instance:  
   
 @lisp  
 ("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")  
 @end lisp  
   
 The second element can also be a function.  In that case, it will be  
 called with the first element of the rule as the argument, in a buffer  
 containing the headers of the article.  It should return a non-nil value  
 if it thinks that the mail belongs in that group.  
   
 Nnmail users might recollect that the last regexp had to be empty to  
 match all articles (like in the example above).  This is not required in  
 nnimap.  Articles not matching any of the regexps will not be moved out  
 of your inbox.  (This might affect performance if you keep lots of  
 unread articles in your inbox, since the splitting code would go over  
 them every time you fetch new mail.)  
   
 These rules are processed from the beginning of the alist toward the  
 end.  The first rule to make a match will `win', unless you have  
 crossposting enabled.  In that case, all matching rules will `win'.  
   
 This variable can also have a function as its value, the function will  
 be called with the headers narrowed and should return a group to where  
 it thinks the article should be split.  See @code{nnimap-split-fancy}.  
   
 The splitting code tries to create mailboxes if it needs too.  
   
 To allow for different split rules on different virtual servers, and  
 even different split rules in different inboxes on the same server,  
 the syntax of this variable has been extended along the lines of:  
   
 @lisp  
 (setq nnimap-split-rule  
       '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")  
                                   ("junk"    "From:.*Simon")))  
         ("my2server"    ("INBOX" nnimap-split-fancy))  
         ("my[34]server" (".*"    (("private" "To:.*Simon")  
                                   ("junk"    my-junk-func)))))  
 @end lisp  
   
 The virtual server name is in fact a regexp, so that the same rules  
 may apply to several servers.  In the example, the servers  
 @code{my3server} and @code{my4server} both use the same rules.  
 Similarly, the inbox string is also a regexp.  The actual splitting  
 rules are as before, either a function, or a list with group/regexp or  
 group/function elements.  
   
 Nnmail equivalent: @code{nnmail-split-methods}.  
   
 @item nnimap-split-predicate  
 @cindex splitting  
 @vindex nnimap-split-predicate  
   
 Mail matching this predicate in @code{nnimap-split-inbox} will be  
 split; it is a string and the default is @samp{UNSEEN UNDELETED}.  
   
 This might be useful if you use another @sc{imap} client to read mail in  
 your inbox but would like Gnus to split all articles in the inbox  
 regardless of readedness. Then you might change this to  
 @samp{UNDELETED}.  
   
 @item nnimap-split-fancy  
 @cindex splitting, fancy  
 @findex nnimap-split-fancy  
 @vindex nnimap-split-fancy  
   
 It's possible to set @code{nnimap-split-rule} to  
 @code{nnmail-split-fancy} if you want to use fancy  
 splitting. @xref{Fancy Mail Splitting}.  
   
 However, to be able to have different fancy split rules for nnmail and  
 nnimap back ends you can set @code{nnimap-split-rule} to  
 @code{nnimap-split-fancy} and define the nnimap specific fancy split  
 rule in @code{nnimap-split-fancy}.  
   
 Example:  
   
 @lisp  
 (setq nnimap-split-rule 'nnimap-split-fancy  
       nnimap-split-fancy ...)  
 @end lisp  
   
 Nnmail equivalent: @code{nnmail-split-fancy}.  
   
 @end table  
   
 @node Editing IMAP ACLs  
 @subsubsection Editing @sc{imap} ACLs  
 @cindex editing imap acls  
 @cindex Access Control Lists  
 @cindex Editing @sc{imap} ACLs  
 @kindex G l  
 @findex gnus-group-nnimap-edit-acl  
   
 ACL stands for Access Control List.  ACLs are used in @sc{imap} for  
 limiting (or enabling) other users access to your mail boxes.  Not all  
 @sc{imap} servers support this, this function will give an error if it  
 doesn't.  
   
 To edit a ACL for a mailbox, type @kbd{G l}  
 (@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL  
 editing window with detailed instructions.  
   
 Some possible uses:  
   
 @itemize @bullet  
 @item  
 Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)  
 on your mailing list mailboxes enables other users on the same server to  
 follow the list without subscribing to it.  
 @item  
 At least with the Cyrus server, you are required to give the user  
 "anyone" posting ("p") capabilities to have "plussing" work (that is,  
 mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox  
 INBOX.mailbox).  
 @end itemize  
   
 @node Expunging mailboxes  
 @subsubsection Expunging mailboxes  
 @cindex expunging  
   
 @cindex Expunge  
 @cindex Manual expunging  
 @kindex G x  
 @findex gnus-group-nnimap-expunge  
   
 If you're using the @code{never} setting of @code{nnimap-expunge-close},  
 you may want the option of expunging all deleted articles in a mailbox  
 manually.  This is exactly what @kbd{G x} does.  
   
 Currently there is no way of showing deleted articles, you can just  
 delete them.  
   
   
   
17285  @node Combined Groups  @node Combined Groups
17286  @section Combined Groups  @section Combined Groups
17287    
# Line 14196  Gnus allows combining a mixture of all t Line 17289  Gnus allows combining a mixture of all t
17289  groups.  groups.
17290    
17291  @menu  @menu
17292  * Virtual Groups::     Combining articles from many groups.  * Virtual Groups::              Combining articles from many groups.
17293  * Kibozed Groups::     Looking through parts of the newsfeed for articles.  * Kibozed Groups::              Looking through parts of the newsfeed for articles.
17294  @end menu  @end menu
17295    
17296    
# Line 14219  regexp to match component groups. Line 17312  regexp to match component groups.
17312    
17313  All marks in the virtual group will stick to the articles in the  All marks in the virtual group will stick to the articles in the
17314  component groups.  So if you tick an article in a virtual group, the  component groups.  So if you tick an article in a virtual group, the
17315  article will also be ticked in the component group from whence it came.  article will also be ticked in the component group from whence it
17316  (And vice versa---marks from the component groups will also be shown in  came.  (And vice versa---marks from the component groups will also be
17317  the virtual group.)  shown in the virtual group.).  To create an empty virtual group, run
17318    @kbd{G V} (@code{gnus-group-make-empty-virtual}) in the group buffer
17319    and edit the method regexp with @kbd{M-e}
17320    (@code{gnus-group-edit-group-method})
17321    
17322  Here's an example @code{nnvirtual} method that collects all Andrea Dworkin  Here's an example @code{nnvirtual} method that collects all Andrea Dworkin
17323  newsgroups into one, big, happy newsgroup:  newsgroups into one, big, happy newsgroup:
# Line 14276  there is typically no sure way for the c Line 17372  there is typically no sure way for the c
17372  and in that case @code{nnvirtual} tells Gnus that the article came from a  and in that case @code{nnvirtual} tells Gnus that the article came from a
17373  not-news back end.  (Just to be on the safe side.)  not-news back end.  (Just to be on the safe side.)
17374    
17375  @kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}  @kbd{C-c C-n} in the message buffer will insert the @code{Newsgroups}
17376  line from the article you respond to in these cases.  line from the article you respond to in these cases.
17377    
17378    @code{nnvirtual} groups do not inherit anything but articles and marks
17379    from component groups---group parameters, for instance, are not
17380    inherited.
17381    
17382    
17383  @node Kibozed Groups  @node Kibozed Groups
# Line 14286  line from the article you respond to in Line 17385  line from the article you respond to in
17385  @cindex nnkiboze  @cindex nnkiboze
17386  @cindex kibozing  @cindex kibozing
17387    
17388  @dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of)  @dfn{Kibozing} is defined by the @acronym{OED} as ``grepping through
17389  the news feed''.  @code{nnkiboze} is a back end that will do this for  (parts of) the news feed''.  @code{nnkiboze} is a back end that will
17390  you.  Oh joy!  Now you can grind any @sc{nntp} server down to a halt  do this for you.  Oh joy!  Now you can grind any @acronym{NNTP} server
17391  with useless requests!  Oh happiness!  down to a halt with useless requests!  Oh happiness!
17392    
17393  @kindex G k @r{(Group)}  @kindex G k (Group)
17394  To create a kibozed group, use the @kbd{G k} command in the group  To create a kibozed group, use the @kbd{G k} command in the group
17395  buffer.  buffer.
17396    
17397  The address field of the @code{nnkiboze} method is, as with  The address field of the @code{nnkiboze} method is, as with
17398  @code{nnvirtual}, a regexp to match groups to be ``included'' in the  @code{nnvirtual}, a regexp to match groups to be ``included'' in the
17399  @code{nnkiboze} group.  That's where most similarities between @code{nnkiboze}  @code{nnkiboze} group.  That's where most similarities between
17400  and @code{nnvirtual} end.  @code{nnkiboze} and @code{nnvirtual} end.
17401    
17402  In addition to this regexp detailing component groups, an @code{nnkiboze} group  In addition to this regexp detailing component groups, an
17403  must have a score file to say what articles are to be included in  @code{nnkiboze} group must have a score file to say what articles are
17404  the group (@pxref{Scoring}).  to be included in the group (@pxref{Scoring}).
17405    
17406  @kindex M-x nnkiboze-generate-groups  @kindex M-x nnkiboze-generate-groups
17407  @findex nnkiboze-generate-groups  @findex nnkiboze-generate-groups
17408  You must run @kbd{M-x nnkiboze-generate-groups} after creating the  You must run @kbd{M-x nnkiboze-generate-groups} after creating the
17409  @code{nnkiboze} groups you want to have.  This command will take time.  Lots of  @code{nnkiboze} groups you want to have.  This command will take time.
17410  time.  Oodles and oodles of time.  Gnus has to fetch the headers from  Lots of time.  Oodles and oodles of time.  Gnus has to fetch the
17411  all the articles in all the component groups and run them through the  headers from all the articles in all the component groups and run them
17412  scoring process to determine if there are any articles in the groups  through the scoring process to determine if there are any articles in
17413  that are to be part of the @code{nnkiboze} groups.  the groups that are to be part of the @code{nnkiboze} groups.
17414    
17415  Please limit the number of component groups by using restrictive  Please limit the number of component groups by using restrictive
17416  regexps.  Otherwise your sysadmin may become annoyed with you, and the  regexps.  Otherwise your sysadmin may become annoyed with you, and the
17417  @sc{nntp} site may throw you off and never let you back in again.  @acronym{NNTP} site may throw you off and never let you back in again.
17418  Stranger things have happened.  Stranger things have happened.
17419    
17420  @code{nnkiboze} component groups do not have to be alive---they can be dead,  @code{nnkiboze} component groups do not have to be alive---they can be dead,
# Line 14323  and they can be foreign.  No restriction Line 17422  and they can be foreign.  No restriction
17422    
17423  @vindex nnkiboze-directory  @vindex nnkiboze-directory
17424  The generation of an @code{nnkiboze} group means writing two files in  The generation of an @code{nnkiboze} group means writing two files in
17425  @code{nnkiboze-directory}, which is @file{~/News/} by default.  One  @code{nnkiboze-directory}, which is @file{~/News/kiboze/} by default.
17426  contains the @sc{nov} header lines for all the articles in the group,  One contains the @acronym{NOV} header lines for all the articles in
17427  and the other is an additional @file{.newsrc} file to store information  the group, and the other is an additional @file{.newsrc} file to store
17428  on what groups have been searched through to find component articles.  information on what groups have been searched through to find
17429    component articles.
17430    
17431  Articles marked as read in the @code{nnkiboze} group will have  Articles marked as read in the @code{nnkiboze} group will have
17432  their @sc{nov} lines removed from the @sc{nov} file.  their @acronym{NOV} lines removed from the @acronym{NOV} file.
17433    
17434    
17435  @node Gnus Unplugged  @node Gnus Unplugged
17436  @section Gnus Unplugged  @section Gnus Unplugged
17437  @cindex offline  @cindex offline
17438  @cindex unplugged  @cindex unplugged
17439  @cindex Agent  @cindex agent
17440  @cindex Gnus Agent  @cindex Gnus agent
17441  @cindex Gnus Unplugged  @cindex Gnus unplugged
17442    
17443  In olden times (ca. February '88), people used to run their newsreaders  In olden times (ca. February '88), people used to run their newsreaders
17444  on big machines with permanent connections to the net.  News transport  on big machines with permanent connections to the net.  News transport
# Line 14357  for some years, but doing that's a bore. Line 17457  for some years, but doing that's a bore.
17457  functionality up to the newsreader makes sense if you're the only person  functionality up to the newsreader makes sense if you're the only person
17458  reading news on a machine.  reading news on a machine.
17459    
17460  Using Gnus as an ``offline'' newsreader is quite simple.  Setting up Gnus as an ``offline'' newsreader is quite simple.  In
17461    fact, you don't even have to configure anything.
 @itemize @bullet  
 @item  
 First, set up Gnus as you would do if you were running it on a machine  
 that has full connection to the net.  Go ahead.  I'll still be waiting  
 here.  
   
 @item  
 Then, put the following magical incantation at the end of your  
 @file{.gnus.el} file:  
   
 @lisp  
 (gnus-agentize)  
 @end lisp  
 @end itemize  
   
 That's it.  Gnus is now an ``offline'' newsreader.  
17462    
17463  Of course, to use it as such, you have to learn a few new commands.  Of course, to use it as such, you have to learn a few new commands.
17464    
17465  @menu  @menu
17466  * Agent Basics::           How it all is supposed to work.  * Agent Basics::                How it all is supposed to work.
17467  * Agent Categories::       How to tell the Gnus Agent what to download.  * Agent Categories::            How to tell the Gnus Agent what to download.
17468  * Agent Commands::         New commands for all the buffers.  * Agent Commands::              New commands for all the buffers.
17469  * Agent Expiry::           How to make old articles go away.  * Agent Visuals::               Ways that the agent may effect your summary buffer.
17470  * Agent and IMAP::         How to use the Agent with IMAP.  * Agent as Cache::              The Agent is a big cache too.
17471  * Outgoing Messages::      What happens when you post/mail something?  * Agent Expiry::                How to make old articles go away.
17472  * Agent Variables::        Customizing is fun.  * Agent Regeneration::          How to recover from lost connections and other accidents.
17473  * Example Setup::          An example @file{.gnus.el} file for offline people.  * Agent and IMAP::              How to use the Agent with @acronym{IMAP}.
17474  * Batching Agents::        How to fetch news from a @code{cron} job.  * Outgoing Messages::           What happens when you post/mail something?
17475  * Agent Caveats::          What you think it'll do and what it does.  * Agent Variables::             Customizing is fun.
17476    * Example Setup::               An example @file{~/.gnus.el} file for offline people.
17477    * Batching Agents::             How to fetch news from a @code{cron} job.
17478    * Agent Caveats::               What you think it'll do and what it does.
17479  @end menu  @end menu
17480    
17481    
# Line 14408  connected to the net continuously. Line 17495  connected to the net continuously.
17495  @dfn{Downloading} means fetching things from the net to your local  @dfn{Downloading} means fetching things from the net to your local
17496  machine.  @dfn{Uploading} is doing the opposite.  machine.  @dfn{Uploading} is doing the opposite.
17497    
17498    You know that Gnus gives you all the opportunity you'd ever want for
17499    shooting yourself in the foot.  Some people call it flexibility.  Gnus
17500    is also customizable to a great extent, which means that the user has a
17501    say on how Gnus behaves.  Other newsreaders might unconditionally shoot
17502    you in your foot, but with Gnus, you have a choice!
17503    
17504    Gnus is never really in plugged or unplugged state.  Rather, it applies
17505    that state to each server individually.  This means that some servers
17506    can be plugged while others can be unplugged.  Additionally, some
17507    servers can be ignored by the Agent altogether (which means that
17508    they're kinda like plugged always).
17509    
17510    So when you unplug the Agent and then wonder why is Gnus opening a
17511    connection to the Net, the next step to do is to look whether all
17512    servers are agentized.  If there is an unagentized server, you found
17513    the culprit.
17514    
17515    Another thing is the @dfn{offline} state.  Sometimes, servers aren't
17516    reachable.  When Gnus notices this, it asks you whether you want the
17517    server to be switched to offline state.  If you say yes, then the
17518    server will behave somewhat as if it was unplugged, except that Gnus
17519    will ask you whether you want to switch it back online again.
17520    
17521  Let's take a typical Gnus session using the Agent.  Let's take a typical Gnus session using the Agent.
17522    
17523  @itemize @bullet  @itemize @bullet
17524    
17525  @item  @item
17526    @findex gnus-unplugged
17527  You start Gnus with @code{gnus-unplugged}.  This brings up the Gnus  You start Gnus with @code{gnus-unplugged}.  This brings up the Gnus
17528  Agent in a disconnected state.  You can read all the news that you have  Agent in a disconnected state.  You can read all the news that you have
17529  already fetched while in this mode.  already fetched while in this mode.
# Line 14421  already fetched while in this mode. Line 17532  already fetched while in this mode.
17532  You then decide to see whether any new news has arrived.  You connect  You then decide to see whether any new news has arrived.  You connect
17533  your machine to the net (using PPP or whatever), and then hit @kbd{J j}  your machine to the net (using PPP or whatever), and then hit @kbd{J j}
17534  to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail  to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail
17535  as usual.  To check for new mail in unplugged mode, see (@pxref{Mail  as usual.  To check for new mail in unplugged mode (@pxref{Mail
17536  Source Specifiers}).  Source Specifiers}).
17537    
17538  @item  @item
17539  You can then read the new news immediately, or you can download the news  You can then read the new news immediately, or you can download the
17540  onto your local machine.  If you want to do the latter, you press @kbd{g}  news onto your local machine.  If you want to do the latter, you press
17541  to check if there are any new news and then @kbd{J  @kbd{g} to check if there are any new news and then @kbd{J s} to fetch
17542  s} to fetch all the eligible articles in all the groups.  (To let Gnus  all the eligible articles in all the groups.  (To let Gnus know which
17543  know which articles you want to download, @pxref{Agent Categories}.)  articles you want to download, @pxref{Agent Categories}).
17544    
17545  @item  @item
17546  After fetching the articles, you press @kbd{J j} to make Gnus become  After fetching the articles, you press @kbd{J j} to make Gnus become
# Line 14449  the Agent. Line 17560  the Agent.
17560  Decide which servers should be covered by the Agent.  If you have a mail  Decide which servers should be covered by the Agent.  If you have a mail
17561  back end, it would probably be nonsensical to have it covered by the  back end, it would probably be nonsensical to have it covered by the
17562  Agent.  Go to the server buffer (@kbd{^} in the group buffer) and press  Agent.  Go to the server buffer (@kbd{^} in the group buffer) and press
17563  @kbd{J a} the server (or servers) that you wish to have covered by the  @kbd{J a} on the server (or servers) that you wish to have covered by the
17564  Agent (@pxref{Server Agent Commands}).  This will typically be only the  Agent (@pxref{Server Agent Commands}), or @kbd{J r} on automatically
17565  primary select method, which is listed on the bottom in the buffer.  added servers you do not wish to have covered by the Agent.  By default,
17566    all @code{nntp} and @code{nnimap} servers in @code{gnus-select-method} and
17567    @code{gnus-secondary-select-methods} are agentized.
17568    
17569    @item
17570    Decide on download policy.  It's fairly simple once you decide whether
17571    you are going to use agent categories, topic parameters, and/or group
17572    parameters to implement your policy.  If you're new to gnus, it
17573    is probably best to start with a category, @xref{Agent Categories}.
17574    
17575    Both topic parameters (@pxref{Topic Parameters}) and agent categories
17576    (@pxref{Agent Categories}) provide for setting a policy that applies
17577    to multiple groups.  Which you use is entirely up to you.  Topic
17578    parameters do override categories so, if you mix the two, you'll have
17579    to take that into account.  If you have a few groups that deviate from
17580    your policy, you can use group parameters (@pxref{Group Parameters}) to
17581    configure them.
17582    
17583  @item  @item
17584  Decide on download policy.  @xref{Agent Categories}.  Uhm@dots{} that's it.
   
 @item  
 Uhm... that's it.  
17585  @end itemize  @end itemize
17586    
17587    
# Line 14472  to be somewhat more conservative in choo Line 17596  to be somewhat more conservative in choo
17596  mark the articles for downloading manually if it should turn out that  mark the articles for downloading manually if it should turn out that
17597  you're interested in the articles anyway.  you're interested in the articles anyway.
17598    
17599  The main way to control what is to be downloaded is to create a  One of the more effective methods for controlling what is to be
17600  @dfn{category} and then assign some (or all) groups to this category.  downloaded is to create a @dfn{category} and then assign some (or all)
17601  Groups that do not belong in any other category belong to the  groups to this category.  Groups that do not belong in any other
17602  @code{default} category.  Gnus has its own buffer for creating and  category belong to the @code{default} category.  Gnus has its own
17603  managing categories.  buffer for creating and managing categories.
17604    
17605    If you prefer, you can also use group parameters (@pxref{Group
17606    Parameters}) and topic parameters (@pxref{Topic Parameters}) for an
17607    alternative approach to controlling the agent.  The only real
17608    difference is that categories are specific to the agent (so there is
17609    less to learn) while group and topic parameters include the kitchen
17610    sink.
17611    
17612    Since you can set agent parameters in several different places we have
17613    a rule to decide which source to believe.  This rule specifies that
17614    the parameter sources are checked in the following order: group
17615    parameters, topic parameters, agent category, and finally customizable
17616    variables.  So you can mix all of these sources to produce a wide range
17617    of behavior, just don't blame me if you don't remember where you put
17618    your settings.
17619    
17620  @menu  @menu
17621  * Category Syntax::       What a category looks like.  * Category Syntax::             What a category looks like.
17622  * The Category Buffer::   A buffer for maintaining categories.  * Category Buffer::             A buffer for maintaining categories.
17623  * Category Variables::    Customize'r'Us.  * Category Variables::          Customize'r'Us.
17624  @end menu  @end menu
17625    
17626    
17627  @node Category Syntax  @node Category Syntax
17628  @subsubsection Category Syntax  @subsubsection Category Syntax
17629    
17630  A category consists of two things.  A category consists of a name, the list of groups belonging to the
17631    category, and a number of optional parameters that override the
17632    customizable variables.  The complete list of agent parameters are
17633    listed below.
17634    
17635  @enumerate  @cindex Agent Parameters
17636  @item  @table @code
17637    @item gnus-agent-cat-name
17638    The name of the category.
17639    
17640    @item gnus-agent-cat-groups
17641    The list of groups that are in this category.
17642    
17643    @item gnus-agent-cat-predicate
17644  A predicate which (generally) gives a rough outline of which articles  A predicate which (generally) gives a rough outline of which articles
17645  are eligible for downloading; and  are eligible for downloading; and
17646    
17647  @item  @item gnus-agent-cat-score-file
17648  a score rule which (generally) gives you a finer granularity when  a score rule which (generally) gives you a finer granularity when
17649  deciding what articles to download.  (Note that this @dfn{download  deciding what articles to download.  (Note that this @dfn{download
17650  score} is not necessarily related to normal scores.)  score} is not necessarily related to normal scores.)
17651  @end enumerate  
17652    @item gnus-agent-cat-enable-expiration
17653    a boolean indicating whether the agent should expire old articles in
17654    this group.  Most groups should be expired to conserve disk space.  In
17655    fact, its probably safe to say that the gnus.* hierarchy contains the
17656    only groups that should not be expired.
17657    
17658    @item gnus-agent-cat-days-until-old
17659    an integer indicating the number of days that the agent should wait
17660    before deciding that a read article is safe to expire.
17661    
17662    @item gnus-agent-cat-low-score
17663    an integer that overrides the value of @code{gnus-agent-low-score}.
17664    
17665    @item gnus-agent-cat-high-score
17666    an integer that overrides the value of @code{gnus-agent-high-score}.
17667    
17668    @item gnus-agent-cat-length-when-short
17669    an integer that overrides the value of
17670    @code{gnus-agent-short-article}.
17671    
17672    @item gnus-agent-cat-length-when-long
17673    an integer that overrides the value of @code{gnus-agent-long-article}.
17674    
17675    @c @item gnus-agent-cat-disable-undownloaded-faces
17676    @c a symbol indicating whether the summary buffer should @emph{not} display
17677    @c undownloaded articles using the gnus-summary-*-undownloaded-face
17678    @c faces.  The symbol nil will enable the use of undownloaded faces while
17679    @c all other symbols disable them.
17680    
17681    @item gnus-agent-cat-enable-undownloaded-faces
17682    a symbol indicating whether the summary buffer should display
17683    undownloaded articles using the gnus-summary-*-undownloaded-face
17684    faces.  The symbol nil will disable the use of undownloaded faces while
17685    all other symbols enable them.
17686    @end table
17687    
17688    The name of a category can not be changed once the category has been
17689    created.
17690    
17691    Each category maintains a list of groups that are exclusive members of
17692    that category.  The exclusivity rule is automatically enforced, add a
17693    group to a new category and it is automatically removed from its old
17694    category.
17695    
17696  A predicate in its simplest form can be a single predicate such as  A predicate in its simplest form can be a single predicate such as
17697  @code{true} or @code{false}.  These two will download every available  @code{true} or @code{false}.  These two will download every available
# Line 14546  The available logical operators are @cod Line 17738  The available logical operators are @cod
17738  The following predicates are pre-defined, but if none of these fit what  The following predicates are pre-defined, but if none of these fit what
17739  you want to do, you can write your own.  you want to do, you can write your own.
17740    
17741    When evaluating each of these predicates, the named constant will be
17742    bound to the value determined by calling
17743    @code{gnus-agent-find-parameter} on the appropriate parameter.  For
17744    example, gnus-agent-short-article will be bound to
17745    @code{(gnus-agent-find-parameter group 'agent-short-article)}.  This
17746    means that you can specify a predicate in your category then tune that
17747    predicate to individual groups.
17748    
17749  @table @code  @table @code
17750  @item short  @item short
17751  True iff the article is shorter than @code{gnus-agent-short-article}  True iff the article is shorter than @code{gnus-agent-short-article}
# Line 14600  with the predicate then defined as: Line 17800  with the predicate then defined as:
17800    
17801  or you could append your predicate to the predefined  or you could append your predicate to the predefined
17802  @code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or  @code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
17803  wherever.  (Note: this would have to be at a point *after*  wherever.
 @code{gnus-agent} has been loaded via @code{(gnus-agentize)})  
17804    
17805  @lisp  @lisp
17806    (require 'gnus-agent)
17807  (setq  gnus-category-predicate-alist  (setq  gnus-category-predicate-alist
17808    (append gnus-category-predicate-alist    (append gnus-category-predicate-alist
17809           '((old . my-article-old-p))))           '((old . my-article-old-p))))
17810  @end lisp  @end lisp
17811    
17812  and simply specify your predicate as:  and simply specify your predicate as:
# Line 14620  misconfigured systems/mailers out there Line 17820  misconfigured systems/mailers out there
17820  always a reliable indication of when it was posted.  Hell, some people  always a reliable indication of when it was posted.  Hell, some people
17821  just don't give a damn.  just don't give a damn.
17822    
17823  The above predicates apply to *all* the groups which belong to the  The above predicates apply to @emph{all} the groups which belong to the
17824  category.  However, if you wish to have a specific predicate for an  category.  However, if you wish to have a specific predicate for an
17825  individual group within a category, or you're just too lazy to set up a  individual group within a category, or you're just too lazy to set up a
17826  new category, you can enter a group's individual predicate in it's group  new category, you can enter a group's individual predicate in its group
17827  parameters like so:  parameters like so:
17828    
17829  @lisp  @lisp
17830  (agent-predicate . short)  (agent-predicate . short)
17831  @end lisp  @end lisp
17832    
17833  This is the group parameter equivalent of the agent category default.  This is the group/topic parameter equivalent of the agent category default.
17834  Note that when specifying a single word predicate like this, the  Note that when specifying a single word predicate like this, the
17835  @code{agent-predicate} specification must be in dotted pair notation.  @code{agent-predicate} specification must be in dotted pair notation.
17836    
# Line 14664  three forms: Line 17864  three forms:
17864  @item  @item
17865  Score rule  Score rule
17866    
17867  This has the same syntax as a normal gnus score file except only a  This has the same syntax as a normal Gnus score file except only a
17868  subset of scoring keywords are available as mentioned above.  subset of scoring keywords are available as mentioned above.
17869    
17870  example:  example:
# Line 14681  Category specification Line 17881  Category specification
17881  @end lisp  @end lisp
17882    
17883  @item  @item
17884  Group Parameter specification  Group/Topic Parameter specification
17885    
17886  @lisp  @lisp
17887  (agent-score ("from"  (agent-score ("from"
# Line 14696  Again, note the omission of the outermos Line 17896  Again, note the omission of the outermos
17896  @item  @item
17897  Agent score file  Agent score file
17898    
17899  These score files must *only* contain the permitted scoring keywords  These score files must @emph{only} contain the permitted scoring
17900  stated above.  keywords stated above.
17901    
17902  example:  example:
17903    
# Line 14736  your desired @code{downloading} criteria Line 17936  your desired @code{downloading} criteria
17936    
17937  These directives in either the category definition or a group's  These directives in either the category definition or a group's
17938  parameters will cause the agent to read in all the applicable score  parameters will cause the agent to read in all the applicable score
17939  files for a group, *filtering out* those sections that do not  files for a group, @emph{filtering out} those sections that do not
17940  relate to one of the permitted subset of scoring keywords.  relate to one of the permitted subset of scoring keywords.
17941    
17942  @itemize @bullet  @itemize @bullet
# Line 14756  Group Parameter specification Line 17956  Group Parameter specification
17956  @end itemize  @end itemize
17957  @end enumerate  @end enumerate
17958    
17959  @node The Category Buffer  @node Category Buffer
17960  @subsubsection The Category Buffer  @subsubsection Category Buffer
17961    
17962  You'd normally do all category maintenance from the category buffer.  You'd normally do all category maintenance from the category buffer.
17963  When you enter it for the first time (with the @kbd{J c} command from  When you enter it for the first time (with the @kbd{J c} command from
# Line 14771  The following commands are available in Line 17971  The following commands are available in
17971  @findex gnus-category-exit  @findex gnus-category-exit
17972  Return to the group buffer (@code{gnus-category-exit}).  Return to the group buffer (@code{gnus-category-exit}).
17973    
17974    @item e
17975    @kindex e (Category)
17976    @findex gnus-category-customize-category
17977    Use a customization buffer to set all of the selected category's
17978    parameters at one time (@code{gnus-category-customize-category}).
17979    
17980  @item k  @item k
17981  @kindex k (Category)  @kindex k (Category)
17982  @findex gnus-category-kill  @findex gnus-category-kill
# Line 14854  Articles that have a score lower than th Line 18060  Articles that have a score lower than th
18060  Articles that have a score higher than this have a high score.  Default  Articles that have a score higher than this have a high score.  Default
18061  0.  0.
18062    
18063    @item gnus-agent-expire-days
18064    @vindex gnus-agent-expire-days
18065    The number of days that a @samp{read} article must stay in the agent's
18066    local disk before becoming eligible for expiration (While the name is
18067    the same, this doesn't mean expiring the article on the server.  It
18068    just means deleting the local copy of the article).  What is also
18069    important to understand is that the counter starts with the time the
18070    article was written to the local disk and not the time the article was
18071    read.
18072    Default 7.
18073    
18074    @item gnus-agent-enable-expiration
18075    @vindex gnus-agent-enable-expiration
18076    Determines whether articles in a group are, by default, expired or
18077    retained indefinitely.  The default is @code{ENABLE} which means that
18078    you'll have to disable expiration when desired.  On the other hand,
18079    you could set this to @code{DISABLE}.  In that case, you would then
18080    have to enable expiration in selected groups.
18081    
18082  @end table  @end table
18083    
18084    
18085  @node Agent Commands  @node Agent Commands
18086  @subsection Agent Commands  @subsection Agent Commands
18087    @findex gnus-agent-toggle-plugged
18088    @kindex J j (Agent)
18089    
18090  All the Gnus Agent commands are on the @kbd{J} submap.  The @kbd{J j}  All the Gnus Agent commands are on the @kbd{J} submap.  The @kbd{J j}
18091  (@code{gnus-agent-toggle-plugged} command works in all modes, and  (@code{gnus-agent-toggle-plugged}) command works in all modes, and
18092  toggles the plugged/unplugged state of the Gnus Agent.  toggles the plugged/unplugged state of the Gnus Agent.
18093    
18094    
18095  @menu  @menu
18096  * Group Agent Commands::  * Group Agent Commands::        Configure groups and fetch their contents.
18097  * Summary Agent Commands::  * Summary Agent Commands::      Manually select then fetch specific articles.
18098  * Server Agent Commands::  * Server Agent Commands::       Select the servers that are supported by the agent.
18099  @end menu  @end menu
18100    
 You can run a complete batch fetch from the command line with the  
 following incantation:  
   
 @cindex gnus-agent-batch-fetch  
 @example  
 $ emacs -batch -l ~/.gnus.el -f gnus-agent-batch-fetch  
 @end example  
18101    
18102    
18103    
# Line 14904  Fetch all eligible articles in all group Line 18124  Fetch all eligible articles in all group
18124    
18125  @item J S  @item J S
18126  @kindex J S (Agent Group)  @kindex J S (Agent Group)
18127  @findex gnus-group-send-drafts  @findex gnus-group-send-queue
18128  Send all sendable messages in the draft group  Send all sendable messages in the queue group
18129  (@code{gnus-group-send-drafts}).  @xref{Drafts}.  (@code{gnus-group-send-queue}).  @xref{Drafts}.
18130    
18131  @item J a  @item J a
18132  @kindex J a (Agent Group)  @kindex J a (Agent Group)
# Line 14946  Mark the article for downloading (@code{ Line 18166  Mark the article for downloading (@code{
18166  Remove the downloading mark from the article  Remove the downloading mark from the article
18167  (@code{gnus-agent-unmark-article}).  (@code{gnus-agent-unmark-article}).
18168    
18169    @cindex %
18170  @item @@  @item @@
18171  @kindex @@ (Agent Summary)  @kindex @@ (Agent Summary)
18172  @findex gnus-agent-toggle-mark  @findex gnus-agent-toggle-mark
18173  Toggle whether to download the article (@code{gnus-agent-toggle-mark}).  Toggle whether to download the article
18174    (@code{gnus-agent-toggle-mark}).  The download mark is @samp{%} by
18175    default.
18176    
18177  @item J c  @item J c
18178  @kindex J c (Agent Summary)  @kindex J c (Agent Summary)
18179  @findex gnus-agent-catchup  @findex gnus-agent-catchup
18180  Mark all undownloaded articles as read (@code{gnus-agent-catchup}).  Mark all articles as read (@code{gnus-agent-catchup}) that are neither cached, downloaded, nor downloadable.
18181    
18182    @item J S
18183    @kindex J S (Agent Summary)
18184    @findex gnus-agent-fetch-group
18185    Download all eligible (@pxref{Agent Categories}) articles in this group.
18186    (@code{gnus-agent-fetch-group}).
18187    
18188    @item J s
18189    @kindex J s (Agent Summary)
18190    @findex gnus-agent-fetch-series
18191    Download all processable articles in this group.
18192    (@code{gnus-agent-fetch-series}).
18193    
18194    @item J u
18195    @kindex J u (Agent Summary)
18196    @findex gnus-agent-summary-fetch-group
18197    Download all downloadable articles in the current group
18198    (@code{gnus-agent-summary-fetch-group}).
18199    
18200  @end table  @end table
18201    
# Line 14978  Agent (@code{gnus-agent-remove-server}). Line 18219  Agent (@code{gnus-agent-remove-server}).
18219  @end table  @end table
18220    
18221    
18222    @node Agent Visuals
18223    @subsection Agent Visuals
18224    
18225    If you open a summary while unplugged and, Gnus knows from the group's
18226    active range that there are more articles than the headers currently
18227    stored in the Agent, you may see some articles whose subject looks
18228    something like @samp{[Undownloaded article #####]}.  These are
18229    placeholders for the missing headers.  Aside from setting a mark,
18230    there is not much that can be done with one of these placeholders.
18231    When Gnus finally gets a chance to fetch the group's headers, the
18232    placeholders will automatically be replaced by the actual headers.
18233    You can configure the summary buffer's maneuvering to skip over the
18234    placeholders if you care (See @code{gnus-auto-goto-ignores}).
18235    
18236    While it may be obvious to all, the only headers and articles
18237    available while unplugged are those headers and articles that were
18238    fetched into the Agent while previously plugged.  To put it another
18239    way, "If you forget to fetch something while plugged, you might have a
18240    less than satisfying unplugged session".  For this reason, the Agent
18241    adds two visual effects to your summary buffer.  These effects display
18242    the download status of each article so that you always know which
18243    articles will be available when unplugged.
18244    
18245    The first visual effect is the @samp{%O} spec.  If you customize
18246    @code{gnus-summary-line-format} to include this specifier, you will add
18247    a single character field that indicates an article's download status.
18248    Articles that have been fetched into either the Agent or the Cache,
18249    will display @code{gnus-downloaded-mark} (defaults to @samp{+}).  All
18250    other articles will display @code{gnus-undownloaded-mark} (defaults to
18251    @samp{-}).  If you open a group that has not been agentized, a space
18252    (@samp{ }) will be displayed.
18253    
18254    The second visual effect are the undownloaded faces.  The faces, there
18255    are three indicating the article's score (low, normal, high), seem to
18256    result in a love/hate response from many Gnus users.  The problem is
18257    that the face selection is controlled by a list of condition tests and
18258    face names (See @code{gnus-summary-highlight}).  Each condition is
18259    tested in the order in which it appears in the list so early
18260    conditions have precedence over later conditions.  All of this means
18261    that, if you tick an undownloaded article, the article will continue
18262    to be displayed in the undownloaded face rather than the ticked face.
18263    
18264    If you use the Agent as a cache (to avoid downloading the same article
18265    each time you visit it or to minimize your connection time), the
18266    undownloaded face will probably seem like a good idea.  The reason
18267    being that you do all of our work (marking, reading, deleting) with
18268    downloaded articles so the normal faces always appear.
18269    
18270    For occasional Agent users, the undownloaded faces may appear to be an
18271    absolutely horrible idea.  The issue being that, since most of their
18272    articles have not been fetched into the Agent, most of the normal
18273    faces will be obscured by the undownloaded faces.  If this is your
18274    situation, you have two choices available.  First, you can completely
18275    disable the undownload faces by customizing
18276    @code{gnus-summary-highlight} to delete the three cons-cells that
18277    refer to the @code{gnus-summary-*-undownloaded-face} faces.  Second, if
18278    you prefer to take a more fine-grained approach, you may set the
18279    @code{agent-disable-undownloaded-faces} group parameter to t.  This
18280    parameter, like all other agent parameters, may be set on an Agent
18281    Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
18282    Parameters}), or an individual group (@pxref{Group Parameters}).
18283    
18284    @node Agent as Cache
18285    @subsection Agent as Cache
18286    
18287    When Gnus is plugged, it is not efficient to download headers or
18288    articles from the server again, if they are already stored in the
18289    Agent.  So, Gnus normally only downloads headers once, and stores them
18290    in the Agent.  These headers are later used when generating the summary
18291    buffer, regardless of whether you are plugged or unplugged.  Articles
18292    are not cached in the Agent by default though (that would potentially
18293    consume lots of disk space), but if you have already downloaded an
18294    article into the Agent, Gnus will not download the article from the
18295    server again but use the locally stored copy instead.
18296    
18297    If you so desire, you can configure the agent (see @code{gnus-agent-cache}
18298    @pxref{Agent Variables}) to always download headers and articles while
18299    plugged.  Gnus will almost certainly be slower, but it will be kept
18300    synchronized with the server.  That last point probably won't make any
18301    sense if you are using a nntp or nnimap back end.
18302    
18303  @node Agent Expiry  @node Agent Expiry
18304  @subsection Agent Expiry  @subsection Agent Expiry
18305    
18306  @vindex gnus-agent-expire-days  @vindex gnus-agent-expire-days
18307  @findex gnus-agent-expire  @findex gnus-agent-expire
18308  @kindex M-x gnus-agent-expire  @kindex M-x gnus-agent-expire
18309  @cindex Agent expiry  @kindex M-x gnus-agent-expire-group
18310  @cindex Gnus Agent expiry  @findex gnus-agent-expire-group
18311    @cindex agent expiry
18312    @cindex Gnus agent expiry
18313  @cindex expiry  @cindex expiry
18314    
18315  @code{nnagent} doesn't handle expiry.  Instead, there's a special  The Agent back end, @code{nnagent}, doesn't handle expiry.  Well, at
18316  @code{gnus-agent-expire} command that will expire all read articles that  least it doesn't handle it like other back ends.  Instead, there are
18317  are older than @code{gnus-agent-expire-days} days.  It can be run  special @code{gnus-agent-expire} and @code{gnus-agent-expire-group}
18318  whenever you feel that you're running out of space.  It's not  commands that will expire all read articles that are older than
18319  particularly fast or efficient, and it's not a particularly good idea to  @code{gnus-agent-expire-days} days.  They can be run whenever you feel
18320  interrupt it (with @kbd{C-g} or anything else) once you've started it.  that you're running out of space.  Neither are particularly fast or
18321    efficient, and it's not a particularly good idea to interrupt them (with
18322    @kbd{C-g} or anything else) once you've started one of them.
18323    
18324    Note that other functions, e.g. @code{gnus-request-expire-articles},
18325    might run @code{gnus-agent-expire} for you to keep the agent
18326    synchronized with the group.
18327    
18328  @vindex gnus-agent-expire-all  The agent parameter @code{agent-enable-expiration} may be used to
18329  if @code{gnus-agent-expire-all} is non-@code{nil}, this command will  prevent expiration in selected groups.
 expire all articles---unread, read, ticked and dormant.  If @code{nil}  
 (which is the default), only read articles are eligible for expiry, and  
 unread, ticked and dormant articles will be kept indefinitely.  
18330    
18331    @vindex gnus-agent-expire-all
18332    If @code{gnus-agent-expire-all} is non-@code{nil}, the agent
18333    expiration commands will expire all articles---unread, read, ticked
18334    and dormant.  If @code{nil} (which is the default), only read articles
18335    are eligible for expiry, and unread, ticked and dormant articles will
18336    be kept indefinitely.
18337    
18338    If you find that some articles eligible for expiry are never expired,
18339    perhaps some Gnus Agent files are corrupted.  There's are special
18340    commands, @code{gnus-agent-regenerate} and
18341    @code{gnus-agent-regenerate-group}, to fix possible problems.
18342    
18343    @node Agent Regeneration
18344    @subsection Agent Regeneration
18345    
18346    @cindex agent regeneration
18347    @cindex Gnus agent regeneration
18348    @cindex regeneration
18349    
18350    The local data structures used by @code{nnagent} may become corrupted
18351    due to certain exceptional conditions.  When this happens,
18352    @code{nnagent} functionality may degrade or even fail.  The solution
18353    to this problem is to repair the local data structures by removing all
18354    internal inconsistencies.
18355    
18356    For example, if your connection to your server is lost while
18357    downloaded articles into the agent, the local data structures will not
18358    know about articles successfully downloaded prior to the connection
18359    failure.  Running @code{gnus-agent-regenerate} or
18360    @code{gnus-agent-regenerate-group} will update the data structures
18361    such that you don't need to download these articles a second time.
18362    
18363    @findex gnus-agent-regenerate
18364    @kindex M-x gnus-agent-regenerate
18365    The command @code{gnus-agent-regenerate} will perform
18366    @code{gnus-agent-regenerate-group} on every agentized group.  While
18367    you can run @code{gnus-agent-regenerate} in any buffer, it is strongly
18368    recommended that you first close all summary buffers.
18369    
18370    @findex gnus-agent-regenerate-group
18371    @kindex M-x gnus-agent-regenerate-group
18372    The command @code{gnus-agent-regenerate-group} uses the local copies
18373    of individual articles to repair the local @acronym{NOV}(header) database.  It
18374    then updates the internal data structures that document which articles
18375    are stored locally.  An optional argument will mark articles in the
18376    agent as unread.
18377    
18378  @node Agent and IMAP  @node Agent and IMAP
18379  @subsection Agent and IMAP  @subsection Agent and IMAP
18380    
18381  The Agent work with any Gnus back end, including nnimap.  However,  The Agent works with any Gnus back end, including nnimap.  However,
18382  since there are some conceptual differences between @sc{nntp} and  since there are some conceptual differences between @acronym{NNTP} and
18383  @sc{imap}, this section (should) provide you with some information to  @acronym{IMAP}, this section (should) provide you with some information to
18384  make Gnus Agent work smoother as a @sc{imap} Disconnected Mode client.  make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client.
18385    
18386  The first thing to keep in mind is that all flags (read, ticked, etc)  The first thing to keep in mind is that all flags (read, ticked, etc)
18387  are kept on the @sc{imap} server, rather than in @file{.newsrc} as is the  are kept on the @acronym{IMAP} server, rather than in @file{.newsrc} as is the
18388  case for nntp.  Thus Gnus need to remember flag changes when  case for nntp.  Thus Gnus need to remember flag changes when
18389  disconnected, and synchronize these flags when you plug back in.  disconnected, and synchronize these flags when you plug back in.
18390    
18391  Gnus keep track of flag changes when reading nnimap groups under the  Gnus keeps track of flag changes when reading nnimap groups under the
18392  Agent by default.  When you plug back in, by default Gnus will check if  Agent.  When you plug back in, Gnus will check if you have any changed
18393  you have any changed any flags and ask if you wish to synchronize these  any flags and ask if you wish to synchronize these with the server.
18394  with the server.  This behavior is customizable with  The behavior is customizable by @code{gnus-agent-synchronize-flags}.
 @code{gnus-agent-synchronize-flags}.  
18395    
18396  @vindex gnus-agent-synchronize-flags  @vindex gnus-agent-synchronize-flags
18397  If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will  If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
18398  never automatically synchronize flags.  If it is @code{ask}, the  never automatically synchronize flags.  If it is @code{ask}, which is
18399  default, the Agent will check if you made any changes and if so ask if  the default, the Agent will check if you made any changes and if so
18400  you wish to synchronize these when you re-connect.  If it has any other  ask if you wish to synchronize these when you re-connect.  If it has
18401  value, all flags will be synchronized automatically.  any other value, all flags will be synchronized automatically.
18402    
18403  If you do not wish to automatically synchronize flags when you  If you do not wish to synchronize flags automatically when you
18404  re-connect, this can be done manually with the  re-connect, you can do it manually with the
18405  @code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}  @code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}
18406  in the group buffer by default.  in the group buffer.
18407    
18408  Some things are currently not implemented in the Agent that you'd might  Some things are currently not implemented in the Agent that you'd might
18409  expect from a disconnected @sc{imap} client, including:  expect from a disconnected @acronym{IMAP} client, including:
18410    
18411  @itemize @bullet  @itemize @bullet
18412    
# Line 15046  Creating/deleting nnimap groups when unp Line 18418  Creating/deleting nnimap groups when unp
18418    
18419  @end itemize  @end itemize
18420    
18421  Technical note: the synchronization algorithm does not work by "pushing"  Technical note: the synchronization algorithm does not work by ``pushing''
18422  all local flags to the server, but rather incrementally update the  all local flags to the server, but rather incrementally update the
18423  server view of flags by changing only those flags that were changed by  server view of flags by changing only those flags that were changed by
18424  the user.  Thus, if you set one flag on a article, quit the group and  the user.  Thus, if you set one flag on an article, quit the group and
18425  re-select the group and remove the flag; the flag will be set and  re-select the group and remove the flag; the flag will be set and
18426  removed from the server when you "synchronize".  The queued flag  removed from the server when you ``synchronize''.  The queued flag
18427  operations can be found in the per-server @code{flags} file in the Agent  operations can be found in the per-server @code{flags} file in the Agent
18428  directory.  It's emptied when you synchronize flags.  directory.  It's emptied when you synchronize flags.
18429    
# Line 15060  directory.  It's emptied when you synchr Line 18432  directory.  It's emptied when you synchr
18432  @subsection Outgoing Messages  @subsection Outgoing Messages
18433    
18434  When Gnus is unplugged, all outgoing messages (both mail and news) are  When Gnus is unplugged, all outgoing messages (both mail and news) are
18435  stored in the draft groups (@pxref{Drafts}).  You can view them there  stored in the draft group ``queue'' (@pxref{Drafts}).  You can view
18436  after posting, and edit them at will.  them there after posting, and edit them at will.
18437    
18438  When Gnus is plugged again, you can send the messages either from the  When Gnus is plugged again, you can send the messages either from the
18439  draft group with the special commands available there, or you can use  draft group with the special commands available there, or you can use
# Line 15094  Hook run when connecting to the network. Line 18466  Hook run when connecting to the network.
18466  @vindex gnus-agent-unplugged-hook  @vindex gnus-agent-unplugged-hook
18467  Hook run when disconnecting from the network.  Hook run when disconnecting from the network.
18468    
18469    @item gnus-agent-fetched-hook
18470    @vindex gnus-agent-fetched-hook
18471    Hook run when finished fetching articles.
18472    
18473    @item gnus-agent-cache
18474    @vindex gnus-agent-cache
18475    Variable to control whether use the locally stored @acronym{NOV} and
18476    articles when plugged, e.g. essentially using the Agent as a cache.
18477    The default is non-@code{nil}, which means to use the Agent as a cache.
18478    
18479    @item gnus-agent-go-online
18480    @vindex gnus-agent-go-online
18481    If @code{gnus-agent-go-online} is @code{nil}, the Agent will never
18482    automatically switch offline servers into online status.  If it is
18483    @code{ask}, the default, the Agent will ask if you wish to switch
18484    offline servers into online status when you re-connect.  If it has any
18485    other value, all offline servers will be automatically switched into
18486    online status.
18487    
18488    @item gnus-agent-mark-unread-after-downloaded
18489    @vindex gnus-agent-mark-unread-after-downloaded
18490    If @code{gnus-agent-mark-unread-after-downloaded} is non-@code{nil},
18491    mark articles as unread after downloading.  This is usually a safe
18492    thing to do as the newly downloaded article has obviously not been
18493    read.  The default is t.
18494    
18495    @item gnus-agent-consider-all-articles
18496    @vindex gnus-agent-consider-all-articles
18497    If @code{gnus-agent-consider-all-articles} is non-@code{nil}, the
18498    agent will let the agent predicate decide whether articles need to be
18499    downloaded or not, for all articles.  When @code{nil}, the default,
18500    the agent will only let the predicate decide whether unread articles
18501    are downloaded or not.  If you enable this, you may also want to look
18502    into the agent expiry settings (@pxref{Category Variables}), so that
18503    the agent doesn't download articles which the agent will later expire,
18504    over and over again.
18505    
18506    @item gnus-agent-max-fetch-size
18507    @vindex gnus-agent-max-fetch-size
18508    The agent fetches articles into a temporary buffer prior to parsing
18509    them into individual files.  To avoid exceeding the max. buffer size,
18510    the agent alternates between fetching and parsing until all articles
18511    have been fetched.  @code{gnus-agent-max-fetch-size} provides a size
18512    limit to control how often the cycling occurs.  A large value improves
18513    performance.  A small value minimizes the time lost should the
18514    connection be lost while fetching (You may need to run
18515    @code{gnus-agent-regenerate-group} to update the group's state.
18516    However, all articles parsed prior to loosing the connection will be
18517    available while unplugged).  The default is 10M so it is unusual to
18518    see any cycling.
18519    
18520    @item gnus-server-unopen-status
18521    @vindex gnus-server-unopen-status
18522    Perhaps not an Agent variable, but closely related to the Agent, this
18523    variable says what will happen if Gnus cannot open a server.  If the
18524    Agent is enabled, the default, @code{nil}, makes Gnus ask the user
18525    whether to deny the server or whether to unplug the agent.  If the
18526    Agent is disabled, Gnus always simply deny the server.  Other choices
18527    for this variable include @code{denied} and @code{offline} the latter
18528    is only valid if the Agent is used.
18529    
18530    @item gnus-auto-goto-ignores
18531    @vindex gnus-auto-goto-ignores
18532    Another variable that isn't an Agent variable, yet so closely related
18533    that most will look for it here, this variable tells the summary
18534    buffer how to maneuver around undownloaded (only headers stored in the
18535    agent) and unfetched (neither article nor headers stored) articles.
18536    
18537    The legal values are @code{nil} (maneuver to any article),
18538    @code{undownloaded} (maneuvering while unplugged ignores articles that
18539    have not been fetched), @code{always-undownloaded} (maneuvering always
18540    ignores articles that have not been fetched), @code{unfetched}
18541    (maneuvering ignores articles whose headers have not been fetched).
18542    
18543    @item gnus-agent-auto-agentize-methods
18544    @vindex gnus-agent-auto-agentize-methods
18545    If you have never used the Agent before (or more technically, if
18546    @file{~/News/agent/lib/servers} does not exist), Gnus will
18547    automatically agentize a few servers for you.  This variable control
18548    which backends should be auto-agentized.  It is typically only useful
18549    to agentize remote backends.  The auto-agentizing has the same effect
18550    as running @kbd{J a} on the servers (@pxref{Server Agent Commands}).
18551    If the file exist, you must manage the servers manually by adding or
18552    removing them, this variable is only applicable the first time you
18553    start Gnus.  The default is @samp{(nntp nnimap)}.
18554    
18555  @end table  @end table
18556    
18557    
# Line 15102  Hook run when disconnecting from the net Line 18560  Hook run when disconnecting from the net
18560    
18561  If you don't want to read this manual, and you have a fairly standard  If you don't want to read this manual, and you have a fairly standard
18562  setup, you may be able to use something like the following as your  setup, you may be able to use something like the following as your
18563  @file{.gnus.el} file to get started.  @file{~/.gnus.el} file to get started.
18564    
18565  @lisp  @lisp
18566  ;;; Define how Gnus is to fetch news.  We do this over @sc{nntp}  ;;; @r{Define how Gnus is to fetch news.  We do this over @acronym{NNTP}}
18567  ;;; from your ISP's server.  ;;; @r{from your ISP's server.}
18568  (setq gnus-select-method '(nntp "news.your-isp.com"))  (setq gnus-select-method '(nntp "news.your-isp.com"))
18569    
18570  ;;; Define how Gnus is to read your mail.  We read mail from  ;;; @r{Define how Gnus is to read your mail.  We read mail from}
18571  ;;; your ISP's POP server.  ;;; @r{your ISP's @acronym{POP} server.}
18572  (setq mail-sources '((pop :server "pop.your-isp.com")))  (setq mail-sources '((pop :server "pop.your-isp.com")))
18573    
18574  ;;; Say how Gnus is to store the mail.  We use nnml groups.  ;;; @r{Say how Gnus is to store the mail.  We use nnml groups.}
18575  (setq gnus-secondary-select-methods '((nnml "")))  (setq gnus-secondary-select-methods '((nnml "")))
18576    
18577  ;;; Make Gnus into an offline newsreader.  ;;; @r{Make Gnus into an offline newsreader.}
18578  (gnus-agentize)  ;;; (gnus-agentize) ; @r{The obsolete setting.}
18579    ;;; (setq gnus-agent t) ; @r{Now the default.}
18580  @end lisp  @end lisp
18581    
18582  That should be it, basically.  Put that in your @file{~/.gnus.el} file,  That should be it, basically.  Put that in your @file{~/.gnus.el} file,
# Line 15127  gnus}. Line 18586  gnus}.
18586  If this is the first time you've run Gnus, you will be subscribed  If this is the first time you've run Gnus, you will be subscribed
18587  automatically to a few default newsgroups.  You'll probably want to  automatically to a few default newsgroups.  You'll probably want to
18588  subscribe to more groups, and to do that, you have to query the  subscribe to more groups, and to do that, you have to query the
18589  @sc{nntp} server for a complete list of groups with the @kbd{A A}  @acronym{NNTP} server for a complete list of groups with the @kbd{A A}
18590  command.  This usually takes quite a while, but you only have to do it  command.  This usually takes quite a while, but you only have to do it
18591  once.  once.
18592    
# Line 15144  find out which of the other gazillion th Line 18603  find out which of the other gazillion th
18603    
18604  @node Batching Agents  @node Batching Agents
18605  @subsection Batching Agents  @subsection Batching Agents
18606    @findex gnus-agent-batch
18607    
18608  Having the Gnus Agent fetch articles (and post whatever messages you've  Having the Gnus Agent fetch articles (and post whatever messages you've
18609  written) is quite easy once you've gotten things set up properly.  The  written) is quite easy once you've gotten things set up properly.  The
18610  following shell script will do everything that is necessary:  following shell script will do everything that is necessary:
18611    
18612    You can run a complete batch command from the command line with the
18613    following incantation:
18614    
18615  @example  @example
18616  #!/bin/sh  #!/bin/sh
18617  emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null  emacs -batch -l ~/.emacs -f -l ~/.gnus.el gnus-agent-batch >/dev/null 2>&1
18618  @end example  @end example
18619    
18620    
# Line 15163  newsreaders.  Here are some common quest Line 18626  newsreaders.  Here are some common quest
18626  may ask:  may ask:
18627    
18628  @table @dfn  @table @dfn
18629  @item If I read an article while plugged, do they get entered into the  @item If I read an article while plugged, do they get entered into the Agent?
 Agent?  
18630    
18631  @strong{No.}  @strong{No}.  If you want this behaviour, add
18632    @code{gnus-agent-fetch-selected-article} to
18633    @code{gnus-select-article-hook}.
18634    
18635  @item If I read an article while plugged, and the article already exists  @item If I read an article while plugged, and the article already exists in
18636  in the Agent, will it get downloaded once more?  the Agent, will it get downloaded once more?
18637    
18638  @strong{Yes.}  @strong{No}, unless @code{gnus-agent-cache} is @code{nil}.
18639    
18640  @end table  @end table
18641    
18642  In short, when Gnus is unplugged, it only looks into the locally stored  In short, when Gnus is unplugged, it only looks into the locally stored
18643  articles; when it's plugged, it only talks to your ISP.  articles; when it's plugged, it talks to your ISP and may also use the
18644    locally stored articles.
18645    
18646    
18647  @node Scoring  @node Scoring
# Line 15207  temporary and have not been used for, sa Line 18672  temporary and have not been used for, sa
18672  silently to help keep the sizes of the score files down.  silently to help keep the sizes of the score files down.
18673    
18674  @menu  @menu
18675  * Summary Score Commands::   Adding score entries for the current group.  * Summary Score Commands::      Adding score entries for the current group.
18676  * Group Score Commands::     General score commands.  * Group Score Commands::        General score commands.
18677  * Score Variables::          Customize your scoring.  (My, what terminology).  * Score Variables::             Customize your scoring.  (My, what terminology).
18678  * Score File Format::        What a score file may contain.  * Score File Format::           What a score file may contain.
18679  * Score File Editing::       You can edit score files by hand as well.  * Score File Editing::          You can edit score files by hand as well.
18680  * Adaptive Scoring::         Big Sister Gnus knows what you read.  * Adaptive Scoring::            Big Sister Gnus knows what you read.
18681  * Home Score File::          How to say where new score entries are to go.  * Home Score File::             How to say where new score entries are to go.
18682  * Followups To Yourself::    Having Gnus notice when people answer you.  * Followups To Yourself::       Having Gnus notice when people answer you.
18683  * Scoring Tips::             How to score effectively.  * Scoring On Other Headers::    Scoring on non-standard headers.
18684  * Reverse Scoring::          That problem child of old is not problem.  * Scoring Tips::                How to score effectively.
18685  * Global Score Files::       Earth-spanning, ear-splitting score files.  * Reverse Scoring::             That problem child of old is not problem.
18686  * Kill Files::               They are still here, but they can be ignored.  * Global Score Files::          Earth-spanning, ear-splitting score files.
18687  * Converting Kill Files::    Translating kill files to score files.  * Kill Files::                  They are still here, but they can be ignored.
18688  * GroupLens::                Getting predictions on what you like to read.  * Converting Kill Files::       Translating kill files to score files.
18689  * Advanced Scoring::         Using logical expressions to build score rules.  * GroupLens::                   Getting predictions on what you like to read.
18690  * Score Decays::             It can be useful to let scores wither away.  * Advanced Scoring::            Using logical expressions to build score rules.
18691    * Score Decays::                It can be useful to let scores wither away.
18692  @end menu  @end menu
18693    
18694    
# Line 15246  General score commands that don't actual Line 18712  General score commands that don't actual
18712  @table @kbd  @table @kbd
18713    
18714  @item V s  @item V s
18715  @kindex V s @r{(Summary)}  @kindex V s (Summary)
18716  @findex gnus-summary-set-score  @findex gnus-summary-set-score
18717  Set the score of the current article (@code{gnus-summary-set-score}).  Set the score of the current article (@code{gnus-summary-set-score}).
18718    
18719  @item V S  @item V S
18720  @kindex V S @r{(Summary)}  @kindex V S (Summary)
18721  @findex gnus-summary-current-score  @findex gnus-summary-current-score
18722  Display the score of the current article  Display the score of the current article
18723  (@code{gnus-summary-current-score}).  (@code{gnus-summary-current-score}).
18724    
18725  @item V t  @item V t
18726  @kindex V t @r{(Summary)}  @kindex V t (Summary)
18727  @findex gnus-score-find-trace  @findex gnus-score-find-trace
18728  Display all score rules that have been used on the current article  Display all score rules that have been used on the current article
18729  (@code{gnus-score-find-trace}).  (@code{gnus-score-find-trace}).  In the @code{*Score Trace*} buffer, you
18730    may type @kbd{e} to edit score file corresponding to the score rule on
18731    current line and @kbd{f} to format (@code{gnus-score-pretty-print}) the
18732    score file and edit it.
18733    
18734    @item V w
18735    @kindex V w (Summary)
18736    @findex gnus-score-find-favourite-words
18737    List words used in scoring (@code{gnus-score-find-favourite-words}).
18738    
18739  @item V R  @item V R
18740  @kindex V R @r{(Summary)}  @kindex V R (Summary)
18741  @findex gnus-summary-rescore  @findex gnus-summary-rescore
18742  Run the current summary through the scoring process  Run the current summary through the scoring process
18743  (@code{gnus-summary-rescore}).  This might be useful if you're playing  (@code{gnus-summary-rescore}).  This might be useful if you're playing
# Line 15271  around with your score files behind Gnus Line 18745  around with your score files behind Gnus
18745  effect you're having.  effect you're having.
18746    
18747  @item V c  @item V c
18748  @kindex V c @r{(Summary)}  @kindex V c (Summary)
18749  @findex gnus-score-change-score-file  @findex gnus-score-change-score-file
18750  Make a different score file the current  Make a different score file the current
18751  (@code{gnus-score-change-score-file}).  (@code{gnus-score-change-score-file}).
18752    
18753  @item V e  @item V e
18754  @kindex V e @r{(Summary)}  @kindex V e (Summary)
18755  @findex gnus-score-edit-current-scores  @findex gnus-score-edit-current-scores
18756  Edit the current score file (@code{gnus-score-edit-current-scores}).  Edit the current score file (@code{gnus-score-edit-current-scores}).
18757  You will be popped into a @code{gnus-score-mode} buffer (@pxref{Score  You will be popped into a @code{gnus-score-mode} buffer (@pxref{Score
18758  File Editing}).  File Editing}).
18759    
18760  @item V f  @item V f
18761  @kindex V f @r{(Summary)}  @kindex V f (Summary)
18762  @findex gnus-score-edit-file  @findex gnus-score-edit-file
18763  Edit a score file and make this score file the current one  Edit a score file and make this score file the current one
18764  (@code{gnus-score-edit-file}).  (@code{gnus-score-edit-file}).
18765    
18766  @item V F  @item V F
18767  @kindex V F @r{(Summary)}  @kindex V F (Summary)
18768  @findex gnus-score-flush-cache  @findex gnus-score-flush-cache
18769  Flush the score cache (@code{gnus-score-flush-cache}).  This is useful  Flush the score cache (@code{gnus-score-flush-cache}).  This is useful
18770  after editing score files.  after editing score files.
18771    
18772  @item V C  @item V C
18773  @kindex V C @r{(Summary)}  @kindex V C (Summary)
18774  @findex gnus-score-customize  @findex gnus-score-customize
18775  Customize a score file in a visually pleasing manner  Customize a score file in a visually pleasing manner
18776  (@code{gnus-score-customize}).  (@code{gnus-score-customize}).
# Line 15308  The rest of these commands modify the lo Line 18782  The rest of these commands modify the lo
18782  @table @kbd  @table @kbd
18783    
18784  @item V m  @item V m
18785  @kindex V m @r{(Summary)}  @kindex V m (Summary)
18786  @findex gnus-score-set-mark-below  @findex gnus-score-set-mark-below
18787  Prompt for a score, and mark all articles with a score below this as  Prompt for a score, and mark all articles with a score below this as
18788  read (@code{gnus-score-set-mark-below}).  read (@code{gnus-score-set-mark-below}).
18789    
18790  @item V x  @item V x
18791  @kindex V x @r{(Summary)}  @kindex V x (Summary)
18792  @findex gnus-score-set-expunge-below  @findex gnus-score-set-expunge-below
18793  Prompt for a score, and add a score rule to the current score file to  Prompt for a score, and add a score rule to the current score file to
18794  expunge all articles below this score  expunge all articles below this score
# Line 15358  Score on the number of lines. Line 18832  Score on the number of lines.
18832  @item i  @item i
18833  Score on the @code{Message-ID} header.  Score on the @code{Message-ID} header.
18834    
18835    @item e
18836    Score on an ``extra'' header, that is, one of those in gnus-extra-headers,
18837    if your @acronym{NNTP} server tracks additional header data in overviews.
18838    
18839  @item f  @item f
18840  Score on followups---this matches the author name, and adds scores to  Score on followups---this matches the author name, and adds scores to
18841  the followups to this author.  the followups to this author.  (Using this key leads to the creation of
18842    @file{ADAPT} files.)
18843    
18844  @item b  @item b
18845  Score on the body.  Score on the body.
# Line 15369  Score on the body. Line 18848  Score on the body.
18848  Score on the head.  Score on the head.
18849    
18850  @item t  @item t
18851  Score on thread.  Score on thread.  (Using this key leads to the creation of @file{ADAPT}
18852    files.)
18853    
18854  @end table  @end table
18855    
# Line 15424  Greater than number. Line 18904  Greater than number.
18904  @end table  @end table
18905    
18906  @item  @item
18907  The fourth and final key says whether this is a temporary (i.e., expiring)  The fourth and usually final key says whether this is a temporary (i.e.,
18908  score entry, or a permanent (i.e., non-expiring) score entry, or whether  expiring) score entry, or a permanent (i.e., non-expiring) score entry,
18909  it is to be done immediately, without adding to the score file.  or whether it is to be done immediately, without adding to the score
18910    file.
18911  @table @kbd  @table @kbd
18912    
18913  @item t  @item t
# Line 15439  Permanent score entry. Line 18920  Permanent score entry.
18920  Immediately scoring.  Immediately scoring.
18921  @end table  @end table
18922    
18923    @item
18924    If you are scoring on `e' (extra) headers, you will then be prompted for
18925    the header name on which you wish to score.  This must be a header named
18926    in gnus-extra-headers, and @samp{TAB} completion is available.
18927    
18928  @end enumerate  @end enumerate
18929    
18930  So, let's say you want to increase the score on the current author with  So, let's say you want to increase the score on the current author with
# Line 15472  There aren't many of these as yet, I'm a Line 18958  There aren't many of these as yet, I'm a
18958  @table @kbd  @table @kbd
18959    
18960  @item W f  @item W f
18961  @kindex W f @r{(Group)}  @kindex W f (Group)
18962  @findex gnus-score-flush-cache  @findex gnus-score-flush-cache
18963  Gnus maintains a cache of score alists to avoid having to reload them  Gnus maintains a cache of score alists to avoid having to reload them
18964  all the time.  This command will flush the cache  all the time.  This command will flush the cache
# Line 15512  variable to @code{t} to do that.  (It is Line 18998  variable to @code{t} to do that.  (It is
18998  @item gnus-kill-files-directory  @item gnus-kill-files-directory
18999  @vindex gnus-kill-files-directory  @vindex gnus-kill-files-directory
19000  All kill and score files will be stored in this directory, which is  All kill and score files will be stored in this directory, which is
19001  initialized from the @code{SAVEDIR} environment variable by default.  initialized from the @env{SAVEDIR} environment variable by default.
19002  This is @file{~/News/} by default.  This is @file{~/News/} by default.
19003    
19004  @item gnus-score-file-suffix  @item gnus-score-file-suffix
19005  @vindex gnus-score-file-suffix  @vindex gnus-score-file-suffix
19006  Suffix to add to the group name to arrive at the score file name  Suffix to add to the group name to arrive at the score file name
19007  (@samp{SCORE} by default.)  (@file{SCORE} by default.)
19008    
19009  @item gnus-score-uncacheable-files  @item gnus-score-uncacheable-files
19010  @vindex gnus-score-uncacheable-files  @vindex gnus-score-uncacheable-files
19011  @cindex score cache  @cindex score cache
19012  All score files are normally cached to avoid excessive re-loading of  All score files are normally cached to avoid excessive re-loading of
19013  score files.  However, if this might make your Emacs grow big and  score files.  However, if this might make your Emacs grow big and
19014  bloated, so this regexp can be used to weed out score files unlikely to be needed again.  It would be a bad idea to deny caching of  bloated, so this regexp can be used to weed out score files unlikely
19015    to be needed again.  It would be a bad idea to deny caching of
19016  @file{all.SCORE}, while it might be a good idea to not cache  @file{all.SCORE}, while it might be a good idea to not cache
19017  @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this  @file{comp.infosystems.www.authoring.misc.ADAPT}.  In fact, this
19018  variable is @samp{ADAPT$} by default, so no adaptive score files will  variable is @samp{ADAPT$} by default, so no adaptive score files will
# Line 15607  can't have score files like @file{all.SC Line 19094  can't have score files like @file{all.SC
19094  server.  server.
19095    
19096  @end table  @end table
19097  This variable can also be a list of functions.  In that case, all these  This variable can also be a list of functions.  In that case, all
19098  functions will be called with the group name as argument, and all the  these functions will be called with the group name as argument, and
19099  returned lists of score files will be applied.  These functions can also  all the returned lists of score files will be applied.  These
19100  return lists of score alists directly.  In that case, the functions that  functions can also return lists of lists of score alists directly.  In
19101  return these non-file score alists should probably be placed before the  that case, the functions that return these non-file score alists
19102  ``real'' score file functions, to ensure that the last score file  should probably be placed before the ``real'' score file functions, to
19103  returned is the local score file.  Phu.  ensure that the last score file returned is the local score file.
19104    Phu.
19105    
19106  For example, to do hierarchical scoring but use a non-server-specific  For example, to do hierarchical scoring but use a non-server-specific
19107  overall score file, you could use the value  overall score file, you could use the value
# Line 15630  are expired.  It's 7 by default. Line 19118  are expired.  It's 7 by default.
19118    
19119  @item gnus-update-score-entry-dates  @item gnus-update-score-entry-dates
19120  @vindex gnus-update-score-entry-dates  @vindex gnus-update-score-entry-dates
19121  If this variable is non-@code{nil}, matching score entries will have  If this variable is non-@code{nil}, temporary score entries that have
19122  their dates updated.  (This is how Gnus controls expiry---all  been triggered (matched) will have their dates updated.  (This is how Gnus
19123  non-matching entries will become too old while matching entries will  controls expiry---all non-matched-entries will become too old while
19124  stay fresh and young.)  However, if you set this variable to @code{nil},  matched entries will stay fresh and young.)  However, if you set this
19125  even matching entries will grow old and will have to face that oh-so  variable to @code{nil}, even matched entries will grow old and will
19126  grim reaper.  have to face that oh-so grim reaper.
19127    
19128  @item gnus-score-after-write-file-function  @item gnus-score-after-write-file-function
19129  @vindex gnus-score-after-write-file-function  @vindex gnus-score-after-write-file-function
# Line 15643  Function called with the name of the sco Line 19131  Function called with the name of the sco
19131    
19132  @item gnus-score-thread-simplify  @item gnus-score-thread-simplify
19133  @vindex gnus-score-thread-simplify  @vindex gnus-score-thread-simplify
19134  If this variable is non-@code{nil}, article subjects will be simplified  If this variable is non-@code{nil}, article subjects will be
19135  for subject scoring purposes in the same manner as with  simplified for subject scoring purposes in the same manner as with
19136  threading---according to the current value of  threading---according to the current value of
19137  gnus-simplify-subject-functions.  If the scoring entry uses  @code{gnus-simplify-subject-functions}.  If the scoring entry uses
19138  @code{substring} or @code{exact} matching, the match will also be  @code{substring} or @code{exact} matching, the match will also be
19139  simplified in this manner.  simplified in this manner.
19140    
# Line 15687  Anyway, if you'd like to dig into it you Line 19175  Anyway, if you'd like to dig into it you
19175   (eval (ding)))   (eval (ding)))
19176  @end lisp  @end lisp
19177    
19178  This example demonstrates most score file elements.  For a different  This example demonstrates most score file elements.  @xref{Advanced
19179  approach, see @pxref{Advanced Scoring}.  Scoring}, for a different approach.
19180    
19181  Even though this looks much like lisp code, nothing here is actually  Even though this looks much like Lisp code, nothing here is actually
19182  @code{eval}ed.  The lisp reader is used to read this form, though, so it  @code{eval}ed.  The Lisp reader is used to read this form, though, so it
19183  has to be valid syntactically, if not semantically.  has to be valid syntactically, if not semantically.
19184    
19185  Six keys are supported by this alist:  Six keys are supported by this alist:
# Line 15713  final ``header'' you can score on is @co Line 19201  final ``header'' you can score on is @co
19201  entries will result in new score entries being added for all follow-ups  entries will result in new score entries being added for all follow-ups
19202  to articles that matches these score entries.  to articles that matches these score entries.
19203    
19204  Following this key is a arbitrary number of score entries, where each  Following this key is an arbitrary number of score entries, where each
19205  score entry has one to four elements.  score entry has one to four elements.
19206  @enumerate  @enumerate
19207    
# Line 15755  one-letter types are really just abbrevi Line 19243  one-letter types are really just abbrevi
19243  @code{string}, @code{exact}, and @code{word} types, which you can use  @code{string}, @code{exact}, and @code{word} types, which you can use
19244  instead, if you feel like.  instead, if you feel like.
19245    
19246    @item Extra
19247    Just as for the standard string overview headers, if you are using
19248    gnus-extra-headers, you can score on these headers' values.  In this
19249    case, there is a 5th element in the score entry, being the name of the
19250    header to be scored.  The following entry is useful in your
19251    @file{all.SCORE} file in case of spam attacks from a single origin
19252    host, if your @acronym{NNTP} server tracks @samp{NNTP-Posting-Host} in
19253    overviews:
19254    
19255    @lisp
19256    ("111.222.333.444" -1000 nil s
19257     "NNTP-Posting-Host")
19258    @end lisp
19259    
19260  @item Lines, Chars  @item Lines, Chars
19261  These two headers use different match types: @code{<}, @code{>},  These two headers use different match types: @code{<}, @code{>},
19262  @code{=}, @code{>=} and @code{<=}.  @code{=}, @code{>=} and @code{<=}.
# Line 15833  key will lead to creation of @file{ADAPT Line 19335  key will lead to creation of @file{ADAPT
19335  @end table  @end table
19336  @end enumerate  @end enumerate
19337    
19338  @cindex Score File Atoms  @cindex score file atoms
19339  @item mark  @item mark
19340  The value of this entry should be a number.  Any articles with a score  The value of this entry should be a number.  Any articles with a score
19341  lower than this number will be marked as read.  lower than this number will be marked as read.
# Line 15892  interesting (with @kbd{I T} or @kbd{I S} Line 19394  interesting (with @kbd{I T} or @kbd{I S}
19394  rest.  Next time you enter the group, you will see new articles in the  rest.  Next time you enter the group, you will see new articles in the
19395  interesting threads, plus any new threads.  interesting threads, plus any new threads.
19396    
19397  I.e.---the orphan score atom is for high-volume groups where there  I.e.---the orphan score atom is for high-volume groups where a few
19398  exist a few interesting threads which can't be found automatically by  interesting threads which can't be found automatically by ordinary
19399  ordinary scoring rules.  scoring rules exist.
19400    
19401  @item adapt  @item adapt
19402  This entry controls the adaptive scoring.  If it is @code{t}, the  This entry controls the adaptive scoring.  If it is @code{t}, the
# Line 15918  file for a number of groups. Line 19420  file for a number of groups.
19420    
19421  @item local  @item local
19422  @cindex local variables  @cindex local variables
19423  The value of this entry should be a list of @code{(VAR VALUE)} pairs.  The value of this entry should be a list of @code{(@var{var}
19424  Each @var{var} will be made buffer-local to the current summary buffer,  @var{value})} pairs.  Each @var{var} will be made buffer-local to the
19425  and set to the value specified.  This is a convenient, if somewhat  current summary buffer, and set to the value specified.  This is a
19426  strange, way of setting variables in some groups if you don't like hooks  convenient, if somewhat strange, way of setting variables in some
19427  much.  Note that the @var{value} won't be evaluated.  groups if you don't like hooks much.  Note that the @var{value} won't
19428    be evaluated.
19429  @end table  @end table
19430    
19431    
# Line 15966  Type @kbd{M-x gnus-score-mode} to use th Line 19469  Type @kbd{M-x gnus-score-mode} to use th
19469  @vindex gnus-score-mode-hook  @vindex gnus-score-mode-hook
19470  @code{gnus-score-menu-hook} is run in score mode buffers.  @code{gnus-score-menu-hook} is run in score mode buffers.
19471    
19472  In the summary buffer you can use commands like @kbd{V f} and @kbd{V  In the summary buffer you can use commands like @kbd{V f}, @kbd{V e} and
19473  e} to begin editing score files.  @kbd{V t} to begin editing score files.
19474    
19475    
19476  @node Adaptive Scoring  @node Adaptive Scoring
# Line 16020  Each article can have only one mark, so Line 19523  Each article can have only one mark, so
19523  will be applied to each article.  will be applied to each article.
19524    
19525  To take @code{gnus-del-mark} as an example---this alist says that all  To take @code{gnus-del-mark} as an example---this alist says that all
19526  articles that have that mark (i.e., are marked with @samp{D}) will have a  articles that have that mark (i.e., are marked with @samp{e}) will have a
19527  score entry added to lower based on the @code{From} header by -4, and  score entry added to lower based on the @code{From} header by -4, and
19528  lowered by @code{Subject} by -1.  Change this to fit your prejudices.  lowered by @code{Subject} by -1.  Change this to fit your prejudices.
19529    
# Line 16041  The headers you can score on are @code{f Line 19544  The headers you can score on are @code{f
19544  on the @code{References} header using the @code{Message-ID} of the  on the @code{References} header using the @code{Message-ID} of the
19545  current article, thereby matching the following thread.  current article, thereby matching the following thread.
19546    
 You can also score on @code{thread}, which will try to score all  
 articles that appear in a thread.  @code{thread} matches uses a  
 @code{Message-ID} to match on the @code{References} header of the  
 article.  If the match is made, the @code{Message-ID} of the article is  
 added to the @code{thread} rule.  (Think about it.  I'd recommend two  
 aspirins afterwards.)  
   
19547  If you use this scheme, you should set the score file atom @code{mark}  If you use this scheme, you should set the score file atom @code{mark}
19548  to something small---like -300, perhaps, to avoid having small random  to something small---like -300, perhaps, to avoid having small random
19549  changes result in articles getting marked as read.  changes result in articles getting marked as read.
# Line 16063  let you use different rules in different Line 19559  let you use different rules in different
19559  @vindex gnus-adaptive-file-suffix  @vindex gnus-adaptive-file-suffix
19560  The adaptive score entries will be put into a file where the name is the  The adaptive score entries will be put into a file where the name is the
19561  group name with @code{gnus-adaptive-file-suffix} appended.  The default  group name with @code{gnus-adaptive-file-suffix} appended.  The default
19562  is @samp{ADAPT}.  is @file{ADAPT}.
19563    
19564  @vindex gnus-score-exact-adapt-limit  @vindex gnus-score-exact-adapt-limit
19565  When doing adaptive scoring, substring or fuzzy matching would probably  When doing adaptive scoring, substring or fuzzy matching would probably
# Line 16088  each instance of a word should add given Line 19584  each instance of a word should add given
19584          (,gnus-del-mark . -15)))          (,gnus-del-mark . -15)))
19585  @end lisp  @end lisp
19586    
19587  This is the default value.  If you adapt on words, every  This is the default value.  If you have adaption on words enabled, every
19588  word that appears in subjects of articles marked with  word that appears in subjects of articles marked with
19589  @code{gnus-read-mark} will result in a score rule that increase the  @code{gnus-read-mark} will result in a score rule that increase the
19590  score with 30 points.  score with 30 points.
# Line 16099  Words that appear in the @code{gnus-defa Line 19595  Words that appear in the @code{gnus-defa
19595  will be ignored.  If you wish to add more words to be ignored, use the  will be ignored.  If you wish to add more words to be ignored, use the
19596  @code{gnus-ignored-adaptive-words} list instead.  @code{gnus-ignored-adaptive-words} list instead.
19597    
19598    @vindex gnus-adaptive-word-length-limit
19599    Some may feel that short words shouldn't count when doing adaptive
19600    scoring.  If so, you may set @code{gnus-adaptive-word-length-limit} to
19601    an integer.  Words shorter than this number will be ignored.  This
19602    variable defaults to @code{nil}.
19603    
19604  @vindex gnus-adaptive-word-syntax-table  @vindex gnus-adaptive-word-syntax-table
19605  When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the  When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
19606  syntax table in effect.  It is similar to the standard syntax table, but  syntax table in effect.  It is similar to the standard syntax table, but
# Line 16160  A list.  The elements in this list can b Line 19662  A list.  The elements in this list can b
19662  group name, the @var{file-name} will be used as the home score file.  group name, the @var{file-name} will be used as the home score file.
19663    
19664  @item  @item
19665  A function.  If the function returns non-nil, the result will be used as  A function.  If the function returns non-@code{nil}, the result will
19666  the home score file.  be used as the home score file.
19667    
19668  @item  @item
19669  A string.  Use the string as the home score file.  A string.  Use the string as the home score file.
# Line 16205  their own home score files: Line 19707  their own home score files:
19707    
19708  @lisp  @lisp
19709  (setq gnus-home-score-file  (setq gnus-home-score-file
19710        ;; All groups that match the regexp "\\.emacs"        ;; @r{All groups that match the regexp @code{"\\.emacs"}}
19711        '(("\\.emacs" "emacs.SCORE")        '(("\\.emacs" "emacs.SCORE")
19712          ;; All the comp groups in one score file          ;; @r{All the comp groups in one score file}
19713          ("^comp" "comp.SCORE")))          ("^comp" "comp.SCORE")))
19714  @end lisp  @end lisp
19715    
# Line 16278  Whether it's the first two or first thre Line 19780  Whether it's the first two or first thre
19780  is system-dependent.  is system-dependent.
19781    
19782    
19783    @node Scoring On Other Headers
19784    @section Scoring On Other Headers
19785    @cindex scoring on other headers
19786    
19787    Gnus is quite fast when scoring the ``traditional''
19788    headers---@samp{From}, @samp{Subject} and so on.  However, scoring
19789    other headers requires writing a @code{head} scoring rule, which means
19790    that Gnus has to request every single article from the back end to find
19791    matches.  This takes a long time in big groups.
19792    
19793    Now, there's not much you can do about this for news groups, but for
19794    mail groups, you have greater control.  In @ref{To From Newsgroups},
19795    it's explained in greater detail what this mechanism does, but here's
19796    a cookbook example for @code{nnml} on how to allow scoring on the
19797    @samp{To} and @samp{Cc} headers.
19798    
19799    Put the following in your @file{~/.gnus.el} file.
19800    
19801    @lisp
19802    (setq gnus-extra-headers '(To Cc Newsgroups Keywords)
19803          nnmail-extra-headers gnus-extra-headers)
19804    @end lisp
19805    
19806    Restart Gnus and rebuild your @code{nnml} overview files with the
19807    @kbd{M-x nnml-generate-nov-databases} command.  This will take a long
19808    time if you have much mail.
19809    
19810    Now you can score on @samp{To} and @samp{Cc} as ``extra headers'' like
19811    so: @kbd{I e s p To RET <your name> RET}.
19812    
19813    See?  Simple.
19814    
19815    
19816  @node Scoring Tips  @node Scoring Tips
19817  @section Scoring Tips  @section Scoring Tips
19818  @cindex scoring tips  @cindex scoring tips
# Line 16417  should probably have a long expiry perio Line 19952  should probably have a long expiry perio
19952  old articles for a long time.  old articles for a long time.
19953  @end itemize  @end itemize
19954    
19955  ... I wonder whether other newsreaders will support global score files  @dots{} I wonder whether other newsreaders will support global score files
19956  in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue  in the future.  @emph{Snicker}.  Yup, any day now, newsreaders like Blue
19957  Wave, xrn and 1stReader are bound to implement scoring.  Should we start  Wave, xrn and 1stReader are bound to implement scoring.  Should we start
19958  holding our breath yet?  holding our breath yet?
# Line 16455  Other programs use a totally different k Line 19990  Other programs use a totally different k
19990  encounters what looks like a @code{rn} kill file, it will take a stab at  encounters what looks like a @code{rn} kill file, it will take a stab at
19991  interpreting it.  interpreting it.
19992    
19993  Two summary functions for editing a GNUS kill file:  Two summary functions for editing a @sc{gnus} kill file:
19994    
19995  @table @kbd  @table @kbd
19996    
19997  @item M-k  @item M-k
19998  @kindex M-k @r{(Summary)}  @kindex M-k (Summary)
19999  @findex gnus-summary-edit-local-kill  @findex gnus-summary-edit-local-kill
20000  Edit this group's kill file (@code{gnus-summary-edit-local-kill}).  Edit this group's kill file (@code{gnus-summary-edit-local-kill}).
20001    
20002  @item M-K  @item M-K
20003  @kindex M-K @r{(Summary)}  @kindex M-K (Summary)
20004  @findex gnus-summary-edit-global-kill  @findex gnus-summary-edit-global-kill
20005  Edit the general kill file (@code{gnus-summary-edit-global-kill}).  Edit the general kill file (@code{gnus-summary-edit-global-kill}).
20006  @end table  @end table
# Line 16475  Two group mode functions for editing the Line 20010  Two group mode functions for editing the
20010  @table @kbd  @table @kbd
20011    
20012  @item M-k  @item M-k
20013  @kindex M-k @r{(Group)}  @kindex M-k (Group)
20014  @findex gnus-group-edit-local-kill  @findex gnus-group-edit-local-kill
20015  Edit this group's kill file (@code{gnus-group-edit-local-kill}).  Edit this group's kill file (@code{gnus-group-edit-local-kill}).
20016    
20017  @item M-K  @item M-K
20018  @kindex M-K @r{(Group)}  @kindex M-K (Group)
20019  @findex gnus-group-edit-global-kill  @findex gnus-group-edit-global-kill
20020  Edit the general kill file (@code{gnus-group-edit-global-kill}).  Edit the general kill file (@code{gnus-group-edit-global-kill}).
20021  @end table  @end table
# Line 16543  before. Line 20078  before.
20078  @section GroupLens  @section GroupLens
20079  @cindex GroupLens  @cindex GroupLens
20080    
20081  GroupLens is a collaborative filtering system that helps you work  @sc{Note:} Unfortunately the GroupLens system seems to have shut down,
20082  together with other people to find the quality news articles out of the  so this section is mostly of historical interest.
20083  huge volume of news articles generated every day.  
20084    @uref{http://www.cs.umn.edu/Research/GroupLens/, GroupLens} is a
20085    collaborative filtering system that helps you work together with other
20086    people to find the quality news articles out of the huge volume of
20087    news articles generated every day.
20088    
20089  To accomplish this the GroupLens system combines your opinions about  To accomplish this the GroupLens system combines your opinions about
20090  articles you have already read with the opinions of others who have done  articles you have already read with the opinions of others who have done
# Line 16558  prediction to help you decide whether or Line 20097  prediction to help you decide whether or
20097  article.  article.
20098    
20099  @menu  @menu
20100  * Using GroupLens::          How to make Gnus use GroupLens.  * Using GroupLens::             How to make Gnus use GroupLens.
20101  * Rating Articles::          Letting GroupLens know how you rate articles.  * Rating Articles::             Letting GroupLens know how you rate articles.
20102  * Displaying Predictions::   Displaying predictions given by GroupLens.  * Displaying Predictions::      Displaying predictions given by GroupLens.
20103  * GroupLens Variables::      Customizing GroupLens.  * GroupLens Variables::         Customizing GroupLens.
20104  @end menu  @end menu
20105    
20106    
20107  @node Using GroupLens  @node Using GroupLens
20108  @subsection Using GroupLens  @subsection Using GroupLens
20109    
20110  To use GroupLens you must register a pseudonym with your local Better  To use GroupLens you must register a pseudonym with your local
20111  Bit Bureau (BBB).  @uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html, Better Bit
20112  @uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only  Bureau (BBB)} is the only better bit in town at the moment.
 better bit in town at the moment.  
20113    
20114  Once you have registered you'll need to set a couple of variables.  Once you have registered you'll need to set a couple of variables.
20115    
# Line 16607  you, based on how the people you usually Line 20145  you, based on how the people you usually
20145  In GroupLens, an article is rated on a scale from 1 to 5, inclusive.  In GroupLens, an article is rated on a scale from 1 to 5, inclusive.
20146  Where 1 means something like this article is a waste of bandwidth and 5  Where 1 means something like this article is a waste of bandwidth and 5
20147  means that the article was really good.  The basic question to ask  means that the article was really good.  The basic question to ask
20148  yourself is, "on a scale from 1 to 5 would I like to see more articles  yourself is, ``on a scale from 1 to 5 would I like to see more articles
20149  like this one?"  like this one?''
20150    
20151  There are four ways to enter a rating for an article in GroupLens.  There are four ways to enter a rating for an article in GroupLens.
20152    
# Line 16661  from GroupLens in one of three ways cont Line 20199  from GroupLens in one of three ways cont
20199  @vindex gnus-grouplens-override-scoring  @vindex gnus-grouplens-override-scoring
20200  There are three ways to display predictions in grouplens.  You may  There are three ways to display predictions in grouplens.  You may
20201  choose to have the GroupLens scores contribute to, or override the  choose to have the GroupLens scores contribute to, or override the
20202  regular gnus scoring mechanism.  override is the default; however, some  regular Gnus scoring mechanism.  override is the default; however, some
20203  people prefer to see the Gnus scores plus the grouplens scores.  To get  people prefer to see the Gnus scores plus the grouplens scores.  To get
20204  the separate scoring behavior you need to set  the separate scoring behavior you need to set
20205  @code{gnus-grouplens-override-scoring} to @code{'separate}.  To have the  @code{gnus-grouplens-override-scoring} to @code{'separate}.  To have the
# Line 16713  Prediction +/- confidence. Line 20251  Prediction +/- confidence.
20251  @item gnus-summary-grouplens-line-format  @item gnus-summary-grouplens-line-format
20252  The summary line format used in GroupLens-enhanced summary buffers.  It  The summary line format used in GroupLens-enhanced summary buffers.  It
20253  accepts the same specs as the normal summary line format (@pxref{Summary  accepts the same specs as the normal summary line format (@pxref{Summary
20254  Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%)  Buffer Lines}).  The default is @samp{%U%R%z%l%I%(%[%4L: %-23,23n%]%)
20255  %s\n}.  %s\n}.
20256    
20257  @item grouplens-bbb-host  @item grouplens-bbb-host
# Line 16807  simple scoring, and the match types are Line 20345  simple scoring, and the match types are
20345  @node Advanced Scoring Examples  @node Advanced Scoring Examples
20346  @subsection Advanced Scoring Examples  @subsection Advanced Scoring Examples
20347    
20348    Please note that the following examples are score file rules.  To
20349    make a complete score file from them, surround them with another pair
20350    of parentheses.
20351    
20352  Let's say you want to increase the score of articles written by Lars  Let's say you want to increase the score of articles written by Lars
20353  when he's talking about Gnus:  when he's talking about Gnus:
20354    
20355  @example  @example
20356    @group
20357  ((&  ((&
20358    ("from" "Lars Ingebrigtsen")    ("from" "Lars Ingebrigtsen")
20359    ("subject" "Gnus"))    ("subject" "Gnus"))
20360   1000)   1000)
20361    @end group
20362  @end example  @end example
20363    
20364  Quite simple, huh?  Quite simple, huh?
# Line 16924  definition of that function: Line 20468  definition of that function:
20468    
20469  @lisp  @lisp
20470  (defun gnus-decay-score (score)  (defun gnus-decay-score (score)
20471    "Decay SCORE.    "Decay SCORE according to `gnus-score-decay-constant'
 This is done according to `gnus-score-decay-constant'  
20472  and `gnus-score-decay-scale'."  and `gnus-score-decay-scale'."
20473    (floor    (let ((n (- score
20474     (- score                (* (if (< score 0) -1 1)
20475        (* (if (< score 0) 1 -1)                   (min (abs score)
20476           (min (abs score)                        (max gnus-score-decay-constant
20477                (max gnus-score-decay-constant                             (* (abs score)
20478                     (* (abs score)                                gnus-score-decay-scale)))))))
20479                        gnus-score-decay-scale)))))))      (if (and (featurep 'xemacs)
20480                 ;; XEmacs' floor can handle only the floating point
20481                 ;; number below the half of the maximum integer.
20482                 (> (abs n) (lsh -1 -2)))
20483            (string-to-number
20484             (car (split-string (number-to-string n) "\\.")))
20485          (floor n))))
20486  @end lisp  @end lisp
20487    
20488  @vindex gnus-score-decay-scale  @vindex gnus-score-decay-scale
# Line 16960  the new score, which should be an intege Line 20509  the new score, which should be an intege
20509  Gnus will try to decay scores once a day.  If you haven't run Gnus for  Gnus will try to decay scores once a day.  If you haven't run Gnus for
20510  four days, Gnus will decay the scores four times, for instance.  four days, Gnus will decay the scores four times, for instance.
20511    
20512    @iftex
20513    @iflatex
20514    @chapter Message
20515    @include message.texi
20516    @chapter Emacs MIME
20517    @include emacs-mime.texi
20518    @chapter Sieve
20519    @include sieve.texi
20520    @chapter PGG
20521    @include pgg.texi
20522    @end iflatex
20523    @end iftex
20524    
20525  @node Various  @node Various
20526  @chapter Various  @chapter Various
20527    
20528  @menu  @menu
20529  * Process/Prefix::             A convention used by many treatment commands.  * Process/Prefix::              A convention used by many treatment commands.
20530  * Interactive::                Making Gnus ask you many questions.  * Interactive::                 Making Gnus ask you many questions.
20531  * Symbolic Prefixes::          How to supply some Gnus functions with options.  * Symbolic Prefixes::           How to supply some Gnus functions with options.
20532  * Formatting Variables::       You can specify what buffers should look like.  * Formatting Variables::        You can specify what buffers should look like.
20533  * Windows Configuration::      Configuring the Gnus buffer windows.  * Window Layout::               Configuring the Gnus buffer windows.
20534  * Faces and Fonts::            How to change how faces look.  * Faces and Fonts::             How to change how faces look.
20535  * Compilation::                How to speed Gnus up.  * Compilation::                 How to speed Gnus up.
20536  * Mode Lines::                 Displaying information in the mode lines.  * Mode Lines::                  Displaying information in the mode lines.
20537  * Highlighting and Menus::     Making buffers look all nice and cozy.  * Highlighting and Menus::      Making buffers look all nice and cozy.
20538  * Buttons::                    Get tendinitis in ten easy steps!  * Buttons::                     Get tendinitis in ten easy steps!
20539  * Daemons::                    Gnus can do things behind your back.  * Daemons::                     Gnus can do things behind your back.
20540  * NoCeM::                      How to avoid spam and other fatty foods.  * NoCeM::                       How to avoid spam and other fatty foods.
20541  * Undo::                       Some actions can be undone.  * Undo::                        Some actions can be undone.
20542  * Moderation::                 What to do if you're a moderator.  * Predicate Specifiers::        Specifying predicates.
20543  * Emacs Enhancements::         There can be more pictures and stuff under  * Moderation::                  What to do if you're a moderator.
20544                                 Emacs 21.  * Image Enhancements::          Modern versions of Emacs/XEmacs can display images.
20545  * XEmacs Enhancements::        There are more pictures and stuff under XEmacs.  * Fuzzy Matching::              What's the big fuzz?
20546  * Fuzzy Matching::             What's the big fuzz?  * Thwarting Email Spam::        A how-to on avoiding unsolicited commercial email.
20547  * Thwarting Email Spam::       A how-to on avoiding unsolicited commercial email.  * Other modes::                 Interaction with other modes.
20548  * Various Various::            Things that are really various.  * Various Various::             Things that are really various.
20549  @end menu  @end menu
20550    
20551    
# Line 17089  for instance.  But what if you want to s Line 20650  for instance.  But what if you want to s
20650  file, and you want Emacs to flash lights and play a nice tune at the  file, and you want Emacs to flash lights and play a nice tune at the
20651  same time?  You can't, and you're probably perfectly happy that way.  same time?  You can't, and you're probably perfectly happy that way.
20652    
20653  @kindex M-i @r{(Summary)}  @kindex M-i (Summary)
20654  @findex gnus-symbolic-argument  @findex gnus-symbolic-argument
20655  I'm not, so I've added a second prefix---the @dfn{symbolic prefix}.  The  I'm not, so I've added a second prefix---the @dfn{symbolic prefix}.  The
20656  prefix key is @kbd{M-i} (@code{gnus-symbolic-argument}), and the next  prefix key is @kbd{M-i} (@code{gnus-symbolic-argument}), and the next
# Line 17123  Here's an example format spec (from the Line 20684  Here's an example format spec (from the
20684  lots of percentages everywhere.  lots of percentages everywhere.
20685    
20686  @menu  @menu
20687  * Formatting Basics::     A formatting variable is basically a format string.  * Formatting Basics::           A formatting variable is basically a format string.
20688  * Mode Line Formatting::  Some rules about mode line formatting variables.  * Mode Line Formatting::        Some rules about mode line formatting variables.
20689  * Advanced Formatting::   Modifying output in various ways.  * Advanced Formatting::         Modifying output in various ways.
20690  * User-Defined Specs::    Having Gnus call your own functions.  * User-Defined Specs::          Having Gnus call your own functions.
20691  * Formatting Fonts::      Making the formatting look colorful and nice.  * Formatting Fonts::            Making the formatting look colorful and nice.
20692    * Positioning Point::           Moving point to a position after an operation.
20693    * Tabulation::                  Tabulating your output.
20694    * Wide Characters::             Dealing with wide characters.
20695  @end menu  @end menu
20696    
20697  Currently Gnus uses the following formatting variables:  Currently Gnus uses the following formatting variables:
# Line 17147  case, they will be @code{eval}ed to inse Line 20711  case, they will be @code{eval}ed to inse
20711  Gnus includes a command to help you while creating your own format  Gnus includes a command to help you while creating your own format
20712  specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,  specs.  @kbd{M-x gnus-update-format} will @code{eval} the current form,
20713  update the spec in question and pop you to a buffer where you can  update the spec in question and pop you to a buffer where you can
20714  examine the resulting lisp code to be run to generate the line.  examine the resulting Lisp code to be run to generate the line.
20715    
20716    
20717    
# Line 17170  particularly wide values.  For that you Line 20734  particularly wide values.  For that you
20734  means that the field will never be more than 6 characters wide and never  means that the field will never be more than 6 characters wide and never
20735  less than 4 characters wide.  less than 4 characters wide.
20736    
20737    Also Gnus supports some extended format specifications, such as
20738    @samp{%&user-date;}.
20739    
20740    
20741  @node Mode Line Formatting  @node Mode Line Formatting
20742  @subsection Mode Line Formatting  @subsection Mode Line Formatting
# Line 17237  Return an empty string if the field is e Line 20804  Return an empty string if the field is e
20804  @item form  @item form
20805  Use the specified form as the field value when the @samp{@@} spec is  Use the specified form as the field value when the @samp{@@} spec is
20806  used.  used.
20807    
20808    Here's an example:
20809    
20810    @lisp
20811    "~(form (current-time-string))@@"
20812    @end lisp
20813    
20814  @end table  @end table
20815    
20816  Let's take an example.  The @samp{%o} spec in the summary mode lines  Let's take an example.  The @samp{%o} spec in the summary mode lines
# Line 17269  be inserted into the buffer just like in Line 20843  be inserted into the buffer just like in
20843  specifier.  This function may also be called with dummy values, so it  specifier.  This function may also be called with dummy values, so it
20844  should protect against that.  should protect against that.
20845    
20846    Also Gnus supports extended user-defined specs, such as @samp{%u&foo;}.
20847    Gnus will call the function @code{gnus-user-format-function-}@samp{foo}.
20848    
20849  You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve  You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve
20850  much the same without defining new functions.  Here's an example:  much the same without defining new functions.  Here's an example:
20851  @samp{%~(form (count-lines (point-min) (point)))@@}.  The form  @samp{%~(form (count-lines (point-min) (point)))@@}.  The form
# Line 17292  and so on.  Create as many faces as you Line 20869  and so on.  Create as many faces as you
20869  @code{mouse-face} specs---you can say @samp{%3(hello%)} to have  @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
20870  @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.  @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
20871    
20872  Text inside the @samp{%<} and @samp{%>} specifiers will get the special  Text inside the @samp{%<<} and @samp{%>>} specifiers will get the
20873  @code{balloon-help} property set to @code{gnus-balloon-face-0}.  If you  special @code{balloon-help} property set to
20874  say @samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on.  The  @code{gnus-balloon-face-0}.  If you say @samp{%1<<}, you'll get
20875  @code{gnus-balloon-face-*} variables should be either strings or symbols  @code{gnus-balloon-face-1} and so on.  The @code{gnus-balloon-face-*}
20876  naming functions that return a string.  Under @code{balloon-help-mode},  variables should be either strings or symbols naming functions that
20877  when the mouse passes over text with this property set, a balloon window  return a string.  When the mouse passes over text with this property
20878  will appear and display the string.  Please refer to the doc string of  set, a balloon window will appear and display the string.  Please
20879  @code{balloon-help-mode} for more information on this.  refer to @ref{Tooltips, ,Tooltips, emacs, The Emacs Manual},
20880    (in GNU Emacs) or the doc string of @code{balloon-help-mode} (in
20881    XEmacs) for more information on this.  (For technical reasons, the
20882    guillemets have been approximated as @samp{<<} and @samp{>>} in this
20883    paragraph.)
20884    
20885  Here's an alternative recipe for the group buffer:  Here's an alternative recipe for the group buffer:
20886    
20887  @lisp  @lisp
20888  ;; Create three face types.  ;; @r{Create three face types.}
20889  (setq gnus-face-1 'bold)  (setq gnus-face-1 'bold)
20890  (setq gnus-face-3 'italic)  (setq gnus-face-3 'italic)
20891    
20892  ;; We want the article count to be in  ;; @r{We want the article count to be in}
20893  ;; a bold and green face.  So we create  ;; @r{a bold and green face.  So we create}
20894  ;; a new face called `my-green-bold'.  ;; @r{a new face called @code{my-green-bold}.}
20895  (copy-face 'bold 'my-green-bold)  (copy-face 'bold 'my-green-bold)
20896  ;; Set the color.  ;; @r{Set the color.}
20897  (set-face-foreground 'my-green-bold "ForestGreen")  (set-face-foreground 'my-green-bold "ForestGreen")
20898  (setq gnus-face-2 'my-green-bold)  (setq gnus-face-2 'my-green-bold)
20899    
20900  ;; Set the new & fancy format.  ;; @r{Set the new & fancy format.}
20901  (setq gnus-group-line-format  (setq gnus-group-line-format
20902        "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")        "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
20903  @end lisp  @end lisp
# Line 17327  and extremely vulgar displays.  Have fun Line 20908  and extremely vulgar displays.  Have fun
20908  Note that the @samp{%(} specs (and friends) do not make any sense on the  Note that the @samp{%(} specs (and friends) do not make any sense on the
20909  mode-line variables.  mode-line variables.
20910    
20911    @node Positioning Point
20912    @subsection Positioning Point
20913    
20914    Gnus usually moves point to a pre-defined place on each line in most
20915    buffers.  By default, point move to the first colon character on the
20916    line.  You can customize this behaviour in three different ways.
20917    
20918    You can move the colon character to somewhere else on the line.
20919    
20920    @findex gnus-goto-colon
20921    You can redefine the function that moves the point to the colon.  The
20922    function is called @code{gnus-goto-colon}.
20923    
20924    But perhaps the most convenient way to deal with this, if you don't want
20925    to have a colon in your line, is to use the @samp{%*} specifier.  If you
20926    put a @samp{%*} somewhere in your format line definition, Gnus will
20927    place point there.
20928    
20929  @node Windows Configuration  
20930  @section Windows Configuration  @node Tabulation
20931  @cindex windows configuration  @subsection Tabulation
20932    
20933    You can usually line up your displays by padding and cutting your
20934    strings.  However, when combining various strings of different size, it
20935    can often be more convenient to just output the strings, and then worry
20936    about lining up the following text afterwards.
20937    
20938    To do that, Gnus supplies tabulator specs---@samp{%=}.  There are two
20939    different types---@dfn{hard tabulators} and @dfn{soft tabulators}.
20940    
20941    @samp{%50=} will insert space characters to pad the line up to column
20942    50.  If the text is already past column 50, nothing will be inserted.
20943    This is the soft tabulator.
20944    
20945    @samp{%-50=} will insert space characters to pad the line up to column
20946    50.  If the text is already past column 50, the excess text past column
20947    50 will be removed.  This is the hard tabulator.
20948    
20949    
20950    @node Wide Characters
20951    @subsection Wide Characters
20952    
20953    Fixed width fonts in most countries have characters of the same width.
20954    Some countries, however, use Latin characters mixed with wider
20955    characters---most notable East Asian countries.
20956    
20957    The problem is that when formatting, Gnus assumes that if a string is 10
20958    characters wide, it'll be 10 Latin characters wide on the screen.  In
20959    these countries, that's not true.
20960    
20961    @vindex gnus-use-correct-string-widths
20962    To help fix this, you can set @code{gnus-use-correct-string-widths} to
20963    @code{t}.  This makes buffer generation slower, but the results will be
20964    prettier.  The default value under XEmacs is @code{t} but @code{nil}
20965    for Emacs.
20966    
20967    
20968    @node Window Layout
20969    @section Window Layout
20970    @cindex window layout
20971    
20972  No, there's nothing here about X, so be quiet.  No, there's nothing here about X, so be quiet.
20973    
# Line 17431  To be slightly more formal, here's a def Line 21068  To be slightly more formal, here's a def
21068  may look like:  may look like:
21069    
21070  @example  @example
21071    @group
21072  split      = frame | horizontal | vertical | buffer | form  split      = frame | horizontal | vertical | buffer | form
21073  frame      = "(frame " size *split ")"  frame      = "(frame " size *split ")"
21074  horizontal = "(horizontal " size *split ")"  horizontal = "(horizontal " size *split ")"
# Line 17438  vertical   = "(vertical " size *split ") Line 21076  vertical   = "(vertical " size *split ")
21076  buffer     = "(" buf-name " " size *[ "point" ] *[ "frame-focus"] ")"  buffer     = "(" buf-name " " size *[ "point" ] *[ "frame-focus"] ")"
21077  size       = number | frame-params  size       = number | frame-params
21078  buf-name   = group | article | summary ...  buf-name   = group | article | summary ...
21079    @end group
21080  @end example  @end example
21081    
21082  The limitations are that the @code{frame} split can only appear as the  The limitations are that the @code{frame} split can only appear as the
# Line 17525  might be used: Line 21164  might be used:
21164                       (vertical 0.24                       (vertical 0.24
21165                                 (if (buffer-live-p gnus-summary-buffer)                                 (if (buffer-live-p gnus-summary-buffer)
21166                                     '(summary 0.5))                                     '(summary 0.5))
21167                                 (group 1.0)))))                                 (group 1.0))))
21168  @end lisp  @end lisp
21169    
21170  One common desire for a multiple frame split is to have a separate frame  One common desire for a multiple frame split is to have a separate frame
# Line 17558  you want to change the @code{article} se Line 21197  you want to change the @code{article} se
21197  @end lisp  @end lisp
21198    
21199  You'd typically stick these @code{gnus-add-configuration} calls in your  You'd typically stick these @code{gnus-add-configuration} calls in your
21200  @file{.gnus.el} file or in some startup hook---they should be run after  @file{~/.gnus.el} file or in some startup hook---they should be run after
21201  Gnus has been loaded.  Gnus has been loaded.
21202    
21203  @vindex gnus-always-force-window-configuration  @vindex gnus-always-force-window-configuration
# Line 17643  satisfied.  This will result in the new Line 21282  satisfied.  This will result in the new
21282  you'll get top speed again.  Gnus will save these compiled specs in the  you'll get top speed again.  Gnus will save these compiled specs in the
21283  @file{.newsrc.eld} file.  (User-defined functions aren't compiled by  @file{.newsrc.eld} file.  (User-defined functions aren't compiled by
21284  this function, though---you should compile them yourself by sticking  this function, though---you should compile them yourself by sticking
21285  them into the @code{.gnus.el} file and byte-compiling that file.)  them into the @file{~/.gnus.el} file and byte-compiling that file.)
21286    
21287    
21288  @node Mode Lines  @node Mode Lines
# Line 17791  Hook called after creating the score mod Line 21430  Hook called after creating the score mod
21430  @cindex mouse  @cindex mouse
21431  @cindex click  @cindex click
21432    
21433  Those new-fangled @dfn{mouse} contraptions are very popular with the  Those new-fangled @dfn{mouse} contraptions is very popular with the
21434  young, hep kids who don't want to learn the proper way to do things  young, hep kids who don't want to learn the proper way to do things
21435  these days.  Why, I remember way back in the summer of '89, when I was  these days.  Why, I remember way back in the summer of '89, when I was
21436  using Emacs on a Tops 20 system.  Three hundred users on one single  using Emacs on a Tops 20 system.  Three hundred users on one single
# Line 17800  machine, and every user was running Simu Line 21439  machine, and every user was running Simu
21439  Right.  Right.
21440    
21441  @vindex gnus-carpal  @vindex gnus-carpal
21442  Well, you can make Gnus display buffers full of buttons you can click to  Well, you can make Gnus display bufferfuls of buttons you can click to
21443  do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,  do anything by setting @code{gnus-carpal} to @code{t}.  Pretty simple,
21444  really.  Tell the chiropractor I sent you.  really.  Tell the chiropractor I sent you.
21445    
# Line 17863  been idle for thirty minutes: Line 21502  been idle for thirty minutes:
21502  (gnus-demon-close-connections nil 30)  (gnus-demon-close-connections nil 30)
21503  @end lisp  @end lisp
21504    
21505  Here's a handler that scans for PGP headers every hour when Emacs is  Here's a handler that scans for @acronym{PGP} headers every hour when
21506  idle:  Emacs is idle:
21507    
21508  @lisp  @lisp
21509  (gnus-demon-scan-pgp 60 t)  (gnus-demon-scan-pgp 60 t)
21510  @end lisp  @end lisp
21511    
21512  This @var{time} parameter and than @var{idle} parameter work together  This @var{time} parameter and that @var{idle} parameter work together
21513  in a strange, but wonderful fashion.  Basically, if @var{idle} is  in a strange, but wonderful fashion.  Basically, if @var{idle} is
21514  @code{nil}, then the function will be called every @var{time} minutes.  @code{nil}, then the function will be called every @var{time} minutes.
21515    
# Line 17897  seconds.  This is 60 by default.  If you Line 21536  seconds.  This is 60 by default.  If you
21536  all the timings in the handlers will be affected.)  all the timings in the handlers will be affected.)
21537    
21538  So, if you want to add a handler, you could put something like this in  So, if you want to add a handler, you could put something like this in
21539  your @file{.gnus} file:  your @file{~/.gnus.el} file:
21540    
21541  @findex gnus-demon-add-handler  @findex gnus-demon-add-handler
21542  @lisp  @lisp
# Line 17914  Some ready-made functions to do this hav Line 21553  Some ready-made functions to do this hav
21553  @code{gnus-demon-add-nntp-close-connection},  @code{gnus-demon-add-nntp-close-connection},
21554  @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and  @code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and
21555  @code{gnus-demon-add-scanmail}.  Just put those functions in your  @code{gnus-demon-add-scanmail}.  Just put those functions in your
21556  @file{.gnus} if you want those abilities.  @file{~/.gnus.el} if you want those abilities.
21557    
21558  @findex gnus-demon-init  @findex gnus-demon-init
21559  @findex gnus-demon-cancel  @findex gnus-demon-cancel
# Line 17962  by default. Line 21601  by default.
21601  @item gnus-nocem-groups  @item gnus-nocem-groups
21602  @vindex gnus-nocem-groups  @vindex gnus-nocem-groups
21603  Gnus will look for NoCeM messages in the groups in this list.  The  Gnus will look for NoCeM messages in the groups in this list.  The
21604  default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"  default is
21605  "alt.nocem.misc" "news.admin.net-abuse.announce")}.  @lisp
21606    ("news.lists.filters" "news.admin.net-abuse.bulletins"
21607     "alt.nocem.misc" "news.admin.net-abuse.announce")
21608    @end lisp
21609    
21610  @item gnus-nocem-issuers  @item gnus-nocem-issuers
21611  @vindex gnus-nocem-issuers  @vindex gnus-nocem-issuers
21612  There are many people issuing NoCeM messages.  This list says what  There are many people issuing NoCeM messages.  This list says what
21613  people you want to listen to.  The default is @code{("Automoose-1"  people you want to listen to.  The default is
21614  "clewis@@ferret.ocunix.on.ca" "cosmo.roadkill" "SpamHippo"  @lisp
21615  "hweede@@snafu.de")}; fine, upstanding citizens all of them.  ("Automoose-1" "clewis@@ferret.ocunix.on.ca"
21616     "cosmo.roadkill" "SpamHippo" "hweede@@snafu.de")
21617    @end lisp
21618    fine, upstanding citizens all of them.
21619    
21620  Known despammers that you can put in this list are listed at  Known despammers that you can put in this list are listed at@*
21621  @uref{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html}.  @uref{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html}.
21622    
21623  You do not have to heed NoCeM messages from all these people---just the  You do not have to heed NoCeM messages from all these people---just the
# Line 18029  This might be dangerous, though. Line 21674  This might be dangerous, though.
21674    
21675  @item gnus-nocem-directory  @item gnus-nocem-directory
21676  @vindex gnus-nocem-directory  @vindex gnus-nocem-directory
21677  This is where Gnus will store its NoCeM cache files.  The default is  This is where Gnus will store its NoCeM cache files.  The default is@*
21678  @file{~/News/NoCeM/}.  @file{~/News/NoCeM/}.
21679    
21680  @item gnus-nocem-expiry-wait  @item gnus-nocem-expiry-wait
# Line 18095  command, which should feel kinda like th Line 21740  command, which should feel kinda like th
21740  command.  command.
21741    
21742    
21743    @node Predicate Specifiers
21744    @section Predicate Specifiers
21745    @cindex predicate specifiers
21746    
21747    Some Gnus variables are @dfn{predicate specifiers}.  This is a special
21748    form that allows flexible specification of predicates without having
21749    to type all that much.
21750    
21751    These specifiers are lists consisting of functions, symbols and lists.
21752    
21753    Here's an example:
21754    
21755    @lisp
21756    (or gnus-article-unseen-p
21757        gnus-article-unread-p)
21758    @end lisp
21759    
21760    The available symbols are @code{or}, @code{and} and @code{not}.  The
21761    functions all take one parameter.
21762    
21763    @findex gnus-make-predicate
21764    Internally, Gnus calls @code{gnus-make-predicate} on these specifiers
21765    to create a function that can be called.  This input parameter to this
21766    function will be passed along to all the functions in the predicate
21767    specifier.
21768    
21769    
21770  @node Moderation  @node Moderation
21771  @section Moderation  @section Moderation
21772  @cindex moderation  @cindex moderation
# Line 18111  buffers.  Put Line 21783  buffers.  Put
21783  (add-hook 'gnus-summary-mode-hook 'gnus-moderate)  (add-hook 'gnus-summary-mode-hook 'gnus-moderate)
21784  @end lisp  @end lisp
21785    
21786  in your @file{.gnus.el} file.  in your @file{~/.gnus.el} file.
21787    
21788  If you are the moderator of @samp{rec.zoofle}, this is how it's  If you are the moderator of @samp{rec.zoofle}, this is how it's
21789  supposed to work:  supposed to work:
# Line 18139  To use moderation mode in these two grou Line 21811  To use moderation mode in these two grou
21811        "^nnml:rec.zoofle$\\|^rec.zoofle$")        "^nnml:rec.zoofle$\\|^rec.zoofle$")
21812  @end lisp  @end lisp
21813    
 @node Emacs Enhancements  
 @section Emacs Enhancements  
 @cindex Emacs 21  
   
 Starting with version 21, Emacs is able to display pictures and stuff,  
 so Gnus has taken advantage of that.  
   
 Gnus-specific tool bars will be used if Tool Bar mode is on.  Currently  
 the group, summary and message buffers have tool bars defined.  
   
 MIME image types may be displayed internally if Emacs was built with  
 appropriate support (see variable @code{image-types}).  `X-Face' headers  
 may be rendered as images internally if you have appropriate support  
 programs (@pxref{X-Face}).  You can play sounds internally if Emacs was  
 built with suitable audio support; otherwise Gnus will attempt to play  
 sounds externally.  
   
 @vindex gnus-treat-display-smileys  
 A simplified version of the XEmacs Smiley support for @dfn{emoticons}  
 (@pxref{Smileys}) is available on graphical displays under the control  
 of @code{gnus-treat-display-smileys}.  Text `smiley' faces---@samp{:-)},  
 @samp{:-/}, @samp{:-(} and the like---are mapped to pictures which are  
 displayed instead.  The mapping is controlled by a list of regexps  
 @vindex smiley-regexp-alist  
 @code{smiley-regexp-alist} mapping matched text to image file names.  It  
 contains matches for `smiley', `wry' and `frowny' by default.  
   
 There is currently no Emacs support for `Picons' (@pxref{Picons}), but  
 there is no reason why it couldn't be added.  
21814    
21815  @node XEmacs Enhancements  @node Image Enhancements
21816  @section XEmacs Enhancements  @section Image Enhancements
 @cindex XEmacs  
21817    
21818  XEmacs is able to display pictures and stuff, so Gnus has taken  XEmacs, as well as Emacs 21@footnote{Emacs 21 on MS Windows doesn't
21819  advantage of that.  support images yet.}, is able to display pictures and stuff, so Gnus has
21820    taken advantage of that.
21821    
21822  @menu  @menu
21823  * Picons::    How to display pictures of what your reading.  * X-Face::                      Display a funky, teensy black-and-white image.
21824  * Smileys::   Show all those happy faces the way they were meant to be shown.  * Face::                        Display a funkier, teensier colored image.
21825  * Toolbar::   Click'n'drool.  * Smileys::                     Show all those happy faces the way they were meant to be shown.
21826  * XVarious::  Other XEmacsy Gnusey variables.  * Picons::                      How to display pictures of what you're reading.
21827    * XVarious::                    Other XEmacsy Gnusey variables.
21828  @end menu  @end menu
21829    
21830    
21831  @node Picons  @node X-Face
21832  @subsection Picons  @subsection X-Face
21833    @cindex x-face
 @iftex  
 @iflatex  
 \include{picons}  
 @end iflatex  
 @end iftex  
   
 So@dots{}  You want to slow down your news reader even more!  This is a  
 good way to do so.  Its also a great way to impress people staring  
 over your shoulder as you read news.  
   
 @menu  
 * Picon Basics::           What are picons and How do I get them.  
 * Picon Requirements::     Don't go further if you aren't using XEmacs.  
 * Easy Picons::            Displaying Picons---the easy way.  
 * Hard Picons::            The way you should do it.  You'll learn something.  
 * Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.  
 @end menu  
   
21834    
21835  @node Picon Basics  @code{X-Face} headers describe a 48x48 pixel black-and-white (1 bit
21836  @subsubsection Picon Basics  depth) image that's supposed to represent the author of the message.
21837    It seems to be supported by an ever-growing number of mail and news
21838  What are Picons?  To quote directly from the Picons Web site:  readers.
21839    
21840    @cindex x-face
21841    @findex gnus-article-display-x-face
21842    @vindex gnus-article-x-face-command
21843    @vindex gnus-article-x-face-too-ugly
21844  @iftex  @iftex
21845  @iflatex  @iflatex
21846  \margindex{}  \include{xface}
21847  @end iflatex  @end iflatex
21848  @end iftex  @end iftex
21849    @c @anchor{X-Face}
21850    
21851  @quotation  Decoding an @code{X-Face} header either requires an Emacs that has
21852  @dfn{Picons} is short for ``personal icons''.  They're small,  @samp{compface} support (which most XEmacs versions has), or that you
21853  constrained images used to represent users and domains on the net,  have @samp{compface} installed on your system.  If either is true,
21854  organized into databases so that the appropriate image for a given  Gnus will default to displaying @code{X-Face} headers.
21855  e-mail address can be found.  Besides users and domains, there are picon  
21856  databases for Usenet newsgroups and weather forecasts.  The picons are  The variable that controls this is the
21857  in either monochrome @code{XBM} format or color @code{XPM} and  @code{gnus-article-x-face-command} variable.  If this variable is a
21858  @code{GIF} formats.  string, this string will be executed in a sub-shell.  If it is a
21859  @end quotation  function, this function will be called with the face as the argument.
21860    If the @code{gnus-article-x-face-too-ugly} (which is a regexp) matches
21861  @vindex gnus-picons-piconsearch-url  the @code{From} header, the face will not be shown.
21862  If you have a permanent connection to the Internet you can use Steve  
21863  Kinzler's Picons Search engine by setting  The default action under Emacs 20 is to fork off the @code{display}
21864  @code{gnus-picons-piconsearch-url} to the string @*  program@footnote{@code{display} is from the ImageMagick package.  For
21865  @uref{http://www.cs.indiana.edu/picons/search.html}.  the @code{uncompface} and @code{icontopbm} programs look for a package
21866    like @code{compface} or @code{faces-xface} on a GNU/Linux system.}  to
21867  @vindex gnus-picons-database  view the face.
21868  Otherwise you need a local copy of his database.  For instructions on  
21869  obtaining and installing the picons databases, point your Web browser at @*  Under XEmacs or Emacs 21+ with suitable image support, the default
21870  @uref{http://www.cs.indiana.edu/picons/ftp/index.html}.  Gnus expects  action is to display the face before the @code{From} header.  (It's
21871  picons to be installed into a location pointed to by  nicer if XEmacs has been compiled with @code{X-Face} support---that
21872  @code{gnus-picons-database}.  will make display somewhat faster.  If there's no native @code{X-Face}
21873    support, Gnus will try to convert the @code{X-Face} header using
21874    external programs from the @code{pbmplus} package and
21875    friends.@footnote{On a GNU/Linux system look for packages with names
21876    like @code{netpbm}, @code{libgr-progs} and @code{compface}.})
21877    
21878    (Note: @code{x-face} is used in the variable/function names, not
21879    @code{xface}).
21880    
21881  @node Picon Requirements  @noindent
21882  @subsubsection Picon Requirements  Face and variable:
21883    
21884  To have Gnus display Picons for you, you must be running XEmacs  @table @code
21885  19.13 or greater since all other versions of Emacs aren't yet able to  @item gnus-x-face
21886  display images.  @vindex gnus-x-face
21887    Face to show X-Face.  The colors from this face are used as the
21888    foreground and background colors of the displayed X-Faces.  The
21889    default colors are black and white.
21890    @end table
21891    
21892  Additionally, you must have @code{x} support compiled into XEmacs.  To  Gnus provides a few convenience functions and variables to allow
21893  display color picons which are much nicer than the black & white one,  easier insertion of X-Face headers in outgoing messages.
 you also need one of @code{xpm} or @code{gif} compiled into XEmacs.  
21894    
21895  @vindex gnus-picons-convert-x-face  @findex gnus-random-x-face
21896  If you want to display faces from @code{X-Face} headers, you should have  @vindex gnus-convert-pbm-to-x-face-command
21897  the @code{xface} support compiled into XEmacs.  Otherwise you must have  @vindex gnus-x-face-directory
21898  the @code{netpbm} utilities installed, or munge the  @code{gnus-random-x-face} goes through all the @samp{pbm} files in
21899  @code{gnus-picons-convert-x-face} variable to use something else.  @code{gnus-x-face-directory} and picks one at random, and then
21900    converts it to the X-Face format by using the
21901    @code{gnus-convert-pbm-to-x-face-command} shell command.  The
21902    @samp{pbm} files should be 48x48 pixels big.  It returns the X-Face
21903    header data as a string.
21904    
21905    @findex gnus-insert-random-x-face-header
21906    @code{gnus-insert-random-x-face-header} calls
21907    @code{gnus-random-x-face} and inserts a @samp{X-Face} header with the
21908    randomly generated data.
21909    
21910  @node Easy Picons  @findex gnus-x-face-from-file
21911  @subsubsection Easy Picons  @vindex gnus-convert-image-to-x-face-command
21912    @code{gnus-x-face-from-file} takes a GIF file as the parameter, and then
21913    converts the file to X-Face format by using the
21914    @code{gnus-convert-image-to-x-face-command} shell command.
21915    
21916  To enable displaying picons, simply put the following line in your  Here's how you would typically use the first function.  Put something
21917  @file{~/.gnus} file and start Gnus.  like the following in your @file{~/.gnus.el} file:
21918    
21919  @lisp  @lisp
21920  (setq gnus-use-picons t)  (setq message-required-news-headers
21921  (setq gnus-treat-display-picons t)        (nconc message-required-news-headers
21922                 (list '(X-Face . gnus-random-x-face))))
21923  @end lisp  @end lisp
21924    
21925  and make sure @code{gnus-picons-database} points to the directory  Using the last function would be something like this:
 containing the Picons databases.  
   
 Alternatively if you want to use the web piconsearch engine add this:  
21926    
21927  @lisp  @lisp
21928  (setq gnus-picons-piconsearch-url  (setq message-required-news-headers
21929        "http://www.cs.indiana.edu:800/piconsearch")        (nconc message-required-news-headers
21930                 (list '(X-Face . (lambda ()
21931                                    (gnus-x-face-from-file
21932                                     "~/My-face.gif"))))))
21933  @end lisp  @end lisp
21934    
21935    
21936  @node Hard Picons  @node Face
21937  @subsubsection Hard Picons  @subsection Face
21938    @cindex face
 @iftex  
 @iflatex  
 \margindex{}  
 @end iflatex  
 @end iftex  
   
 Gnus can display picons for you as you enter and leave groups and  
 articles.  It knows how to interact with three sections of the picons  
 database.  Namely, it can display the picons newsgroup pictures,  
 author's face picture(s), and the authors domain.  To enable this  
 feature, you need to select where to get the picons from, and where to  
 display them.  
   
 @table @code  
   
 @item gnus-picons-database  
 @vindex gnus-picons-database  
 The location of the picons database.  Should point to a directory  
 containing the @file{news}, @file{domains}, @file{users} (and so on)  
 subdirectories.  This is only useful if  
 @code{gnus-picons-piconsearch-url} is @code{nil}.  Defaults to  
 @file{/usr/local/faces/}.  
   
 @item gnus-picons-piconsearch-url  
 @vindex gnus-picons-piconsearch-url  
 The URL for the web picons search engine.  The only currently known  
 engine is @uref{http://www.cs.indiana.edu:800/piconsearch}.  To  
 workaround network delays, icons will be fetched in the background.  If  
 this is @code{nil} 'the default), then picons are fetched from local  
 database indicated by @code{gnus-picons-database}.  
   
 @item gnus-picons-display-where  
 @vindex gnus-picons-display-where  
 Where the picon images should be displayed.  It is @code{picons} by  
 default (which by default maps to the buffer @samp{*Picons*}).  Other  
 valid places could be @code{article}, @code{summary}, or  
 @samp{*scratch*} for all I care.  Just make sure that you've made the  
 buffer visible using the standard Gnus window configuration  
 routines---@pxref{Windows Configuration}.  
   
 @item gnus-picons-group-excluded-groups  
 @vindex gnus-picons-group-excluded-groups  
 Groups that are matched by this regexp won't have their group icons  
 displayed.  
   
 @end table  
   
 Note: If you set @code{gnus-use-picons} to @code{t}, it will set up your  
 window configuration for you to include the @code{picons} buffer.  
   
 Now that you've made those decision, you need to add the following  
 functions to the appropriate hooks so these pictures will get displayed  
 at the right time.  
   
 @vindex gnus-picons-display-where  
 @table @code  
 @item gnus-article-display-picons  
 @findex gnus-article-display-picons  
 Looks up and displays the picons for the author and the author's domain  
 in the @code{gnus-picons-display-where} buffer.  
   
 @item gnus-picons-article-display-x-face  
 @findex gnus-article-display-picons  
 Decodes and displays the X-Face header if present.  
   
 @end table  
   
   
   
 @node Picon Useless Configuration  
 @subsubsection Picon Useless Configuration  
   
 @iftex  
 @iflatex  
 \margindex{}  
 @end iflatex  
 @end iftex  
21939    
21940  The following variables offer further control over how things are  @c #### FIXME: faces and x-faces'implementations should really be harmonized.
 done, where things are located, and other useless stuff you really  
 don't need to worry about.  
21941    
21942  @table @code  @code{Face} headers are essentially a funkier version of @code{X-Face}
21943    ones. They describe a 48x48 pixel colored image that's supposed to
21944    represent the author of the message.
21945    
21946  @item gnus-picons-news-directories  @cindex face
21947  @vindex gnus-picons-news-directories  @findex gnus-article-display-face
21948  List of subdirectories to search in @code{gnus-picons-database} for  The contents of a @code{Face} header must be a base64 encoded PNG image.
21949  newsgroups faces.  @code{("news")} is the default.  See @uref{http://quimby.gnus.org/circus/face/} for the precise
21950    specifications.
21951    
21952  @item gnus-picons-user-directories  Gnus provides a few convenience functions and variables to allow
21953  @vindex gnus-picons-user-directories  easier insertion of Face headers in outgoing messages.
 List of subdirectories to search in @code{gnus-picons-database} for user  
 faces.  @code{("local" "users" "usenix" "misc")} is the default.  
   
 @item gnus-picons-domain-directories  
 @vindex gnus-picons-domain-directories  
 List of subdirectories to search in @code{gnus-picons-database} for  
 domain name faces.  Defaults to @code{("domains")}.  Some people may  
 want to add @samp{"unknown"} to this list.  
21954    
21955  @item gnus-picons-convert-x-face  @findex gnus-convert-png-to-face
21956  @vindex gnus-picons-convert-x-face  @code{gnus-convert-png-to-face} takes a 48x48 PNG image, no longer than
21957  If you don't have @code{xface} support builtin XEmacs, this is the  726 bytes long, and converts it to a face.
 command to use to convert the @code{X-Face} header to an X bitmap  
 (@code{xbm}).  Defaults to @code{(format "@{ echo '/* Width=48,  
 Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"  
 gnus-picons-x-face-file-name)}  
   
 @item gnus-picons-x-face-file-name  
 @vindex gnus-picons-x-face-file-name  
 Names a temporary file to store the @code{X-Face} bitmap in.  Defaults  
 to @code{(format "/tmp/picon-xface.%s.xbm" (user-login-name))}.  
   
 @item gnus-picons-has-modeline-p  
 @vindex gnus-picons-has-modeline-p  
 If you have set @code{gnus-picons-display-where} to @code{picons}, your  
 XEmacs frame will become really cluttered.  To alleviate this a bit you  
 can set @code{gnus-picons-has-modeline-p} to @code{nil}; this will  
 remove the mode line from the Picons buffer.  This is only useful if  
 @code{gnus-picons-display-where} is @code{picons}.  
   
 @item gnus-picons-refresh-before-display  
 @vindex gnus-picons-refresh-before-display  
 If non-nil, display the article buffer before computing the picons.  
 Defaults to @code{nil}.  
   
 @item gnus-picons-display-as-address  
 @vindex gnus-picons-display-as-address  
 If @code{t} display textual email addresses along with pictures.  
 Defaults to @code{t}.  
21958    
21959  @item gnus-picons-file-suffixes  @findex gnus-face-from-file
21960  @vindex gnus-picons-file-suffixes  @vindex gnus-convert-image-to-face-command
21961  Ordered list of suffixes on picon file names to try.  Defaults to  @code{gnus-face-from-file} takes a JPEG file as the parameter, and then
21962  @code{("xpm" "gif" "xbm")} minus those not builtin your XEmacs.  converts the file to Face format by using the
21963    @code{gnus-convert-image-to-face-command} shell command.
21964    
21965  @item gnus-picons-setup-hook  Here's how you would typically use this function. Put something like the
21966  @vindex gnus-picons-setup-hook  following in your @file{~/.gnus.el} file:
 Hook run in the picon buffer, if that is displayed.  
   
 @item gnus-picons-display-article-move-p  
 @vindex gnus-picons-display-article-move-p  
 Whether to move point to first empty line when displaying picons.  This  
 has only an effect if `gnus-picons-display-where' has value `article'.  
   
 If @code{nil}, display the picons in the @code{From} and  
 @code{Newsgroups} lines.  This is the default.  
   
 @item gnus-picons-clear-cache-on-shutdown  
 @vindex gnus-picons-clear-cache-on-shutdown  
 Whether to clear the picons cache when exiting gnus.  Gnus caches every  
 picons it finds while it is running.  This saves some time in the search  
 process but eats some memory.  If this variable is set to @code{nil},  
 Gnus will never clear the cache itself; you will have to manually call  
 @code{gnus-picons-clear-cache} to clear it.  Otherwise the cache will be  
 cleared every time you exit Gnus.  Defaults to @code{t}.  
21967    
21968  @iftex  @lisp
21969  @iflatex  (setq message-required-news-headers
21970  \margindex{}        (nconc message-required-news-headers
21971  @end iflatex               (list '(Face . (lambda ()
21972  @end iftex                                (gnus-face-from-file "~/face.jpg"))))))
21973    @end lisp
21974    
 @end table  
21975    
21976  @node Smileys  @node Smileys
21977  @subsection Smileys  @subsection Smileys
# Line 18455  cleared every time you exit Gnus.  Defau Line 21979  cleared every time you exit Gnus.  Defau
21979    
21980  @iftex  @iftex
21981  @iflatex  @iflatex
21982  \gnusfig{-3cm}{0.5cm}{\epsfig{figure=tmp/BigFace.ps,height=20cm}}  \gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
21983  \input{smiley}  \input{smiley}
21984  @end iflatex  @end iflatex
21985  @end iftex  @end iftex
# Line 18464  cleared every time you exit Gnus.  Defau Line 21988  cleared every time you exit Gnus.  Defau
21988  currently the only package that uses Smiley, it is documented here.  currently the only package that uses Smiley, it is documented here.
21989    
21990  In short---to use Smiley in Gnus, put the following in your  In short---to use Smiley in Gnus, put the following in your
21991  @file{.gnus.el} file:  @file{~/.gnus.el} file:
21992    
21993  @lisp  @lisp
21994  (setq gnus-treat-display-smileys t)  (setq gnus-treat-display-smileys t)
21995  @end lisp  @end lisp
21996    
21997  Smiley maps text smiley faces---@samp{:-)}, @samp{:-=}, @samp{:-(} and  Smiley maps text smiley faces---@samp{:-)}, @samp{8-)}, @samp{:-(} and
21998  the like---to pictures and displays those instead of the text smiley  the like---to pictures and displays those instead of the text smiley
21999  faces.  The conversion is controlled by a list of regexps that matches  faces.  The conversion is controlled by a list of regexps that matches
22000  text and maps that to file names.  text and maps that to file names.
22001    
22002  @vindex smiley-nosey-regexp-alist  @vindex smiley-regexp-alist
22003  @vindex smiley-deformed-regexp-alist  The alist used is specified by the @code{smiley-regexp-alist}
22004  Smiley supplies two example conversion alists by default:  variable.  The first item in each element is the regexp to be matched;
22005  @code{smiley-deformed-regexp-alist} (which matches @samp{:)}, @samp{:(}  the second element is the regexp match group that is to be replaced by
22006  and so on), and @code{smiley-nosey-regexp-alist} (which matches  the picture; and the third element is the name of the file to be
22007  @samp{:-)}, @samp{:-(} and so on).  displayed.
   
 The alist used is specified by the @code{smiley-regexp-alist} variable,  
 which defaults to the value of @code{smiley-deformed-regexp-alist}.  
   
 The first item in each element is the regexp to be matched; the second  
 element is the regexp match group that is to be replaced by the picture;  
 and the third element is the name of the file to be displayed.  
22008    
22009  The following variables customize where Smiley will look for these  The following variables customize where Smiley will look for these
22010  files, as well as the color to be used and stuff:  files:
22011    
22012  @table @code  @table @code
22013    
# Line 18498  files, as well as the color to be used a Line 22015  files, as well as the color to be used a
22015  @vindex smiley-data-directory  @vindex smiley-data-directory
22016  Where Smiley will look for smiley faces files.  Where Smiley will look for smiley faces files.
22017    
22018  @item smiley-flesh-color  @item gnus-smiley-file-types
22019  @vindex smiley-flesh-color  @vindex gnus-smiley-file-types
22020  Skin color.  The default is @samp{yellow}, which is really racist.  List of suffixes on smiley file names to try.
   
 @item smiley-features-color  
 @vindex smiley-features-color  
 Color of the features of the face.  The default is @samp{black}.  
22021    
22022  @item smiley-tongue-color  @end table
 @vindex smiley-tongue-color  
 Color of the tongue.  The default is @samp{red}.  
   
 @item smiley-circle-color  
 @vindex smiley-circle-color  
 Color of the circle around the face.  The default is @samp{black}.  
22023    
 @item smiley-mouse-face  
 @vindex smiley-mouse-face  
 Face used for mouse highlighting over the smiley face.  
22024    
22025  @end table  @node Picons
22026    @subsection Picons
22027    
22028    @iftex
22029    @iflatex
22030    \include{picons}
22031    @end iflatex
22032    @end iftex
22033    
22034  @node Toolbar  So@dots{}  You want to slow down your news reader even more!  This is a
22035  @subsection Toolbar  good way to do so.  It's also a great way to impress people staring
22036    over your shoulder as you read news.
22037    
22038  @table @code  What are Picons?  To quote directly from the Picons Web site:
22039    
22040  @iftex  @iftex
22041  @iflatex  @iflatex
# Line 18532  Face used for mouse highlighting over th Line 22043  Face used for mouse highlighting over th
22043  @end iflatex  @end iflatex
22044  @end iftex  @end iftex
22045    
22046  @item gnus-use-toolbar  @quotation
22047  @vindex gnus-use-toolbar  @dfn{Picons} is short for ``personal icons''.  They're small,
22048  If @code{nil}, don't display toolbars.  If non-@code{nil}, it should be  constrained images used to represent users and domains on the net,
22049  one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},  organized into databases so that the appropriate image for a given
22050  @code{right-toolbar}, or @code{left-toolbar}.  e-mail address can be found.  Besides users and domains, there are picon
22051    databases for Usenet newsgroups and weather forecasts.  The picons are
22052    in either monochrome @code{XBM} format or color @code{XPM} and
22053    @code{GIF} formats.
22054    @end quotation
22055    
22056  @item gnus-group-toolbar  @vindex gnus-picon-databases
22057  @vindex gnus-group-toolbar  For instructions on obtaining and installing the picons databases,
22058  The toolbar in the group buffer.  point your Web browser at
22059    @uref{http://www.cs.indiana.edu/picons/ftp/index.html}.
22060    
22061  @item gnus-summary-toolbar  If you are using Debian GNU/Linux, saying @samp{apt-get install
22062  @vindex gnus-summary-toolbar  picons.*} will install the picons where Gnus can find them.
 The toolbar in the summary buffer.  
22063    
22064  @item gnus-summary-mail-toolbar  To enable displaying picons, simply make sure that
22065  @vindex gnus-summary-mail-toolbar  @code{gnus-picon-databases} points to the directory containing the
22066  The toolbar in the summary buffer of mail groups.  Picons databases.
22067    
22068    The following variables offer control over where things are located.
22069    
22070    @table @code
22071    
22072    @item gnus-picon-databases
22073    @vindex gnus-picon-databases
22074    The location of the picons database.  This is a list of directories
22075    containing the @file{news}, @file{domains}, @file{users} (and so on)
22076    subdirectories.  Defaults to @code{("/usr/lib/picon"
22077    "/usr/local/faces")}.
22078    
22079    @item gnus-picon-news-directories
22080    @vindex gnus-picon-news-directories
22081    List of subdirectories to search in @code{gnus-picon-databases} for
22082    newsgroups faces.  @code{("news")} is the default.
22083    
22084    @item gnus-picon-user-directories
22085    @vindex gnus-picon-user-directories
22086    List of subdirectories to search in @code{gnus-picon-databases} for user
22087    faces.  @code{("users" "usenix" "local" "misc")} is the default.
22088    
22089    @item gnus-picon-domain-directories
22090    @vindex gnus-picon-domain-directories
22091    List of subdirectories to search in @code{gnus-picon-databases} for
22092    domain name faces.  Defaults to @code{("domains")}.  Some people may
22093    want to add @samp{"unknown"} to this list.
22094    
22095    @item gnus-picon-file-types
22096    @vindex gnus-picon-file-types
22097    Ordered list of suffixes on picon file names to try.  Defaults to
22098    @code{("xpm" "gif" "xbm")} minus those not built-in your Emacs.
22099    
22100  @end table  @end table
22101    
# Line 18580  Valid values include @code{flame}, @code Line 22127  Valid values include @code{flame}, @code
22127  A glyph displayed in all Gnus mode lines.  It is a tiny gnu head by  A glyph displayed in all Gnus mode lines.  It is a tiny gnu head by
22128  default.  default.
22129    
22130    @end table
22131    
22132    @subsubsection Toolbar
22133    
22134    @table @code
22135    
22136    @item gnus-use-toolbar
22137    @vindex gnus-use-toolbar
22138    If @code{nil}, don't display toolbars.  If non-@code{nil}, it should be
22139    one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
22140    @code{right-toolbar}, or @code{left-toolbar}.
22141    
22142    @item gnus-group-toolbar
22143    @vindex gnus-group-toolbar
22144    The toolbar in the group buffer.
22145    
22146    @item gnus-summary-toolbar
22147    @vindex gnus-summary-toolbar
22148    The toolbar in the summary buffer.
22149    
22150    @item gnus-summary-mail-toolbar
22151    @vindex gnus-summary-mail-toolbar
22152    The toolbar in the summary buffer of mail groups.
22153    
22154    @end table
22155    
22156  @iftex  @iftex
22157  @iflatex  @iflatex
22158  \margindex{}  \margindex{}
22159  @end iflatex  @end iflatex
22160  @end iftex  @end iftex
22161    
 @end table  
   
   
   
22162    
22163  @node Fuzzy Matching  @node Fuzzy Matching
22164  @section Fuzzy Matching  @section Fuzzy Matching
# Line 18633  mail group, only to find two pyramid sch Line 22202  mail group, only to find two pyramid sch
22202  (``New!  Miracle tonic for growing full, lustrous hair on your toes!'')  (``New!  Miracle tonic for growing full, lustrous hair on your toes!'')
22203  and one mail asking me to repent and find some god.  and one mail asking me to repent and find some god.
22204    
22205  This is annoying.  This is annoying.  Here's what you can do about it.
22206    
22207  The way to deal with this is having Gnus split out all spam into a  @menu
22208    * The problem of spam::         Some background, and some solutions
22209    * Anti-Spam Basics::            Simple steps to reduce the amount of spam.
22210    * SpamAssassin::                How to use external anti-spam tools.
22211    * Hashcash::                    Reduce spam by burning CPU time.
22212    * Filtering Spam Using The Spam ELisp Package::
22213    * Filtering Spam Using Statistics with spam-stat::
22214    @end menu
22215    
22216    @node The problem of spam
22217    @subsection The problem of spam
22218    @cindex email spam
22219    @cindex spam filtering approaches
22220    @cindex filtering approaches, spam
22221    @cindex UCE
22222    @cindex unsolicited commercial email
22223    
22224    First, some background on spam.
22225    
22226    If you have access to e-mail, you are familiar with spam (technically
22227    termed @acronym{UCE}, Unsolicited Commercial E-mail).  Simply put, it
22228    exists because e-mail delivery is very cheap compared to paper mail,
22229    so only a very small percentage of people need to respond to an UCE to
22230    make it worthwhile to the advertiser.  Ironically, one of the most
22231    common spams is the one offering a database of e-mail addresses for
22232    further spamming.  Senders of spam are usually called @emph{spammers},
22233    but terms like @emph{vermin}, @emph{scum}, @emph{sociopaths}, and
22234    @emph{morons} are in common use as well.
22235    
22236    Spam comes from a wide variety of sources.  It is simply impossible to
22237    dispose of all spam without discarding useful messages.  A good
22238    example is the TMDA system, which requires senders
22239    unknown to you to confirm themselves as legitimate senders before
22240    their e-mail can reach you.  Without getting into the technical side
22241    of TMDA, a downside is clearly that e-mail from legitimate sources may
22242    be discarded if those sources can't or won't confirm themselves
22243    through the TMDA system.  Another problem with TMDA is that it
22244    requires its users to have a basic understanding of e-mail delivery
22245    and processing.
22246    
22247    The simplest approach to filtering spam is filtering, at the mail
22248    server or when you sort through incoming mail.  If you get 200 spam
22249    messages per day from @samp{random-address@@vmadmin.com}, you block
22250    @samp{vmadmin.com}.  If you get 200 messages about @samp{VIAGRA}, you
22251    discard all messages with @samp{VIAGRA} in the message.  If you get
22252    lots of spam from China, for example, you try to filter all mail from
22253    Chinese IPs.
22254    
22255    This, unfortunately, is a great way to discard legitimate e-mail.  For
22256    instance, the very informative and useful RISKS digest has been
22257    blocked by overzealous mail filters because it @strong{contained}
22258    words that were common in spam messages.  The risks of blocking a
22259    whole country from contacting you should also be obvious, so don't do
22260    it if you have the choice.  Nevertheless, in isolated cases, with
22261    great care, direct filtering of mail can be useful.
22262    
22263    Another approach to filtering e-mail is the distributed spam
22264    processing, for instance DCC implements such a system.  In essence,
22265    @var{N} systems around the world agree that a machine @var{X} in
22266    Ghana, Estonia, or California is sending out spam e-mail, and these
22267    @var{N} systems enter @var{X} or the spam e-mail from @var{X} into a
22268    database.  The criteria for spam detection vary---it may be the number
22269    of messages sent, the content of the messages, and so on.  When a user
22270    of the distributed processing system wants to find out if a message is
22271    spam, he consults one of those @var{N} systems.
22272    
22273    Distributed spam processing works very well against spammers that send
22274    a large number of messages at once, but it requires the user to set up
22275    fairly complicated checks.  There are commercial and free distributed
22276    spam processing systems.  Distributed spam processing has its risks as
22277    well.  For instance legitimate e-mail senders have been accused of
22278    sending spam, and their web sites and mailing lists have been shut
22279    down for some time because of the incident.
22280    
22281    The statistical approach to spam filtering is also popular.  It is
22282    based on a statistical analysis of previous spam messages.  Usually
22283    the analysis is a simple word frequency count, with perhaps pairs of
22284    words or 3-word combinations thrown into the mix.  Statistical
22285    analysis of spam works very well in most of the cases, but it can
22286    classify legitimate e-mail as spam in some cases.  It takes time to
22287    run the analysis, the full message must be analyzed, and the user has
22288    to store the database of spam analyses.  Statistical analysis on the
22289    server is gaining popularity.  This has the advantage of letting the
22290    user Just Read Mail, but has the disadvantage that it's harder to tell
22291    the server that it has misclassified mail.
22292    
22293    Fighting spam is not easy, no matter what anyone says.  There is no
22294    magic switch that will distinguish Viagra ads from Mom's e-mails.
22295    Even people are having a hard time telling spam apart from non-spam,
22296    because spammers are actively looking to fool us into thinking they
22297    are Mom, essentially.  Spamming is irritating, irresponsible, and
22298    idiotic behavior from a bunch of people who think the world owes them
22299    a favor.  We hope the following sections will help you in fighting the
22300    spam plague.
22301    
22302    @node Anti-Spam Basics
22303    @subsection Anti-Spam Basics
22304    @cindex email spam
22305    @cindex spam
22306    @cindex UCE
22307    @cindex unsolicited commercial email
22308    
22309    One way of dealing with spam is having Gnus split out all spam into a
22310  @samp{spam} mail group (@pxref{Splitting Mail}).  @samp{spam} mail group (@pxref{Splitting Mail}).
22311    
22312  First, pick one (1) valid mail address that you can be reached at, and  First, pick one (1) valid mail address that you can be reached at, and
# Line 18654  Then put the following split rule in @co Line 22325  Then put the following split rule in @co
22325  (@pxref{Fancy Mail Splitting}):  (@pxref{Fancy Mail Splitting}):
22326    
22327  @lisp  @lisp
22328  (  (...
  ...  
22329   (to "larsi@@trym.ifi.uio.no"   (to "larsi@@trym.ifi.uio.no"
22330        (| ("subject" "re:.*" "misc")       (| ("subject" "re:.*" "misc")
22331           ("references" ".*@@.*" "misc")          ("references" ".*@@.*" "misc")
22332           "spam"))          "spam"))
22333   ...   ...)
 )  
22334  @end lisp  @end lisp
22335    
22336  This says that all mail to this address is suspect, but if it has a  This says that all mail to this address is suspect, but if it has a
# Line 18669  This says that all mail to this address Line 22338  This says that all mail to this address
22338  header, it's probably ok.  All the rest goes to the @samp{spam} group.  header, it's probably ok.  All the rest goes to the @samp{spam} group.
22339  (This idea probably comes from Tim Pierce.)  (This idea probably comes from Tim Pierce.)
22340    
22341  In addition, many mail spammers talk directly to your @code{smtp} server  In addition, many mail spammers talk directly to your @acronym{SMTP} server
22342  and do not include your email address explicitly in the @code{To}  and do not include your email address explicitly in the @code{To}
22343  header.  Why they do this is unknown---perhaps it's to thwart this  header.  Why they do this is unknown---perhaps it's to thwart this
22344  thwarting scheme?  In any case, this is trivial to deal with---you just  thwarting scheme?  In any case, this is trivial to deal with---you just
# Line 18689  check for legitimate mail, though.  If y Line 22358  check for legitimate mail, though.  If y
22358  citizen, you can even send off complaints to the proper authorities on  citizen, you can even send off complaints to the proper authorities on
22359  each unsolicited commercial email---at your leisure.  each unsolicited commercial email---at your leisure.
22360    
 If you are also a lazy net citizen, you will probably prefer  
 complaining automatically with the @file{gnus-junk.el} package,  
 available as free software at @*  
 @uref{http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html}.  Since most  
 e-mail spam is sent automatically, this may reconcile the cosmic  
 balance somewhat.  
   
22361  This works for me.  It allows people an easy way to contact me (they can  This works for me.  It allows people an easy way to contact me (they can
22362  just press @kbd{r} in the usual way), and I'm not bothered at all with  just press @kbd{r} in the usual way), and I'm not bothered at all with
22363  spam.  It's a win-win situation.  Forging @code{From} headers to point  spam.  It's a win-win situation.  Forging @code{From} headers to point
22364  to non-existent domains is yucky, in my opinion.  to non-existent domains is yucky, in my opinion.
22365    
22366    Be careful with this approach.  Spammers are wise to it.
22367    
22368    
22369    @node SpamAssassin
22370    @subsection SpamAssassin, Vipul's Razor, DCC, etc
22371    @cindex SpamAssassin
22372    @cindex Vipul's Razor
22373    @cindex DCC
22374    
22375    The days where the hints in the previous section were sufficient in
22376    avoiding spam are coming to an end.  There are many tools out there
22377    that claim to reduce the amount of spam you get.  This section could
22378    easily become outdated fast, as new products replace old, but
22379    fortunately most of these tools seem to have similar interfaces.  Even
22380    though this section will use SpamAssassin as an example, it should be
22381    easy to adapt it to most other tools.
22382    
22383    Note that this section does not involve the @code{spam.el} package,
22384    which is discussed in the next section.  If you don't care for all
22385    the features of @code{spam.el}, you can make do with these simple
22386    recipes.
22387    
22388    If the tool you are using is not installed on the mail server, you
22389    need to invoke it yourself.  Ideas on how to use the
22390    @code{:postscript} mail source parameter (@pxref{Mail Source
22391    Specifiers}) follow.
22392    
22393    @lisp
22394    (setq mail-sources
22395          '((file :prescript "formail -bs spamassassin < /var/mail/%u")
22396            (pop :user "jrl"
22397                 :server "pophost"
22398                 :postscript
22399                 "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
22400    @end lisp
22401    
22402    Once you manage to process your incoming spool somehow, thus making
22403    the mail contain e.g.@: a header indicating it is spam, you are ready to
22404    filter it out.  Using normal split methods (@pxref{Splitting Mail}):
22405    
22406    @lisp
22407    (setq nnmail-split-methods '(("spam"  "^X-Spam-Flag: YES")
22408                                 ...))
22409    @end lisp
22410    
22411    Or using fancy split methods (@pxref{Fancy Mail Splitting}):
22412    
22413    @lisp
22414    (setq nnmail-split-methods 'nnmail-split-fancy
22415          nnmail-split-fancy '(| ("X-Spam-Flag" "YES" "spam")
22416                                 ...))
22417    @end lisp
22418    
22419    Some people might not like the idea of piping the mail through various
22420    programs using a @code{:prescript} (if some program is buggy, you
22421    might lose all mail).  If you are one of them, another solution is to
22422    call the external tools during splitting.  Example fancy split method:
22423    
22424    @lisp
22425    (setq nnmail-split-fancy '(| (: kevin-spamassassin)
22426                                 ...))
22427    (defun kevin-spamassassin ()
22428      (save-excursion
22429        (save-restriction
22430          (widen)
22431          (if (eq 1 (call-process-region (point-min) (point-max)
22432                                         "spamc" nil nil nil "-c"))
22433              "spam"))))
22434    @end lisp
22435    
22436    Note that with the nnimap backend, message bodies will not be
22437    downloaded by default.  You need to set
22438    @code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
22439    IMAP}).
22440    
22441    That is about it.  As some spam is likely to get through anyway, you
22442    might want to have a nifty function to call when you happen to read
22443    spam.  And here is the nifty function:
22444    
22445    @lisp
22446     (defun my-gnus-raze-spam ()
22447      "Submit SPAM to Vipul's Razor, then mark it as expirable."
22448      (interactive)
22449      (gnus-summary-show-raw-article)
22450      (gnus-summary-save-in-pipe "razor-report -f -d")
22451      (gnus-summary-mark-as-expirable 1))
22452    @end lisp
22453    
22454    @node Hashcash
22455    @subsection Hashcash
22456    @cindex hashcash
22457    
22458    A novel technique to fight spam is to require senders to do something
22459    costly for each message they send.  This has the obvious drawback that
22460    you cannot rely on everyone in the world using this technique,
22461    since it is not part of the Internet standards, but it may be useful
22462    in smaller communities.
22463    
22464    While the tools in the previous section work well in practice, they
22465    work only because the tools are constantly maintained and updated as
22466    new form of spam appears.  This means that a small percentage of spam
22467    will always get through.  It also means that somewhere, someone needs
22468    to read lots of spam to update these tools.  Hashcash avoids that, but
22469    instead prefers that everyone you contact through e-mail supports the
22470    scheme.  You can view the two approaches as pragmatic vs dogmatic.
22471    The approaches have their own advantages and disadvantages, but as
22472    often in the real world, a combination of them is stronger than either
22473    one of them separately.
22474    
22475    @cindex X-Hashcash
22476    The ``something costly'' is to burn CPU time, more specifically to
22477    compute a hash collision up to a certain number of bits.  The
22478    resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
22479    header.  For more details, and for the external application
22480    @code{hashcash} you need to install to use this feature, see
22481    @uref{http://www.cypherspace.org/~adam/hashcash/}.  Even more
22482    information can be found at @uref{http://www.camram.org/}.
22483    
22484    If you wish to call hashcash for each message you send, say something
22485    like:
22486    
22487    @lisp
22488    (require 'hashcash)
22489    (add-hook 'message-send-hook 'mail-add-payment)
22490    @end lisp
22491    
22492    The @file{hashcash.el} library can be found in the Gnus development
22493    contrib directory or at
22494    @uref{http://users.actrix.gen.nz/mycroft/hashcash.el}.
22495    
22496    You will need to set up some additional variables as well:
22497    
22498    @table @code
22499    
22500    @item hashcash-default-payment
22501    @vindex hashcash-default-payment
22502    This variable indicates the default number of bits the hash collision
22503    should consist of.  By default this is 0, meaning nothing will be
22504    done.  Suggested useful values include 17 to 29.
22505    
22506    @item hashcash-payment-alist
22507    @vindex hashcash-payment-alist
22508    Some receivers may require you to spend burn more CPU time than the
22509    default.  This variable contains a list of @samp{(@var{addr}
22510    @var{amount})} cells, where @var{addr} is the receiver (email address
22511    or newsgroup) and @var{amount} is the number of bits in the collision
22512    that is needed.  It can also contain @samp{(@var{addr} @var{string}
22513    @var{amount})} cells, where the @var{string} is the string to use
22514    (normally the email address or newsgroup name is used).
22515    
22516    @item hashcash
22517    @vindex hashcash
22518    Where the @code{hashcash} binary is installed.
22519    
22520    @end table
22521    
22522    Currently there is no built in functionality in Gnus to verify
22523    hashcash cookies, it is expected that this is performed by your hand
22524    customized mail filtering scripts.  Improvements in this area would be
22525    a useful contribution, however.
22526    
22527    @node Filtering Spam Using The Spam ELisp Package
22528    @subsection Filtering Spam Using The Spam ELisp Package
22529    @cindex spam filtering
22530    @cindex spam
22531    
22532    The idea behind @file{spam.el} is to have a control center for spam detection
22533    and filtering in Gnus.  To that end, @file{spam.el} does two things: it
22534    filters new mail, and it analyzes mail known to be spam or ham.
22535    @dfn{Ham} is the name used throughout @file{spam.el} to indicate
22536    non-spam messages.
22537    
22538    First of all, you @strong{must} run the function
22539    @code{spam-initialize} to autoload @code{spam.el} and to install the
22540    @code{spam.el} hooks.  There is one exception: if you use the
22541    @code{spam-use-stat} (@pxref{spam-stat spam filtering}) setting, you
22542    should turn it on before @code{spam-initialize}:
22543    
22544    @example
22545    (setq spam-use-stat t) ;; if needed
22546    (spam-initialize)
22547    @end example
22548    
22549    So, what happens when you load @file{spam.el}?
22550    
22551    First, some hooks will get installed by @code{spam-initialize}.  There
22552    are some hooks for @code{spam-stat} so it can save its databases, and
22553    there are hooks so interesting things will happen when you enter and
22554    leave a group.  More on the sequence of events later (@pxref{Spam
22555    ELisp Package Sequence of Events}).
22556    
22557    You get the following keyboard commands:
22558    
22559    @table @kbd
22560    
22561    @item M-d
22562    @itemx M s x
22563    @itemx S x
22564    @kindex M-d
22565    @kindex S x
22566    @kindex M s x
22567    @findex gnus-summary-mark-as-spam
22568    @code{gnus-summary-mark-as-spam}.
22569    
22570    Mark current article as spam, showing it with the @samp{$} mark.
22571    Whenever you see a spam article, make sure to mark its summary line
22572    with @kbd{M-d} before leaving the group.  This is done automatically
22573    for unread articles in @emph{spam} groups.
22574    
22575    @item M s t
22576    @itemx S t
22577    @kindex M s t
22578    @kindex S t
22579    @findex spam-bogofilter-score
22580    @code{spam-bogofilter-score}.
22581    
22582    You must have Bogofilter installed for that command to work properly.
22583    
22584    @xref{Bogofilter}.
22585    
22586    @end table
22587    
22588    Also, when you load @file{spam.el}, you will be able to customize its
22589    variables.  Try @code{customize-group} on the @samp{spam} variable
22590    group.
22591    
22592    @menu
22593    * Spam ELisp Package Sequence of Events::  
22594    * Spam ELisp Package Filtering of Incoming Mail::  
22595    * Spam ELisp Package Global Variables::  
22596    * Spam ELisp Package Configuration Examples::  
22597    * Blacklists and Whitelists::  
22598    * BBDB Whitelists::            
22599    * Gmane Spam Reporting::        
22600    * Anti-spam Hashcash Payments::  
22601    * Blackholes::                  
22602    * Regular Expressions Header Matching::  
22603    * Bogofilter::                  
22604    * ifile spam filtering::        
22605    * spam-stat spam filtering::    
22606    * SpamOracle::                  
22607    * Extending the Spam ELisp package::  
22608    @end menu
22609    
22610    @node Spam ELisp Package Sequence of Events
22611    @subsubsection Spam ELisp Package Sequence of Events
22612    @cindex spam filtering
22613    @cindex spam filtering sequence of events
22614    @cindex spam
22615    
22616    You must read this section to understand how @code{spam.el} works.
22617    Do not skip, speed-read, or glance through this section.
22618    
22619    There are two @emph{contact points}, if you will, between
22620    @code{spam.el} and the rest of Gnus: checking new mail for spam, and
22621    leaving a group.
22622    
22623    Getting new mail is done in one of two ways.  You can either split
22624    your incoming mail or you can classify new articles as ham or spam
22625    when you enter the group.
22626    
22627    Splitting incoming mail is better suited to mail backends such as
22628    @code{nnml} or @code{nnimap} where new mail appears in a single file
22629    called a @dfn{Spool File}.  See @xref{Spam ELisp Package Filtering of
22630    Incoming Mail}.
22631    
22632    For backends such as @code{nntp} there is no incoming mail spool, so
22633    an alternate mechanism must be used.  This may also happen for
22634    backends where the server is in charge of splitting incoming mail, and
22635    Gnus does not do further splitting.  The @code{spam-autodetect} and
22636    @code{spam-autodetect-methods} group parameters (accessible with
22637    @kbd{G c} and @kbd{G p} as usual), and the corresponding variables
22638    @code{gnus-spam-autodetect-methods} and
22639    @code{gnus-spam-autodetect-methods} (accessible with @kbd{M-x
22640    customize-variable} as usual).
22641    
22642    When @code{spam-autodetect} is used, it hooks into the process of
22643    entering a group.  Thus, entering a group with unseen or unread
22644    articles becomes the substitute for checking incoming mail.  Whether
22645    only unseen articles or all unread articles will be processed is
22646    determined by the @code{spam-autodetect-recheck-messages}.  When set
22647    to t, unread messages will be rechecked.
22648    
22649    @code{spam-autodetect} grants the user at once more and less control
22650    of spam filtering.  The user will have more control over each group's
22651    spam methods, so for instance the @samp{ding} group may have
22652    @code{spam-use-BBDB} as the autodetection method, while the
22653    @samp{suspect} group may have the @code{spam-use-blacklist} and
22654    @code{spam-use-bogofilter} methods enabled.  Every article detected to
22655    be spam will be marked with the spam mark @samp{$} and processed on
22656    exit from the group as normal spam.  The user has less control over
22657    the @emph{sequence} of checks, as he might with @code{spam-split}.
22658    
22659    When the newly split mail goes into groups, or messages are
22660    autodetected to be ham or spam, those groups must be exited (after
22661    entering, if needed) for further spam processing to happen.  It
22662    matters whether the group is considered a ham group, a spam group, or
22663    is unclassified, based on its @code{spam-content} parameter
22664    (@pxref{Spam ELisp Package Global Variables}).  Spam groups have the
22665    additional characteristic that, when entered, any unseen or unread
22666    articles (depending on the @code{spam-mark-only-unseen-as-spam}
22667    variable) will be marked as spam.  Thus, mail split into a spam group
22668    gets automatically marked as spam when you enter the group.
22669    
22670    So, when you exit a group, the @code{spam-processors} are applied, if
22671    any are set, and the processed mail is moved to the
22672    @code{ham-process-destination} or the @code{spam-process-destination}
22673    depending on the article's classification.  If the
22674    @code{ham-process-destination} or the @code{spam-process-destination},
22675    whichever is appropriate, are nil, the article is left in the current
22676    group.
22677    
22678    If a spam is found in any group (this can be changed to only non-spam
22679    groups with @code{spam-move-spam-nonspam-groups-only}), it is
22680    processed by the active @code{spam-processors} (@pxref{Spam ELisp
22681    Package Global Variables}) when the group is exited.  Furthermore, the
22682    spam is moved to the @code{spam-process-destination} (@pxref{Spam
22683    ELisp Package Global Variables}) for further training or deletion.
22684    You have to load the @code{gnus-registry.el} package and enable the
22685    @code{spam-log-to-registry} variable if you want spam to be processed
22686    no more than once.  Thus, spam is detected and processed everywhere,
22687    which is what most people want.  If the
22688    @code{spam-process-destination} is nil, the spam is marked as
22689    expired, which is usually the right thing to do.
22690    
22691    If spam can not be moved - because of a read-only backend such as NNTP,
22692    for example, it will be copied.
22693    
22694    If a ham mail is found in a ham group, as determined by the
22695    @code{ham-marks} parameter, it is processed as ham by the active ham
22696    @code{spam-processor} when the group is exited.  With the variables
22697    @code{spam-process-ham-in-spam-groups} and
22698    @code{spam-process-ham-in-nonham-groups} the behavior can be further
22699    altered so ham found anywhere can be processed.  You have to load the
22700    @code{gnus-registry.el} package and enable the
22701    @code{spam-log-to-registry} variable if you want ham to be processed
22702    no more than once.  Thus, ham is detected and processed only when
22703    necessary, which is what most people want.  More on this in
22704    @xref{Spam ELisp Package Configuration Examples}.
22705    
22706    If ham can not be moved - because of a read-only backend such as NNTP,
22707    for example, it will be copied.
22708    
22709    If all this seems confusing, don't worry.  Soon it will be as natural
22710    as typing Lisp one-liners on a neural interface... err, sorry, that's
22711    50 years in the future yet.  Just trust us, it's not so bad.
22712    
22713    @node Spam ELisp Package Filtering of Incoming Mail
22714    @subsubsection Spam ELisp Package Filtering of Incoming Mail
22715    @cindex spam filtering
22716    @cindex spam filtering incoming mail
22717    @cindex spam
22718    
22719    To use the @file{spam.el} facilities for incoming mail filtering, you
22720    must add the following to your fancy split list
22721    @code{nnmail-split-fancy} or @code{nnimap-split-fancy}:
22722    
22723    @example
22724    (: spam-split)
22725    @end example
22726    
22727    Note that the fancy split may be called @code{nnmail-split-fancy} or
22728    @code{nnimap-split-fancy}, depending on whether you use the nnmail or
22729    nnimap back ends to retrieve your mail.
22730    
22731    The @code{spam-split} function will process incoming mail and send the
22732    mail considered to be spam into the group name given by the variable
22733    @code{spam-split-group}.  By default that group name is @samp{spam},
22734    but you can customize @code{spam-split-group}.  Make sure the contents
22735    of @code{spam-split-group} are an @emph{unqualified} group name, for
22736    instance in an @code{nnimap} server @samp{your-server} the value
22737    @samp{spam} will turn out to be @samp{nnimap+your-server:spam}.  The
22738    value @samp{nnimap+server:spam}, therefore, is wrong and will
22739    actually give you the group
22740    @samp{nnimap+your-server:nnimap+server:spam} which may or may not
22741    work depending on your server's tolerance for strange group names.
22742    
22743    You can also give @code{spam-split} a parameter,
22744    e.g. @samp{'spam-use-regex-headers} or @samp{"maybe-spam"}.  Why is
22745    this useful?
22746    
22747    Take these split rules (with @code{spam-use-regex-headers} and
22748    @code{spam-use-blackholes} set):
22749    
22750    @example
22751     nnimap-split-fancy '(|
22752                          (any "ding" "ding")
22753                          (: spam-split)
22754                          ;; default mailbox
22755                          "mail")
22756    @end example
22757    
22758    Now, the problem is that you want all ding messages to make it to the
22759    ding folder.  But that will let obvious spam (for example, spam
22760    detected by SpamAssassin, and @code{spam-use-regex-headers}) through,
22761    when it's sent to the ding list.  On the other hand, some messages to
22762    the ding list are from a mail server in the blackhole list, so the
22763    invocation of @code{spam-split} can't be before the ding rule.
22764    
22765    You can let SpamAssassin headers supersede ding rules, but all other
22766    @code{spam-split} rules (including a second invocation of the
22767    regex-headers check) will be after the ding rule:
22768    
22769    @example
22770     nnimap-split-fancy '(|
22771    ;;; all spam detected by spam-use-regex-headers goes to "regex-spam"
22772                          (: spam-split "regex-spam" 'spam-use-regex-headers)
22773                          (any "ding" "ding")
22774    ;;; all other spam detected by spam-split goes to spam-split-group
22775                          (: spam-split)
22776                          ;; default mailbox
22777                          "mail")
22778    @end example
22779    
22780    This lets you invoke specific @code{spam-split} checks depending on
22781    your particular needs, and to target the results of those checks to a
22782    particular spam group.  You don't have to throw all mail into all the
22783    spam tests.  Another reason why this is nice is that messages to
22784    mailing lists you have rules for don't have to have resource-intensive
22785    blackhole checks performed on them.  You could also specify different
22786    spam checks for your nnmail split vs. your nnimap split.  Go crazy.
22787    
22788    You should still have specific checks such as
22789    @code{spam-use-regex-headers} set to @code{t}, even if you
22790    specifically invoke @code{spam-split} with the check.  The reason is
22791    that when loading @file{spam.el}, some conditional loading is done
22792    depending on what @code{spam-use-xyz} variables you have set.  This
22793    is usually not critical, though.
22794    
22795    @emph{Note for IMAP users}
22796    
22797    The boolean variable @code{nnimap-split-download-body} needs to be
22798    set, if you want to split based on the whole message instead of just
22799    the headers.  By default, the nnimap back end will only retrieve the
22800    message headers.  If you use @code{spam-check-bogofilter},
22801    @code{spam-check-ifile}, or @code{spam-check-stat} (the splitters that
22802    can benefit from the full message body), you should set this variable.
22803    It is not set by default because it will slow @acronym{IMAP} down, and
22804    that is not an appropriate decision to make on behalf of the user.
22805    
22806    @xref{Splitting in IMAP}.
22807    
22808    @emph{TODO: spam.el needs to provide a uniform way of training all the
22809    statistical databases.  Some have that functionality built-in, others
22810    don't.}
22811    
22812    @node Spam ELisp Package Global Variables
22813    @subsubsection Spam ELisp Package Global Variables
22814    @cindex spam filtering
22815    @cindex spam filtering variables
22816    @cindex spam variables
22817    @cindex spam
22818    
22819    @vindex gnus-spam-process-newsgroups
22820    The concepts of ham processors and spam processors are very important.
22821    Ham processors and spam processors for a group can be set with the
22822    @code{spam-process} group parameter, or the
22823    @code{gnus-spam-process-newsgroups} variable.  Ham processors take
22824    mail known to be non-spam (@emph{ham}) and process it in some way so
22825    that later similar mail will also be considered non-spam.  Spam
22826    processors take mail known to be spam and process it so similar spam
22827    will be detected later.
22828    
22829    The format of the spam or ham processor entry used to be a symbol,
22830    but now it is a cons cell.  See the individual spam processor entries
22831    for more information.
22832    
22833    @vindex gnus-spam-newsgroup-contents
22834    Gnus learns from the spam you get.  You have to collect your spam in
22835    one or more spam groups, and set or customize the variable
22836    @code{spam-junk-mailgroups} as appropriate.  You can also declare
22837    groups to contain spam by setting their group parameter
22838    @code{spam-contents} to @code{gnus-group-spam-classification-spam}, or
22839    by customizing the corresponding variable
22840    @code{gnus-spam-newsgroup-contents}.  The @code{spam-contents} group
22841    parameter and the @code{gnus-spam-newsgroup-contents} variable can
22842    also be used to declare groups as @emph{ham} groups if you set their
22843    classification to @code{gnus-group-spam-classification-ham}.  If
22844    groups are not classified by means of @code{spam-junk-mailgroups},
22845    @code{spam-contents}, or @code{gnus-spam-newsgroup-contents}, they are
22846    considered @emph{unclassified}.  All groups are unclassified by
22847    default.
22848    
22849    @vindex gnus-spam-mark
22850    @cindex $
22851    In spam groups, all messages are considered to be spam by default:
22852    they get the @samp{$} mark (@code{gnus-spam-mark}) when you enter the
22853    group.  If you have seen a message, had it marked as spam, then
22854    unmarked it, it won't be marked as spam when you enter the group
22855    thereafter.  You can disable that behavior, so all unread messages
22856    will get the @samp{$} mark, if you set the
22857    @code{spam-mark-only-unseen-as-spam} parameter to @code{nil}.  You
22858    should remove the @samp{$} mark when you are in the group summary
22859    buffer for every message that is not spam after all.  To remove the
22860    @samp{$} mark, you can use @kbd{M-u} to ``unread'' the article, or
22861    @kbd{d} for declaring it read the non-spam way.  When you leave a
22862    group, all spam-marked (@samp{$}) articles are sent to a spam
22863    processor which will study them as spam samples.
22864    
22865    Messages may also be deleted in various other ways, and unless
22866    @code{ham-marks} group parameter gets overridden below, marks @samp{R}
22867    and @samp{r} for default read or explicit delete, marks @samp{X} and
22868    @samp{K} for automatic or explicit kills, as well as mark @samp{Y} for
22869    low scores, are all considered to be associated with articles which
22870    are not spam.  This assumption might be false, in particular if you
22871    use kill files or score files as means for detecting genuine spam, you
22872    should then adjust the @code{ham-marks} group parameter.
22873    
22874    @defvar ham-marks
22875    You can customize this group or topic parameter to be the list of
22876    marks you want to consider ham.  By default, the list contains the
22877    deleted, read, killed, kill-filed, and low-score marks (the idea is
22878    that these articles have been read, but are not spam).  It can be
22879    useful to also include the tick mark in the ham marks.  It is not
22880    recommended to make the unread mark a ham mark, because it normally
22881    indicates a lack of classification.  But you can do it, and we'll be
22882    happy for you.
22883    @end defvar
22884    
22885    @defvar spam-marks
22886    You can customize this group or topic parameter to be the list of
22887    marks you want to consider spam.  By default, the list contains only
22888    the spam mark.  It is not recommended to change that, but you can if
22889    you really want to.
22890    @end defvar
22891    
22892    When you leave @emph{any} group, regardless of its
22893    @code{spam-contents} classification, all spam-marked articles are sent
22894    to a spam processor, which will study these as spam samples.  If you
22895    explicit kill a lot, you might sometimes end up with articles marked
22896    @samp{K} which you never saw, and which might accidentally contain
22897    spam.  Best is to make sure that real spam is marked with @samp{$},
22898    and nothing else.
22899    
22900    @vindex gnus-ham-process-destinations
22901    When you leave a @emph{spam} group, all spam-marked articles are
22902    marked as expired after processing with the spam processor.  This is
22903    not done for @emph{unclassified} or @emph{ham} groups.  Also, any
22904    @strong{ham} articles in a spam group will be moved to a location
22905    determined by either the @code{ham-process-destination} group
22906    parameter or a match in the @code{gnus-ham-process-destinations}
22907    variable, which is a list of regular expressions matched with group
22908    names (it's easiest to customize this variable with
22909    @code{customize-variable gnus-ham-process-destinations}).  Each
22910    newsgroup specification has the format (REGEXP PROCESSOR) in a
22911    standard Lisp list, if you prefer to customize the variable manually.
22912    The ultimate location is a group name or names.  If the
22913    @code{ham-process-destination} parameter is not set, ham articles are
22914    left in place.  If the
22915    @code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
22916    set, the ham articles are marked as unread before being moved.  
22917    
22918    If ham can not be moved - because of a read-only backend such as NNTP,
22919    for example, it will be copied.
22920    
22921    Note that you can use multiples destinations per group or regular
22922    expression!  This enables you to send your ham to a regular mail
22923    group and to a @emph{ham training} group.
22924    
22925    When you leave a @emph{ham} group, all ham-marked articles are sent to
22926    a ham processor, which will study these as non-spam samples.
22927    
22928    @vindex spam-process-ham-in-spam-groups
22929    By default the variable @code{spam-process-ham-in-spam-groups} is
22930    @code{nil}.  Set it to @code{t} if you want ham found in spam groups
22931    to be processed.  Normally this is not done, you are expected instead
22932    to send your ham to a ham group and process it there.
22933    
22934    @vindex spam-process-ham-in-nonham-groups
22935    By default the variable @code{spam-process-ham-in-nonham-groups} is
22936    @code{nil}.  Set it to @code{t} if you want ham found in non-ham (spam
22937    or unclassified) groups to be processed.  Normally this is not done,
22938    you are expected instead to send your ham to a ham group and process
22939    it there.
22940    
22941    @vindex gnus-spam-process-destinations
22942    When you leave a @emph{ham} or @emph{unclassified} group, all
22943    @strong{spam} articles are moved to a location determined by either
22944    the @code{spam-process-destination} group parameter or a match in the
22945    @code{gnus-spam-process-destinations} variable, which is a list of
22946    regular expressions matched with group names (it's easiest to
22947    customize this variable with @code{customize-variable
22948    gnus-spam-process-destinations}).  Each newsgroup specification has
22949    the repeated format (REGEXP GROUP) and they are all in a standard Lisp
22950    list, if you prefer to customize the variable manually.  The ultimate
22951    location is a group name or names.  If the
22952    @code{spam-process-destination} parameter is not set, the spam
22953    articles are only expired.  The group name is fully qualified, meaning
22954    that if you see @samp{nntp:servername} before the group name in the
22955    group buffer then you need it here as well.  
22956    
22957    If spam can not be moved - because of a read-only backend such as NNTP,
22958    for example, it will be copied.
22959    
22960    Note that you can use multiples destinations per group or regular
22961    expression!  This enables you to send your spam to multiple @emph{spam
22962    training} groups.
22963    
22964    @vindex spam-log-to-registry
22965    The problem with processing ham and spam is that Gnus doesn't track
22966    this processing by default.  Enable the @code{spam-log-to-registry}
22967    variable so @code{spam.el} will use @code{gnus-registry.el} to track
22968    what articles have been processed, and avoid processing articles
22969    multiple times.  Keep in mind that if you limit the number of registry
22970    entries, this won't work as well as it does without a limit.
22971    
22972    @vindex spam-mark-only-unseen-as-spam
22973    Set this variable if you want only unseen articles in spam groups to
22974    be marked as spam.  By default, it is set.  If you set it to nil,
22975    unread articles will also be marked as spam.
22976    
22977    @vindex spam-mark-ham-unread-before-move-from-spam-group
22978    Set this variable if you want ham to be unmarked before it is moved
22979    out of the spam group.  This is very useful when you use something
22980    like the tick mark @samp{!} to mark ham - the article will be placed
22981    in your ham-process-destination, unmarked as if it came fresh from
22982    the mail server.
22983    
22984    @vindex spam-autodetect-recheck-messages
22985    When autodetecting spam, this variable tells @code{spam.el} whether
22986    only unseen articles or all unread articles should be checked for
22987    spam.  It is recommended that you leave it off.
22988    
22989    @node Spam ELisp Package Configuration Examples
22990    @subsubsection Spam ELisp Package Configuration Examples
22991    @cindex spam filtering
22992    @cindex spam filtering configuration examples
22993    @cindex spam configuration examples
22994    @cindex spam
22995    
22996    @subsubheading Ted's setup
22997    
22998    From Ted Zlatanov <tzz@@lifelogs.com>.
22999    @example
23000    
23001    ;; for gnus-registry-split-fancy-with-parent and spam autodetection
23002    ;; see gnus-registry.el for more information
23003    (gnus-registry-initialize)
23004    (spam-initialize)
23005    
23006    ;; I like control-S for marking spam
23007    (define-key gnus-summary-mode-map "\C-s" 'gnus-summary-mark-as-spam)
23008    
23009    (setq
23010     spam-log-to-registry t ;; for spam autodetection
23011     spam-use-BBDB t
23012     spam-use-regex-headers t               ; catch X-Spam-Flag (SpamAssassin)
23013     ;; all groups with "spam" in the name contain spam
23014     gnus-spam-newsgroup-contents '(("spam" gnus-group-spam-classification-spam))
23015     ;; see documentation for these
23016     spam-move-spam-nonspam-groups-only nil
23017     spam-mark-only-unseen-as-spam t
23018     spam-mark-ham-unread-before-move-from-spam-group t
23019     nnimap-split-rule 'nnimap-split-fancy
23020     ;; understand what this does before you copy it to your own setup!
23021     nnimap-split-fancy '(|
23022                          ;; trace references to parents and put in their group
23023                          (: gnus-registry-split-fancy-with-parent)
23024                          ;; this will catch server-side SpamAssassin tags
23025                          (: spam-split 'spam-use-regex-headers)
23026                          (any "ding" "ding")
23027                          ;; note that spam by default will go to "spam"
23028                          (: spam-split)
23029                          ;; default mailbox
23030                          "mail"))
23031    
23032    ;; my parameters, set with `G p'
23033    
23034    ;; all nnml groups, and all nnimap groups except
23035    ;; "nnimap+mail.lifelogs.com:train" and
23036    ;; "nnimap+mail.lifelogs.com:spam": any spam goes to nnimap training,
23037    ;; because it must have been detected manually
23038    
23039    ((spam-process-destination . "nnimap+mail.lifelogs.com:train"))
23040    
23041    ;; all NNTP groups
23042    ;; autodetect spam with the blacklist and ham with the BBDB
23043    ((spam-autodetect-methods spam-use-blacklist spam-use-BBDB)
23044    ;; send all spam to the training group
23045     (spam-process-destination . "nnimap+mail.lifelogs.com:train"))
23046    
23047    ;; only some NNTP groups, where I want to autodetect spam
23048    ((spam-autodetect . t))
23049    
23050    ;; my nnimap "nnimap+mail.lifelogs.com:spam" group
23051    
23052    ;; this is a spam group
23053    ((spam-contents gnus-group-spam-classification-spam)
23054    
23055     ;; any spam (which happens when I enter for all unseen messages,
23056     ;; because of the gnus-spam-newsgroup-contents setting above), goes to
23057     ;; "nnimap+mail.lifelogs.com:train" unless I mark it as ham
23058    
23059     (spam-process-destination "nnimap+mail.lifelogs.com:train")
23060    
23061     ;; any ham goes to my "nnimap+mail.lifelogs.com:mail" folder, but
23062     ;; also to my "nnimap+mail.lifelogs.com:trainham" folder for training
23063    
23064     (ham-process-destination "nnimap+mail.lifelogs.com:mail"
23065                              "nnimap+mail.lifelogs.com:trainham")
23066     ;; in this group, only '!' marks are ham
23067     (ham-marks
23068      (gnus-ticked-mark))
23069     ;; remembers senders in the blacklist on the way out - this is
23070     ;; definitely not needed, it just makes me feel better
23071     (spam-process (gnus-group-spam-exit-processor-blacklist)))
23072    
23073    ;; Later, on the IMAP server I use the "train" group for training
23074    ;; SpamAssassin to recognize spam, and the "trainham" group for
23075    ;; recognizing ham - but Gnus has nothing to do with it.
23076    
23077    @end example
23078    
23079    @subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server
23080    
23081    From Reiner Steib <reiner.steib@@gmx.de>.
23082    
23083    My provider has set up bogofilter (in combination with @acronym{DCC}) on
23084    the mail server (@acronym{IMAP}).  Recognized spam goes to
23085    @samp{spam.detected}, the rest goes through the normal filter rules,
23086    i.e. to @samp{some.folder} or to @samp{INBOX}.  Training on false
23087    positives or negatives is done by copying or moving the article to
23088    @samp{training.ham} or @samp{training.spam} respectively.  A cron job on
23089    the server feeds those to bogofilter with the suitable ham or spam
23090    options and deletes them from the @samp{training.ham} and
23091    @samp{training.spam} folders.
23092    
23093    With the following entries in @code{gnus-parameters}, @code{spam.el}
23094    does most of the job for me:
23095    
23096    @lisp
23097       ("nnimap:spam\\.detected"
23098        (gnus-article-sort-functions '(gnus-article-sort-by-chars))
23099        (ham-process-destination "nnimap:INBOX" "nnimap:training.ham")
23100        (spam-contents gnus-group-spam-classification-spam))
23101       ("nnimap:\\(INBOX\\|other-folders\\)"
23102        (spam-process-destination . "nnimap:training.spam")
23103        (spam-contents gnus-group-spam-classification-ham))
23104    @end lisp
23105    
23106    @itemize
23107    
23108    @item @b{The Spam folder:}
23109    
23110    In the folder @samp{spam.detected}, I have to check for false positives
23111    (i.e. legitimate mails, that were wrongly judged as spam by
23112    bogofilter or DCC).
23113    
23114    Because of the @code{gnus-group-spam-classification-spam} entry, all
23115    messages are marked as spam (with @code{$}).  When I find a false
23116    positive, I mark the message with some other ham mark (@code{ham-marks},
23117    @ref{Spam ELisp Package Global Variables}).  On group exit, those
23118    messages are copied to both groups, @samp{INBOX} (were I want to have
23119    the article) and @samp{training.ham} (for training bogofilter) and
23120    deleted from the @samp{spam.detected} folder.
23121    
23122    The @code{gnus-article-sort-by-chars} entry simplifies detection of
23123    false positives for me.  I receive lots of worms (sweN, @dots{}), that all
23124    have a similar size.  Grouping them by size (i.e. chars) makes finding
23125    other false positives easier.  (Of course worms aren't @i{spam}
23126    (@acronym{UCE}, @acronym{UBE}) strictly speaking.  Anyhow, bogofilter is
23127    an excellent tool for filtering those unwanted mails for me.)
23128    
23129    @item @b{Ham folders:}
23130    
23131    In my ham folders, I just hit @kbd{S x}
23132    (@code{gnus-summary-mark-as-spam}) whenever I see an unrecognized spam
23133    mail (false negative).  On group exit, those messages are moved to
23134    @samp{training.ham}.
23135    @end itemize
23136    
23137    @subsubheading Reporting spam articles in Gmane groups with @code{spam-report.el}
23138    
23139    From Reiner Steib <reiner.steib@@gmx.de>.
23140    
23141    With following entry in @code{gnus-parameters}, @kbd{S x}
23142    (@code{gnus-summary-mark-as-spam}) marks articles in @code{gmane.*}
23143    groups as spam and reports the to Gmane at group exit:
23144    
23145    @lisp
23146       ("^gmane\\."
23147        (spam-process (gnus-group-spam-exit-processor-report-gmane)))
23148    @end lisp
23149    
23150    Additionally, I use `(setq spam-report-gmane-use-article-number nil)'
23151    because I don't read the groups directly from news.gmane.org, but
23152    through my local news server (leafnode).  I.e. the article numbers are
23153    not the same as on news.gmane.org, thus @code{spam-report.el} has to check
23154    the @code{X-Report-Spam} header to find the correct number.
23155    
23156    @node Blacklists and Whitelists
23157    @subsubsection Blacklists and Whitelists
23158    @cindex spam filtering
23159    @cindex whitelists, spam filtering
23160    @cindex blacklists, spam filtering
23161    @cindex spam
23162    
23163    @defvar spam-use-blacklist
23164    
23165    Set this variable to @code{t} if you want to use blacklists when
23166    splitting incoming mail.  Messages whose senders are in the blacklist
23167    will be sent to the @code{spam-split-group}.  This is an explicit
23168    filter, meaning that it acts only on mail senders @emph{declared} to
23169    be spammers.
23170    
23171    @end defvar
23172    
23173    @defvar spam-use-whitelist
23174    
23175    Set this variable to @code{t} if you want to use whitelists when
23176    splitting incoming mail.  Messages whose senders are not in the
23177    whitelist will be sent to the next spam-split rule.  This is an
23178    explicit filter, meaning that unless someone is in the whitelist, their
23179    messages are not assumed to be spam or ham.
23180    
23181    @end defvar
23182    
23183    @defvar spam-use-whitelist-exclusive
23184    
23185    Set this variable to @code{t} if you want to use whitelists as an
23186    implicit filter, meaning that every message will be considered spam
23187    unless the sender is in the whitelist.  Use with care.
23188    
23189    @end defvar
23190    
23191    @defvar gnus-group-spam-exit-processor-blacklist
23192    
23193    Add this symbol to a group's @code{spam-process} parameter by
23194    customizing the group parameters or the
23195    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23196    added to a group's @code{spam-process} parameter, the senders of
23197    spam-marked articles will be added to the blacklist.
23198    
23199    @emph{WARNING}
23200    
23201    Instead of the obsolete
23202    @code{gnus-group-spam-exit-processor-blacklist}, it is recommended
23203    that you use @code{'(spam spam-use-blacklist)}.  Everything will work
23204    the same way, we promise.
23205    
23206    @end defvar
23207    
23208    @defvar gnus-group-ham-exit-processor-whitelist
23209    
23210    Add this symbol to a group's @code{spam-process} parameter by
23211    customizing the group parameters or the
23212    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23213    added to a group's @code{spam-process} parameter, the senders of
23214    ham-marked articles in @emph{ham} groups will be added to the
23215    whitelist.  Note that this ham processor has no effect in @emph{spam}
23216    or @emph{unclassified} groups.
23217    
23218    @emph{WARNING}
23219    
23220    Instead of the obsolete
23221    @code{gnus-group-ham-exit-processor-whitelist}, it is recommended
23222    that you use @code{'(ham spam-use-whitelist)}.  Everything will work
23223    the same way, we promise.
23224    
23225    @end defvar
23226    
23227    Blacklists are lists of regular expressions matching addresses you
23228    consider to be spam senders.  For instance, to block mail from any
23229    sender at @samp{vmadmin.com}, you can put @samp{vmadmin.com} in your
23230    blacklist.  You start out with an empty blacklist.  Blacklist entries
23231    use the Emacs regular expression syntax.
23232    
23233    Conversely, whitelists tell Gnus what addresses are considered
23234    legitimate.  All messages from whitelisted addresses are considered
23235    non-spam.  Also see @ref{BBDB Whitelists}.  Whitelist entries use the
23236    Emacs regular expression syntax.
23237    
23238    The blacklist and whitelist file locations can be customized with the
23239    @code{spam-directory} variable (@file{~/News/spam} by default), or
23240    the @code{spam-whitelist} and @code{spam-blacklist} variables
23241    directly.  The whitelist and blacklist files will by default be in the
23242    @code{spam-directory} directory, named @file{whitelist} and
23243    @file{blacklist} respectively.
23244    
23245    @node BBDB Whitelists
23246    @subsubsection BBDB Whitelists
23247    @cindex spam filtering
23248    @cindex BBDB whitelists, spam filtering
23249    @cindex BBDB, spam filtering
23250    @cindex spam
23251    
23252    @defvar spam-use-BBDB
23253    
23254    Analogous to @code{spam-use-whitelist} (@pxref{Blacklists and
23255    Whitelists}), but uses the BBDB as the source of whitelisted
23256    addresses, without regular expressions.  You must have the BBDB loaded
23257    for @code{spam-use-BBDB} to work properly.  Messages whose senders are
23258    not in the BBDB will be sent to the next spam-split rule.  This is an
23259    explicit filter, meaning that unless someone is in the BBDB, their
23260    messages are not assumed to be spam or ham.
23261    
23262    @end defvar
23263    
23264    @defvar spam-use-BBDB-exclusive
23265    
23266    Set this variable to @code{t} if you want to use the BBDB as an
23267    implicit filter, meaning that every message will be considered spam
23268    unless the sender is in the BBDB.  Use with care.  Only sender
23269    addresses in the BBDB will be allowed through; all others will be
23270    classified as spammers.
23271    
23272    @end defvar
23273    
23274    @defvar gnus-group-ham-exit-processor-BBDB
23275    
23276    Add this symbol to a group's @code{spam-process} parameter by
23277    customizing the group parameters or the
23278    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23279    added to a group's @code{spam-process} parameter, the senders of
23280    ham-marked articles in @emph{ham} groups will be added to the
23281    BBDB.  Note that this ham processor has no effect in @emph{spam}
23282    or @emph{unclassified} groups.
23283    
23284    @emph{WARNING}
23285    
23286    Instead of the obsolete
23287    @code{gnus-group-ham-exit-processor-BBDB}, it is recommended
23288    that you use @code{'(ham spam-use-BBDB)}.  Everything will work
23289    the same way, we promise.
23290    
23291    @end defvar
23292    
23293    @node Gmane Spam Reporting
23294    @subsubsection Gmane Spam Reporting
23295    @cindex spam reporting
23296    @cindex Gmane, spam reporting
23297    @cindex Gmane, spam reporting
23298    @cindex spam
23299    
23300    @defvar gnus-group-spam-exit-processor-report-gmane
23301    
23302    Add this symbol to a group's @code{spam-process} parameter by
23303    customizing the group parameters or the
23304    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23305    added to a group's @code{spam-process} parameter, the spam-marked
23306    articles groups will be reported to the Gmane administrators via a
23307    HTTP request.
23308    
23309    Gmane can be found at @uref{http://gmane.org}.
23310    
23311    @emph{WARNING}
23312    
23313    Instead of the obsolete
23314    @code{gnus-group-spam-exit-processor-report-gmane}, it is recommended
23315    that you use @code{'(spam spam-use-gmane)}.  Everything will work the
23316    same way, we promise.
23317    
23318    @end defvar
23319    
23320    @defvar spam-report-gmane-use-article-number
23321    
23322    This variable is @code{t} by default.  Set it to @code{nil} if you are
23323    running your own news server, for instance, and the local article
23324    numbers don't correspond to the Gmane article numbers.  When
23325    @code{spam-report-gmane-use-article-number} is @code{nil},
23326    @code{spam-report.el} will use the @code{X-Report-Spam} header that
23327    Gmane provides.
23328    
23329    @end defvar
23330    
23331    @node Anti-spam Hashcash Payments
23332    @subsubsection Anti-spam Hashcash Payments
23333    @cindex spam filtering
23334    @cindex hashcash, spam filtering
23335    @cindex spam
23336    
23337    @defvar spam-use-hashcash
23338    
23339    Similar to @code{spam-use-whitelist} (@pxref{Blacklists and
23340    Whitelists}), but uses hashcash tokens for whitelisting messages
23341    instead of the sender address.  You must have the @code{hashcash.el}
23342    package loaded for @code{spam-use-hashcash} to work properly.
23343    Messages without a hashcash payment token will be sent to the next
23344    spam-split rule.  This is an explicit filter, meaning that unless a
23345    hashcash token is found, the messages are not assumed to be spam or
23346    ham.
23347    
23348    @end defvar
23349    
23350    @node Blackholes
23351    @subsubsection Blackholes
23352    @cindex spam filtering
23353    @cindex blackholes, spam filtering
23354    @cindex spam
23355    
23356    @defvar spam-use-blackholes
23357    
23358    This option is disabled by default.  You can let Gnus consult the
23359    blackhole-type distributed spam processing systems (DCC, for instance)
23360    when you set this option.  The variable @code{spam-blackhole-servers}
23361    holds the list of blackhole servers Gnus will consult.  The current
23362    list is fairly comprehensive, but make sure to let us know if it
23363    contains outdated servers.
23364    
23365    The blackhole check uses the @code{dig.el} package, but you can tell
23366    @file{spam.el} to use @code{dns.el} instead for better performance if
23367    you set @code{spam-use-dig} to @code{nil}.  It is not recommended at
23368    this time to set @code{spam-use-dig} to @code{nil} despite the
23369    possible performance improvements, because some users may be unable to
23370    use it, but you can try it and see if it works for you.
23371    
23372    @end defvar
23373    
23374    @defvar spam-blackhole-servers
23375    
23376    The list of servers to consult for blackhole checks.
23377    
23378    @end defvar
23379    
23380    @defvar spam-blackhole-good-server-regex
23381    
23382    A regular expression for IPs that should not be checked against the
23383    blackhole server list.  When set to @code{nil}, it has no effect.
23384    
23385    @end defvar
23386    
23387    @defvar spam-use-dig
23388    
23389    Use the @code{dig.el} package instead of the @code{dns.el} package.
23390    The default setting of @code{t} is recommended.
23391    
23392    @end defvar
23393    
23394    Blackhole checks are done only on incoming mail.  There is no spam or
23395    ham processor for blackholes.
23396    
23397    @node Regular Expressions Header Matching
23398    @subsubsection Regular Expressions Header Matching
23399    @cindex spam filtering
23400    @cindex regular expressions header matching, spam filtering
23401    @cindex spam
23402    
23403    @defvar spam-use-regex-headers
23404    
23405    This option is disabled by default.  You can let Gnus check the
23406    message headers against lists of regular expressions when you set this
23407    option.  The variables @code{spam-regex-headers-spam} and
23408    @code{spam-regex-headers-ham} hold the list of regular expressions.
23409    Gnus will check against the message headers to determine if the
23410    message is spam or ham, respectively.
23411    
23412    @end defvar
23413    
23414    @defvar spam-regex-headers-spam
23415    
23416    The list of regular expressions that, when matched in the headers of
23417    the message, positively identify it as spam.
23418    
23419    @end defvar
23420    
23421    @defvar spam-regex-headers-ham
23422    
23423    The list of regular expressions that, when matched in the headers of
23424    the message, positively identify it as ham.
23425    
23426    @end defvar
23427    
23428    Regular expression header checks are done only on incoming mail.
23429    There is no specific spam or ham processor for regular expressions.
23430    
23431    @node Bogofilter
23432    @subsubsection Bogofilter
23433    @cindex spam filtering
23434    @cindex bogofilter, spam filtering
23435    @cindex spam
23436    
23437    @defvar spam-use-bogofilter
23438    
23439    Set this variable if you want @code{spam-split} to use Eric Raymond's
23440    speedy Bogofilter.
23441    
23442    With a minimum of care for associating the @samp{$} mark for spam
23443    articles only, Bogofilter training all gets fairly automatic.  You
23444    should do this until you get a few hundreds of articles in each
23445    category, spam or not.  The command @kbd{S t} in summary mode, either
23446    for debugging or for curiosity, shows the @emph{spamicity} score of
23447    the current article (between 0.0 and 1.0).
23448    
23449    Bogofilter determines if a message is spam based on a specific
23450    threshold.  That threshold can be customized, consult the Bogofilter
23451    documentation.
23452    
23453    If the @code{bogofilter} executable is not in your path, Bogofilter
23454    processing will be turned off.
23455    
23456    You should not enable this if you use @code{spam-use-bogofilter-headers}.
23457    
23458    @end defvar
23459    
23460    @defvar spam-use-bogofilter-headers
23461    
23462    Set this variable if you want @code{spam-split} to use Eric Raymond's
23463    speedy Bogofilter, looking only at the message headers.  It works
23464    similarly to @code{spam-use-bogofilter}, but the @code{X-Bogosity} header
23465    must be in the message already.  Normally you would do this with a
23466    procmail recipe or something similar; consult the Bogofilter
23467    installation documents for details.
23468    
23469    You should not enable this if you use @code{spam-use-bogofilter}.
23470    
23471    @end defvar
23472    
23473    @defvar gnus-group-spam-exit-processor-bogofilter
23474    Add this symbol to a group's @code{spam-process} parameter by
23475    customizing the group parameters or the
23476    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23477    added to a group's @code{spam-process} parameter, spam-marked articles
23478    will be added to the Bogofilter spam database.
23479    
23480    @emph{WARNING}
23481    
23482    Instead of the obsolete
23483    @code{gnus-group-spam-exit-processor-bogofilter}, it is recommended
23484    that you use @code{'(spam spam-use-bogofilter)}.  Everything will work
23485    the same way, we promise.
23486    @end defvar
23487    
23488    @defvar gnus-group-ham-exit-processor-bogofilter
23489    Add this symbol to a group's @code{spam-process} parameter by
23490    customizing the group parameters or the
23491    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23492    added to a group's @code{spam-process} parameter, the ham-marked
23493    articles in @emph{ham} groups will be added to the Bogofilter database
23494    of non-spam messages.  Note that this ham processor has no effect in
23495    @emph{spam} or @emph{unclassified} groups.
23496    
23497    @emph{WARNING}
23498    
23499    Instead of the obsolete
23500    @code{gnus-group-ham-exit-processor-bogofilter}, it is recommended
23501    that you use @code{'(ham spam-use-bogofilter)}.  Everything will work
23502    the same way, we promise.
23503    @end defvar
23504    
23505    @defvar spam-bogofilter-database-directory
23506    
23507    This is the directory where Bogofilter will store its databases.  It
23508    is not specified by default, so Bogofilter will use its own default
23509    database directory.
23510    
23511    @end defvar
23512    
23513    The Bogofilter mail classifier is similar to @command{ifile} in intent and
23514    purpose.  A ham and a spam processor are provided, plus the
23515    @code{spam-use-bogofilter} and @code{spam-use-bogofilter-headers}
23516    variables to indicate to spam-split that Bogofilter should either be
23517    used, or has already been used on the article.  The 0.9.2.1 version of
23518    Bogofilter was used to test this functionality.
23519    
23520    @node ifile spam filtering
23521    @subsubsection ifile spam filtering
23522    @cindex spam filtering
23523    @cindex ifile, spam filtering
23524    @cindex spam
23525    
23526    @defvar spam-use-ifile
23527    
23528    Enable this variable if you want @code{spam-split} to use @command{ifile}, a
23529    statistical analyzer similar to Bogofilter.
23530    
23531    @end defvar
23532    
23533    @defvar spam-ifile-all-categories
23534    
23535    Enable this variable if you want @code{spam-use-ifile} to give you all
23536    the ifile categories, not just spam/non-spam.  If you use this, make
23537    sure you train ifile as described in its documentation.
23538    
23539    @end defvar
23540    
23541    @defvar spam-ifile-spam-category
23542    
23543    This is the category of spam messages as far as ifile is concerned.
23544    The actual string used is irrelevant, but you probably want to leave
23545    the default value of @samp{spam}.
23546    @end defvar
23547    
23548    @defvar spam-ifile-database-path
23549    
23550    This is the filename for the ifile database.  It is not specified by
23551    default, so ifile will use its own default database name.
23552    
23553    @end defvar
23554    
23555    The ifile mail classifier is similar to Bogofilter in intent and
23556    purpose.  A ham and a spam processor are provided, plus the
23557    @code{spam-use-ifile} variable to indicate to spam-split that ifile
23558    should be used.  The 1.2.1 version of ifile was used to test this
23559    functionality.
23560    
23561    @node spam-stat spam filtering
23562    @subsubsection spam-stat spam filtering
23563    @cindex spam filtering
23564    @cindex spam-stat, spam filtering
23565    @cindex spam-stat
23566    @cindex spam
23567    
23568    @xref{Filtering Spam Using Statistics with spam-stat}.
23569    
23570    @defvar spam-use-stat
23571    
23572    Enable this variable if you want @code{spam-split} to use
23573    spam-stat.el, an Emacs Lisp statistical analyzer.
23574    
23575    @end defvar
23576    
23577    @defvar gnus-group-spam-exit-processor-stat
23578    Add this symbol to a group's @code{spam-process} parameter by
23579    customizing the group parameters or the
23580    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23581    added to a group's @code{spam-process} parameter, the spam-marked
23582    articles will be added to the spam-stat database of spam messages.
23583    
23584    @emph{WARNING}
23585    
23586    Instead of the obsolete
23587    @code{gnus-group-spam-exit-processor-stat}, it is recommended
23588    that you use @code{'(spam spam-use-stat)}.  Everything will work
23589    the same way, we promise.
23590    @end defvar
23591    
23592    @defvar gnus-group-ham-exit-processor-stat
23593    Add this symbol to a group's @code{spam-process} parameter by
23594    customizing the group parameters or the
23595    @code{gnus-spam-process-newsgroups} variable.  When this symbol is
23596    added to a group's @code{spam-process} parameter, the ham-marked
23597    articles in @emph{ham} groups will be added to the spam-stat database
23598    of non-spam messages.  Note that this ham processor has no effect in
23599    @emph{spam} or @emph{unclassified} groups.
23600    
23601    @emph{WARNING}
23602    
23603    Instead of the obsolete
23604    @code{gnus-group-ham-exit-processor-stat}, it is recommended
23605    that you use @code{'(ham spam-use-stat)}.  Everything will work
23606    the same way, we promise.
23607    @end defvar
23608    
23609    This enables @file{spam.el} to cooperate with @file{spam-stat.el}.
23610    @file{spam-stat.el} provides an internal (Lisp-only) spam database,
23611    which unlike ifile or Bogofilter does not require external programs.
23612    A spam and a ham processor, and the @code{spam-use-stat} variable for
23613    @code{spam-split} are provided.
23614    
23615    @node SpamOracle
23616    @subsubsection Using SpamOracle with Gnus
23617    @cindex spam filtering
23618    @cindex SpamOracle
23619    @cindex spam
23620    
23621    An easy way to filter out spam is to use SpamOracle.  SpamOracle is an
23622    statistical mail filtering tool written by Xavier Leroy and needs to be
23623    installed separately.
23624    
23625    There are several ways to use SpamOracle with Gnus.  In all cases, your
23626    mail is piped through SpamOracle in its @emph{mark} mode.  SpamOracle will
23627    then enter an @samp{X-Spam} header indicating whether it regards the
23628    mail as a spam mail or not.
23629    
23630    One possibility is to run SpamOracle as a @code{:prescript} from the
23631    @xref{Mail Source Specifiers}, (@pxref{SpamAssassin}).  This method has
23632    the advantage that the user can see the @emph{X-Spam} headers.
23633    
23634    The easiest method is to make @file{spam.el} (@pxref{Filtering Spam
23635    Using The Spam ELisp Package}) call SpamOracle.
23636    
23637    @vindex spam-use-spamoracle
23638    To enable SpamOracle usage by @file{spam.el}, set the variable
23639    @code{spam-use-spamoracle} to @code{t} and configure the
23640    @code{nnmail-split-fancy} or @code{nnimap-split-fancy} as described in
23641    the section @xref{Filtering Spam Using The Spam ELisp Package}.  In
23642    this example the @samp{INBOX} of an nnimap server is filtered using
23643    SpamOracle.  Mails recognized as spam mails will be moved to
23644    @code{spam-split-group}, @samp{Junk} in this case.  Ham messages stay
23645    in @samp{INBOX}:
23646    
23647    @example
23648    (setq spam-use-spamoracle t
23649          spam-split-group "Junk"
23650          nnimap-split-inbox '("INBOX")
23651          nnimap-split-rule 'nnimap-split-fancy
23652          nnimap-split-fancy '(| (: spam-split) "INBOX"))
23653    @end example
23654    
23655    @defvar spam-use-spamoracle
23656    Set to @code{t} if you want Gnus to enable spam filtering using
23657    SpamOracle.
23658    @end defvar
23659    
23660    @defvar spam-spamoracle-binary
23661    Gnus uses the SpamOracle binary called @file{spamoracle} found in the
23662    user's PATH.  Using the variable @code{spam-spamoracle-binary}, this
23663    can be customized.
23664    @end defvar
23665    
23666    @defvar spam-spamoracle-database
23667    By default, SpamOracle uses the file @file{~/.spamoracle.db} as a database to
23668    store its analyses.  This is controlled by the variable
23669    @code{spam-spamoracle-database} which defaults to @code{nil}.  That means
23670    the default SpamOracle database will be used.  In case you want your
23671    database to live somewhere special, set
23672    @code{spam-spamoracle-database} to this path.
23673    @end defvar
23674    
23675    SpamOracle employs a statistical algorithm to determine whether a
23676    message is spam or ham.  In order to get good results, meaning few
23677    false hits or misses, SpamOracle needs training.  SpamOracle learns the
23678    characteristics of your spam mails.  Using the @emph{add} mode
23679    (training mode) one has to feed good (ham) and spam mails to
23680    SpamOracle.  This can be done by pressing @kbd{|} in the Summary buffer
23681    and pipe the mail to a SpamOracle process or using @file{spam.el}'s
23682    spam- and ham-processors, which is much more convenient.  For a
23683    detailed description of spam- and ham-processors, @xref{Filtering Spam
23684    Using The Spam ELisp Package}.
23685    
23686    @defvar gnus-group-spam-exit-processor-spamoracle
23687    Add this symbol to a group's @code{spam-process} parameter by
23688    customizing the group parameter or the
23689    @code{gnus-spam-process-newsgroups} variable.  When this symbol is added
23690    to a group's @code{spam-process} parameter, spam-marked articles will be
23691    sent to SpamOracle as spam samples.
23692    
23693    @emph{WARNING}
23694    
23695    Instead of the obsolete
23696    @code{gnus-group-spam-exit-processor-spamoracle}, it is recommended
23697    that you use @code{'(spam spam-use-spamoracle)}.  Everything will work
23698    the same way, we promise.
23699    @end defvar
23700    
23701    @defvar gnus-group-ham-exit-processor-spamoracle
23702    Add this symbol to a group's @code{spam-process} parameter by
23703    customizing the group parameter or the
23704    @code{gnus-spam-process-newsgroups} variable.  When this symbol is added
23705    to a grup's @code{spam-process} parameter, the ham-marked articles in
23706    @emph{ham} groups will be sent to the SpamOracle as samples of ham
23707    messages.  Note that this ham processor has no effect in @emph{spam} or
23708    @emph{unclassified} groups.
23709    
23710    @emph{WARNING}
23711    
23712    Instead of the obsolete
23713    @code{gnus-group-ham-exit-processor-spamoracle}, it is recommended
23714    that you use @code{'(ham spam-use-spamoracle)}.  Everything will work
23715    the same way, we promise.
23716    @end defvar
23717    
23718    @emph{Example:} These are the Group Parameters of a group that has been
23719    classified as a ham group, meaning that it should only contain ham
23720    messages.
23721    @example
23722     ((spam-contents gnus-group-spam-classification-ham)
23723      (spam-process ((ham spam-use-spamoracle)
23724                     (spam spam-use-spamoracle))))
23725    @end example
23726    For this group the @code{spam-use-spamoracle} is installed for both
23727    ham and spam processing.  If the group contains spam message
23728    (e.g. because SpamOracle has not had enough sample messages yet) and
23729    the user marks some messages as spam messages, these messages will be
23730    processed by SpamOracle.  The processor sends the messages to
23731    SpamOracle as new samples for spam.
23732    
23733    @node Extending the Spam ELisp package
23734    @subsubsection Extending the Spam ELisp package
23735    @cindex spam filtering
23736    @cindex spam elisp package, extending
23737    @cindex extending the spam elisp package
23738    
23739    Say you want to add a new back end called blackbox.  For filtering
23740    incoming mail, provide the following:
23741    
23742    @enumerate
23743    
23744    @item
23745    code
23746    
23747    @lisp
23748    (defvar spam-use-blackbox nil
23749      "True if blackbox should be used.")
23750    @end lisp
23751    
23752    Add
23753    @example
23754        (spam-use-blackbox   . spam-check-blackbox)
23755    @end example
23756    to @code{spam-list-of-checks}.
23757    
23758    Add
23759    @example
23760        (gnus-group-ham-exit-processor-blackbox     ham spam-use-blackbox)
23761        (gnus-group-spam-exit-processor-blackbox    spam spam-use-blackbox)
23762    @end example
23763    to @code{spam-list-of-processors}.
23764    
23765    Add
23766    @example
23767        (spam-use-blackbox  spam-blackbox-register-routine
23768                     nil
23769                     spam-blackbox-unregister-routine
23770                     nil)
23771    @end example
23772    to @code{spam-registration-functions}.  Write the register/unregister
23773    routines using the bogofilter register/unregister routines as a
23774    start, or other restister/unregister routines more appropriate to
23775    Blackbox.
23776    
23777    @item
23778    functionality
23779    
23780    Write the @code{spam-check-blackbox} function.  It should return
23781    @samp{nil} or @code{spam-split-group}, observing the other
23782    conventions.  See the existing @code{spam-check-*} functions for
23783    examples of what you can do, and stick to the template unless you
23784    fully understand the reasons why you aren't.
23785    
23786    Make sure to add @code{spam-use-blackbox} to
23787    @code{spam-list-of-statistical-checks} if Blackbox is a statistical
23788    mail analyzer that needs the full message body to operate.
23789    
23790    @end enumerate
23791    
23792    For processing spam and ham messages, provide the following:
23793    
23794    @enumerate
23795    
23796    @item
23797    code
23798    
23799    Note you don't have to provide a spam or a ham processor.  Only
23800    provide them if Blackbox supports spam or ham processing.
23801    
23802    Also, ham and spam processors are being phased out as single
23803    variables.  Instead the form @code{'(spam spam-use-blackbox)} or
23804    @code{'(ham spam-use-blackbox)} is favored.  For now, spam/ham
23805    processor variables are still around but they won't be for long.
23806    
23807    @lisp
23808    (defvar gnus-group-spam-exit-processor-blackbox "blackbox-spam"
23809      "The Blackbox summary exit spam processor.
23810    Only applicable to spam groups.")
23811    
23812    (defvar gnus-group-ham-exit-processor-blackbox "blackbox-ham"
23813      "The whitelist summary exit ham processor.
23814    Only applicable to non-spam (unclassified and ham) groups.")
23815    
23816    @end lisp
23817    
23818    @item
23819    Gnus parameters
23820    
23821    Add
23822    @example
23823                       (const :tag "Spam: Blackbox"   (spam spam-use-blackbox))
23824                       (const :tag "Ham: Blackbox"    (ham spam-use-blackbox))
23825    @end example
23826    to the @code{spam-process} group parameter in @code{gnus.el}.  Make
23827    sure you do it twice, once for the parameter and once for the
23828    variable customization.
23829    
23830    Add
23831    @example
23832              (variable-item spam-use-blackbox)
23833    @end example
23834    to the @code{spam-autodetect-methods} group parameter in
23835    @code{gnus.el}.
23836    
23837    @end enumerate
23838    
23839    
23840    @node Filtering Spam Using Statistics with spam-stat
23841    @subsection Filtering Spam Using Statistics with spam-stat
23842    @cindex Paul Graham
23843    @cindex Graham, Paul
23844    @cindex naive Bayesian spam filtering
23845    @cindex Bayesian spam filtering, naive
23846    @cindex spam filtering, naive Bayesian
23847    
23848    Paul Graham has written an excellent essay about spam filtering using
23849    statistics: @uref{http://www.paulgraham.com/spam.html,A Plan for
23850    Spam}.  In it he describes the inherent deficiency of rule-based
23851    filtering as used by SpamAssassin, for example: Somebody has to write
23852    the rules, and everybody else has to install these rules.  You are
23853    always late.  It would be much better, he argues, to filter mail based
23854    on whether it somehow resembles spam or non-spam.  One way to measure
23855    this is word distribution.  He then goes on to describe a solution
23856    that checks whether a new mail resembles any of your other spam mails
23857    or not.
23858    
23859    The basic idea is this:  Create a two collections of your mail, one
23860    with spam, one with non-spam.  Count how often each word appears in
23861    either collection, weight this by the total number of mails in the
23862    collections, and store this information in a dictionary.  For every
23863    word in a new mail, determine its probability to belong to a spam or a
23864    non-spam mail.  Use the 15 most conspicuous words, compute the total
23865    probability of the mail being spam.  If this probability is higher
23866    than a certain threshold, the mail is considered to be spam.
23867    
23868    Gnus supports this kind of filtering.  But it needs some setting up.
23869    First, you need two collections of your mail, one with spam, one with
23870    non-spam.  Then you need to create a dictionary using these two
23871    collections, and save it.  And last but not least, you need to use
23872    this dictionary in your fancy mail splitting rules.
23873    
23874    @menu
23875    * Creating a spam-stat dictionary::
23876    * Splitting mail using spam-stat::
23877    * Low-level interface to the spam-stat dictionary::
23878    @end menu
23879    
23880    @node Creating a spam-stat dictionary
23881    @subsubsection Creating a spam-stat dictionary
23882    
23883    Before you can begin to filter spam based on statistics, you must
23884    create these statistics based on two mail collections, one with spam,
23885    one with non-spam.  These statistics are then stored in a dictionary
23886    for later use.  In order for these statistics to be meaningful, you
23887    need several hundred emails in both collections.
23888    
23889    Gnus currently supports only the nnml back end for automated dictionary
23890    creation.  The nnml back end stores all mails in a directory, one file
23891    per mail.  Use the following:
23892    
23893    @defun spam-stat-process-spam-directory
23894    Create spam statistics for every file in this directory.  Every file
23895    is treated as one spam mail.
23896    @end defun
23897    
23898    @defun spam-stat-process-non-spam-directory
23899    Create non-spam statistics for every file in this directory.  Every
23900    file is treated as one non-spam mail.
23901    @end defun
23902    
23903    Usually you would call @code{spam-stat-process-spam-directory} on a
23904    directory such as @file{~/Mail/mail/spam} (this usually corresponds
23905    the the group @samp{nnml:mail.spam}), and you would call
23906    @code{spam-stat-process-non-spam-directory} on a directory such as
23907    @file{~/Mail/mail/misc} (this usually corresponds the the group
23908    @samp{nnml:mail.misc}).
23909    
23910    When you are using @acronym{IMAP}, you won't have the mails available
23911    locally, so that will not work.  One solution is to use the Gnus Agent
23912    to cache the articles.  Then you can use directories such as
23913    @file{"~/News/agent/nnimap/mail.yourisp.com/personal_spam"} for
23914    @code{spam-stat-process-spam-directory}.  @xref{Agent as Cache}.
23915    
23916    @defvar spam-stat
23917    This variable holds the hash-table with all the statistics---the
23918    dictionary we have been talking about.  For every word in either
23919    collection, this hash-table stores a vector describing how often the
23920    word appeared in spam and often it appeared in non-spam mails.
23921    @end defvar
23922    
23923    If you want to regenerate the statistics from scratch, you need to
23924    reset the dictionary.
23925    
23926    @defun spam-stat-reset
23927    Reset the @code{spam-stat} hash-table, deleting all the statistics.
23928    @end defun
23929    
23930    When you are done, you must save the dictionary.  The dictionary may
23931    be rather large.  If you will not update the dictionary incrementally
23932    (instead, you will recreate it once a month, for example), then you
23933    can reduce the size of the dictionary by deleting all words that did
23934    not appear often enough or that do not clearly belong to only spam or
23935    only non-spam mails.
23936    
23937    @defun spam-stat-reduce-size
23938    Reduce the size of the dictionary.  Use this only if you do not want
23939    to update the dictionary incrementally.
23940    @end defun
23941    
23942    @defun spam-stat-save
23943    Save the dictionary.
23944    @end defun
23945    
23946    @defvar spam-stat-file
23947    The filename used to store the dictionary.  This defaults to
23948    @file{~/.spam-stat.el}.
23949    @end defvar
23950    
23951    @node Splitting mail using spam-stat
23952    @subsubsection Splitting mail using spam-stat
23953    
23954    In order to use @code{spam-stat} to split your mail, you need to add the
23955    following to your @file{~/.gnus.el} file:
23956    
23957    @lisp
23958    (require 'spam-stat)
23959    (spam-stat-load)
23960    @end lisp
23961    
23962    This will load the necessary Gnus code, and the dictionary you
23963    created.
23964    
23965    Next, you need to adapt your fancy splitting rules:  You need to
23966    determine how to use @code{spam-stat}.  The following examples are for
23967    the nnml back end.  Using the nnimap back end works just as well.  Just
23968    use @code{nnimap-split-fancy} instead of @code{nnmail-split-fancy}.
23969    
23970    In the simplest case, you only have two groups, @samp{mail.misc} and
23971    @samp{mail.spam}.  The following expression says that mail is either
23972    spam or it should go into @samp{mail.misc}.  If it is spam, then
23973    @code{spam-stat-split-fancy} will return @samp{mail.spam}.
23974    
23975    @lisp
23976    (setq nnmail-split-fancy
23977          `(| (: spam-stat-split-fancy)
23978              "mail.misc"))
23979    @end lisp
23980    
23981    @defvar spam-stat-split-fancy-spam-group
23982    The group to use for spam.  Default is @samp{mail.spam}.
23983    @end defvar
23984    
23985    If you also filter mail with specific subjects into other groups, use
23986    the following expression.  Only mails not matching the regular
23987    expression are considered potential spam.
23988    
23989    @lisp
23990    (setq nnmail-split-fancy
23991          `(| ("Subject" "\\bspam-stat\\b" "mail.emacs")
23992              (: spam-stat-split-fancy)
23993              "mail.misc"))
23994    @end lisp
23995    
23996    If you want to filter for spam first, then you must be careful when
23997    creating the dictionary.  Note that @code{spam-stat-split-fancy} must
23998    consider both mails in @samp{mail.emacs} and in @samp{mail.misc} as
23999    non-spam, therefore both should be in your collection of non-spam
24000    mails, when creating the dictionary!
24001    
24002    @lisp
24003    (setq nnmail-split-fancy
24004          `(| (: spam-stat-split-fancy)
24005              ("Subject" "\\bspam-stat\\b" "mail.emacs")
24006              "mail.misc"))
24007    @end lisp
24008    
24009    You can combine this with traditional filtering.  Here, we move all
24010    HTML-only mails into the @samp{mail.spam.filtered} group.  Note that since
24011    @code{spam-stat-split-fancy} will never see them, the mails in
24012    @samp{mail.spam.filtered} should be neither in your collection of spam mails,
24013    nor in your collection of non-spam mails, when creating the
24014    dictionary!
24015    
24016    @lisp
24017    (setq nnmail-split-fancy
24018          `(| ("Content-Type" "text/html" "mail.spam.filtered")
24019              (: spam-stat-split-fancy)
24020              ("Subject" "\\bspam-stat\\b" "mail.emacs")
24021              "mail.misc"))
24022    @end lisp
24023    
24024    
24025    @node Low-level interface to the spam-stat dictionary
24026    @subsubsection Low-level interface to the spam-stat dictionary
24027    
24028    The main interface to using @code{spam-stat}, are the following functions:
24029    
24030    @defun spam-stat-buffer-is-spam
24031    Called in a buffer, that buffer is considered to be a new spam mail.
24032    Use this for new mail that has not been processed before.
24033    @end defun
24034    
24035    @defun spam-stat-buffer-is-no-spam
24036    Called in a buffer, that buffer is considered to be a new non-spam
24037    mail.  Use this for new mail that has not been processed before.
24038    @end defun
24039    
24040    @defun spam-stat-buffer-change-to-spam
24041    Called in a buffer, that buffer is no longer considered to be normal
24042    mail but spam.  Use this to change the status of a mail that has
24043    already been processed as non-spam.
24044    @end defun
24045    
24046    @defun spam-stat-buffer-change-to-non-spam
24047    Called in a buffer, that buffer is no longer considered to be spam but
24048    normal mail.  Use this to change the status of a mail that has already
24049    been processed as spam.
24050    @end defun
24051    
24052    @defun spam-stat-save
24053    Save the hash table to the file.  The filename used is stored in the
24054    variable @code{spam-stat-file}.
24055    @end defun
24056    
24057    @defun spam-stat-load
24058    Load the hash table from a file.  The filename used is stored in the
24059    variable @code{spam-stat-file}.
24060    @end defun
24061    
24062    @defun spam-stat-score-word
24063    Return the spam score for a word.
24064    @end defun
24065    
24066    @defun spam-stat-score-buffer
24067    Return the spam score for a buffer.
24068    @end defun
24069    
24070    @defun spam-stat-split-fancy
24071    Use this function for fancy mail splitting.  Add the rule @samp{(:
24072    spam-stat-split-fancy)} to @code{nnmail-split-fancy}
24073    @end defun
24074    
24075    Make sure you load the dictionary before using it.  This requires the
24076    following in your @file{~/.gnus.el} file:
24077    
24078    @lisp
24079    (require 'spam-stat)
24080    (spam-stat-load)
24081    @end lisp
24082    
24083    Typical test will involve calls to the following functions:
24084    
24085    @smallexample
24086    Reset: (setq spam-stat (make-hash-table :test 'equal))
24087    Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
24088    Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
24089    Save table: (spam-stat-save)
24090    File size: (nth 7 (file-attributes spam-stat-file))
24091    Number of words: (hash-table-count spam-stat)
24092    Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
24093    Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
24094    Reduce table size: (spam-stat-reduce-size)
24095    Save table: (spam-stat-save)
24096    File size: (nth 7 (file-attributes spam-stat-file))
24097    Number of words: (hash-table-count spam-stat)
24098    Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
24099    Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
24100    @end smallexample
24101    
24102    Here is how you would create your dictionary:
24103    
24104    @smallexample
24105    Reset: (setq spam-stat (make-hash-table :test 'equal))
24106    Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
24107    Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
24108    Repeat for any other non-spam group you need...
24109    Reduce table size: (spam-stat-reduce-size)
24110    Save table: (spam-stat-save)
24111    @end smallexample
24112    
24113    @node Other modes
24114    @section Interaction with other modes
24115    
24116    @subsection Dired
24117    @cindex dired
24118    
24119    @code{gnus-dired-minor-mode} provided some useful functions for dired
24120    buffers.  It is enabled with
24121    @lisp
24122    (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
24123    @end lisp
24124    
24125    @table @kbd
24126    @item C-c C-m C-a
24127    @findex gnus-dired-attach
24128    Send dired's marked files as an attachment (@code{gnus-dired-attach}).
24129    You will be prompted for a message buffer.
24130    
24131    @item C-c C-m C-l
24132    @findex gnus-dired-find-file-mailcap
24133    Visit a file according to the appropriate mailcap entry
24134    (@code{gnus-dired-find-file-mailcap}).  With prefix, open file in a new
24135    buffer.
24136    
24137    @item C-c C-m C-p
24138    @findex gnus-dired-print
24139    Print file according to the mailcap entry (@code{gnus-dired-print}).  If
24140    there is no print command, print in a PostScript image.
24141    @end table
24142    
24143  @node Various Various  @node Various Various
24144  @section Various Various  @section Various Various
# Line 18710  to non-existent domains is yucky, in my Line 24148  to non-existent domains is yucky, in my
24148  @table @code  @table @code
24149    
24150  @item gnus-home-directory  @item gnus-home-directory
24151    @vindex gnus-home-directory
24152  All Gnus file and directory variables will be initialized from this  All Gnus file and directory variables will be initialized from this
24153  variable, which defaults to @file{~/}.  variable, which defaults to @file{~/}.
24154    
24155  @item gnus-directory  @item gnus-directory
24156  @vindex gnus-directory  @vindex gnus-directory
24157  Most Gnus storage file and directory variables will be initialized from  Most Gnus storage file and directory variables will be initialized from
24158  this variable, which defaults to the @samp{SAVEDIR} environment  this variable, which defaults to the @env{SAVEDIR} environment
24159  variable, or @file{~/News/} if that variable isn't set.  variable, or @file{~/News/} if that variable isn't set.
24160    
24161  Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.  Note that Gnus is mostly loaded when the @file{~/.gnus.el} file is read.
24162  This means that other directory variables that are initialized from this  This means that other directory variables that are initialized from this
24163  variable won't be set properly if you set this variable in  variable won't be set properly if you set this variable in
24164  @file{.gnus.el}.  Set this variable in @file{.emacs} instead.  @file{~/.gnus.el}.  Set this variable in @file{.emacs} instead.
24165    
24166  @item gnus-default-directory  @item gnus-default-directory
24167  @vindex gnus-default-directory  @vindex gnus-default-directory
# Line 18772  For instance, if @samp{:} is invalid as Line 24211  For instance, if @samp{:} is invalid as
24211  on your system (you OS/2 user you), you could say something like:  on your system (you OS/2 user you), you could say something like:
24212    
24213  @lisp  @lisp
24214    @group
24215  (setq nnheader-file-name-translation-alist  (setq nnheader-file-name-translation-alist
24216        '((?: . ?_)))        '((?: . ?_)))
24217    @end group
24218  @end lisp  @end lisp
24219    
24220  In fact, this is the default value for this variable on OS/2 and MS  In fact, this is the default value for this variable on OS/2 and MS
# Line 18804  names who could possibly mess up Gnus in Line 24245  names who could possibly mess up Gnus in
24245  @samp{:} in a group name, which is normally used to delimit method and  @samp{:} in a group name, which is normally used to delimit method and
24246  group).  group).
24247    
24248  @sc{imap} users might want to allow @samp{/} in group names though.  @acronym{IMAP} users might want to allow @samp{/} in group names though.
24249    
24250    
24251  @end table  @end table
24252    
   
24253  @node The End  @node The End
24254  @chapter The End  @chapter The End
24255    
# Line 18844  but at the common table.@* Line 24284  but at the common table.@*
24284  @chapter Appendices  @chapter Appendices
24285    
24286  @menu  @menu
24287  * History::                        How Gnus got where it is today.  * XEmacs::                      Requirements for installing under XEmacs.
24288  * On Writing Manuals::             Why this is not a beginner's guide.  * History::                     How Gnus got where it is today.
24289  * Terminology::                    We use really difficult, like, words here.  * On Writing Manuals::          Why this is not a beginner's guide.
24290  * Customization::                  Tailoring Gnus to your needs.  * Terminology::                 We use really difficult, like, words here.
24291  * Troubleshooting::                What you might try if things do not work.  * Customization::               Tailoring Gnus to your needs.
24292  * Gnus Reference Guide::           Rilly, rilly technical stuff.  * Troubleshooting::             What you might try if things do not work.
24293  * Emacs for Heathens::             A short introduction to Emacsian terms.  * Gnus Reference Guide::        Rilly, rilly technical stuff.
24294  * Frequently Asked Questions::     A question-and-answer session.  * Emacs for Heathens::          A short introduction to Emacsian terms.
24295    * Frequently Asked Questions::  The Gnus FAQ
24296  @end menu  @end menu
24297    
24298    
24299    @node XEmacs
24300    @section XEmacs
24301    @cindex XEmacs
24302    @cindex installing under XEmacs
24303    
24304    XEmacs is distributed as a collection of packages.  You should install
24305    whatever packages the Gnus XEmacs package requires.  The current
24306    requirements are @samp{gnus}, @samp{mail-lib}, @samp{xemacs-base},
24307    @samp{eterm}, @samp{sh-script}, @samp{net-utils}, @samp{os-utils},
24308    @samp{dired}, @samp{mh-e}, @samp{sieve}, @samp{ps-print}, @samp{w3},
24309    @samp{pgg}, @samp{mailcrypt}, @samp{ecrypto}, and @samp{sasl}.
24310    
24311    
24312  @node History  @node History
24313  @section History  @section History
24314    
# Line 18881  renamed it back again to ``Gnus''.  But Line 24335  renamed it back again to ``Gnus''.  But
24335  ``@sc{gnus}''.  New vs. old.  ``@sc{gnus}''.  New vs. old.
24336    
24337  @menu  @menu
24338  * Gnus Versions::       What Gnus versions have been released.  * Gnus Versions::               What Gnus versions have been released.
24339  * Other Gnus Versions:: Other Gnus versions that also have been released.  * Other Gnus Versions::         Other Gnus versions that also have been released.
24340  * Why?::                What's the point of Gnus?  * Why?::                        What's the point of Gnus?
24341  * Compatibility::       Just how compatible is Gnus with @sc{gnus}?  * Compatibility::               Just how compatible is Gnus with @sc{gnus}?
24342  * Conformity::          Gnus tries to conform to all standards.  * Conformity::                  Gnus tries to conform to all standards.
24343  * Emacsen::             Gnus can be run on a few modern Emacsen.  * Emacsen::                     Gnus can be run on a few modern Emacsen.
24344  * Gnus Development::    How Gnus is developed.  * Gnus Development::            How Gnus is developed.
24345  * Contributors::        Oodles of people.  * Contributors::                Oodles of people.
24346  * New Features::        Pointers to some of the new stuff in Gnus.  * New Features::                Pointers to some of the new stuff in Gnus.
24347  @end menu  @end menu
24348    
24349    
24350  @node Gnus Versions  @node Gnus Versions
24351  @subsection Gnus Versions  @subsection Gnus Versions
 @cindex Pterodactyl Gnus  
24352  @cindex ding Gnus  @cindex ding Gnus
24353  @cindex September Gnus  @cindex September Gnus
24354    @cindex Red Gnus
24355  @cindex Quassia Gnus  @cindex Quassia Gnus
24356    @cindex Pterodactyl Gnus
24357    @cindex Oort Gnus
24358    @cindex No Gnus
24359    @cindex Gnus versions
24360    
24361  The first ``proper'' release of Gnus 5 was done in November 1995 when it  The first ``proper'' release of Gnus 5 was done in November 1995 when it
24362  was included in the Emacs 19.30 distribution (132 (ding) Gnus releases  was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
# Line 18917  Gnus 5.6 begat Pterodactyl Gnus on Augus Line 24375  Gnus 5.6 begat Pterodactyl Gnus on Augus
24375  ``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd  ``Gnus 5.8'' (after 99 releases and a CVS repository) on December 3rd
24376  1999.  1999.
24377    
24378    On the 26th of October 2000, Oort Gnus was begun.
24379    
24380  If you happen upon a version of Gnus that has a prefixed name --  If you happen upon a version of Gnus that has a prefixed name --
24381  ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --  ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'',
24382  don't panic.  Don't let it know that you're frightened.  Back away.  ``Pterodactyl Gnus'', ``Oort Gnus'' -- don't panic.  Don't let it know
24383  Slowly.  Whatever you do, don't run.  Walk away, calmly, until you're  that you're frightened.  Back away.  Slowly.  Whatever you do, don't
24384  out of its reach.  Find a proper released version of Gnus and snuggle up  run.  Walk away, calmly, until you're out of its reach.  Find a proper
24385  to that instead.  released version of Gnus and snuggle up to that instead.
24386    
24387    
24388  @node Other Gnus Versions  @node Other Gnus Versions
# Line 18931  to that instead. Line 24391  to that instead.
24391    
24392  In addition to the versions of Gnus which have had their releases  In addition to the versions of Gnus which have had their releases
24393  coordinated by Lars, one major development has been Semi-gnus from  coordinated by Lars, one major development has been Semi-gnus from
24394  Japan.  It's based on a library called @sc{semi}, which provides  Japan.  It's based on a library called @acronym{SEMI}, which provides
24395  @sc{mime} capabilities.  @acronym{MIME} capabilities.
24396    
24397  These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.  These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.
24398  Collectively, they are called ``Semi-gnus'', and different strains are  Collectively, they are called ``Semi-gnus'', and different strains are
24399  called T-gnus, ET-gnus, Nana-gnus and Chaos.  These provide powerful  called T-gnus, ET-gnus, Nana-gnus and Chaos.  These provide powerful
24400  @sc{mime} and multilingualization things, especially important for  @acronym{MIME} and multilingualization things, especially important for
24401  Japanese users.  Japanese users.
24402    
24403    
# Line 19050  with, of course. Line 24510  with, of course.
24510    
24511  @table @strong  @table @strong
24512    
24513  @item RFC 822  @item RFC (2)822
24514  @cindex RFC 822  @cindex RFC 822
24515    @cindex RFC 2822
24516  There are no known breaches of this standard.  There are no known breaches of this standard.
24517    
24518  @item RFC 1036  @item RFC 1036
# Line 19080  on Son-of-RFC 1036.  They have produced Line 24541  on Son-of-RFC 1036.  They have produced
24541  various changes to the format of news articles.  The Gnus towers will  various changes to the format of news articles.  The Gnus towers will
24542  look into implementing the changes when the draft is accepted as an RFC.  look into implementing the changes when the draft is accepted as an RFC.
24543    
24544    @item MIME - RFC 2045-2049 etc
24545    @cindex @acronym{MIME}
24546    All the various @acronym{MIME} RFCs are supported.
24547    
24548    @item Disposition Notifications - RFC 2298
24549    Message Mode is able to request notifications from the receiver.
24550    
24551    @item PGP - RFC 1991 and RFC 2440
24552    @cindex RFC 1991
24553    @cindex RFC 2440
24554    RFC 1991 is the original @acronym{PGP} message specification,
24555    published as an informational RFC.  RFC 2440 was the follow-up, now
24556    called Open PGP, and put on the Standards Track.  Both document a
24557    non-@acronym{MIME} aware @acronym{PGP} format.  Gnus supports both
24558    encoding (signing and encryption) and decoding (verification and
24559    decryption).
24560    
24561    @item PGP/MIME - RFC 2015/3156
24562    RFC 2015 (superseded by 3156 which references RFC 2440 instead of RFC
24563    1991) describes the @acronym{MIME}-wrapping around the RF 1991/2440 format.
24564    Gnus supports both encoding and decoding.
24565    
24566    @item S/MIME - RFC 2633
24567    RFC 2633 describes the @acronym{S/MIME} format.
24568    
24569    @item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
24570    RFC 1730 is @acronym{IMAP} version 4, updated somewhat by RFC 2060
24571    (@acronym{IMAP} 4 revision 1).  RFC 2195 describes CRAM-MD5
24572    authentication for @acronym{IMAP}.  RFC 2086 describes access control
24573    lists (ACLs) for @acronym{IMAP}.  RFC 2359 describes a @acronym{IMAP}
24574    protocol enhancement.  RFC 2595 describes the proper @acronym{TLS}
24575    integration (STARTTLS) with @acronym{IMAP}.  RFC 1731 describes the
24576    GSSAPI/Kerberos4 mechanisms for @acronym{IMAP}.
24577    
24578  @end table  @end table
24579    
24580  If you ever notice Gnus acting non-compliant with regards to the texts  If you ever notice Gnus acting non-compliant with regards to the texts
# Line 19094  know. Line 24589  know.
24589  @cindex Mule  @cindex Mule
24590  @cindex Emacs  @cindex Emacs
24591    
24592  Gnus should work on :  Gnus should work on:
24593    
24594  @itemize @bullet  @itemize @bullet
24595    
24596  @item  @item
24597  Emacs 20.3 and up.  Emacs 20.7 and up.
24598    
24599  @item  @item
24600  XEmacs 20.4 and up.  XEmacs 21.1 and up.
24601    
24602  @end itemize  @end itemize
24603    
# Line 19169  off> no, wait, that absolutely does not Line 24664  off> no, wait, that absolutely does not
24664  Micro$oft---bah.  Amateurs.  I'm @emph{much} worse.  (Or is that  Micro$oft---bah.  Amateurs.  I'm @emph{much} worse.  (Or is that
24665  ``worser''? ``much worser''?  ``worsest''?)  ``worser''? ``much worser''?  ``worsest''?)
24666    
24667  I would like to take this opportunity to thank the Academy for...  oops,  I would like to take this opportunity to thank the Academy for@dots{}  oops,
24668  wrong show.  wrong show.
24669    
24670  @itemize @bullet  @itemize @bullet
# Line 19179  Masanobu @sc{Umeda}---the writer of the Line 24674  Masanobu @sc{Umeda}---the writer of the
24674    
24675  @item  @item
24676  Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,  Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,
24677  nnwarchive and many, many other things connected with @sc{mime} and  nnwarchive and many, many other things connected with @acronym{MIME} and
24678  other types of en/decoding, as well as general bug fixing, new  other types of en/decoding, as well as general bug fixing, new
24679  functionality and stuff.  functionality and stuff.
24680    
# Line 19191  well as numerous other things). Line 24686  well as numerous other things).
24686  Luis Fernandes---design and graphics.  Luis Fernandes---design and graphics.
24687    
24688  @item  @item
24689  Justin Sheehy--the FAQ maintainer.  Joe Reiss---creator of the smiley faces.
24690    
24691    @item
24692    Justin Sheehy---the @acronym{FAQ} maintainer.
24693    
24694  @item  @item
24695  Erik Naggum---help, ideas, support, code and stuff.  Erik Naggum---help, ideas, support, code and stuff.
# Line 19259  The following people have contributed ma Line 24757  The following people have contributed ma
24757  Christopher Davis,  Christopher Davis,
24758  Andrew Eskilsson,  Andrew Eskilsson,
24759  Kai Grossjohann,  Kai Grossjohann,
24760    Kevin Greiner,
24761    Jesper Harder,
24762    Paul Jarc,
24763    Simon Josefsson,
24764  David Kågedal,  David Kågedal,
24765  Richard Pieri,  Richard Pieri,
24766  Fabrice Popineau,  Fabrice Popineau,
24767  Daniel Quinlan,  Daniel Quinlan,
24768    Michael Shields,
24769    Reiner Steib,
24770  Jason L. Tibbitts, III,  Jason L. Tibbitts, III,
24771    Jack Vinson,
24772    Katsumi Yamaoka, @c Yamaoka
24773  and  and
24774  Jack Vinson.  Teodor Zlatanov.
24775    
24776  Also thanks to the following for patches and stuff:  Also thanks to the following for patches and stuff:
24777    
# Line 19336  D. Hall, Line 24842  D. Hall,
24842  Magnus Hammerin,  Magnus Hammerin,
24843  Kenichi Handa, @c Handa  Kenichi Handa, @c Handa
24844  Raja R. Harinath,  Raja R. Harinath,
24845  Yoshiki Hayashi, @c ?  Yoshiki Hayashi, @c Hayashi
24846  P. E. Jareth Hein,  P. E. Jareth Hein,
24847  Hisashige Kenji, @c Hisashige  Hisashige Kenji, @c Hisashige
24848  Scott Hofmann,  Scott Hofmann,
# Line 19346  Richard Hoskins, Line 24852  Richard Hoskins,
24852  Brad Howes,  Brad Howes,
24853  Miguel de Icaza,  Miguel de Icaza,
24854  François Felix Ingrand,  François Felix Ingrand,
24855  Tatsuya Ichikawa, @c ?  Tatsuya Ichikawa, @c Ichikawa
24856  Ishikawa Ichiro, @c Ishikawa  Ishikawa Ichiro, @c Ishikawa
24857  Lee Iverson,  Lee Iverson,
24858  Iwamuro Motonori, @c Iwamuro  Iwamuro Motonori, @c Iwamuro
# Line 19356  Adam P. Jenkins, Line 24862  Adam P. Jenkins,
24862  Randell Jesup,  Randell Jesup,
24863  Fred Johansen,  Fred Johansen,
24864  Gareth Jones,  Gareth Jones,
 Simon Josefsson,  
24865  Greg Klanderman,  Greg Klanderman,
24866  Karl Kleinpaste,  Karl Kleinpaste,
24867  Michael Klingbeil,  Michael Klingbeil,
# Line 19460  Barry A. Warsaw, Line 24965  Barry A. Warsaw,
24965  Christoph Wedler,  Christoph Wedler,
24966  Joe Wells,  Joe Wells,
24967  Lee Willis,  Lee Willis,
 Katsumi Yamaoka @c Yamaoka  
24968  and  and
24969  Lloyd Zusman.  Lloyd Zusman.
24970    
# Line 19481  actually are people who are using Gnus. Line 24985  actually are people who are using Gnus.
24985  @cindex new features  @cindex new features
24986    
24987  @menu  @menu
24988  * ding Gnus::          New things in Gnus 5.0/5.1, the first new Gnus.  * ding Gnus::                   New things in Gnus 5.0/5.1, the first new Gnus.
24989  * September Gnus::     The Thing Formally Known As Gnus 5.2/5.3.  * September Gnus::              The Thing Formally Known As Gnus 5.2/5.3.
24990  * Red Gnus::           Third time best---Gnus 5.4/5.5.  * Red Gnus::                    Third time best---Gnus 5.4/5.5.
24991  * Quassia Gnus::       Two times two is four, or Gnus 5.6/5.7.  * Quassia Gnus::                Two times two is four, or Gnus 5.6/5.7.
24992  * Pterodactyl Gnus::   Pentad also starts with P, AKA Gnus 5.8/5.9.  * Pterodactyl Gnus::            Pentad also starts with P, AKA Gnus 5.8/5.9.
24993    * Oort Gnus::                   It's big.  It's far out.  Gnus 5.10.
24994  @end menu  @end menu
24995    
24996  These lists are, of course, just @emph{short} overviews of the  These lists are, of course, just @emph{short} overviews of the
# Line 19504  The look of all buffers can be changed b Line 25009  The look of all buffers can be changed b
25009  (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).  (@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).
25010    
25011  @item  @item
25012  Local spool and several @sc{nntp} servers can be used at once  Local spool and several @acronym{NNTP} servers can be used at once
25013  (@pxref{Select Methods}).  (@pxref{Select Methods}).
25014    
25015  @item  @item
# Line 19545  manner, so it should be difficult to los Line 25050  manner, so it should be difficult to los
25050  read if your machine should go down (@pxref{Auto Save}).  read if your machine should go down (@pxref{Auto Save}).
25051    
25052  @item  @item
25053  Gnus now has its own startup file (@file{.gnus}) to avoid cluttering up  Gnus now has its own startup file (@file{~/.gnus.el}) to avoid
25054  the @file{.emacs} file.  cluttering up the @file{.emacs} file.
25055    
25056  @item  @item
25057  You can set the process mark on both groups and articles and perform  You can set the process mark on both groups and articles and perform
# Line 19584  Fetching parents (and other articles) no Line 25089  Fetching parents (and other articles) no
25089  glitches (@pxref{Finding the Parent}).  glitches (@pxref{Finding the Parent}).
25090    
25091  @item  @item
25092  Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).  Gnus can fetch @acronym{FAQ}s and group descriptions (@pxref{Group Information}).
25093    
25094  @item  @item
25095  Digests (and other files) can be used as the basis for groups  Digests (and other files) can be used as the basis for groups
# Line 19600  Buttons}). Line 25105  Buttons}).
25105    
25106  @item  @item
25107  You can do lots of strange stuff with the Gnus window & frame  You can do lots of strange stuff with the Gnus window & frame
25108  configuration (@pxref{Windows Configuration}).  configuration (@pxref{Window Layout}).
25109    
25110  @item  @item
25111  You can click on buttons instead of using the keyboard  You can click on buttons instead of using the keyboard
# Line 19614  You can click on buttons instead of usin Line 25119  You can click on buttons instead of usin
25119    
25120  @iftex  @iftex
25121  @iflatex  @iflatex
25122  \gnusfig{-28cm}{0cm}{\epsfig{figure=tmp/september.ps,height=20cm}}  \gnusfig{-28cm}{0cm}{\epsfig{figure=ps/september,height=20cm}}
25123  @end iflatex  @end iflatex
25124  @end iftex  @end iftex
25125    
# Line 19749  All summary mode commands are available Line 25254  All summary mode commands are available
25254  buffer (@pxref{Article Keymap}).  buffer (@pxref{Article Keymap}).
25255    
25256  @item  @item
25257  Frames can be part of @code{gnus-buffer-configuration} (@pxref{Windows  Frames can be part of @code{gnus-buffer-configuration} (@pxref{Window
25258  Configuration}).  Layout}).
25259    
25260  @item  @item
25261  Mail can be re-scanned by a daemonic process (@pxref{Daemons}).  Mail can be re-scanned by a daemonic process (@pxref{Daemons}).
25262  @iftex  @iftex
25263  @iflatex  @iflatex
25264  \marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}}  \marginpar[\mbox{}\hfill\epsfig{figure=ps/fseptember,height=5cm}]{\epsfig{figure=ps/fseptember,height=5cm}}
25265  @end iflatex  @end iflatex
25266  @end iftex  @end iftex
25267    
# Line 19851  New features in Gnus 5.4/5.5: Line 25356  New features in Gnus 5.4/5.5:
25356    
25357  @iftex  @iftex
25358  @iflatex  @iflatex
25359  \gnusfig{-5.5cm}{-4cm}{\epsfig{figure=tmp/red.ps,height=20cm}}  \gnusfig{-5.5cm}{-4cm}{\epsfig{figure=ps/red,height=20cm}}
25360  @end iflatex  @end iflatex
25361  @end iftex  @end iftex
25362    
# Line 19890  considered home score and adapt files (@ Line 25395  considered home score and adapt files (@
25395  been added.  been added.
25396    
25397  @item  @item
25398  @code{nndoc} was rewritten to be easily extensible (@pxref{Document  @code{nndoc} was rewritten to be easily extendable (@pxref{Document
25399  Server Internals}).  Server Internals}).
25400    
25401  @item  @item
# Line 19958  Process mark sets can be pushed and popp Line 25463  Process mark sets can be pushed and popp
25463  Marks}).  Marks}).
25464    
25465  @item  @item
25466  A new mail-to-news back end makes it possible to post even when the @sc{nntp}  A new mail-to-news back end makes it possible to post even when the @acronym{NNTP}
25467  server doesn't allow posting (@pxref{Mail-To-News Gateways}).  server doesn't allow posting (@pxref{Mail-To-News Gateways}).
25468    
25469  @item  @item
# Line 19980  Cached articles can be pulled into the g Line 25485  Cached articles can be pulled into the g
25485  Commands}).  Commands}).
25486  @iftex  @iftex
25487  @iflatex  @iflatex
25488  \marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}}  \marginpar[\mbox{}\hfill\epsfig{figure=ps/fred,width=3cm}]{\epsfig{figure=ps/fred,width=3cm}}
25489  @end iflatex  @end iflatex
25490  @end iftex  @end iftex
25491    
# Line 19997  More hooks and functions have been added Line 25502  More hooks and functions have been added
25502  mail before saving the mail (@pxref{Washing Mail}).  mail before saving the mail (@pxref{Washing Mail}).
25503    
25504  @item  @item
25505  Emphasized text can be properly fontified:  Emphasized text can be properly fontisized:
25506    
25507  @end itemize  @end itemize
25508    
# Line 20011  New features in Gnus 5.6: Line 25516  New features in Gnus 5.6:
25516    
25517  @item  @item
25518  New functionality for using Gnus as an offline newsreader has been  New functionality for using Gnus as an offline newsreader has been
25519  added.  A plethora of new commands and modes have been added.  See  added.  A plethora of new commands and modes have been added.
25520  @pxref{Gnus Unplugged} for the full story.  @xref{Gnus Unplugged}, for the full story.
25521    
25522  @item  @item
25523   The @code{nndraft} back end has returned, but works differently than  The @code{nndraft} back end has returned, but works differently than
25524  before.  All Message buffers are now also articles in the @code{nndraft}  before.  All Message buffers are now also articles in the @code{nndraft}
25525  group, which is created automatically.  group, which is created automatically.
25526    
# Line 20024  group, which is created automatically. Line 25529  group, which is created automatically.
25529  values.  values.
25530    
25531  @item  @item
25532   @code{gnus-summary-goto-article} now accept Message-ID's.  @code{gnus-summary-goto-article} now accept Message-ID's.
25533    
25534  @item  @item
25535   A new Message command for deleting text in the body of a message  A new Message command for deleting text in the body of a message
25536  outside the region: @kbd{C-c C-v}.  outside the region: @kbd{C-c C-v}.
25537    
25538  @item  @item
25539   You can now post to component group in @code{nnvirtual} groups with  You can now post to component group in @code{nnvirtual} groups with
25540  @kbd{C-u C-c C-c}.  @kbd{C-u C-c C-c}.
25541    
25542  @item  @item
25543   @code{nntp-rlogin-program}---new variable to ease customization.   @code{nntp-rlogin-program}---new variable to ease customization.
25544    
25545  @item  @item
25546   @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit  @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit
25547  re-highlighting of the article buffer.  re-highlighting of the article buffer.
25548    
25549  @item  @item
25550   New element in @code{gnus-boring-article-headers}---@code{long-to}.  New element in @code{gnus-boring-article-headers}---@code{long-to}.
25551    
25552  @item  @item
25553   @kbd{M-i} symbolic prefix command.  See the section "Symbolic  @kbd{M-i} symbolic prefix command.  @xref{Symbolic Prefixes}, for
25554  Prefixes" in the Gnus manual for details.  details.
25555    
25556  @item  @item
25557   @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix  @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix
25558  @kbd{a} to add the score rule to the "all.SCORE" file.  @kbd{a} to add the score rule to the @file{all.SCORE} file.
25559    
25560  @item  @item
25561   @code{gnus-simplify-subject-functions} variable to allow greater  @code{gnus-simplify-subject-functions} variable to allow greater
25562  control over simplification.  control over simplification.
25563    
25564  @item  @item
25565   @kbd{A T}---new command for fetching the current thread.  @kbd{A T}---new command for fetching the current thread.
25566    
25567  @item  @item
25568   @kbd{/ T}---new command for including the current thread in the  @kbd{/ T}---new command for including the current thread in the
25569  limit.  limit.
25570    
25571  @item  @item
25572   @kbd{M-@key{RET}} is a new Message command for breaking cited text.  @kbd{M-RET} is a new Message command for breaking cited text.
25573    
25574  @item  @item
25575   @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.  @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
25576    
25577  @item  @item
25578   The @code{custom-face-lookup} function has been removed.  The @code{custom-face-lookup} function has been removed.
25579  If you used this function in your initialization files, you must  If you used this function in your initialization files, you must
25580  rewrite them to use @code{face-spec-set} instead.  rewrite them to use @code{face-spec-set} instead.
25581    
25582  @item  @item
25583   Canceling now uses the current select method.  Symbolic prefix  Canceling now uses the current select method.  Symbolic prefix
25584  @kbd{a} forces normal posting method.  @kbd{a} forces normal posting method.
25585    
25586  @item  @item
25587   New command to translate M******** sm*rtq**t*s into proper  New command to translate M******** sm*rtq**t*s into proper
25588  text---@kbd{W d}.  text---@kbd{W d}.
25589    
25590  @item  @item
25591   For easier debugging of @code{nntp}, you can set  For easier debugging of @code{nntp}, you can set
25592  @code{nntp-record-commands} to a non-@code{nil} value.  @code{nntp-record-commands} to a non-@code{nil} value.
25593    
25594  @item  @item
25595   @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for  @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
25596  controlling where and how to send @sc{authinfo} to @sc{nntp} servers.  controlling where and how to send @sc{authinfo} to @acronym{NNTP} servers.
25597    
25598  @item  @item
25599   A command for editing group parameters from the summary buffer  A command for editing group parameters from the summary buffer
25600  has been added.  has been added.
25601    
25602  @item  @item
25603   A history of where mails have been split is available.  A history of where mails have been split is available.
25604    
25605  @item  @item
25606   A new article date command has been added---@code{article-date-iso8601}.  A new article date command has been added---@code{article-date-iso8601}.
25607    
25608  @item  @item
25609   Subjects can be simplified when threading by setting  Subjects can be simplified when threading by setting
25610  @code{gnus-score-thread-simplify}.  @code{gnus-score-thread-simplify}.
25611    
25612  @item  @item
25613   A new function for citing in Message has been  A new function for citing in Message has been
25614  added---@code{message-cite-original-without-signature}.  added---@code{message-cite-original-without-signature}.
25615    
25616  @item  @item
25617   @code{article-strip-all-blank-lines}---new article command.  @code{article-strip-all-blank-lines}---new article command.
25618    
25619  @item  @item
25620   A new Message command to kill to the end of the article has  A new Message command to kill to the end of the article has
25621  been added.  been added.
25622    
25623  @item  @item
25624   A minimum adaptive score can be specified by using the  A minimum adaptive score can be specified by using the
25625  @code{gnus-adaptive-word-minimum} variable.  @code{gnus-adaptive-word-minimum} variable.
25626    
25627  @item  @item
25628   The "lapsed date" article header can be kept continually  The ``lapsed date'' article header can be kept continually
25629  updated by the @code{gnus-start-date-timer} command.  updated by the @code{gnus-start-date-timer} command.
25630    
25631  @item  @item
25632   Web listserv archives can be read with the @code{nnlistserv} back end.  Web listserv archives can be read with the @code{nnlistserv} back end.
25633    
25634  @item  @item
25635   Old dejanews archives can now be read by @code{nnweb}.  Old dejanews archives can now be read by @code{nnweb}.
25636    
25637  @end itemize  @end itemize
25638    
# Line 20138  New features in Gnus 5.8: Line 25643  New features in Gnus 5.8:
25643    
25644  @itemize @bullet  @itemize @bullet
25645    
25646  @item The mail-fetching functions have changed.  See the manual for the  @item
25647    The mail-fetching functions have changed.  See the manual for the
25648  many details.  In particular, all procmail fetching variables are gone.  many details.  In particular, all procmail fetching variables are gone.
25649    
25650  If you used procmail like in  If you used procmail like in
# Line 20155  this now has changed to Line 25661  this now has changed to
25661  @lisp  @lisp
25662  (setq mail-sources  (setq mail-sources
25663        '((directory :path "~/mail/incoming/"        '((directory :path "~/mail/incoming/"
25664                     :suffix ".in")))                     :suffix ".in")))
25665  @end lisp  @end lisp
25666    
25667  More information is available in the info doc at Select Methods ->  @xref{Mail Source Specifiers}.
 Getting Mail -> Mail Sources  
25668    
25669  @item Gnus is now a MIME-capable reader.  This affects many parts of  @item
25670    Gnus is now a @acronym{MIME}-capable reader.  This affects many parts of
25671  Gnus, and adds a slew of new commands.  See the manual for details.  Gnus, and adds a slew of new commands.  See the manual for details.
25672    
25673  @item Gnus has also been multilingualized.  This also affects too  @item
25674    Gnus has also been multilingualized.  This also affects too
25675  many parts of Gnus to summarize here, and adds many new variables.  many parts of Gnus to summarize here, and adds many new variables.
25676    
25677  @item @code{gnus-auto-select-first} can now be a function to be  @item
25678    @code{gnus-auto-select-first} can now be a function to be
25679  called to position point.  called to position point.
25680    
25681  @item The user can now decide which extra headers should be included in  @item
25682  summary buffers and NOV files.  The user can now decide which extra headers should be included in
25683    summary buffers and @acronym{NOV} files.
25684    
25685  @item @code{gnus-article-display-hook} has been removed.  Instead, a number  @item
25686    @code{gnus-article-display-hook} has been removed.  Instead, a number
25687  of variables starting with @code{gnus-treat-} have been added.  of variables starting with @code{gnus-treat-} have been added.
25688    
25689  @item The Gnus posting styles have been redone again and now works in a  @item
25690    The Gnus posting styles have been redone again and now works in a
25691  subtly different manner.  subtly different manner.
25692    
25693  @item New web-based back ends have been added: @code{nnslashdot},  @item
25694    New web-based back ends have been added: @code{nnslashdot},
25695  @code{nnwarchive} and @code{nnultimate}.  nnweb has been revamped,  @code{nnwarchive} and @code{nnultimate}.  nnweb has been revamped,
25696  again, to keep up with ever-changing layouts.  again, to keep up with ever-changing layouts.
25697    
25698  @item Gnus can now read IMAP mail via @code{nnimap}.  @item
25699    Gnus can now read @acronym{IMAP} mail via @code{nnimap}.
25700    
25701  @end itemize  @end itemize
25702    
25703    @node Oort Gnus
25704    @subsubsection Oort Gnus
25705    @cindex Oort Gnus
25706    
25707    New features in Gnus 5.10:
25708    
25709    @itemize @bullet
25710    
25711    @item
25712    @kbd{F} (@code{gnus-article-followup-with-original}) and @kbd{R}
25713    (@code{gnus-article-reply-with-original}) only yank the text in the
25714    region if the region is active.
25715    
25716    @item
25717    @code{gnus-group-read-ephemeral-group} can be called interactively,
25718    using @kbd{G M}.
25719    
25720    @item
25721    In draft groups, @kbd{e} is now bound to @code{gnus-draft-edit-message}.
25722    Use @kbd{B w} for @code{gnus-summary-edit-article} instead.
25723    
25724    @item
25725    The revised Gnus @acronym{FAQ} is included in the manual,
25726    @xref{Frequently Asked Questions}.
25727    
25728    @item
25729    Upgrading from previous (stable) version if you have used Oort.
25730    
25731    If you have tried Oort (the unstable Gnus branch leading to this
25732    release) but went back to a stable version, be careful when upgrading to
25733    this version.  In particular, you will probably want to remove all
25734    @file{.marks} (nnml) and @file{.mrk} (nnfolder) files, so that flags are
25735    read from your @file{.newsrc.eld} instead of from the
25736    @file{.marks}/@file{.mrk} file where this release store flags.  See a
25737    later entry for more information about marks.  Note that downgrading
25738    isn't save in general.
25739    
25740    @item
25741    Article Buttons
25742    
25743    More buttons for URLs, mail addresses, Message-IDs, Info links, man
25744    pages and Emacs or Gnus related references.  @xref{Article Buttons}.  The
25745    variables @code{gnus-button-@var{*}-level} can be used to control the
25746    appearance of all article buttons.  @xref{Article Button Levels}.
25747    
25748    @item
25749    Dired integration
25750    
25751    @code{gnus-dired-minor-mode} (see @ref{Other modes}) installs key
25752    bindings in dired buffers to send a file as an attachment, open a file
25753    using the appropriate mailcap entry, and print a file using the mailcap
25754    entry.
25755    
25756    @item
25757    Gnus can display RSS newsfeeds as a newsgroup.  @xref{RSS}.
25758    
25759    @item
25760    Single-part yenc encoded attachments can be decoded.
25761    
25762    @item
25763    Picons
25764    
25765    The picons code has been reimplemented to work in GNU Emacs---some of
25766    the previous options have been removed or renamed.
25767    
25768    Picons are small ``personal icons'' representing users, domain and
25769    newsgroups, which can be displayed in the Article buffer.
25770    @xref{Picons}.
25771    
25772    @item
25773    If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a
25774    boundary line is drawn at the end of the headers.
25775    
25776    @item
25777    Retrieval of charters and control messages
25778    
25779    There are new commands for fetching newsgroup charters (@kbd{H c}) and
25780    control messages (@kbd{H C}).
25781    
25782    @item
25783    Delayed articles
25784    
25785    You can delay the sending of a message with @kbd{C-c C-j} in the Message
25786    buffer.  The messages are delivered at specified time.  This is useful
25787    for sending yourself reminders.  @xref{Delayed Articles}.
25788    
25789    @item
25790    If @code{auto-compression-mode} is enabled, attachments are automatically
25791    decompressed when activated.
25792    
25793    @item
25794    If the new option @code{nnml-use-compressed-files} is non-@code{nil},
25795    the nnml back end allows compressed message files.
25796    
25797    @item
25798    Signed article headers (X-PGP-Sig) can be verified with @kbd{W p}.
25799    
25800    @item
25801    The Summary Buffer uses an arrow in the fringe to indicate the current
25802    article.  Use @code{(setq gnus-summary-display-arrow nil)} to disable it.
25803    
25804    @item
25805    Warn about email replies to news
25806    
25807    Do you often find yourself replying to news by email by mistake?  Then
25808    the new option @code{gnus-confirm-mail-reply-to-news} is just the thing for
25809    you.
25810    
25811    @item
25812    If the new option @code{gnus-summary-display-while-building} is
25813    non-@code{nil}, the summary buffer is shown and updated as it's being
25814    built.
25815    
25816    @item
25817    The new @code{recent} mark @samp{.} indicates newly arrived messages (as
25818    opposed to old but unread messages).
25819    
25820    @item
25821    The new option @code{gnus-gcc-mark-as-read} automatically marks
25822    Gcc articles as read.
25823    
25824    @item
25825    The nndoc back end now supports mailman digests and exim bounces.
25826    
25827    @item
25828    Gnus supports RFC 2369 mailing list headers, and adds a number of
25829    related commands in mailing list groups.  @xref{Mailing List}.
25830    
25831    @item
25832    The Date header can be displayed in a format that can be read aloud
25833    in English.  @xref{Article Date}.
25834    
25835    @item
25836    The envelope sender address can be customized when using Sendmail.
25837    @xref{Mail Variables, Mail Variables,, message, Message Manual}.
25838    
25839    @item
25840    diffs are automatically highlighted in groups matching
25841    @code{mm-uu-diff-groups-regexp}
25842    
25843    @item
25844    @acronym{TLS} wrapper shipped with Gnus
25845    
25846    @acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and
25847    @acronym{NNTP} via @file{tls.el} and GNUTLS.  The old
25848    @acronym{TLS}/@acronym{SSL} support via (external third party)
25849    @file{ssl.el} and OpenSSL still works.
25850    
25851    @item
25852    New @file{make.bat} for compiling and installing Gnus under MS Windows
25853    
25854    Use @file{make.bat} if you want to install Gnus under MS Windows, the
25855    first argument to the batch-program should be the directory where
25856    @file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want
25857    to install Gnus after compiling it, give @file{make.bat} @code{/copy} as
25858    the second parameter.
25859    
25860    @file{make.bat} has been rewritten from scratch, it now features
25861    automatic recognition of XEmacs and GNU Emacs, generates
25862    @file{gnus-load.el}, checks if errors occur while compilation and
25863    generation of info files and reports them at the end of the build
25864    process.  It now uses @code{makeinfo} if it is available and falls
25865    back to @file{infohack.el} otherwise.  @file{make.bat} should now
25866    install all files which are necessary to run Gnus and be generally a
25867    complete replacement for the @code{configure; make; make install}
25868    cycle used under Unix systems.
25869    
25870    The new @file{make.bat} makes @file{make-x.bat} superfluous, so it has
25871    been removed.
25872    
25873    @item
25874    Support for non-@acronym{ASCII} domain names
25875    
25876    Message supports non-@acronym{ASCII} domain names in From:, To: and
25877    Cc: and will query you whether to perform encoding when you try to
25878    send a message.  The variable @code{message-use-idna} controls this.
25879    Gnus will also decode non-@acronym{ASCII} domain names in From:, To:
25880    and Cc: when you view a message.  The variable @code{gnus-use-idna}
25881    controls this.
25882    
25883    @item
25884    Better handling of Microsoft citation styles
25885    
25886    Gnus now tries to recognize the mangled header block that some Microsoft
25887    mailers use to indicate that the rest of the message is a citation, even
25888    though it is not quoted in any way.  The variable
25889    @code{gnus-cite-unsightly-citation-regexp} matches the start of these
25890    citations.
25891    
25892    @item
25893    @code{gnus-article-skip-boring}
25894    
25895    If you set @code{gnus-article-skip-boring} to @code{t}, then Gnus will
25896    not scroll down to show you a page that contains only boring text,
25897    which by default means cited text and signature.  You can customize
25898    what is skippable using @code{gnus-article-boring-faces}.
25899    
25900    This feature is especially useful if you read many articles that
25901    consist of a little new content at the top with a long, untrimmed
25902    message cited below.
25903    
25904    @item
25905    The format spec @code{%C} for positioning point has changed to @code{%*}.
25906    
25907    @item
25908    The new variable @code{gnus-parameters} can be used to set group parameters.
25909    
25910    Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored
25911    the parameters in @file{~/.newsrc.eld}, but via this variable you can
25912    enjoy the powers of customize, and simplified backups since you set the
25913    variable in @file{~/.emacs} instead of @file{~/.newsrc.eld}.  The
25914    variable maps regular expressions matching group names to group
25915    parameters, a'la:
25916    @lisp
25917    (setq gnus-parameters
25918          '(("mail\\..*"
25919             (gnus-show-threads nil)
25920             (gnus-use-scoring nil))
25921            ("^nnimap:\\(foo.bar\\)$"
25922             (to-group . "\\1"))))
25923    @end lisp
25924    
25925    @item
25926    Smileys (@samp{:-)}, @samp{;-)} etc) are now iconized for Emacs too.
25927    
25928    Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.emacs} to
25929    disable it.
25930    
25931    @item
25932    Gnus no longer generate the Sender: header automatically.
25933    
25934    Earlier it was generated iff the user configurable email address was
25935    different from the Gnus guessed default user address.  As the guessing
25936    algorithm is rarely correct these days, and (more controversially) the
25937    only use of the Sender: header was to check if you are entitled to
25938    cancel/supersede news (which is now solved by Cancel Locks instead,
25939    see another entry), generation of the header has been disabled by
25940    default.  See the variables @code{message-required-headers},
25941    @code{message-required-news-headers}, and
25942    @code{message-required-mail-headers}.
25943    
25944    @item
25945    Features from third party @file{message-utils.el} added to @file{message.el}.
25946    
25947    Message now asks if you wish to remove @samp{(was: <old subject>)} from
25948    subject lines (see @code{message-subject-trailing-was-query}).  @kbd{C-c
25949    M-m} and @kbd{C-c M-f} inserts markers indicating included text.
25950    @kbd{C-c C-f a} adds a X-No-Archive: header.  @kbd{C-c C-f x} inserts
25951    appropriate headers and a note in the body for cross-postings and
25952    followups (see the variables @code{message-cross-post-@var{*}}).
25953    
25954    @item
25955    References and X-Draft-Headers are no longer generated when you start
25956    composing messages and @code{message-generate-headers-first} is
25957    @code{nil}.
25958    
25959    @item
25960    Improved anti-spam features.
25961    
25962    Gnus is now able to take out spam from your mail and news streams
25963    using a wide variety of programs and filter rules.  Among the supported
25964    methods are RBL blocklists, bogofilter and white/blacklists.  Hooks
25965    for easy use of external packages such as SpamAssassin and Hashcash
25966    are also new.  @xref{Thwarting Email Spam}.
25967    
25968    @item
25969    Easy inclusion of X-Faces headers.
25970    
25971    @item
25972    Face headers handling.
25973    
25974    @item
25975    In the summary buffer, the new command @kbd{/ N} inserts new messages
25976    and @kbd{/ o} inserts old messages.
25977    
25978    @item
25979    Gnus decodes morse encoded messages if you press @kbd{W m}.
25980    
25981    @item
25982    Unread count correct in nnimap groups.
25983    
25984    The estimated number of unread articles in the group buffer should now
25985    be correct for nnimap groups.  This is achieved by calling
25986    @code{nnimap-fixup-unread-after-getting-new-news} from the
25987    @code{gnus-setup-news-hook} (called on startup) and
25988    @code{gnus-after-getting-new-news-hook}. (called after getting new
25989    mail).  If you have modified those variables from the default, you may
25990    want to add @code{nnimap-fixup-unread-after-getting-new-news} again.  If
25991    you were happy with the estimate and want to save some (minimal) time
25992    when getting new mail, remove the function.
25993    
25994    @item
25995    Group Carbon Copy (GCC) quoting
25996    
25997    To support groups that contains SPC and other weird characters, groups
25998    are quoted before they are placed in the Gcc: header.  This means
25999    variables such as @code{gnus-message-archive-group} should no longer
26000    contain quote characters to make groups containing SPC work.  Also, if
26001    you are using the string @samp{nnml:foo, nnml:bar} (indicating Gcc
26002    into two groups) you must change it to return the list
26003    @code{("nnml:foo" "nnml:bar")}, otherwise the Gcc: line will be quoted
26004    incorrectly.  Note that returning the string @samp{nnml:foo, nnml:bar}
26005    was incorrect earlier, it just didn't generate any problems since it
26006    was inserted directly.
26007    
26008    @item
26009    @file{~/News/overview/} not used.
26010    
26011    As a result of the following change, the @file{~/News/overview/}
26012    directory is not used any more.  You can safely delete the entire
26013    hierarchy.
26014    
26015    @item
26016    @code{gnus-agent}
26017    
26018    The Gnus Agent has seen a major updated and is now enabled by default,
26019    and all nntp and nnimap servers from @code{gnus-select-method} and
26020    @code{gnus-secondary-select-method} are agentized by default.  Earlier
26021    only the server in @code{gnus-select-method} was agentized by the
26022    default, and the agent was disabled by default.  When the agent is
26023    enabled, headers are now also retrieved from the Agent cache instead
26024    of the back ends when possible.  Earlier this only happened in the
26025    unplugged state.  You can enroll or remove servers with @kbd{J a} and
26026    @kbd{J r} in the server buffer.  Gnus will not download articles into
26027    the Agent cache, unless you instruct it to do so, though, by using
26028    @kbd{J u} or @kbd{J s} from the Group buffer.  You revert to the old
26029    behaviour of having the Agent disabled with @code{(setq gnus-agent
26030    nil)}.  Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el}
26031    is not needed any more.
26032    
26033    @item
26034    @code{gnus-summary-line-format}
26035    
26036    The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%)
26037    %s\n}.  Moreover @code{gnus-extra-headers},
26038    @code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses}
26039    changed their default so that the users name will be replaced by the
26040    recipient's name or the group name posting to for @acronym{NNTP}
26041    groups.
26042    
26043    @item
26044    @file{deuglify.el} (@code{gnus-article-outlook-deuglify-article})
26045    
26046    A new file from Raymond Scholz @email{rscholz@@zonix.de} for deuglifying
26047    broken Outlook (Express) articles.
26048    
26049    @item
26050    @code{(require 'gnus-load)}
26051    
26052    If you use a stand-alone Gnus distribution, you'd better add
26053    @code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus
26054    lisp directory into load-path.
26055    
26056    File @file{gnus-load.el} contains autoload commands, functions and variables,
26057    some of which may not be included in distributions of Emacsen.
26058    
26059    @item
26060    @code{gnus-slave-unplugged}
26061    
26062    A new command which starts Gnus offline in slave mode.
26063    
26064    @item
26065    @code{message-insinuate-rmail}
26066    
26067    Adding @code{(message-insinuate-rmail)} and @code{(setq
26068    mail-user-agent 'gnus-user-agent)} in @file{.emacs} convinces Rmail to
26069    compose, reply and forward messages in message-mode, where you can
26070    enjoy the power of @acronym{MML}.
26071    
26072    @item
26073    @code{message-minibuffer-local-map}
26074    
26075    The line below enables BBDB in resending a message:
26076    @lisp
26077    (define-key message-minibuffer-local-map [(tab)]
26078      'bbdb-complete-name)
26079    @end lisp
26080    
26081    @item
26082    Externalizing and deleting of attachments.
26083    
26084    If @code{gnus-gcc-externalize-attachments} or
26085    @code{message-fcc-externalize-attachments} is non-@code{nil}, attach
26086    local files as external parts.
26087    
26088    The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o}
26089    on @acronym{MIME} buttons) saves a part and replaces the part with an
26090    external one.  @code{gnus-mime-delete-part} (bound to @kbd{d} on
26091    @acronym{MIME} buttons) removes a part.  It works only on back ends
26092    that support editing.
26093    
26094    @item
26095    @code{gnus-default-charset}
26096    
26097    The default value is determined from the
26098    @code{current-language-environment} variable, instead of
26099    @code{iso-8859-1}.  Also the @samp{.*} item in
26100    @code{gnus-group-charset-alist} is removed.
26101    
26102    @item
26103    @code{gnus-posting-styles}
26104    
26105    Add a new format of match like
26106    @lisp
26107    ((header "to" "larsi.*org")
26108     (Organization "Somewhere, Inc."))
26109    @end lisp
26110    The old format like the lines below is obsolete, but still accepted.
26111    @lisp
26112    (header "to" "larsi.*org"
26113            (Organization "Somewhere, Inc."))
26114    @end lisp
26115    
26116    @item
26117    @code{message-ignored-news-headers} and @code{message-ignored-mail-headers}
26118    
26119    @samp{X-Draft-From} and @samp{X-Gnus-Agent-Meta-Information} have been
26120    added into these two variables.  If you customized those, perhaps you
26121    need add those two headers too.
26122    
26123    @item
26124    Gnus reads the @acronym{NOV} and articles in the Agent if plugged.
26125    
26126    If one reads an article while plugged, and the article already exists
26127    in the Agent, it won't get downloaded once more.  @code{(setq
26128    gnus-agent-cache nil)} reverts to the old behavior.
26129    
26130    @item
26131    Gnus supports the ``format=flowed'' (RFC 2646) parameter.  On
26132    composing messages, it is enabled by @code{use-hard-newlines}.
26133    Decoding format=flowed was present but not documented in earlier
26134    versions.
26135    
26136    @item
26137    Gnus supports the generation of RFC 2298 Disposition Notification requests.
26138    
26139    This is invoked with the @kbd{C-c M-n} key binding from message mode.
26140    
26141    @item
26142    Gnus supports Maildir groups.
26143    
26144    Gnus includes a new back end @file{nnmaildir.el}.  @xref{Maildir}.
26145    
26146    @item
26147    Printing capabilities are enhanced.
26148    
26149    Gnus supports Muttprint natively with @kbd{O P} from the Summary and
26150    Article buffers.  Also, each individual @acronym{MIME} part can be
26151    printed using @kbd{p} on the @acronym{MIME} button.
26152    
26153    @item
26154    Message supports the Importance: (RFC 2156) header.
26155    
26156    In the message buffer, @kbd{C-c C-f C-i} or @kbd{C-c C-u} cycles through
26157    the valid values.
26158    
26159    @item
26160    Gnus supports Cancel Locks in News.
26161    
26162    This means a header @samp{Cancel-Lock} is inserted in news posting.  It is
26163    used to determine if you wrote an article or not (for canceling and
26164    superseding).  Gnus generates a random password string the first time
26165    you post a message, and saves it in your @file{~/.emacs} using the Custom
26166    system.  While the variable is called @code{canlock-password}, it is not
26167    security sensitive data.  Publishing your canlock string on the web
26168    will not allow anyone to be able to anything she could not already do.
26169    The behaviour can be changed by customizing @code{message-insert-canlock}.
26170    
26171    @item
26172    Gnus supports server-side mail filtering using Sieve.
26173    
26174    Sieve rules can be added as Group Parameters for groups, and the
26175    complete Sieve script is generated using @kbd{D g} from the Group
26176    buffer, and then uploaded to the server using @kbd{C-c C-l} in the
26177    generated Sieve buffer.  @xref{Sieve Commands}, and the new Sieve
26178    manual @ref{Top, , Top, sieve, Emacs Sieve}.
26179    
26180    @item
26181    Extended format specs.
26182    
26183    Format spec @samp{%&user-date;} is added into
26184    @code{gnus-summary-line-format-alist}.  Also, user defined extended
26185    format specs are supported.  The extended format specs look like
26186    @samp{%u&foo;}, which invokes function
26187    @code{gnus-user-format-function-@var{foo}}.  Because @samp{&} is used as the
26188    escape character, old user defined format @samp{%u&} is no longer supported.
26189    
26190    @item
26191    @kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten.
26192    
26193    It was aliased to @kbd{Y c}
26194    (@code{gnus-summary-insert-cached-articles}).  The new function filters
26195    out other articles.
26196    
26197    @item Some limiting commands accept a @kbd{C-u} prefix to negate the match.
26198    
26199    If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/
26200    s}, @kbd{/ a}, and @kbd{/ x}
26201    (@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the
26202    result will be to display all articles that do not match the expression.
26203    
26204    @item
26205    Group names are treated as UTF-8 by default.
26206    
26207    This is supposedly what USEFOR wanted to migrate to.  See
26208    @code{gnus-group-name-charset-group-alist} and
26209    @code{gnus-group-name-charset-method-alist} for customization.
26210    
26211    @item
26212    The nnml and nnfolder back ends store marks for each groups.
26213    
26214    This makes it possible to take backup of nnml/nnfolder servers/groups
26215    separately of @file{~/.newsrc.eld}, while preserving marks.  It also
26216    makes it possible to share articles and marks between users (without
26217    sharing the @file{~/.newsrc.eld} file) within e.g. a department.  It
26218    works by storing the marks stored in @file{~/.newsrc.eld} in a per-group
26219    file @file{.marks} (for nnml) and @file{@var{groupname}.mrk} (for
26220    nnfolder, named @var{groupname}).  If the nnml/nnfolder is moved to
26221    another machine, Gnus will automatically use the @file{.marks} or
26222    @file{.mrk} file instead of the information in @file{~/.newsrc.eld}.
26223    The new server variables @code{nnml-marks-is-evil} and
26224    @code{nnfolder-marks-is-evil} can be used to disable this feature.
26225    
26226    @item
26227    The menu bar item (in Group and Summary buffer) named ``Misc'' has
26228    been renamed to ``Gnus''.
26229    
26230    @item
26231    The menu bar item (in Message mode) named ``@acronym{MML}'' has been
26232    renamed to ``Attachments''.  Note that this menu also contains security
26233    related stuff, like signing and encryption (@pxref{Security, Security,,
26234    message, Message Manual}).
26235    
26236    @item
26237    @code{gnus-group-charset-alist} and
26238    @code{gnus-group-ignored-charsets-alist}.
26239    
26240    The regexps in these variables are compared with full group names
26241    instead of real group names in 5.8.  Users who customize these
26242    variables should change those regexps accordingly.  For example:
26243    @lisp
26244    ("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
26245    @end lisp
26246    
26247    @item
26248    Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC
26249    2015/3156) and @acronym{S/MIME} (RFC 2630-2633).
26250    
26251    It needs an external @acronym{S/MIME} and OpenPGP implementation, but no
26252    additional Lisp libraries.  This add several menu items to the
26253    Attachments menu, and @kbd{C-c RET} key bindings, when composing
26254    messages.  This also obsoletes @code{gnus-article-hide-pgp-hook}.
26255    
26256    @item
26257    Gnus inlines external parts (message/external).
26258    
26259    @item
26260    @acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c
26261    C-m}.
26262    
26263    This change was made to avoid conflict with the standard binding of
26264    @code{back-to-indentation}, which is also useful in message mode.
26265    
26266    @item
26267    The default for @code{message-forward-show-mml} changed to symbol @code{best}.
26268    
26269    The behaviour for the @code{best} value is to show @acronym{MML} (i.e.,
26270    convert to @acronym{MIME}) when appropriate.  @acronym{MML} will not be
26271    used when forwarding signed or encrypted messages, as the conversion
26272    invalidate the digital signature.
26273    @end itemize
26274    
26275  @iftex  @iftex
26276    
26277  @page  @page
# Line 20281  reference manual as source material.  It Line 26366  reference manual as source material.  It
26366  @item news  @item news
26367  @cindex news  @cindex news
26368  This is what you are supposed to use this thing for---reading news.  This is what you are supposed to use this thing for---reading news.
26369  News is generally fetched from a nearby @sc{nntp} server, and is  News is generally fetched from a nearby @acronym{NNTP} server, and is
26370  generally publicly available to everybody.  If you post news, the entire  generally publicly available to everybody.  If you post news, the entire
26371  world is likely to read just what you have written, and they'll all  world is likely to read just what you have written, and they'll all
26372  snigger mischievously.  Behind your back.  snigger mischievously.  Behind your back.
# Line 20304  are reading. Line 26389  are reading.
26389    
26390  @item back end  @item back end
26391  @cindex back end  @cindex back end
26392  Gnus gets fed articles from a number of back ends, both news and mail  Gnus considers mail and news to be mostly the same, really.  The only
26393  back ends.  Gnus does not handle the underlying media, so to speak---this  difference is how to access the actual articles.  News articles are
26394  is all done by the back ends.  commonly fetched via the protocol @acronym{NNTP}, whereas mail
26395    messages could be read from a file on the local disk.  The internal
26396    architecture of Gnus thus comprises a ``front end'' and a number of
26397    ``back ends''.  Internally, when you enter a group (by hitting
26398    @key{RET}, say), you thereby invoke a function in the front end in
26399    Gnus.  The front end then ``talks'' to a back end and says things like
26400    ``Give me the list of articles in the foo group'' or ``Show me article
26401    number 4711''.
26402    
26403    So a back end mainly defines either a protocol (the @code{nntp} back
26404    end accesses news via @acronym{NNTP}, the @code{nnimap} back end
26405    accesses mail via @acronym{IMAP}) or a file format and directory
26406    layout (the @code{nnspool} back end accesses news via the common
26407    ``spool directory'' format, the @code{nnml} back end access mail via a
26408    file format and directory layout that's quite similar).
26409    
26410    Gnus does not handle the underlying media, so to speak---this is all
26411    done by the back ends.  A back end is a collection of functions to
26412    access the articles.
26413    
26414    However, sometimes the term ``back end'' is also used where ``server''
26415    would have been more appropriate.  And then there is the term ``select
26416    method'' which can mean either.  The Gnus terminology can be quite
26417    confusing.
26418    
26419  @item native  @item native
26420  @cindex native  @cindex native
# Line 20353  A line from the head of an article. Line 26461  A line from the head of an article.
26461  @item headers  @item headers
26462  @cindex headers  @cindex headers
26463  A collection of such lines, or a collection of heads.  Or even a  A collection of such lines, or a collection of heads.  Or even a
26464  collection of @sc{nov} lines.  collection of @acronym{NOV} lines.
26465    
26466  @item @sc{nov}  @item @acronym{NOV}
26467  @cindex nov  @cindex @acronym{NOV}
26468  When Gnus enters a group, it asks the back end for the headers of all  When Gnus enters a group, it asks the back end for the headers of all
26469  unread articles in the group.  Most servers support the News OverView  unread articles in the group.  Most servers support the News OverView
26470  format, which is more compact and much faster to read and parse than the  format, which is more compact and much faster to read and parse than the
# Line 20421  original. Line 26529  original.
26529    
26530  @item ephemeral groups  @item ephemeral groups
26531  @cindex ephemeral groups  @cindex ephemeral groups
26532    @cindex temporary groups
26533  Most groups store data on what articles you have read.  @dfn{Ephemeral}  Most groups store data on what articles you have read.  @dfn{Ephemeral}
26534  groups are groups that will have no data stored---when you exit the  groups are groups that will have no data stored---when you exit the
26535  group, it'll disappear into the ether.  group, it'll disappear into the aether.
26536    
26537  @item solid groups  @item solid groups
26538  @cindex solid groups  @cindex solid groups
# Line 20459  An article that responds to a different Line 26568  An article that responds to a different
26568  A collection of messages in one file.  The most common digest format is  A collection of messages in one file.  The most common digest format is
26569  specified by RFC 1153.  specified by RFC 1153.
26570    
26571    @item splitting
26572    @cindex splitting, terminolgy
26573    @cindex mail sorting
26574    @cindex mail filtering (splitting)
26575    The action of sorting your emails according to certain rules. Sometimes
26576    incorrectly called mail filtering.
26577    
26578  @end table  @end table
26579    
26580    
# Line 20472  section is designed to give general poin Line 26588  section is designed to give general poin
26588  for some quite common situations.  for some quite common situations.
26589    
26590  @menu  @menu
26591  * Slow/Expensive Connection:: You run a local Emacs and get the news elsewhere.  * Slow/Expensive Connection::   You run a local Emacs and get the news elsewhere.
26592  * Slow Terminal Connection::  You run a remote Emacs.  * Slow Terminal Connection::    You run a remote Emacs.
26593  * Little Disk Space::         You feel that having large setup files is icky.  * Little Disk Space::           You feel that having large setup files is icky.
26594  * Slow Machine::              You feel like buying a faster machine.  * Slow Machine::                You feel like buying a faster machine.
26595  @end menu  @end menu
26596    
26597    
26598  @node Slow/Expensive Connection  @node Slow/Expensive Connection
26599  @subsection Slow/Expensive @sc{nntp} Connection  @subsection Slow/Expensive NNTP Connection
26600    
26601  If you run Emacs on a machine locally, and get your news from a machine  If you run Emacs on a machine locally, and get your news from a machine
26602  over some very thin strings, you want to cut down on the amount of data  over some very thin strings, you want to cut down on the amount of data
26603  Gnus has to get from the @sc{nntp} server.  Gnus has to get from the @acronym{NNTP} server.
26604    
26605  @table @code  @table @code
26606    
26607  @item gnus-read-active-file  @item gnus-read-active-file
26608  Set this to @code{nil}, which will inhibit Gnus from requesting the  Set this to @code{nil}, which will inhibit Gnus from requesting the
26609  entire active file from the server.  This file is often very large.  You  entire active file from the server.  This file is often v.  large.  You
26610  also have to set @code{gnus-check-new-newsgroups} and  also have to set @code{gnus-check-new-newsgroups} and
26611  @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus  @code{gnus-check-bogus-newsgroups} to @code{nil} to make sure that Gnus
26612  doesn't suddenly decide to fetch the active file anyway.  doesn't suddenly decide to fetch the active file anyway.
26613    
26614  @item gnus-nov-is-evil  @item gnus-nov-is-evil
26615  This one has to be @code{nil}.  If not, grabbing article headers from  This one has to be @code{nil}.  If not, grabbing article headers from
26616  the @sc{nntp} server will not be very fast.  Not all @sc{nntp} servers  the @acronym{NNTP} server will not be very fast.  Not all @acronym{NNTP} servers
26617  support @sc{xover}; Gnus will detect this by itself.  support @sc{xover}; Gnus will detect this by itself.
26618  @end table  @end table
26619    
# Line 20540  want to read them anyway. Line 26656  want to read them anyway.
26656  If this is non-@code{nil}, all threads in the summary buffer will be  If this is non-@code{nil}, all threads in the summary buffer will be
26657  hidden initially.  hidden initially.
26658    
26659    
26660  @item gnus-updated-mode-lines  @item gnus-updated-mode-lines
26661  If this is @code{nil}, Gnus will not put information in the buffer mode  If this is @code{nil}, Gnus will not put information in the buffer mode
26662  lines, which might save some time.  lines, which might save some time.
# Line 20613  Gnus will work. Line 26730  Gnus will work.
26730    
26731  @item  @item
26732  Try doing an @kbd{M-x gnus-version}.  If you get something that looks  Try doing an @kbd{M-x gnus-version}.  If you get something that looks
26733  like @samp{Gnus v5.46; nntp 4.0} you have the right files loaded.  If,  like @samp{Gnus v5.10.6} you have the right files loaded.  Otherwise
26734  on the other hand, you get something like @samp{NNTP 3.x} or @samp{nntp  you have some old @file{.el} files lying around.  Delete these.
 flee}, you have some old @file{.el} files lying around.  Delete these.  
26735    
26736  @item  @item
26737  Read the help group (@kbd{G h} in the group buffer) for a FAQ and a  Read the help group (@kbd{G h} in the group buffer) for a
26738  how-to.  @acronym{FAQ} and a how-to.
26739    
26740  @item  @item
26741  @vindex max-lisp-eval-depth  @vindex max-lisp-eval-depth
# Line 20637  If all else fails, report the problem as Line 26753  If all else fails, report the problem as
26753  @kindex M-x gnus-bug  @kindex M-x gnus-bug
26754  @findex gnus-bug  @findex gnus-bug
26755  If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}  If you find a bug in Gnus, you can report it with the @kbd{M-x gnus-bug}
26756  command.  @kbd{M-x set-variable @key{RET} debug-on-error @key{RET} t @key{RET}}, and send  command.  @kbd{M-x set-variable RET debug-on-error RET t RET}, and send
26757  me the backtrace.  I will fix bugs, but I can only fix them if you send  me the backtrace.  I will fix bugs, but I can only fix them if you send
26758  me a precise description as to how to reproduce the bug.  me a precise description as to how to reproduce the bug.
26759    
# Line 20659  it, copy the Emacs window to a file (wit Line 26775  it, copy the Emacs window to a file (wit
26775  it somewhere it can be reached, and include the URL of the picture in  it somewhere it can be reached, and include the URL of the picture in
26776  the bug report.  the bug report.
26777    
26778  If you just need help, you are better off asking on  @cindex patches
26779  @samp{gnu.emacs.gnus}.  I'm not very helpful.  If you would like to contribute a patch to fix bugs or make
26780    improvements, please produce the patch using @samp{diff -u}.
26781    
26782    @cindex edebug
26783    If you want to debug your problem further before reporting, possibly
26784    in order to solve the problem yourself and send a patch, you can use
26785    edebug.  Debugging Lisp code is documented in the Elisp manual
26786    (@pxref{Debugging, , Debugging Lisp Programs, elisp, The GNU Emacs
26787    Lisp Reference Manual}).  To get you started with edebug, consider if
26788    you discover some weird behaviour when pressing @kbd{c}, the first
26789    step is to do @kbd{C-h k c} and click on the hyperlink (Emacs only) in
26790    the documentation buffer that leads you to the function definition,
26791    then press @kbd{M-x edebug-defun RET} with point inside that function,
26792    return to Gnus and press @kbd{c} to invoke the code.  You will be
26793    placed in the lisp buffer and can single step using @kbd{SPC} and
26794    evaluate expressions using @kbd{M-:} or inspect variables using
26795    @kbd{C-h v}, abort execution with @kbd{q}, and resume execution with
26796    @kbd{c} or @kbd{g}.
26797    
26798    @cindex elp
26799    @cindex profile
26800    @cindex slow
26801    Sometimes, a problem do not directly generate an elisp error but
26802    manifests itself by causing Gnus to be very slow.  In these cases, you
26803    can use @kbd{M-x toggle-debug-on-quit} and press @kbd{C-g} when things are
26804    slow, and then try to analyze the backtrace (repeating the procedure
26805    helps isolating the real problem areas).
26806    
26807    A fancier approach is to use the elisp profiler, ELP.  The profiler is
26808    (or should be) fully documented elsewhere, but to get you started
26809    there are a few steps that need to be followed.  First, instrument the
26810    part of Gnus you are interested in for profiling, e.g. @kbd{M-x
26811    elp-instrument-package RET gnus} or @kbd{M-x elp-instrument-package
26812    RET message}.  Then perform the operation that is slow and press
26813    @kbd{M-x elp-results}.  You will then see which operations that takes
26814    time, and can debug them further.  If the entire operation takes much
26815    longer than the time spent in the slowest function in the profiler
26816    output, you probably profiled the wrong part of Gnus.  To reset
26817    profiling statistics, use @kbd{M-x elp-reset-all}.  @kbd{M-x
26818    elp-restore-all} is supposed to remove profiling, but given the
26819    complexities and dynamic code generation in Gnus, it might not always
26820    work perfectly.
26821    
26822  @cindex gnu.emacs.gnus  @cindex gnu.emacs.gnus
26823  @cindex ding mailing list  @cindex ding mailing list
26824  You can also ask on the ding mailing list---@samp{ding@@gnus.org}.  If you just need help, you are better off asking on
26825  Write to @samp{ding-request@@gnus.org} to subscribe.  @samp{gnu.emacs.gnus}.  I'm not very helpful.  You can also ask on
26826    @email{ding@@gnus.org, the ding mailing list}.  Write to
26827    @email{ding-request@@gnus.org} to subscribe.
26828    
26829    
26830  @page  @page
# Line 20685  back ends (this is written in stone), th Line 26844  back ends (this is written in stone), th
26844  and general methods of operation.  and general methods of operation.
26845    
26846  @menu  @menu
26847  * Gnus Utility Functions::   Common functions and variable to use.  * Gnus Utility Functions::      Common functions and variable to use.
26848  * Back End Interface::       How Gnus communicates with the servers.  * Back End Interface::          How Gnus communicates with the servers.
26849  * Score File Syntax::        A BNF definition of the score file standard.  * Score File Syntax::           A BNF definition of the score file standard.
26850  * Headers::                  How Gnus stores headers internally.  * Headers::                     How Gnus stores headers internally.
26851  * Ranges::                   A handy format for storing mucho numbers.  * Ranges::                      A handy format for storing mucho numbers.
26852  * Group Info::               The group info format.  * Group Info::                  The group info format.
26853  * Extended Interactive::     Symbolic prefixes and stuff.  * Extended Interactive::        Symbolic prefixes and stuff.
26854  * Emacs/XEmacs Code::        Gnus can be run under all modern Emacsen.  * Emacs/XEmacs Code::           Gnus can be run under all modern Emacsen.
26855  * Various File Formats::     Formats of files that Gnus use.  * Various File Formats::        Formats of files that Gnus use.
26856  @end menu  @end menu
26857    
26858    
# Line 20788  Says whether @var{group} is secondary or Line 26947  Says whether @var{group} is secondary or
26947  @findex gnus-group-foreign-p  @findex gnus-group-foreign-p
26948  Says whether @var{group} is foreign or not.  Says whether @var{group} is foreign or not.
26949    
26950  @item group-group-find-parameter  @item gnus-group-find-parameter
26951  @findex group-group-find-parameter  @findex gnus-group-find-parameter
26952  Returns the parameter list of @var{group}.  If given a second parameter,  Returns the parameter list of @var{group}.  If given a second parameter,
26953  returns the value of that parameter for @var{group}.  returns the value of that parameter for @var{group}.
26954    
# Line 20821  Prompts the user for a select method. Line 26980  Prompts the user for a select method.
26980  @node Back End Interface  @node Back End Interface
26981  @subsection Back End Interface  @subsection Back End Interface
26982    
26983  Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual  Gnus doesn't know anything about @acronym{NNTP}, spools, mail or virtual
26984  groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual  groups.  It only knows how to talk to @dfn{virtual servers}.  A virtual
26985  server is a @dfn{back end} and some @dfn{back end variables}.  As examples  server is a @dfn{back end} and some @dfn{back end variables}.  As examples
26986  of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As  of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}.  As
# Line 20866  return value. Line 27025  return value.
27025  Some back ends could be said to be @dfn{server-forming} back ends, and  Some back ends could be said to be @dfn{server-forming} back ends, and
27026  some might be said not to be.  The latter are back ends that generally  some might be said not to be.  The latter are back ends that generally
27027  only operate on one group at a time, and have no concept of ``server''  only operate on one group at a time, and have no concept of ``server''
27028  -- they have a group, and they deliver info on that group and nothing  ---they have a group, and they deliver info on that group and nothing
27029  more.  more.
27030    
27031    Gnus identifies each message by way of group name and article number.  A
27032    few remarks about these article numbers might be useful.  First of all,
27033    the numbers are positive integers.  Secondly, it is normally not
27034    possible for later articles to ``re-use'' older article numbers without
27035    confusing Gnus.  That is, if a group has ever contained a message
27036    numbered 42, then no other message may get that number, or Gnus will get
27037    mightily confused.@footnote{See the function
27038    @code{nnchoke-request-update-info}, @ref{Optional Back End Functions}.}
27039    Third, article numbers must be assigned in order of arrival in the
27040    group; this is not necessarily the same as the date of the message.
27041    
27042    The previous paragraph already mentions all the ``hard'' restrictions that
27043    article numbers must fulfill.  But it seems that it might be useful to
27044    assign @emph{consecutive} article numbers, for Gnus gets quite confused
27045    if there are holes in the article numbering sequence.  However, due to
27046    the ``no-reuse'' restriction, holes cannot be avoided altogether.  It's
27047    also useful for the article numbers to start at 1 to avoid running out
27048    of numbers as long as possible.
27049    
27050    Note that by convention, back ends are named @code{nnsomething}, but
27051    Gnus also comes with some @code{nnnotbackends}, such as
27052    @file{nnheader.el}, @file{nnmail.el} and @file{nnoo.el}.
27053    
27054  In the examples and definitions I will refer to the imaginary back end  In the examples and definitions I will refer to the imaginary back end
27055  @code{nnchoke}.  @code{nnchoke}.
27056    
27057  @cindex @code{nnchoke}  @cindex @code{nnchoke}
27058    
27059  @menu  @menu
27060  * Required Back End Functions::       Functions that must be implemented.  * Required Back End Functions::  Functions that must be implemented.
27061  * Optional Back End Functions::       Functions that need not be implemented.  * Optional Back End Functions::  Functions that need not be implemented.
27062  * Error Messaging::                   How to get messages and report errors.  * Error Messaging::             How to get messages and report errors.
27063  * Writing New Back Ends::             Extending old back ends.  * Writing New Back Ends::       Extending old back ends.
27064  * Hooking New Back Ends Into Gnus::   What has to be done on the Gnus end.  * Hooking New Back Ends Into Gnus::  What has to be done on the Gnus end.
27065  * Mail-like Back Ends::               Some tips on mail back ends.  * Mail-like Back Ends::         Some tips on mail back ends.
27066  @end menu  @end menu
27067    
27068    
# Line 20896  In the examples and definitions I will r Line 27078  In the examples and definitions I will r
27078  sequences (lists) of article numbers, and most back ends do not support  sequences (lists) of article numbers, and most back ends do not support
27079  retrieval of @code{Message-ID}s.  But they should try for both.  retrieval of @code{Message-ID}s.  But they should try for both.
27080    
27081  The result data should either be HEADs or NOV lines, and the result  The result data should either be HEADs or @acronym{NOV} lines, and the result
27082  value should either be @code{headers} or @code{nov} to reflect this.  value should either be @code{headers} or @code{nov} to reflect this.
27083  This might later be expanded to @code{various}, which will be a mixture  This might later be expanded to @code{various}, which will be a mixture
27084  of HEADs and NOV lines, but this is currently not supported by Gnus.  of HEADs and @acronym{NOV} lines, but this is currently not supported by Gnus.
27085    
27086  If @var{fetch-old} is non-@code{nil} it says to try fetching "extra  If @var{fetch-old} is non-@code{nil} it says to try fetching ``extra
27087  headers", in some meaning of the word.  This is generally done by  headers'', in some meaning of the word.  This is generally done by
27088  fetching (at most) @var{fetch-old} extra headers less than the smallest  fetching (at most) @var{fetch-old} extra headers less than the smallest
27089  article number in @code{articles}, and filling the gaps as well.  The  article number in @code{articles}, and filling the gaps as well.  The
27090  presence of this parameter can be ignored if the back end finds it  presence of this parameter can be ignored if the back end finds it
# Line 20940  valid-message  = "221 " <number> " Artic Line 27122  valid-message  = "221 " <number> " Artic
27122  header         = <text> eol  header         = <text> eol
27123  @end example  @end example
27124    
27125    @cindex BNF
27126    (The version of BNF used here is the one used in RFC822.)
27127    
27128  If the return value is @code{nov}, the data buffer should contain  If the return value is @code{nov}, the data buffer should contain
27129  @dfn{network overview database} lines.  These are basically fields  @dfn{network overview database} lines.  These are basically fields
27130  separated by tabs.  separated by tabs.
27131    
27132  @example  @example
27133  nov-buffer = *nov-line  nov-buffer = *nov-line
27134  nov-line   = 8*9 [ field <TAB> ] eol  nov-line   = field 7*8[ <TAB> field ] eol
27135  field      = <text except TAB>  field      = <text except TAB>
27136  @end example  @end example
27137    
# Line 20990  There should be no data returned. Line 27175  There should be no data returned.
27175    
27176  If @var{server} is the current virtual server, and the connection to the  If @var{server} is the current virtual server, and the connection to the
27177  physical server is alive, then this function should return a  physical server is alive, then this function should return a
27178  non-@code{nil} vlue.  This function should under no circumstances  non-@code{nil} value.  This function should under no circumstances
27179  attempt to reconnect to a server we have lost connection to.  attempt to reconnect to a server we have lost connection to.
27180    
27181  There should be no data returned.  There should be no data returned.
# Line 21045  number of articles may be less than one Line 27230  number of articles may be less than one
27230  considering the highest and lowest article numbers, but some articles  considering the highest and lowest article numbers, but some articles
27231  may have been canceled.  Gnus just discards the total-number, so  may have been canceled.  Gnus just discards the total-number, so
27232  whether one should take the bother to generate it properly (if that is a  whether one should take the bother to generate it properly (if that is a
27233  problem) is left as an exercise to the reader.  problem) is left as an exercise to the reader.  If the group contains no
27234    articles, the lowest article number should be reported as 1 and the
27235    highest as 0.
27236    
27237  @example  @example
27238  group-status = [ error / info ] eol  group-status = [ error / info ] eol
# Line 21075  ifi.discussion 3324 3300 n Line 27262  ifi.discussion 3324 3300 n
27262  @end example  @end example
27263    
27264  On each line we have a group name, then the highest article number in  On each line we have a group name, then the highest article number in
27265  that group, the lowest article number, and finally a flag.  that group, the lowest article number, and finally a flag.  If the group
27266    contains no articles, the lowest article number should be reported as 1
27267    and the highest as 0.
27268    
27269  @example  @example
27270  active-file = *active-line  active-file = *active-line
# Line 21128  group-buffer = *active-line / *group-sta Line 27317  group-buffer = *active-line / *group-sta
27317  @item (nnchoke-request-update-info GROUP INFO &optional SERVER)  @item (nnchoke-request-update-info GROUP INFO &optional SERVER)
27318    
27319  A Gnus group info (@pxref{Group Info}) is handed to the back end for  A Gnus group info (@pxref{Group Info}) is handed to the back end for
27320  alterations.  This comes in handy if the back end really carries all the  alterations.  This comes in handy if the back end really carries all
27321  information (as is the case with virtual and imap groups).  This  the information (as is the case with virtual and imap groups).  This
27322  function should destructively alter the info to suit its needs, and  function should destructively alter the info to suit its needs, and
27323  should return the (altered) group info.  should return a non-@code{nil} value.
27324    
27325  There should be no result data from this function.  There should be no result data from this function.
27326    
# Line 21154  There should be no result data from this Line 27343  There should be no result data from this
27343    
27344  Set/remove/add marks on articles.  Normally Gnus handles the article  Set/remove/add marks on articles.  Normally Gnus handles the article
27345  marks (such as read, ticked, expired etc) internally, and store them in  marks (such as read, ticked, expired etc) internally, and store them in
27346  @code{~/.newsrc.eld}.  Some back ends (such as @sc{imap}) however carry  @file{~/.newsrc.eld}.  Some back ends (such as @acronym{IMAP}) however carry
27347  all information about the articles on the server, so Gnus need to  all information about the articles on the server, so Gnus need to
27348  propagate the mark information to the server.  propagate the mark information to the server.
27349    
27350  ACTION is a list of mark setting requests, having this format:  @var{action} is a list of mark setting requests, having this format:
27351    
27352  @example  @example
27353  (RANGE ACTION MARK)  (RANGE ACTION MARK)
27354  @end example  @end example
27355    
27356  Range is a range of articles you wish to update marks on.  Action is  @var{range} is a range of articles you wish to update marks on.
27357  @code{set}, @code{add} or @code{del}, respectively used for removing all  @var{action} is @code{add} or @code{del}, used to add marks or remove
27358  existing marks and setting them as specified, adding (preserving the  marks (preserving all marks not mentioned).  @var{mark} is a list of
27359  marks not mentioned) mark and removing (preserving the marks not  marks; where each mark is a symbol.  Currently used marks are
27360  mentioned) marks.  Mark is a list of marks; where each mark is a symbol.  @code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed},
27361  Currently used marks are @code{read}, @code{tick}, @code{reply},  @code{dormant}, @code{save}, @code{download}, @code{unsend},
27362  @code{expire}, @code{killed}, @code{dormant}, @code{save},  @code{forward} and @code{recent}, but your back end should, if
27363  @code{download} and @code{unsend}, but your back end should, if possible,  possible, not limit itself to these.
 not limit itself to these.  
27364    
27365  Given contradictory actions, the last action in the list should be the  Given contradictory actions, the last action in the list should be the
27366  effective one.  That is, if your action contains a request to add the  effective one.  That is, if your action contains a request to add the
# Line 21212  There should be no result data from this Line 27400  There should be no result data from this
27400    
27401  This function may be called at any time (by Gnus or anything else) to  This function may be called at any time (by Gnus or anything else) to
27402  request that the back end check for incoming articles, in one way or  request that the back end check for incoming articles, in one way or
27403  another.  A mail back end will typically read the spool file or query the  another.  A mail back end will typically read the spool file or query
27404  POP server when this function is invoked.  The @var{group} doesn't have  the @acronym{POP} server when this function is invoked.  The
27405  to be heeded---if the back end decides that it is too much work just  @var{group} doesn't have to be heeded---if the back end decides that
27406  scanning for a single group, it may do a total scan of all groups.  It  it is too much work just scanning for a single group, it may do a
27407  would be nice, however, to keep things local if that's practical.  total scan of all groups.  It would be nice, however, to keep things
27408    local if that's practical.
27409    
27410  There should be no result data from this function.  There should be no result data from this function.
27411    
# Line 21245  description-buffer = *description-line Line 27434  description-buffer = *description-line
27434  @item (nnchoke-request-newgroups DATE &optional SERVER)  @item (nnchoke-request-newgroups DATE &optional SERVER)
27435    
27436  The result data from this function should be all groups that were  The result data from this function should be all groups that were
27437  created after @samp{date}, which is in normal human-readable date  created after @samp{date}, which is in normal human-readable date format
27438  format.  The data should be in the active buffer format.  (i.e., the date format used in mail and news headers, and returned by
27439    the function @code{message-make-date} by default).  The data should be
27440    in the active buffer format.
27441    
27442    It is okay for this function to return ``too many'' groups; some back ends
27443    might find it cheaper to return the full list of groups, rather than
27444    just the new groups.  But don't do this for back ends with many groups.
27445    Normally, if the user creates the groups herself, there won't be too
27446    many groups, so @code{nnml} and the like are probably safe.  But for
27447    back ends like @code{nntp}, where the groups have been created by the
27448    server, it is quite likely that there can be many groups.
27449    
27450    
27451  @item (nnchoke-request-create-group GROUP &optional SERVER)  @item (nnchoke-request-create-group GROUP &optional SERVER)
# Line 21271  able to delete. Line 27470  able to delete.
27470  There should be no result data returned.  There should be no result data returned.
27471    
27472    
27473  @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM  @item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM &optional LAST)
 &optional LAST)  
27474    
27475  This function should move @var{article} (which is a number) from  This function should move @var{article} (which is a number) from
27476  @var{group} by calling @var{accept-form}.  @var{group} by calling @var{accept-form}.
# Line 21303  this function in short order. Line 27501  this function in short order.
27501  The function should return a cons where the @code{car} is the group name and  The function should return a cons where the @code{car} is the group name and
27502  the @code{cdr} is the article number that the article was entered as.  the @code{cdr} is the article number that the article was entered as.
27503    
27504    The group should exist before the back end is asked to accept the
27505    article for that group.
27506    
27507  There should be no data returned.  There should be no data returned.
27508    
27509    
# Line 21419  of @code{nndir}.  (The same with @code{n Line 27620  of @code{nndir}.  (The same with @code{n
27620  This macro defines some common functions that almost all back ends should  This macro defines some common functions that almost all back ends should
27621  have.  have.
27622    
27623  @example  @lisp
27624  (nnoo-define-basics nndir)  (nnoo-define-basics nndir)
27625  @end example  @end lisp
27626    
27627  @item deffoo  @item deffoo
27628  This macro is just like @code{defun} and takes the same parameters.  In  This macro is just like @code{defun} and takes the same parameters.  In
# Line 21432  function as being public so that other b Line 27633  function as being public so that other b
27633  This macro allows mapping of functions from the current back end to  This macro allows mapping of functions from the current back end to
27634  functions from the parent back ends.  functions from the parent back ends.
27635    
27636  @example  @lisp
27637  (nnoo-map-functions nndir  (nnoo-map-functions nndir
27638    (nnml-retrieve-headers 0 nndir-current-group 0 0)    (nnml-retrieve-headers 0 nndir-current-group 0 0)
27639    (nnmh-request-article 0 nndir-current-group 0 0))    (nnmh-request-article 0 nndir-current-group 0 0))
27640  @end example  @end lisp
27641    
27642  This means that when @code{nndir-retrieve-headers} is called, the first,  This means that when @code{nndir-retrieve-headers} is called, the first,
27643  third, and fourth parameters will be passed on to  third, and fourth parameters will be passed on to
# Line 21448  This macro allows importing functions fr Line 27649  This macro allows importing functions fr
27649  last thing in the source file, since it will only define functions that  last thing in the source file, since it will only define functions that
27650  haven't already been defined.  haven't already been defined.
27651    
27652  @example  @lisp
27653  (nnoo-import nndir  (nnoo-import nndir
27654    (nnmh    (nnmh
27655     nnmh-request-list     nnmh-request-list
27656     nnmh-request-newgroups)     nnmh-request-newgroups)
27657    (nnml))    (nnml))
27658  @end example  @end lisp
27659    
27660  This means that calls to @code{nndir-request-list} should just be passed  This means that calls to @code{nndir-request-list} should just be passed
27661  on to @code{nnmh-request-list}, while all public functions from  on to @code{nnmh-request-list}, while all public functions from
# Line 21466  defined now. Line 27667  defined now.
27667  Below is a slightly shortened version of the @code{nndir} back end.  Below is a slightly shortened version of the @code{nndir} back end.
27668    
27669  @lisp  @lisp
27670  ;;; nndir.el --- single directory newsgroup access for Gnus  ;;; @r{nndir.el --- single directory newsgroup access for Gnus}
27671  ;; Copyright (C) 1995,96 Free Software Foundation, Inc.  ;; @r{Copyright (C) 1995,96 Free Software Foundation, Inc.}
27672    
27673  ;;; Code:  ;;; @r{Code:}
27674    
27675  (require 'nnheader)  (require 'nnheader)
27676  (require 'nnmh)  (require 'nnmh)
# Line 21497  Below is a slightly shortened version of Line 27698  Below is a slightly shortened version of
27698  (defvoo nndir-status-string "" nil nnmh-status-string)  (defvoo nndir-status-string "" nil nnmh-status-string)
27699  (defconst nndir-version "nndir 1.0")  (defconst nndir-version "nndir 1.0")
27700    
27701  ;;; Interface functions.  ;;; @r{Interface functions.}
27702    
27703  (nnoo-define-basics nndir)  (nnoo-define-basics nndir)
27704    
# Line 21536  Below is a slightly shortened version of Line 27737  Below is a slightly shortened version of
27737  @subsubsection Hooking New Back Ends Into Gnus  @subsubsection Hooking New Back Ends Into Gnus
27738    
27739  @vindex gnus-valid-select-methods  @vindex gnus-valid-select-methods
27740    @findex gnus-declare-backend
27741  Having Gnus start using your new back end is rather easy---you just  Having Gnus start using your new back end is rather easy---you just
27742  declare it with the @code{gnus-declare-backend} functions.  This will  declare it with the @code{gnus-declare-backend} functions.  This will
27743  enter the back end into the @code{gnus-valid-select-methods} variable.  enter the back end into the @code{gnus-valid-select-methods} variable.
# Line 21549  Here's an example: Line 27751  Here's an example:
27751  (gnus-declare-backend "nnchoke" 'mail 'respool 'address)  (gnus-declare-backend "nnchoke" 'mail 'respool 'address)
27752  @end lisp  @end lisp
27753    
27754    The above line would then go in the @file{nnchoke.el} file.
27755    
27756  The abilities can be:  The abilities can be:
27757    
27758  @table @code  @table @code
# Line 21578  The user should be prompted for an addre Line 27782  The user should be prompted for an addre
27782  @subsubsection Mail-like Back Ends  @subsubsection Mail-like Back Ends
27783    
27784  One of the things that separate the mail back ends from the rest of the  One of the things that separate the mail back ends from the rest of the
27785  back ends is the heavy dependence by the mail back ends on common  back ends is the heavy dependence by most of the mail back ends on
27786  functions in @file{nnmail.el}.  For instance, here's the definition of  common functions in @file{nnmail.el}.  For instance, here's the
27787  @code{nnml-request-scan}:  definition of @code{nnml-request-scan}:
27788    
27789  @lisp  @lisp
27790  (deffoo nnml-request-scan (&optional group server)  (deffoo nnml-request-scan (&optional group server)
# Line 21631  this: Line 27835  this:
27835  @subsection Score File Syntax  @subsection Score File Syntax
27836    
27837  Score files are meant to be easily parseable, but yet extremely  Score files are meant to be easily parseable, but yet extremely
27838  mallable.   It was decided that something that had the same read syntax  mallable.  It was decided that something that had the same read syntax
27839  as an Emacs Lisp list would fit that spec.  as an Emacs Lisp list would fit that spec.
27840    
27841  Here's a typical score file:  Here's a typical score file:
# Line 21707  manual (@pxref{Score File Format}). Line 27911  manual (@pxref{Score File Format}).
27911  @subsection Headers  @subsection Headers
27912    
27913  Internally Gnus uses a format for storing article headers that  Internally Gnus uses a format for storing article headers that
27914  corresponds to the @sc{nov} format in a mysterious fashion.  One could  corresponds to the @acronym{NOV} format in a mysterious fashion.  One could
27915  almost suspect that the author looked at the @sc{nov} specification and  almost suspect that the author looked at the @acronym{NOV} specification and
27916  just shamelessly @emph{stole} the entire thing, and one would be right.  just shamelessly @emph{stole} the entire thing, and one would be right.
27917    
27918  @dfn{Header} is a severely overloaded term.  ``Header'' is used in  @dfn{Header} is a severely overloaded term.  ``Header'' is used in
# Line 22029  hit these indirections impose on Gnus un Line 28233  hit these indirections impose on Gnus un
28233  @subsection Various File Formats  @subsection Various File Formats
28234    
28235  @menu  @menu
28236  * Active File Format::      Information on articles and groups available.  * Active File Format::          Information on articles and groups available.
28237  * Newsgroups File Format::  Group descriptions.  * Newsgroups File Format::      Group descriptions.
28238  @end menu  @end menu
28239    
28240    
# Line 22101  you are already familiar with Emacs, jus Line 28305  you are already familiar with Emacs, jus
28305  cat instead.  cat instead.
28306    
28307  @menu  @menu
28308  * Keystrokes::      Entering text and executing commands.  * Keystrokes::                  Entering text and executing commands.
28309  * Emacs Lisp::      The built-in Emacs programming language.  * Emacs Lisp::                  The built-in Emacs programming language.
28310  @end menu  @end menu
28311    
28312    
# Line 22175  write the following: Line 28379  write the following:
28379    
28380  This function (really ``special form'') @code{setq} is the one that can  This function (really ``special form'') @code{setq} is the one that can
28381  set a variable to some value.  This is really all you need to know.  Now  set a variable to some value.  This is really all you need to know.  Now
28382  you can go and fill your @code{.emacs} file with lots of these to change  you can go and fill your @file{.emacs} file with lots of these to change
28383  how Gnus works.  how Gnus works.
28384    
28385  If you have put that thing in your @code{.emacs} file, it will be read  If you have put that thing in your @file{.emacs} file, it will be read
28386  and @code{eval}ed (which is lisp-ese for ``run'') the next time you  and @code{eval}ed (which is lisp-ese for ``run'') the next time you
28387  start Emacs.  If you want to change the variable right away, simply say  start Emacs.  If you want to change the variable right away, simply say
28388  @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the  @kbd{C-x C-e} after the closing parenthesis.  That will @code{eval} the
# Line 22228  former).  The manual is unambiguous, but Line 28432  former).  The manual is unambiguous, but
28432  @end iflatex  @end iflatex
28433  @end iftex  @end iftex
28434    
28435    @c Local Variables:
28436    @c mode: texinfo
28437    @c coding: iso-8859-1
28438  @c End:  @c End:
28439    
28440  @ignore  @ignore

Legend:
Removed from v.1.30.2.2  
changed lines
  Added in v.1.30.2.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26