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 |
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}{\$} |
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 |
} |
} |
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]{ |
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 |
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 |
} |
} |
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 |
} |
} |
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 |
} |
} |
294 |
|
|
295 |
@iftex |
@iftex |
296 |
@iflatex |
@iflatex |
297 |
|
|
298 |
\begin{titlepage} |
\begin{titlepage} |
299 |
{ |
{ |
300 |
|
|
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} |
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 |
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 |
|
|
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. |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
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} |
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 |
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 |
|
|
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}. |
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 |
|
|
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. |
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 |
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 |
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 |
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 |
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. |
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 |
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. |
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}} |
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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. |
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 |
|
|
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 |
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) |
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. |
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}). |
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}). |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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} |
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}). |
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. |
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 |
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}). |
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 |
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 |
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 |
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 |
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. |
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 |
|
|
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 |
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 |
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 |
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)}, |
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 |
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 |
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 |
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 |
|
|
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. |
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 |
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}, |
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 |
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 |
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, |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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}). |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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: |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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, |
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} |
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} |
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 |
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 |
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 |
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) |
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 |
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. |
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 |
|
|
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 |
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 |
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 |
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). |
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}). |
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'' |
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 |
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}). |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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} |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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}). |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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}. |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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}). |
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 |
|
|
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
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 |
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. |
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 |
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 |
|
|
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 |
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 |
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, |
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}). |
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 |
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 |
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 |
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 |
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: |
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 |
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 |
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) |
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 |
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 |
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 |
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 |
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 |
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. |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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}). |
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}). |
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}). |
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. |
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 |
|
|
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
|
|
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). |
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 |
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} |
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 |
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 |
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 |
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: |
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 |
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 |
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 |
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 |
|
|
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 |
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}). |
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 |
|
|
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 |
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. |
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. |
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 |
|
|
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 |
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 |
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. |
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 |
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 |
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 |
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}). |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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} |
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 |
|
|
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 |
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 |
|
|
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 |
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 |
|
|
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 |
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, |
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 |
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 |
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 |
|
|
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 |
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. |
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 |
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. |
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 |
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 |
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] |
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 |
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 |
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 |
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 |
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 |
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 |
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. |
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 |
|
|
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 |
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 |
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}). |
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 |
|
|
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 |
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 |
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 |
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}). |
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 |
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 |
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 |
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 |
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 |
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 |
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. |
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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. |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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 "")) |
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. |
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 |
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 |
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 |
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"))))) |
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: |
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 |
|
|
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 |
|
|
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, |
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 |
|
|
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 |
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.") |
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) |
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 |
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. |
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 |
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 |
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} |
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 |
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. |
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 |
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 |
|
|
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 |
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} |
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 |
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 |
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 |
|
|
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}). |
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. |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
|
|
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 |
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. |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
|
|
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: |
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 |
|
|
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 |
|
|
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 |
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} |
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) |
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")}. |
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 |
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. |
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" |
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 |
|
|
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 |
|
|
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 |
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 |
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 |
|
|
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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} |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
|
|
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. |
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 |
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 () |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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. |
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 |
|
|
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. |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
|
|
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: |
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 |
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, |
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 |
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 |
|
|
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. |
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 |
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 |
|
|
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 |
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} |
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: |
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 |
|
|
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: |
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" |
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 |
|
|
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 |
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 |
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 |
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 |
|
|
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) |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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, |
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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 |
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}). |
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 |
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. |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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: |
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 |
|
|
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{<=}. |
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. |
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 |
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 |
|
|
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 |
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 |
|
|
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. |
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 |
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. |
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 |
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. |
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 |
|
|
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 |
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? |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
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? |
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 |
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 |
|
|
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 |
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: |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
|
|
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 ")" |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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: |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
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 |
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 |
|
|
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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. |
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 |
|
|
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, |
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 |
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, |
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 |
|
|
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 |
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 |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
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 |
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
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 |
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. |
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 |
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 |
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 |
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 |
|
|
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 |
|
|
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. |
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 |
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 |
|
|
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 |
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 |
|
|
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 |
|
|
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 |
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 |
|
|
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 |
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 |
|
|
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. |
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 |
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 |
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 |
|
|
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 |
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 |
|
|
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) |
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}. |
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 |
|
|
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 |
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 |
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 |
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) |
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 |
|
|
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. |
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 |
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) |
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: |
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 |
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 |
|
|
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 |
|
|
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 |
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 |