\newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
\newcommand{\gnuscode}[1]{\gnustt{#1}}
+\newcommand{\gnusasis}[1]{\gnustt{#1}}
+\newcommand{\gnusurl}[1]{\gnustt{#1}}
+\newcommand{\gnuscommand}[1]{\gnustt{#1}}
\newcommand{\gnusenv}[1]{\gnustt{#1}}
\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\gnusselectttfont{}#1}''}
\newcommand{\gnuslisp}[1]{\gnustt{#1}}
}
}{\end{list}}
+\newenvironment{asislist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
\newenvironment{kbdlist}%
{\begin{list}{}{
\labelwidth=0cm
* Summary Mail Commands:: Sending mail.
* Summary Post Commands:: Sending news.
* Summary Message Commands:: Other Message-related commands.
-* Canceling and Superseding::
+* Canceling and Superseding::
Marking Articles
* Unread Articles:: Marks for unread articles.
* Read Articles:: Marks for read articles.
* Other Marks:: Marks that do not affect readedness.
-* Setting Marks::
-* Generic Marking Commands::
-* Setting Process Marks::
-
-Marking Articles
-
-* 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.
+* 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.
Threading
* Summary Group Information:: Information oriented commands.
* Searching for Articles:: Multiple article commands.
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: Those pesky non-conformant commands.
Article Buffer
Browsing the Web
-* Archiving Mail::
+* Archiving Mail::
* Web Searches:: Creating groups from articles that match a string.
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
* Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox.
* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button.
* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
+* Debugging IMAP:: What to do when things don't work.
Other Sources
Image Enhancements
-* Picons:: How to display pictures of what you're reading.
-* Smileys:: Show all those happy faces the way they were meant to be shown.
* X-Face:: Display a funky, teensy black-and-white image.
+* Face:: Display a funkier, teensier colored image.
+* Smileys:: Show all those happy faces the way they were meant to be shown.
+* Picons:: How to display pictures of what you're reading.
* XVarious:: Other XEmacsy Gnusey variables.
Thwarting Email Spam
* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
* SpamAssassin:: How to use external anti-spam tools.
* Hashcash:: Reduce spam by burning CPU time.
-* Filtering Spam Using The Spam ELisp Package::
-* Filtering Spam Using Statistics with spam-stat::
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
+
+Filtering Spam Using The Spam ELisp Package
+
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
+* SpamOracle::
+* Extending the spam elisp package::
+
+Filtering Spam Using Statistics with spam-stat
+
+* Creating a spam-stat dictionary::
+* Splitting mail using spam-stat::
+* Low-level interface to the spam-stat dictionary::
Appendices
If things do not go smoothly at startup, you have to twiddle some
variables in your @file{~/.gnus.el} file. This file is similar to
-@file{~/.emacs}, but is read when gnus starts.
+@file{~/.emacs}, but is read when Gnus starts.
If you puzzle at any terms used in this manual, please refer to the
terminology section (@pxref{Terminology}).
Newsgroup description. You need to read the group descriptions
before these will appear, and to do that, you either have to set
@code{gnus-read-active-file} or use the group buffer @kbd{M-d}
-command.
+command.
@item o
@samp{m} if moderated.
(defface my-group-face-1
'((t (:foreground "Red" :bold t))) "First group face")
(defface my-group-face-2
- '((t (:foreground "DarkSeaGreen4" :bold t)))
+ '((t (:foreground "DarkSeaGreen4" :bold t)))
"Second group face")
(defface my-group-face-3
'((t (:foreground "Green4" :bold t))) "Third group face")
@cindex making groups
Make a new group (@code{gnus-group-make-group}). Gnus will prompt you
for a name, a method and possibly an @dfn{address}. For an easier way
-to subscribe to @acronym{NNTP} groups, @pxref{Browse Foreign Server}.
+to subscribe to @acronym{NNTP} groups (@pxref{Browse Foreign Server}).
@item G r
@kindex G r (Group)
to a particular group by using a match string like
@samp{shaving group:alt.sysadmin.recovery}.
+@item G R
+@kindex G R (Group)
+@findex gnus-group-make-rss-group
+Make a group based on an @acronym{RSS} feed
+(@code{gnus-group-make-rss-group}). You will be prompted for an URL.
+@xref{RSS}.
+
@item G DEL
@kindex G DEL (Group)
@findex gnus-group-delete-group
actually delete all the articles in the group, and forcibly remove the
group itself from the face of the Earth. Use a prefix only if you are
absolutely sure of what you are doing. This command can't be used on
-read-only groups (like @code{nntp} group), though.
+read-only groups (like @code{nntp} groups), though.
@item G V
@kindex G V (Group)
@anchor{subscribed}
@item subscribed
@cindex subscribed
+@cindex Mail-Followup-To
If this parameter is set to @code{t}, Gnus will consider the
to-address and to-list parameters for this group as addresses of
mailing lists you are subscribed to. Giving Gnus this information is
(only) a first step in getting it to generate correct Mail-Followup-To
-headers for your posts to these lists. Look here @pxref{Mailing
-Lists, , Mailing Lists, message, The Message Manual} for a complete
-treatment of available MFT support.
+headers for your posts to these lists. @xref{Mailing Lists, ,Mailing
+Lists, message, The Message Manual}, for a complete treatment of
+available MFT support.
See also @code{gnus-find-subscribed-addresses}, the function that
directly uses this group parameter.
generated, if @code{(gcc-self . "string")} is present, this string will
be inserted literally as a @code{gcc} header. This parameter takes
precedence over any default @code{Gcc} rules as described later
-(@pxref{Archived Messages}). CAVEAT:: It yields an error putting
-@code{(gcc-self . t)} in groups of a @code{nntp} server or so, because
-a @code{nntp} server doesn't accept articles.
+(@pxref{Archived Messages}).
+
+@strong{Caveat}: It yields an error putting @code{(gcc-self . t)} in
+groups of an @code{nntp} server or so, because an @code{nntp} server
+doesn't accept articles.
@item auto-expire
@cindex auto-expire
can either be a number of days (not necessarily an integer) or the
symbols @code{never} or @code{immediate}.
+@item expiry-target
+@cindex expiry-target
+Where expired messages end up. This parameter overrides
+@code{nnmail-expiry-target}.
+
@item score-file
@cindex score file group parameter
Elements that look like @code{(score-file . "file")} will make
Sieve @samp{IF} control structure is generated, having the test as the
condition and @samp{fileinto "group.name";} as the body.
-For example, if the INBOX.list.sieve group has the @code{(sieve
+For example, if the @samp{INBOX.list.sieve} group has the @code{(sieve
address "sender" "sieve-admin@@extundo.com")} group parameter, when
translating the group parameter into a Sieve script (@pxref{Sieve
Commands}) the following Sieve code is generated:
@}
@end example
-The Sieve language is described in RFC 3028. @xref{Top, , Top, sieve,
-Emacs Sieve}.
+The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve,
+Top, sieve, Emacs Sieve}.
@item (@var{variable} @var{form})
You can use the group parameters to set variables local to the group you
Stuff}. So if you want to set @code{message-from-style} via the group
parameters, then you may need the following statement elsewhere in your
@file{~/.gnus} file:
+
@lisp
(add-to-list 'gnus-newsgroup-variables 'message-from-style)
@end lisp
@vindex gnus-list-identifiers
A use for this feature is to remove a mailing list identifier tag in
the subject fields of articles. E.g. if the news group
+
@example
nntp+news.gnus.org:gmane.text.docbook.apps
@end example
+
has the tag @samp{DOC-BOOK-APPS:} in the subject of all articles, this
tag can be removed from the article subjects in the summary buffer for
the group by putting @code{(gnus-list-identifiers "DOCBOOK-APPS:")}
before all groups.
So, to move a topic to the beginning of the list of topics, just hit
-@kbd{C-k} on it. This is like the `cut' part of cut and paste. Then,
-move the cursor to the beginning of the buffer (just below the `Gnus'
-topic) and hit @kbd{C-y}. This is like the `paste' part of cut and
+@kbd{C-k} on it. This is like the ``cut'' part of cut and paste. Then,
+move the cursor to the beginning of the buffer (just below the ``Gnus''
+topic) and hit @kbd{C-y}. This is like the ``paste'' part of cut and
paste. Like I said -- E-Z.
You can use @kbd{C-k} and @kbd{C-y} on groups as well as on topics. So
verb, although you may feel free to disagree with me here.)
@example
+@group
Gnus
Emacs
3: comp.emacs
8: comp.binaries.fractals
13: comp.sources.unix
452: alt.sex.emacs
+@end group
@end example
The @samp{Emacs} topic has the topic parameter @code{(score-file
@}
@end example
-@xref{Top, ,Top, sieve, Emacs Sieve}.
+@xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}.
@table @kbd
@item u
User defined specifier. The next character in the format string should
be a letter. Gnus will call the function
-@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
following @samp{%u}. The function will be passed the current header as
argument. The function should return a string, which will be inserted
into the summary just like information from any other summary specifier.
If you have an article window open already and you press @kbd{SPACE}
again, the article will be scrolled. This lets you conveniently
-@kbd{SPACE} through an entire newsgroup. @pxref{Paging the Article}.
+@kbd{SPACE} through an entire newsgroup. @xref{Paging the Article}.
@item G n
@itemx n
@item gnus-select-article-hook
@vindex gnus-select-article-hook
This hook is called whenever an article is selected. By default it
-exposes any threads hidden under the selected article. If you would
+exposes any threads hidden under the selected article. If you would
like each article to be saved in the Agent as you read it, putting
@code{gnus-agent-fetch-selected-article} on this hook will do so.
* Summary Mail Commands:: Sending mail.
* Summary Post Commands:: Sending news.
* Summary Message Commands:: Other Message-related commands.
-* Canceling and Superseding::
+* Canceling and Superseding::
@end menu
Mail a wide reply to the author of the current article
(@code{gnus-summary-wide-reply}). A @dfn{wide reply} is a reply that
goes out to all people listed in the @code{To}, @code{From} (or
-@code{Reply-to}) and @code{Cc} headers.
+@code{Reply-to}) and @code{Cc} headers. If @code{Mail-Followup-To} is
+present, that's used instead.
@item S W
@kindex S W (Summary)
@item
@vindex gnus-downloaded-mark
-When using the Gnus agent @pxref{Agent Basics}, articles may be
+When using the Gnus agent (@pxref{Agent Basics}), articles may be
downloaded for unplugged (offline) viewing. If you are using the
@samp{%O} spec, these articles get the @samp{+} mark in that spec.
(The variable @code{gnus-downloaded-mark} controls which character to
@item
@vindex gnus-undownloaded-mark
-When using the Gnus agent @pxref{Agent Basics}, some articles might
+When using the Gnus agent (@pxref{Agent Basics}), some articles might
not have been downloaded. Such articles cannot be viewed while you
are unplugged (offline). If you are using the @samp{%O} spec, these
articles get the @samp{-} mark in that spec. (The variable
@item
@vindex gnus-downloadable-mark
-The Gnus agent @pxref{Agent Basics} downloads some articles
+The Gnus agent (@pxref{Agent Basics}) downloads some articles
automatically, but it is also possible to explicitly mark articles for
download, even if they would not be downloaded automatically. Such
explicitly-marked articles get the @samp{%} mark in the first column.
@end table
-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
set process marks based on article body contents.
@findex gnus-summary-limit-to-display-predicate
Limit the summary buffer to articles that satisfy the @code{display}
group parameter predicate
-(@code{gnus-summary-limit-to-display-predicate}). See @pxref{Group
-Parameters} for more on this predicate.
+(@code{gnus-summary-limit-to-display-predicate}). @xref{Group
+Parameters}, for more on this predicate.
@item / E
@itemx M S
or simply missing. Weird news propagation exacerbates the problem,
so one has to employ other heuristics to get pleasing results. A
plethora of approaches exists, as detailed in horrible detail in
-@pxref{Customizing Threading}.
+@ref{Customizing Threading}.
First, a quick overview of the concepts:
@findex gnus-thread-sort-by-number
@findex gnus-thread-sort-by-random
@vindex gnus-thread-sort-functions
-@findex gnus-thread-sort-by-most-recent-thread
+@findex gnus-thread-sort-by-most-recent-number
+@findex gnus-thread-sort-by-most-recent-date
If you are using a threaded summary display, you can sort the threads by
setting @code{gnus-thread-sort-functions}, which can be either a single
function, a list of functions, or a list containing functions and
sends, you can use the following element to remove them:
@lisp
-("@@yoo-hoo\\.co\\.jp\\'" .
+("@@yoo-hoo\\.co\\.jp\\'" .
"\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
@end lisp
@code{X-Face} headers are small black-and-white images supplied by the
message headers (@pxref{X-Face}).
-Picons, on the other hand, reside on your own system, and Gnus will
-try to match the headers to what you have (@pxref{Picons}).
+@code{Face} headers are small colored images supplied by the message
+headers (@pxref{Face}).
Smileys are those little @samp{:-)} symbols that people like to litter
their messages with (@pxref{Smileys}).
+Picons, on the other hand, reside on your own system, and Gnus will
+try to match the headers to what you have (@pxref{Picons}).
+
All these functions are toggles---if the elements already exist,
they'll be removed.
(nnweb "google" (nnweb-type google))))
@end lisp
-Most of the mail back ends support fetching by @code{Message-ID}, but
-do not do a particularly excellent job at it. That is, @code{nnmbox},
-@code{nnbabyl}, and @code{nnmaildir} are able to locate articles from
-any groups, while @code{nnml}, @code{nnfolder}, and @code{nnimap} are
+Most of the mail back ends support fetching by @code{Message-ID}, but do
+not do a particularly excellent job at it. That is, @code{nnmbox},
+@code{nnbabyl}, @code{nnmaildir}, @code{nnml}, are able to locate
+articles from any groups, while @code{nnfolder}, and @code{nnimap} are
only able to locate articles that have been posted to the current group.
(Anything else would be too time consuming.) @code{nnmh} does not
support this at all.
@item gnus-tree-brackets
@vindex gnus-tree-brackets
This is used for differentiating between ``real'' articles and
-``sparse'' articles. The format is
+``sparse'' articles. The format is
@example
-((@var{real-open} . @var{real-close})
- (@var{sparse-open} . @var{sparse-close})
+((@var{real-open} . @var{real-close})
+ (@var{sparse-open} . @var{sparse-close})
(@var{dummy-open} . @var{dummy-close}))
@end example
and the default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
@menu
* Summary Group Information:: Information oriented commands.
* Searching for Articles:: Multiple article commands.
-* Summary Generation Commands::
+* Summary Generation Commands::
* Really Various Summary Commands:: Those pesky non-conformant commands.
@end menu
string, the match is done on the entire article. If given a prefix,
search backward instead.
-For instance, @kbd{& RET some.*string #} will put the process mark on
+For instance, @kbd{& RET some.*string RET #} will put the process mark on
all articles that have heads or bodies that match @samp{some.*string}.
@item M-&
@table @kbd
@item Z Z
+@itemx Z Q
@itemx q
@kindex Z Z (Summary)
+@kindex Z Q (Summary)
@kindex q (Summary)
@findex gnus-summary-exit
@vindex gnus-summary-exit-hook
(@code{gnus-summary-catchup-and-goto-next-group}).
@item Z R
+@itemx C-x C-s
@kindex Z R (Summary)
+@kindex C-x C-s (Summary)
@findex gnus-summary-reselect-current-group
Exit this group, and then enter it again
(@code{gnus-summary-reselect-current-group}). If given a prefix, select
You can hide further boring headers by setting
@code{gnus-treat-hide-boring-headers} to @code{head}. What this function
does depends on the @code{gnus-boring-article-headers} variable. It's a
-list, but this list doesn't actually contain header names. Instead is
+list, but this list doesn't actually contain header names. Instead it
lists various @dfn{boring conditions} that Gnus can check and remove
from sight.
Remove the @code{Followup-To} header if it is identical to the
@code{Newsgroups} header.
@item reply-to
-Remove the @code{Reply-To} header if it lists the same address as the
-@code{From} header, or if the @code{broken-reply-to} group parameter is
-set.
+Remove the @code{Reply-To} header if it lists the same addresses as
+the @code{From} header, or if the @code{broken-reply-to} group
+parameter is set.
@item newsgroups
Remove the @code{Newsgroups} header if it only contains the current group
name.
non-@code{nil} every-time, then you can push button in the article
buffer when there are nobody else.
-Also see @pxref{MIME Commands}.
+Also @pxref{MIME Commands}.
@node Customizing Articles
@xref{Smileys}.
-@item gnus-treat-display-xface (head)
+@item gnus-treat-display-x-face (head)
@xref{X-Face}.
+@item gnus-treat-display-face (head)
+
+@xref{Face}.
+
@item gnus-treat-emphasize (t, head, integer)
@item gnus-treat-fill-article (t, integer)
@item gnus-treat-fill-long-lines (t, integer)
* Signing and encrypting:: How to compose secure messages.
@end menu
-Also see @pxref{Canceling and Superseding} for information on how to
+Also @pxref{Canceling and Superseding} for information on how to
remove articles you shouldn't have posted.
If non-@code{nil}, Gnus also requests confirmation according to
@code{gnus-confirm-mail-reply-to-news} when replying to mail. This is
useful for treating mailing lists like newsgroups.
-
+
@end table
This variable can be used to do the following:
-@itemize @bullet
-@item
-a string
+@table @asis
+@item a string
Messages will be saved in that group.
Note that you can include a select method in the group name, then the
messages are stored in @samp{nnfolder+archive:foo}, but if you use the
value @code{"nnml:foo"}, then outgoing messages will be stored in
@samp{nnml:foo}.
-@item
-a list of strings
+
+@item a list of strings
Messages will be saved in all those groups.
-@item
-an alist of regexps, functions and forms
+
+@item an alist of regexps, functions and forms
When a key ``matches'', the result is used.
-@item
-@code{nil}
+
+@item @code{nil}
No message archiving will take place. This is the default.
-@end itemize
+@end table
Let's illustrate:
If it is the form @code{(header @var{match} @var{regexp})}, then Gnus
will look in the original article for a header whose name is
@var{match} and compare that @var{regexp}. @var{match} and
-@var{regexp} are strings. (There original article is the one you are
+@var{regexp} are strings. (The original article is the one you are
replying or following up to. If you are not composing a reply or a
followup, then there is nothing to match against.) If the
@code{match} is a function symbol, that function will be called with
Each style may contain an arbitrary amount of @dfn{attributes}. Each
attribute consists of a @code{(@var{name} @var{value})} pair. The
-attribute name can be one of @code{signature}, @code{signature-file},
-@code{x-face-file}, @code{address} (overriding
-@code{user-mail-address}), @code{name} (overriding
-@code{(user-full-name)}) or @code{body}. The attribute name can also
-be a string or a symbol. In that case, this will be used as a header
-name, and the value will be inserted in the headers of the article; if
-the value is @code{nil}, the header name will be removed. If the
-attribute name is @code{eval}, the form is evaluated, and the result
-is thrown away.
+attribute name can be one of:
+
+@itemize @bullet
+@item @code{signature}
+@item @code{signature-file}
+@item @code{x-face-file}
+@item @code{address}, overriding @code{user-mail-address}
+@item @code{name}, overriding @code{(user-full-name)}
+@item @code{body}
+@end itemize
+
+The attribute name can also be a string or a symbol. In that case,
+this will be used as a header name, and the value will be inserted in
+the headers of the article; if the value is @code{nil}, the header
+name will be removed. If the attribute name is @code{eval}, the form
+is evaluated, and the result is thrown away.
The attribute value can be a string (used verbatim), a function with
zero arguments (the return value will be used), a variable (its value
@code{gnus-message-replysignencrypted} (on by default) will sign
automatically encrypted messages.
-Instructing MML to perform security operations on a @acronym{MIME} part is
-done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c
-C-m c} key map for encryption, as follows.
+Instructing @acronym{MML} to perform security operations on a
+@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
+signing and the @kbd{C-c C-m c} key map for encryption, as follows.
@table @kbd
@item C-c C-m C-n
@kindex C-c C-m C-n
@findex mml-unsecure-message
-Remove security related MML tags from message.
+Remove security related @acronym{MML} tags from message.
@end table
articles, you may want to create a virtual server to read the cache.
First you need to add a new server. The @kbd{a} command does that. It
-would probably be best to use @code{nnspool} to read the cache. You
-could also use @code{nnml} or @code{nnmh}, though.
+would probably be best to use @code{nnml} to read the cache. You
+could also use @code{nnspool} or @code{nnmh}, though.
-Type @kbd{a nnspool RET cache RET}.
+Type @kbd{a nnml RET cache RET}.
-You should now have a brand new @code{nnspool} virtual server called
+You should now have a brand new @code{nnml} virtual server called
@samp{cache}. You now need to edit it to have the right definitions.
Type @kbd{e} to edit the server. You'll be entered into a buffer that
will contain the following:
@lisp
-(nnspool "cache")
+(nnml "cache")
@end lisp
Change that to:
@lisp
-(nnspool "cache"
- (nnspool-spool-directory "~/News/cache/")
- (nnspool-nov-directory "~/News/cache/")
- (nnspool-active-file "~/News/cache/active"))
+(nnml "cache"
+ (nnml-directory "~/News/cache/")
+ (nnml-active-file "~/News/cache/active"))
@end lisp
Type @kbd{C-c C-c} to return to the server buffer. If you now press
But, no, it means that old messages are @dfn{expired} according to some
scheme or other. For news messages, the expire process is controlled by
the news administrator; for mail, the expire process is controlled by
-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
Mail}.
What many Gnus users find, after using it a while for both news and
@subsection Splitting Mail
@cindex splitting mail
@cindex mail splitting
+@cindex mail filtering (splitting)
@vindex nnmail-split-methods
The @code{nnmail-split-methods} variable says how the incoming mail is
@vindex nnmail-resplit-incoming
By default, splitting is performed on all incoming messages. If you
specify a @code{directory} entry for the variable @code{mail-sources}
-@pxref{Mail Source Specifiers}, however, then splitting does
+(@pxref{Mail Source Specifiers}), however, then splitting does
@emph{not} happen by default. You can set the variable
@code{nnmail-resplit-incoming} to a non-@code{nil} value to make
splitting happen even in this case. (This variable has no effect on
@end lisp
@item webmail
-Get mail from a webmail server, such as @uref{www.hotmail.com},
-@uref{webmail.netscape.com}, @uref{www.netaddress.com},
-@uref{mail.yahoo.com}.
+Get mail from a webmail server, such as @uref{http://www.hotmail.com/},
+@uref{http://webmail.netscape.com/}, @uref{http://www.netaddress.com/},
+@uref{http://mail.yahoo.com/}.
-NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
+NOTE: Webmail largely depends on cookies. A "one-line-cookie" patch is
required for url "4.0pre.46".
WARNING: Mails may be lost. NO WARRANTY.
"misc.misc")
@end lisp
-This variable has the format of a @dfn{split}. A split is a (possibly)
-recursive structure where each split may contain other splits. Here are
-the five possible split syntaxes:
+This variable has the format of a @dfn{split}. A split is a
+(possibly) recursive structure where each split may contain other
+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.
-
-@item
-@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.
-
-@item
-@code{(& @var{split}@dots{})}: If the split is a list, and the first
-element is @code{&}, then process all @var{split}s in the list.
-
-@item
-@code{junk}: If the split is the symbol @code{junk}, then don't save
-(i.e., delete) this message. Use with extreme caution.
+@table @code
-@item
-@code{(: @var{function} @var{arg1} @var{arg2} @dots{})}: If the split is
-a list, and the first element is @code{:}, then the second element will
-be called as a function with @var{args} given as arguments. The
-function should return a @var{split}.
+@item 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 (@var{field} @var{value} [- @var{restrict} [@dots{}] ] @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.
+
+@item (| @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.
+
+@item (& @var{split} @dots{})
+If the split is a list, and the first element is @code{&}, then
+process all @var{split}s in the list.
+
+@item junk
+If the split is the symbol @code{junk}, then don't save (i.e., delete)
+this message. Use with extreme caution.
+
+@item (: @var{function} @var{arg1} @var{arg2} @dots{})
+If the split is a list, and the first element is @samp{:}, then the
+second element will be called as a function with @var{args} given as
+arguments. The function should return a @var{split}.
@cindex body split
For instance, the following function could be used to split based on the
@lisp
(defun split-on-body ()
(save-excursion
- (set-buffer " *nnmail incoming*")
+ (widen)
(goto-char (point-min))
(when (re-search-forward "Some.*string" nil t)
"string.group")))
@end lisp
-The @samp{" *nnmail incoming*"} is narrowed to the message in question
-when the @code{:} function is run.
+The buffer is narrowed to the message in question when @var{function}
+is run. That's why @code{(widen)} needs to be called after
+@code{save-excursion} in the example above. Also note that with the
+nnimap backend, message bodies will not be downloaded by default. You
+need to set @code{nnimap-split-download-body} to t to do that
+(@pxref{Splitting in IMAP}).
-@item
-@code{(! @var{func} @var{split})}: If the split is a list, and the
-first element is @code{!}, then @var{split} will be processed, and
-@var{func} will be called as a function with the result of @var{split}
-as argument. @var{func} should return a split.
+@item (! @var{func} @var{split})
+If the split is a list, and the first element is @code{!}, then
+@var{split} will be processed, and @var{func} will be called as a
+function with the result of @var{split} as argument. @var{func}
+should return a split.
-@item
-@code{nil}: If the split is @code{nil}, it is ignored.
+@item nil
+If the split is @code{nil}, it is ignored.
-@end enumerate
+@end table
In these splits, @var{field} must match a complete field name.
@var{value} must match a complete word according to the fundamental mode
@var{field} and @var{value} can also be Lisp symbols, in that case
they are expanded as specified by the variable
@code{nnmail-split-abbrev-alist}. This is an alist of cons cells,
-where the @code{car} of a cell contains the key, and the @code{cdr}
+where the @sc{car} of a cell contains the key, and the @sc{cdr}
contains the associated value. Predefined entries in
@code{nnmail-split-abbrev-alist} include:
up to @samp{\\9} will be substituted with the text matched by the
groupings 1 through 9.
+@vindex nnmail-split-fancy-match-partial-words
+@code{nnmail-split-fancy-match-partial-words} controls whether partial
+words are matched during fancy splitting.
+
+Normally, regular expressions given in @code{nnmail-split-fancy} are
+implicitly surrounded by @code{\<...\>} markers, which are word
+delimiters. If this variable is true, they are not implicitly
+surrounded by anything.
+
+@example
+(any "joe" "joemail")
+@end example
+
+In this example, messages sent from @samp{joedavis@@foo.org} will
+normally not be filed in @samp{joemail}. With
+@code{nnmail-split-fancy-match-partial-words} set to t, however, the
+match will happen. In effect, the requirement of a word boundary is
+removed and instead the match becomes more like a grep.
+
@findex nnmail-split-fancy-with-parent
@code{nnmail-split-fancy-with-parent} is a function which allows you to
split followups into the same groups their parents are in. Sometimes
Also see the variable @code{nnmail-cache-ignore-groups} if you don't
want certain groups to be recorded in the cache. For example, if all
-outgoing messages are written to an `outgoing' group, you could set
+outgoing messages are written to an ``outgoing'' group, you could set
@code{nnmail-cache-ignore-groups} to match that group name.
Otherwise, answers to all your messages would end up in the
-`outgoing' group.
+``outgoing'' group.
@node Group Mail Splitting
@findex gnus-group-split
If you subscribe to dozens of mailing lists but you don't want to
maintain mail splitting rules manually, group mail splitting is for you.
-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
parameters or group customization and set @code{nnmail-split-methods} to
@code{gnus-group-split}. This splitting function will scan all groups
for those parameters and split mail accordingly, i.e., messages posted
-from or to the addresses specified in the parameters @var{to-list} or
-@var{to-address} of a mail group will be stored in that group.
+from or to the addresses specified in the parameters @code{to-list} or
+@code{to-address} of a mail group will be stored in that group.
Sometimes, mailing lists have multiple addresses, and you may want mail
-splitting to recognize them all: just set the @var{extra-aliases} group
+splitting to recognize them all: just set the @code{extra-aliases} group
parameter to the list of additional addresses and it's done. If you'd
-rather use a regular expression, set @var{split-regexp}.
+rather use a regular expression, set @code{split-regexp}.
All these parameters in a group will be used to create an
@code{nnmail-split-fancy} split, in which the @var{field} is @samp{any},
the @var{value} is a single regular expression that matches
-@var{to-list}, @var{to-address}, all of @var{extra-aliases} and all
-matches of @var{split-regexp}, and the @var{split} is the name of the
+@code{to-list}, @code{to-address}, all of @code{extra-aliases} and all
+matches of @code{split-regexp}, and the @var{split} is the name of the
group. @var{restrict}s are also supported: just set the
-@var{split-exclude} parameter to a list of regular expressions.
+@code{split-exclude} parameter to a list of regular expressions.
If you can't get the right split to be generated using all these
parameters, or you just need something fancier, you can set the
-parameter @var{split-spec} to an @code{nnmail-split-fancy} split. In
+parameter @code{split-spec} to an @code{nnmail-split-fancy} split. In
this case, all other aforementioned parameters will be ignored by
-@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
@code{nil}, in which case the group will be ignored by
@code{gnus-group-split}.
by defining a single @code{&} fancy split containing one split for each
group. If a message doesn't match any split, it will be stored in the
group named in @code{gnus-group-split-default-catch-all-group}, unless
-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
that group is used as the catch-all group. Even though this variable is
often used just to name a group, it may also be set to an arbitrarily
complex fancy split (after all, a group name is a fancy split), and this
parameters will be scanned to generate the output split.
@var{no-crosspost} can be used to disable cross-posting; in this case, a
single @code{|} split will be output. @var{catch-all} is the fall back
-fancy split, used like @var{gnus-group-split-default-catch-all-group}.
-If @var{catch-all} is @code{nil}, or if @var{split-regexp} matches the
+fancy split, used like @code{gnus-group-split-default-catch-all-group}.
+If @var{catch-all} is @code{nil}, or if @code{split-regexp} matches the
empty string in any selected group, no catch-all split will be issued.
-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},
this group will override the value of the @var{catch-all} argument.
@findex gnus-group-split-setup
NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
You do not have to mark articles as expirable by hand. Gnus provides
-two features, called `auto-expire' and `total-expire', that can help you
-with this. In a nutshell, `auto-expire' means that Gnus hits @kbd{E}
-for you when you select an article. And `total-expire' means that Gnus
+two features, called ``auto-expire'' and ``total-expire'', that can help you
+with this. In a nutshell, ``auto-expire'' means that Gnus hits @kbd{E}
+for you when you select an article. And ``total-expire'' means that Gnus
considers all articles as expirable that are read. So, in addition to
the articles marked @samp{E}, also the articles marked @samp{r},
@samp{R}, @samp{O}, @samp{K}, @samp{Y} and so on are considered
the articles that are supposed to stick around, you can still choose
between tick and dormant and read marks. But with total-expire, you
only have dormant and ticked to choose from. The advantage of
-total-expire is that it works well with adaptive scoring @pxref{Adaptive
-Scoring}. Auto-expire works with normal scoring but not with adaptive
+total-expire is that it works well with adaptive scoring (@pxref{Adaptive
+Scoring}). Auto-expire works with normal scoring but not with adaptive
scoring.
@vindex gnus-auto-expirable-newsgroups
directory already used for other purposes). Each maildir will be
represented in Gnus as a newsgroup on that server; the filename of the
symlink will be the name of the group. Any filenames in the directory
-starting with `.' are ignored. The directory is scanned when you
+starting with @samp{.} are ignored. The directory is scanned when you
first start Gnus, and each time you type @kbd{g} in the group buffer;
if any maildirs have been removed or added, nnmaildir notices at these
times.
also stores the equivalent of @code{nnml}'s overview files in one file
per article, so it uses about twice as many inodes as @code{nnml}. (Use
@code{df -i} to see how plentiful your inode supply is.) If this slows
-you down or takes up very much space, consider switching to
+you down or takes up very much space, consider switching to
@uref{http://www.namesys.com/, ReiserFS} or another non-block-structured
file system.
interfaces to these sources.
@menu
-* Archiving Mail::
+* Archiving Mail::
* Web Searches:: Creating groups from articles that match a string.
* Slashdot:: Reading the Slashdot comments.
* Ultimate:: The Ultimate Bulletin Board systems.
When following up to @code{nnslashdot} comments (or posting new
comments), some light @acronym{HTML}izations will be performed. In
particular, text quoted with @samp{> } will be quoted with
-@code{blockquote} instead, and signatures will have @code{br} added to
+@samp{blockquote} instead, and signatures will have @samp{br} added to
the end of each line. Other than that, you can just write @acronym{HTML}
directly into the message buffer. Note that Slashdot filters out some
@acronym{HTML} forms.
@item nnslashdot-active-url
@vindex nnslashdot-active-url
-The @sc{url} format string that will be used to fetch the information on
-news articles and comments. The default is@*
+The @acronym{URL} format string that will be used to fetch the
+information on news articles and comments. The default is@*
@samp{http://slashdot.org/search.pl?section=&min=%d}.
@item nnslashdot-comments-url
@vindex nnslashdot-comments-url
-The @sc{url} format string that will be used to fetch comments. The
-default is
-@samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d}.
+The @acronym{URL} format string that will be used to fetch comments.
@item nnslashdot-article-url
@vindex nnslashdot-article-url
-The @sc{url} format string that will be used to fetch the news article. The
-default is
+The @acronym{URL} format string that will be used to fetch the news
+article. The default is
@samp{http://slashdot.org/article.pl?sid=%s&mode=nocomment}.
@item nnslashdot-threshold
The easiest way to get started with @code{nnultimate} is to say
something like the following in the group buffer: @kbd{B nnultimate RET
-http://www.tcj.com/messboard/ubbcgi/ RET}. (Substitute the @sc{url}
+http://www.tcj.com/messboard/ubbcgi/ RET}. (Substitute the @acronym{URL}
(not including @samp{Ultimate.cgi} or the like at the end) for a forum
you're interested in; there's quite a list of them on the Ultimate web
site.) Then subscribe to the groups you're interested in from the
@cindex nnrss
@cindex RSS
-Some sites have RDF site summary (RSS)
-@uref{http://purl.org/rss/1.0/spec}. It has a quite regular and nice
-interface, and it's possible to get the information Gnus needs to keep
-groups updated.
+Some web sites have an RDF Site Summary (@acronym{RSS}).
+@acronym{RSS} is a format for summarizing headlines from news related
+sites (such as BBC or CNN). But basically anything list-like can be
+presented as an @acronym{RSS} feed: weblogs, changelogs or recent
+changes to a wiki (e.g. @url{http://cliki.net/recent-changes.rdf}).
+
+@acronym{RSS} has a quite regular and nice interface, and it's
+possible to get the information Gnus needs to keep groups updated.
-The easiest way to get started with @code{nnrss} is to say something
-like the following in the group buffer: @kbd{B nnrss RET RET}, then
-subscribe groups.
+Use @kbd{G R} from the summary buffer to subscribe to a feed---you
+will be prompted for the location of the feed.
+
+An easy way to get started with @code{nnrss} is to say something like
+the following in the group buffer: @kbd{B nnrss RET y}, then
+subscribe to groups.
The following @code{nnrss} variables can be altered:
The directory where @code{nnrss} stores its files. The default is
@file{~/News/rss/}.
+@item nnrss-use-local
+@vindex nnrss-use-local
+@findex nnrss-generate-download-script
+If you set @code{nnrss-use-local} to @code{t}, @code{nnrss} will read
+the feeds from local files in @code{nnrss-directory}. You can use
+the command @code{nnrss-generate-download-script} to generate a
+download script using @command{wget}.
@end table
The following code may be helpful, if you want to show the description in
@item
@dfn{login:} Plain-text username/password via LOGIN.
@item
-@dfn{anonymous:} Login as `anonymous', supplying your email address as password.
+@dfn{anonymous:} Login as ``anonymous'', supplying your email address as password.
@end itemize
@item nnimap-expunge-on-close
* Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox.
* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button.
* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
+* Debugging IMAP:: What to do when things don't work.
@end menu
@subsection Splitting in IMAP
@cindex splitting imap mail
-Splitting is something Gnus users has loved and used for years, and now
+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
-@acronym{IMAP} server has server side splitting and those that have splitting
-seem to use some non-standard protocol. This means that @acronym{IMAP}
-support for Gnus has to do its own splitting.
+@acronym{IMAP} servers have server side splitting and those that have
+splitting seem to use some non-standard protocol. This means that
+@acronym{IMAP} support for Gnus has to do its own splitting.
And it does.
+(Incidentally, people seem to have been dreaming on, and Sieve has
+gaining a market share and is supported by several IMAP servers.
+Fortunately, Gnus support it too, @xref{Sieve Commands}.)
+
Here are the variables of interest:
@table @code
INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
into INBOX.junk and everything else in INBOX.private.
-The first string may contain `\\1' forms, like the ones used by
+The first string may contain @samp{\\1} forms, like the ones used by
replace-match to insert sub-expressions from the matched text. For
instance:
for more information on how to use the prefixes. They are a power
tool and should be used only if you are sure what the effects are.
+@node Debugging IMAP
+@subsection Debugging IMAP
+@cindex IMAP debugging
+@cindex protocol dump (IMAP)
+
+@acronym{IMAP} is a complex protocol, more so than @acronym{NNTP} or
+@acronym{POP3}. Implementation bugs are not unlikely, and we do our
+best to fix them right away. If you encounter odd behaviour, chances
+are that either the server or Gnus is buggy.
+
+If you are familiar with network protocols in general, you will
+probably be able to extract some clues from the protocol dump of the
+exchanges between Gnus and the server. Even if you are not familiar
+with network protocols, when you include the protocol dump in
+@acronym{IMAP}-related bug reports you are helping us with data
+critical to solving the problem. Therefore, we strongly encourage you
+to include the protocol dump when reporting IMAP bugs in Gnus.
+
+
+@vindex imap-log
+Because the protocol dump, when enabled, generates lots of data, it is
+disabled by default. You can enable it by setting @code{imap-log} as
+follows:
+
+@lisp
+(setq imap-log t)
+@end lisp
+
+This instructs the @code{imap.el} package to log any exchanges with
+the server. The log is stored in the buffer @samp{*imap-log*}. Look
+for error messages, which sometimes are tagged with the keyword
+@code{BAD} - but when submitting a bug, make sure to include all the
+data.
+
@node Other Sources
@section Other Sources
@cindex nnkiboze
@cindex kibozing
-@dfn{Kibozing} is defined by @acronym{oed} as ``grepping through (parts of)
-the news feed''. @code{nnkiboze} is a back end that will do this for
-you. Oh joy! Now you can grind any @acronym{NNTP} server down to a halt
-with useless requests! Oh happiness!
+@dfn{Kibozing} is defined by the @acronym{OED} as ``grepping through
+(parts of) the news feed''. @code{nnkiboze} is a back end that will
+do this for you. Oh joy! Now you can grind any @acronym{NNTP} server
+down to a halt with useless requests! Oh happiness!
@kindex G k (Group)
To create a kibozed group, use the @kbd{G k} command in the group
@vindex nnkiboze-directory
The generation of an @code{nnkiboze} group means writing two files in
-@code{nnkiboze-directory}, which is @file{~/News/} by default. One
-contains the @acronym{NOV} header lines for all the articles in the group,
-and the other is an additional @file{.newsrc} file to store information
-on what groups have been searched through to find component articles.
+@code{nnkiboze-directory}, which is @file{~/News/kiboze/} by default.
+One contains the @acronym{NOV} header lines for all the articles in
+the group, and the other is an additional @file{.newsrc} file to store
+information on what groups have been searched through to find
+component articles.
Articles marked as read in the @code{nnkiboze} group will have
their @acronym{NOV} lines removed from the @acronym{NOV} file.
You then decide to see whether any new news has arrived. You connect
your machine to the net (using PPP or whatever), and then hit @kbd{J j}
to make Gnus become @dfn{plugged} and use @kbd{g} to check for new mail
-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
Source Specifiers}).
@item
-You can then read the new news immediately, or you can download the news
-onto your local machine. If you want to do the latter, you press @kbd{g}
-to check if there are any new news and then @kbd{J
-s} to fetch all the eligible articles in all the groups. (To let Gnus
-know which articles you want to download, @pxref{Agent Categories}.)
+You can then read the new news immediately, or you can download the
+news onto your local machine. If you want to do the latter, you press
+@kbd{g} to check if there are any new news and then @kbd{J s} to fetch
+all the eligible articles in all the groups. (To let Gnus know which
+articles you want to download, @pxref{Agent Categories}).
@item
After fetching the articles, you press @kbd{J j} to make Gnus become
Decide on download policy. It's fairly simple once you decide whether
you are going to use agent categories, topic parameters, and/or group
parameters to implement your policy. If you're new to gnus, it
-is probably best to start with a category @xref{Agent Categories}.
+is probably best to start with a category, @xref{Agent Categories}.
Both topic parameters (@pxref{Topic Parameters}) and agent categories
(@pxref{Agent Categories}) provide for setting a policy that applies
@item
Score rule
-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
subset of scoring keywords are available as mentioned above.
example:
@item J S
@kindex J S (Agent Summary)
@findex gnus-agent-fetch-group
-Download all eligible (See @pxref{Agent Categories}) articles in this group.
+Download all eligible (@pxref{Agent Categories}) articles in this group.
(@code{gnus-agent-fetch-group}).
@item J s
@kbd{C-g} or anything else) once you've started one of them.
Note that other functions, e.g. @code{gnus-request-expire-articles},
-might run @code{gnus-agent-expire} for you to keep the agent
+might run @code{gnus-agent-expire} for you to keep the agent
synchronized with the group.
The agent parameter @code{agent-enable-expiration} may be used to
@code{gnus-agent-fetch-selected-article} to
@code{gnus-select-article-hook}.
-@item If I read an article while plugged, and the article already exists in
+@item If I read an article while plugged, and the article already exists in
the Agent, will it get downloaded once more?
@strong{No}, unless @code{gnus-agent-cache} is @code{nil}.
(eval (ding)))
@end lisp
-This example demonstrates most score file elements. For a different
-approach, see @pxref{Advanced Scoring}.
+This example demonstrates most score file elements. @xref{Advanced
+Scoring}, for a different approach.
Even though this looks much like Lisp code, nothing here is actually
@code{eval}ed. The Lisp reader is used to read this form, though, so it
gnus-extra-headers, you can score on these headers' values. In this
case, there is a 5th element in the score entry, being the name of the
header to be scored. The following entry is useful in your
-@file{all.SCORE} file in case of spam attacks from a single origin host,
-if your @acronym{NNTP} server tracks NNTP-Posting-Host in overviews:
+@file{all.SCORE} file in case of spam attacks from a single origin
+host, if your @acronym{NNTP} server tracks @samp{NNTP-Posting-Host} in
+overviews:
@lisp
-("111.222.333.444" -1000 nil s "NNTP-Posting-Host")
+("111.222.333.444" -1000 nil s
+ "NNTP-Posting-Host")
@end lisp
@item Lines, Chars
matches. This takes a long time in big groups.
Now, there's not much you can do about this for news groups, but for
-mail groups, you have greater control. In the @pxref{To From
-Newsgroups} section of the manual, it's explained in greater detail what
-this mechanism does, but here's a cookbook example for @code{nnml} on
-how to allow scoring on the @samp{To} and @samp{Cc} headers.
+mail groups, you have greater control. In @ref{To From Newsgroups},
+it's explained in greater detail what this mechanism does, but here's
+a cookbook example for @code{nnml} on how to allow scoring on the
+@samp{To} and @samp{Cc} headers.
Put the following in your @file{~/.gnus.el} file.
@section GroupLens
@cindex GroupLens
+@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
+so this section is mostly of historical interest.
+
@uref{http://www.cs.umn.edu/Research/GroupLens/, GroupLens} is a
collaborative filtering system that helps you work together with other
people to find the quality news articles out of the huge volume of
prediction to help you decide whether or not you want to read the
article.
-@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
-so this section is mostly of historical interest.
-
@menu
* Using GroupLens:: How to make Gnus use GroupLens.
* Rating Articles:: Letting GroupLens know how you rate articles.
@vindex gnus-grouplens-override-scoring
There are three ways to display predictions in grouplens. You may
choose to have the GroupLens scores contribute to, or override the
-regular gnus scoring mechanism. override is the default; however, some
+regular Gnus scoring mechanism. override is the default; however, some
people prefer to see the Gnus scores plus the grouplens scores. To get
the separate scoring behavior you need to set
@code{gnus-grouplens-override-scoring} to @code{'separate}. To have the
@lisp
(defun gnus-decay-score (score)
- "Decay SCORE.
-This is done according to `gnus-score-decay-constant'
+ "Decay SCORE according to `gnus-score-decay-constant'
and `gnus-score-decay-scale'."
- (floor
- (- score
- (* (if (< score 0) 1 -1)
- (min (abs score)
- (max gnus-score-decay-constant
- (* (abs score)
- gnus-score-decay-scale)))))))
+ (let ((n (- score
+ (* (if (< score 0) -1 1)
+ (min (abs score)
+ (max gnus-score-decay-constant
+ (* (abs score)
+ gnus-score-decay-scale)))))))
+ (if (and (featurep 'xemacs)
+ ;; XEmacs' floor can handle only the floating point
+ ;; number below the half of the maximum integer.
+ (> (abs n) (lsh -1 -2)))
+ (string-to-number
+ (car (split-string (number-to-string n) "\\.")))
+ (floor n))))
@end lisp
@vindex gnus-score-decay-scale
(gnus-demon-scan-pgp 60 t)
@end lisp
-This @var{time} parameter and than @var{idle} parameter work together
+This @var{time} parameter and that @var{idle} parameter work together
in a strange, but wonderful fashion. Basically, if @var{idle} is
@code{nil}, then the function will be called every @var{time} minutes.
@item gnus-nocem-groups
@vindex gnus-nocem-groups
Gnus will look for NoCeM messages in the groups in this list. The
-default is
+default is
@lisp
("news.lists.filters" "news.admin.net-abuse.bulletins"
"alt.nocem.misc" "news.admin.net-abuse.announce")
taken advantage of that.
@menu
-* Picons:: How to display pictures of what you're reading.
-* Smileys:: Show all those happy faces the way they were meant to be shown.
* X-Face:: Display a funky, teensy black-and-white image.
+* Face:: Display a funkier, teensier colored image.
+* Smileys:: Show all those happy faces the way they were meant to be shown.
+* Picons:: How to display pictures of what you're reading.
* XVarious:: Other XEmacsy Gnusey variables.
@end menu
-@node Picons
-@subsection Picons
-
-@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. It's also a great way to impress people staring
-over your shoulder as you read news.
-
-What are Picons? To quote directly from the Picons Web site:
-
-@iftex
-@iflatex
-\margindex{}
-@end iflatex
-@end iftex
-
-@quotation
-@dfn{Picons} is short for ``personal icons''. They're small,
-constrained images used to represent users and domains on the net,
-organized into databases so that the appropriate image for a given
-e-mail address can be found. Besides users and domains, there are picon
-databases for Usenet newsgroups and weather forecasts. The picons are
-in either monochrome @code{XBM} format or color @code{XPM} and
-@code{GIF} formats.
-@end quotation
-
-@vindex gnus-picon-databases
-For instructions on obtaining and installing the picons databases,
-point your Web browser at
-@uref{http://www.cs.indiana.edu/picons/ftp/index.html}.
-
-If you are using Debian GNU/Linux, saying @samp{apt-get install
-picons.*} will install the picons where Gnus can find them.
-
-To enable displaying picons, simply make sure that
-@code{gnus-picon-databases} points to the directory containing the
-Picons databases.
-
-The following variables offer control over where things are located.
-
-@table @code
-
-@item gnus-picon-databases
-@vindex gnus-picon-databases
-The location of the picons database. This is a list of directories
-containing the @file{news}, @file{domains}, @file{users} (and so on)
-subdirectories. Defaults to @code{("/usr/lib/picon"
-"/usr/local/faces")}.
-
-@item gnus-picon-news-directories
-@vindex gnus-picon-news-directories
-List of subdirectories to search in @code{gnus-picon-databases} for
-newsgroups faces. @code{("news")} is the default.
-
-@item gnus-picon-user-directories
-@vindex gnus-picon-user-directories
-List of subdirectories to search in @code{gnus-picon-databases} for user
-faces. @code{("users" "usenix" "local" "misc")} is the default.
-
-@item gnus-picon-domain-directories
-@vindex gnus-picon-domain-directories
-List of subdirectories to search in @code{gnus-picon-databases} for
-domain name faces. Defaults to @code{("domains")}. Some people may
-want to add @samp{"unknown"} to this list.
-
-@item gnus-picon-file-types
-@vindex gnus-picon-file-types
-Ordered list of suffixes on picon file names to try. Defaults to
-@code{("xpm" "gif" "xbm")} minus those not built-in your Emacs.
-
-@end table
-
-@node Smileys
-@subsection Smileys
-@cindex smileys
-
-@iftex
-@iflatex
-\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
-\input{smiley}
-@end iflatex
-@end iftex
-
-@dfn{Smiley} is a package separate from Gnus, but since Gnus is
-currently the only package that uses Smiley, it is documented here.
-
-In short---to use Smiley in Gnus, put the following in your
-@file{~/.gnus.el} file:
-
-@lisp
-(setq gnus-treat-display-smileys t)
-@end lisp
-
-Smiley maps text smiley faces---@samp{:-)}, @samp{8-)}, @samp{:-(} and
-the like---to pictures and displays those instead of the text smiley
-faces. The conversion is controlled by a list of regexps that matches
-text and maps that to file names.
-
-@vindex smiley-regexp-alist
-The alist used is specified by the @code{smiley-regexp-alist}
-variable. 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.
-
-The following variables customize where Smiley will look for these
-files:
-
-@table @code
-
-@item smiley-data-directory
-@vindex smiley-data-directory
-Where Smiley will look for smiley faces files.
-
-@item gnus-smiley-file-types
-@vindex gnus-smiley-file-types
-List of suffixes on smiley file names to try.
-
-@end table
-
-
@node X-Face
@subsection X-Face
@cindex x-face
@cindex x-face
@findex gnus-article-display-x-face
-@findex gnus-article-x-face-command
@vindex gnus-article-x-face-command
@vindex gnus-article-x-face-too-ugly
@iftex
@end lisp
+@node Face
+@subsection Face
+@cindex face
+
+@c #### FIXME: faces and x-faces'implementations should really be harmonized.
+
+@code{Face} headers are essentially a funkier version of @code{X-Face}
+ones. They describe a 48x48 pixel colored image that's supposed to
+represent the author of the message.
+
+@cindex face
+@findex gnus-article-display-face
+The contents of a @code{Face} header must be a base64 encoded PNG image.
+See @uref{http://quimby.gnus.org/circus/face/} for the precise
+specifications.
+
+Gnus provides a few convenience functions and variables to allow
+easier insertion of Face headers in outgoing messages.
+
+@findex gnus-convert-png-to-face
+@code{gnus-convert-png-to-face} takes a 48x48 PNG image, no longer than
+726 bytes long, and converts it to a face.
+
+@findex gnus-face-from-file
+@vindex gnus-convert-image-to-face-command
+@code{gnus-face-from-file} takes a JPEG file as the parameter, and then
+converts the file to Face format by using the
+@code{gnus-convert-image-to-face-command} shell command.
+
+Here's how you would typically use this function. Put something like the
+following in your @file{~/.gnus.el} file:
+
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(Face . (lambda ()
+ (gnus-face-from-file "~/face.jpg"))))))
+@end lisp
+
+
+@node Smileys
+@subsection Smileys
+@cindex smileys
+
+@iftex
+@iflatex
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=ps/BigFace,height=20cm}}
+\input{smiley}
+@end iflatex
+@end iftex
+
+@dfn{Smiley} is a package separate from Gnus, but since Gnus is
+currently the only package that uses Smiley, it is documented here.
+
+In short---to use Smiley in Gnus, put the following in your
+@file{~/.gnus.el} file:
+
+@lisp
+(setq gnus-treat-display-smileys t)
+@end lisp
+
+Smiley maps text smiley faces---@samp{:-)}, @samp{8-)}, @samp{:-(} and
+the like---to pictures and displays those instead of the text smiley
+faces. The conversion is controlled by a list of regexps that matches
+text and maps that to file names.
+
+@vindex smiley-regexp-alist
+The alist used is specified by the @code{smiley-regexp-alist}
+variable. 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.
+
+The following variables customize where Smiley will look for these
+files:
+
+@table @code
+
+@item smiley-data-directory
+@vindex smiley-data-directory
+Where Smiley will look for smiley faces files.
+
+@item gnus-smiley-file-types
+@vindex gnus-smiley-file-types
+List of suffixes on smiley file names to try.
+
+@end table
+
+
+@node Picons
+@subsection Picons
+
+@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. It's also a great way to impress people staring
+over your shoulder as you read news.
+
+What are Picons? To quote directly from the Picons Web site:
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@quotation
+@dfn{Picons} is short for ``personal icons''. They're small,
+constrained images used to represent users and domains on the net,
+organized into databases so that the appropriate image for a given
+e-mail address can be found. Besides users and domains, there are picon
+databases for Usenet newsgroups and weather forecasts. The picons are
+in either monochrome @code{XBM} format or color @code{XPM} and
+@code{GIF} formats.
+@end quotation
+
+@vindex gnus-picon-databases
+For instructions on obtaining and installing the picons databases,
+point your Web browser at
+@uref{http://www.cs.indiana.edu/picons/ftp/index.html}.
+
+If you are using Debian GNU/Linux, saying @samp{apt-get install
+picons.*} will install the picons where Gnus can find them.
+
+To enable displaying picons, simply make sure that
+@code{gnus-picon-databases} points to the directory containing the
+Picons databases.
+
+The following variables offer control over where things are located.
+
+@table @code
+
+@item gnus-picon-databases
+@vindex gnus-picon-databases
+The location of the picons database. This is a list of directories
+containing the @file{news}, @file{domains}, @file{users} (and so on)
+subdirectories. Defaults to @code{("/usr/lib/picon"
+"/usr/local/faces")}.
+
+@item gnus-picon-news-directories
+@vindex gnus-picon-news-directories
+List of subdirectories to search in @code{gnus-picon-databases} for
+newsgroups faces. @code{("news")} is the default.
+
+@item gnus-picon-user-directories
+@vindex gnus-picon-user-directories
+List of subdirectories to search in @code{gnus-picon-databases} for user
+faces. @code{("users" "usenix" "local" "misc")} is the default.
+
+@item gnus-picon-domain-directories
+@vindex gnus-picon-domain-directories
+List of subdirectories to search in @code{gnus-picon-databases} for
+domain name faces. Defaults to @code{("domains")}. Some people may
+want to add @samp{"unknown"} to this list.
+
+@item gnus-picon-file-types
+@vindex gnus-picon-file-types
+Ordered list of suffixes on picon file names to try. Defaults to
+@code{("xpm" "gif" "xbm")} minus those not built-in your Emacs.
+
+@end table
+
+
@node XVarious
@subsection Various XEmacs Variables
* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
* SpamAssassin:: How to use external anti-spam tools.
* Hashcash:: Reduce spam by burning CPU time.
-* Filtering Spam Using The Spam ELisp Package::
-* Filtering Spam Using Statistics with spam-stat::
+* Filtering Spam Using The Spam ELisp Package::
+* Filtering Spam Using Statistics with spam-stat::
@end menu
@node The problem of spam
Another approach to filtering e-mail is the distributed spam
processing, for instance DCC implements such a system. In essence,
-@code{N} systems around the world agree that a machine @samp{X} in
+@var{N} systems around the world agree that a machine @var{X} in
China, Ghana, or California is sending out spam e-mail, and these
-@code{N} systems enter @samp{X} or the spam e-mail from @samp{X} into
+@var{N} systems enter @var{X} or the spam e-mail from @var{X} into
a database. The criteria for spam detection vary---it may be the
number of messages sent, the content of the messages, and so on. When
a user of the distributed processing system wants to find out if a
-message is spam, he consults one of those @code{N} systems.
+message is spam, he consults one of those @var{N} systems.
Distributed spam processing works very well against spammers that send
a large number of messages at once, but it requires the user to set up
(@pxref{Fancy Mail Splitting}):
@lisp
-(
- ...
+(...
(to "larsi@@trym.ifi.uio.no"
- (| ("subject" "re:.*" "misc")
- ("references" ".*@@.*" "misc")
- "spam"))
- ...
-)
+ (| ("subject" "re:.*" "misc")
+ ("references" ".*@@.*" "misc")
+ "spam"))
+ ...)
@end lisp
This says that all mail to this address is suspect, but if it has a
@cindex DCC
The days where the hints in the previous section was sufficient in
-avoiding spam is coming to an end. There are many tools out there
+avoiding spam are coming to an end. There are many tools out there
that claim to reduce the amount of spam you get. This section could
easily become outdated fast, as new products replace old, but
fortunately most of these tools seem to have similar interfaces. Even
If the tool you are using is not installed on the mail server, you
need to invoke it yourself. Ideas on how to use the
@code{:postscript} mail source parameter (@pxref{Mail Source
-Specifiers}) follows.
+Specifiers}) follow.
@lisp
(setq mail-sources
'((file :prescript "formail -bs spamassassin < /var/mail/%u")
(pop :user "jrl"
:server "pophost"
- :postscript "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
+ :postscript
+ "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
@end lisp
-Once you managed to process your incoming spool somehow, thus making
-the mail contain e.g. a header indicating it is spam, you are ready to
+Once you manage to process your incoming spool somehow, thus making
+the mail contain e.g.@: a header indicating it is spam, you are ready to
filter it out. Using normal split methods (@pxref{Splitting Mail}):
@lisp
...))
(defun kevin-spamassassin ()
(save-excursion
- (let ((buf (or (get-buffer " *nnmail incoming*")
- (get-buffer " *nnml move*"))))
- (if (not buf)
- (progn (message "Oops, cannot find message buffer") nil)
- (set-buffer buf)
- (if (eq 1 (call-process-region (point-min) (point-max)
- "spamc" nil nil nil "-c"))
- "spam")))))
+ (widen)
+ (if (eq 1 (call-process-region (point-min) (point-max)
+ "spamc" nil nil nil "-c"))
+ "spam")))
@end lisp
+Note that with the nnimap backend, message bodies will not be
+downloaded by default. You need to set
+@code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
+IMAP}).
+
That is about it. As some spam is likely to get through anyway, you
might want to have a nifty function to call when you happen to read
spam. And here is the nifty function:
A novel technique to fight spam is to require senders to do something
costly for each message they send. This has the obvious drawback that
-you cannot rely on that everyone in the world uses this technique,
+you cannot rely on everyone in the world using this technique,
since it is not part of the Internet standards, but it may be useful
in smaller communities.
(add-hook 'message-send-hook 'mail-add-payment)
@end lisp
-The @code{hashcash.el} library can be found in the Gnus development
+The @file{hashcash.el} library can be found in the Gnus development
contrib directory or at
@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}.
@cindex spam filtering
@cindex spam
-The idea behind @code{spam.el} is to have a control center for spam detection
-and filtering in Gnus. To that end, @code{spam.el} does two things: it
+The idea behind @file{spam.el} is to have a control center for spam detection
+and filtering in Gnus. To that end, @file{spam.el} does two things: it
filters incoming mail, and it analyzes mail known to be spam or ham.
-@emph{Ham} is the name used throughout @code{spam.el} to indicate
+@dfn{Ham} is the name used throughout @file{spam.el} to indicate
non-spam messages.
-So, what happens when you load @code{spam.el}? First of all, you get
-the following keyboard commands:
+First of all, you @strong{must} run the function
+@code{spam-initialize} to autoload @code{spam.el} and to install the
+@code{spam.el} hooks. There is one exception: if you use the
+@code{spam-use-stat} (@pxref{spam-stat spam filtering}) setting, you
+should turn it on before @code{spam-initialize}:
+
+@example
+(setq spam-use-stat t) ;; if needed
+(spam-initialize)
+@end example
+
+So, what happens when you load @file{spam.el}?
+
+You get the following keyboard commands:
@table @kbd
@end table
-Also, when you load @code{spam.el}, you will be able to customize its
+Also, when you load @file{spam.el}, you will be able to customize its
variables. Try @code{customize-group} on the @samp{spam} variable
group.
unmarked it, it won't be marked as spam when you enter the group
thereafter. You can disable that behavior, so all unread messages
will get the @samp{$} mark, if you set the
-@code{spam-mark-only-unseen-as-spam} parameter to nil. You should
-remove the @samp{$} mark when you are in the group summary buffer for
-every message that is not spam after all. To remove the @samp{$}
-mark, you can use @kbd{M-u} to ``unread'' the article, or @kbd{d} for
-declaring it read the non-spam way. When you leave a group, all
-spam-marked (@samp{$}) articles are sent to a spam processor which
-will study them as spam samples.
+@code{spam-mark-only-unseen-as-spam} parameter to @code{nil}. You
+should remove the @samp{$} mark when you are in the group summary
+buffer for every message that is not spam after all. To remove the
+@samp{$} mark, you can use @kbd{M-u} to ``unread'' the article, or
+@kbd{d} for declaring it read the non-spam way. When you leave a
+group, all spam-marked (@samp{$}) articles are sent to a spam
+processor which will study them as spam samples.
Messages may also be deleted in various other ways, and unless
@code{ham-marks} group parameter gets overridden below, marks @samp{R}
parameter or a match in the @code{gnus-ham-process-destinations}
variable, which is a list of regular expressions matched with group
names (it's easiest to customize this variable with
-@code{customize-variable gnus-ham-process-destinations}). The ultimate
-location is a group name. If the @code{ham-process-destination}
-parameter is not set, ham articles are left in place. If the
+@code{customize-variable gnus-ham-process-destinations}). Each
+newsgroup specification has the format (REGEXP PROCESSOR) in a
+standard Lisp list, if you prefer to customize the variable manually.
+The ultimate location is a group name. If the
+@code{ham-process-destination} parameter is not set, ham articles are
+left in place. If the
@code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
set, the ham articles are marked as unread before being moved.
When you leave a @emph{ham} group, all ham-marked articles are sent to
a ham processor, which will study these as non-spam samples.
+@vindex spam-process-ham-in-spam-groups
+By default the variable @code{spam-process-ham-in-spam-groups} is
+@code{nil}. Set it to @code{t} if you want ham found in spam groups
+to be processed. Normally this is not done, you are expected instead
+to send your ham to a ham group and process it there.
+
+@vindex spam-process-ham-in-nonham-groups
+By default the variable @code{spam-process-ham-in-nonham-groups} is
+@code{nil}. Set it to @code{t} if you want ham found in non-ham (spam
+or unclassified) groups to be processed. Normally this is not done,
+you are expected instead to send your ham to a ham group and process
+it there.
+
@vindex gnus-spam-process-destinations
When you leave a @emph{ham} or @emph{unclassified} group, all
@strong{spam} articles are moved to a location determined by either
@code{gnus-spam-process-destinations} variable, which is a list of
regular expressions matched with group names (it's easiest to
customize this variable with @code{customize-variable
-gnus-spam-process-destinations}). The ultimate location is a group
-name. If the @code{spam-process-destination} parameter is not set,
-the spam articles are only expired.
-
-To use the @code{spam.el} facilities for incoming mail filtering, you
+gnus-spam-process-destinations}). Each newsgroup specification has
+the repeated format (REGEXP PROCESSOR) and they are all in a standard
+Lisp list, if you prefer to customize the variable manually. The
+ultimate location is a group name. If the
+@code{spam-process-destination} parameter is not set, the spam
+articles are only expired.
+
+To use the @file{spam.el} facilities for incoming mail filtering, you
must add the following to your fancy split list
@code{nnmail-split-fancy} or @code{nnimap-split-fancy}:
The @code{spam-split} function will process incoming mail and send the
mail considered to be spam into the group name given by the variable
@code{spam-split-group}. By default that group name is @samp{spam},
-but you can customize @code{spam-split-group}.
+but you can customize @code{spam-split-group}. Make sure the contents
+of @code{spam-split-group} are an @emph{unqualified} group name, for
+instance in an @code{nnimap} server @samp{your-server} the value
+@samp{spam} will turn out to be @samp{nnimap+your-server:spam}. The
+value @samp{nnimap+server:spam}, therefore, is wrong and will
+actually give you the group
+@samp{nnimap+your-server:nnimap+server:spam} which may or may not
+work depending on your server's tolerance for strange group names.
You can also give @code{spam-split} a parameter,
-e.g. @samp{'spam-use-regex-headers}. Why is this useful?
+e.g. @samp{'spam-use-regex-headers} or @samp{"maybe-spam"}. Why is
+this useful?
Take these split rules (with @code{spam-use-regex-headers} and
@code{spam-use-blackholes} set):
the ding list are from a mail server in the blackhole list, so the
invocation of @code{spam-split} can't be before the ding rule.
-You can let SpamAssassin headers supercede ding rules, but all other
+You can let SpamAssassin headers supersede ding rules, but all other
@code{spam-split} rules (including a second invocation of the
regex-headers check) will be after the ding rule:
@example
nnimap-split-fancy '(|
- (: spam-split 'spam-use-regex-headers)
+;;; all spam detected by spam-use-regex-headers goes to "regex-spam"
+ (: spam-split "regex-spam" 'spam-use-regex-headers)
(any "ding" "ding")
+;;; all other spam detected by spam-split goes to spam-split-group
(: spam-split)
;; default mailbox
"mail")
@end example
Basically, this lets you invoke specific @code{spam-split} checks
-depending on your particular needs. You don't have to throw all mail
+depending on your particular needs, and to target the results of those
+checks to a particular spam group. You don't have to throw all mail
into all the spam tests. Another reason why this is nice is that
messages to mailing lists you have rules for don't have to have
resource-intensive blackhole checks performed on them. You could also
split. Go crazy.
You still have to have specific checks such as
-@code{spam-use-regex-headers} set to t, even if you specifically
+@code{spam-use-regex-headers} set to @code{t}, even if you specifically
invoke @code{spam-split} with the check. The reason is that when
-loading @code{spam.el}, some conditional loading is done depending on
+loading @file{spam.el}, some conditional loading is done depending on
what @code{spam-use-xyz} variables you have set.
@emph{Note for IMAP users}
@code{spam-split} and their corresponding spam and ham processors:
@menu
-* Blacklists and Whitelists::
-* BBDB Whitelists::
-* Gmane Spam Reporting::
-* Anti-spam Hashcash Payments::
-* Blackholes::
-* Regular Expressions Header Matching::
-* Bogofilter::
-* ifile spam filtering::
-* spam-stat spam filtering::
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Gmane Spam Reporting::
+* Anti-spam Hashcash Payments::
+* Blackholes::
+* Regular Expressions Header Matching::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat spam filtering::
* SpamOracle::
-* Extending the spam elisp package::
+* Extending the spam elisp package::
@end menu
@node Blacklists and Whitelists
customizing the group parameters or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is
added to a group's @code{spam-process} parameter, the spam-marked
-articles groups will be reported to the Gmane administrators.
+articles groups will be reported to the Gmane administrators via a
+HTTP request.
+
+Gmane can be found at @uref{http://gmane.org}.
+
+@end defvar
+
+@defvar spam-report-gmane-use-article-number
+
+This variable is @code{t} by default. Set it to @code{nil} if you are
+running your own news server, for instance, and the local article
+numbers don't correspond to the Gmane article numbers. When
+@code{spam-report-gmane-use-article-number} is @code{nil},
+@code{spam-report.el} will use the @code{X-Report-Spam} header that
+Gmane provides.
@end defvar
contains outdated servers.
The blackhole check uses the @code{dig.el} package, but you can tell
-@code{spam.el} to use @code{dns.el} instead for better performance if
+@file{spam.el} to use @code{dns.el} instead for better performance if
you set @code{spam-use-dig} to @code{nil}. It is not recommended at
this time to set @code{spam-use-dig} to @code{nil} despite the
possible performance improvements, because some users may be unable to
@end defvar
-The Bogofilter mail classifier is similar to ifile in intent and
+The Bogofilter mail classifier is similar to @command{ifile} in intent and
purpose. A ham and a spam processor are provided, plus the
@code{spam-use-bogofilter} and @code{spam-use-bogofilter-headers}
variables to indicate to spam-split that Bogofilter should either be
@defvar spam-use-ifile
-Enable this variable if you want @code{spam-split} to use ifile, a
+Enable this variable if you want @code{spam-split} to use @command{ifile}, a
statistical analyzer similar to Bogofilter.
@end defvar
@emph{spam} or @emph{unclassified} groups.
@end defvar
-This enables spam.el to cooperate with spam-stat.el. spam-stat.el
-provides an internal (Lisp-only) spam database, which unlike ifile or
-Bogofilter does not require external programs. A spam and a ham
-processor, and the @code{spam-use-stat} variable for @code{spam-split}
-are provided.
+This enables @file{spam.el} to cooperate with @file{spam-stat.el}.
+@file{spam-stat.el} provides an internal (Lisp-only) spam database,
+which unlike ifile or Bogofilter does not require external programs.
+A spam and a ham processor, and the @code{spam-use-stat} variable for
+@code{spam-split} are provided.
@node SpamOracle
@subsubsection Using SpamOracle with Gnus
@xref{Mail Source Specifiers}, (@pxref{SpamAssassin}). This method has
the advantage that the user can see the @emph{X-Spam} headers.
-The easiest method is to make @code{spam.el} (@pxref{Filtering Spam
+The easiest method is to make @file{spam.el} (@pxref{Filtering Spam
Using The Spam ELisp Package}) call SpamOracle.
-@vindex spam-use-spamoracle
-To enable SpamOracle usage by @code{spam.el}, set the variable
+@vindex spam-use-spamoracle
+To enable SpamOracle usage by @file{spam.el}, set the variable
@code{spam-use-spamoracle} to @code{t} and configure the
@code{nnmail-split-fancy} or @code{nnimap-split-fancy} as described in
the section @xref{Filtering Spam Using The Spam ELisp Package}. In
characteristics of your spam mails. Using the @emph{add} mode
(training mode) one has to feed good (ham) and spam mails to
SpamOracle. This can be done by pressing @kbd{|} in the Summary buffer
-and pipe the mail to a SpamOracle process or using @code{spam.el}'s
+and pipe the mail to a SpamOracle process or using @file{spam.el}'s
spam- and ham-processors, which is much more convenient. For a
-detailed description of spam- and ham-processors, see @xref{Filtering Spam Using The Spam ELisp Package}.
+detailed description of spam- and ham-processors, @xref{Filtering Spam
+Using The Spam ELisp Package}.
@defvar gnus-group-spam-exit-processor-spamoracle
Add this symbol to a group's @code{spam-process} parameter by
(spam-process
(gnus-group-spam-exit-processor-spamoracle)))
@end example
-For this group the `gnus-group-spam-exit-processor-spamoracle' is
+For this group the @code{gnus-group-spam-exit-processor-spamoracle} is
installed. If the group contains spam message (e.g. because SpamOracle
has not had enough sample messages yet) and the user marks some
messages as spam messages, these messages will be processed by
@enumerate
@item
-code
+code
Note you don't have to provide a spam or a ham processor. Only
provide them if Blackbox supports spam or ham processing.
this dictionary in your fancy mail splitting rules.
@menu
-* Creating a spam-stat dictionary::
-* Splitting mail using spam-stat::
-* Low-level interface to the spam-stat dictionary::
+* Creating a spam-stat dictionary::
+* Splitting mail using spam-stat::
+* Low-level interface to the spam-stat dictionary::
@end menu
@node Creating a spam-stat dictionary
@cindex Mule
@cindex Emacs
-Gnus should work on :
+Gnus should work on:
@itemize @bullet
Joe Reiss---creator of the smiley faces.
@item
-Justin Sheehy--the @acronym{FAQ} maintainer.
+Justin Sheehy---the @acronym{FAQ} maintainer.
@item
Erik Naggum---help, ideas, support, code and stuff.
@item
New functionality for using Gnus as an offline newsreader has been
-added. A plethora of new commands and modes have been added. See
-@pxref{Gnus Unplugged} for the full story.
+added. A plethora of new commands and modes have been added.
+@xref{Gnus Unplugged}, for the full story.
@item
- The @code{nndraft} back end has returned, but works differently than
+The @code{nndraft} back end has returned, but works differently than
before. All Message buffers are now also articles in the @code{nndraft}
group, which is created automatically.
values.
@item
- @code{gnus-summary-goto-article} now accept Message-ID's.
+@code{gnus-summary-goto-article} now accept Message-ID's.
@item
- 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
outside the region: @kbd{C-c C-v}.
@item
- You can now post to component group in @code{nnvirtual} groups with
+You can now post to component group in @code{nnvirtual} groups with
@kbd{C-u C-c C-c}.
@item
@code{nntp-rlogin-program}---new variable to ease customization.
@item
- @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
re-highlighting of the article buffer.
@item
- New element in @code{gnus-boring-article-headers}---@code{long-to}.
+New element in @code{gnus-boring-article-headers}---@code{long-to}.
@item
- @kbd{M-i} symbolic prefix command. See the section ``Symbolic
-Prefixes'' in the Gnus manual for details.
+@kbd{M-i} symbolic prefix command. @xref{Symbolic Prefixes}, for
+details.
@item
- @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
@kbd{a} to add the score rule to the @file{all.SCORE} file.
@item
- @code{gnus-simplify-subject-functions} variable to allow greater
+@code{gnus-simplify-subject-functions} variable to allow greater
control over simplification.
@item
- @kbd{A T}---new command for fetching the current thread.
+@kbd{A T}---new command for fetching the current thread.
@item
- @kbd{/ T}---new command for including the current thread in the
+@kbd{/ T}---new command for including the current thread in the
limit.
@item
- @kbd{M-RET} is a new Message command for breaking cited text.
+@kbd{M-RET} is a new Message command for breaking cited text.
@item
- @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
+@samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
@item
- The @code{custom-face-lookup} function has been removed.
+The @code{custom-face-lookup} function has been removed.
If you used this function in your initialization files, you must
rewrite them to use @code{face-spec-set} instead.
@item
- Canceling now uses the current select method. Symbolic prefix
+Canceling now uses the current select method. Symbolic prefix
@kbd{a} forces normal posting method.
@item
- New command to translate M******** sm*rtq**t*s into proper
+New command to translate M******** sm*rtq**t*s into proper
text---@kbd{W d}.
@item
- For easier debugging of @code{nntp}, you can set
+For easier debugging of @code{nntp}, you can set
@code{nntp-record-commands} to a non-@code{nil} value.
@item
- @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
+@code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
controlling where and how to send @sc{authinfo} to @acronym{NNTP} servers.
@item
- A command for editing group parameters from the summary buffer
+A command for editing group parameters from the summary buffer
has been added.
@item
- A history of where mails have been split is available.
+A history of where mails have been split is available.
@item
- A new article date command has been added---@code{article-date-iso8601}.
+A new article date command has been added---@code{article-date-iso8601}.
@item
- Subjects can be simplified when threading by setting
+Subjects can be simplified when threading by setting
@code{gnus-score-thread-simplify}.
@item
- A new function for citing in Message has been
+A new function for citing in Message has been
added---@code{message-cite-original-without-signature}.
@item
- @code{article-strip-all-blank-lines}---new article command.
+@code{article-strip-all-blank-lines}---new article command.
@item
- 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
been added.
@item
- A minimum adaptive score can be specified by using the
+A minimum adaptive score can be specified by using the
@code{gnus-adaptive-word-minimum} variable.
@item
- The ``lapsed date'' article header can be kept continually
+The ``lapsed date'' article header can be kept continually
updated by the @code{gnus-start-date-timer} command.
@item
- Web listserv archives can be read with the @code{nnlistserv} back end.
+Web listserv archives can be read with the @code{nnlistserv} back end.
@item
- Old dejanews archives can now be read by @code{nnweb}.
+Old dejanews archives can now be read by @code{nnweb}.
@end itemize
@code{gnus-dired-minor-mode} installs key bindings in dired buffers to send
a file as an attachment (@kbd{C-c C-a}), open a file using the appropriate
mailcap entry (@kbd{C-c C-l}), and print a file using the mailcap entry
-(@kbd{C-c P}). It is enabled with
+(@kbd{C-c P}). It is enabled with
@lisp
(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
@end lisp
decompressed when activated.
@item
-If the new option @code{nnml-use-compressed-files} is non-@code{nil},
+If the new option @code{nnml-use-compressed-files} is non-@code{nil},
the nnml back end allows compressed message files.
@item
Signed article headers (X-PGP-Sig) can be verified with @kbd{W p}.
@item
-The Summary Buffer uses an arrow in the fringe to indicate the current
+The Summary Buffer uses an arrow in the fringe to indicate the current
article. Use @code{(setq gnus-summary-display-arrow nil)} to disable it.
@item
opposed to old but unread messages).
@item
-The new option @code{gnus-gcc-mark-as-read} automatically marks
+The new option @code{gnus-gcc-mark-as-read} automatically marks
Gcc articles as read.
@item
The nndoc back end now supports mailman digests and exim bounces.
@item
-Gnus supports RFC 2369 mailing list headers, and adds a number of
+Gnus supports RFC 2369 mailing list headers, and adds a number of
related commands in mailing list groups. @xref{Mailing List}.
@item
Easy inclusion of X-Faces headers.
@item
+Face headers handling.
+
+@item
In the summary buffer, the new command @kbd{/ N} inserts new messages
and @kbd{/ o} inserts old messages.
Gnus supports Cancel Locks in News.
This means a header @samp{Cancel-Lock} is inserted in news posting. It is
-used to determine if you wrote an article or not (for cancelling and
+used to determine if you wrote an article or not (for canceling and
superseding). Gnus generates a random password string the first time
you post a message, and saves it in your @file{~/.emacs} using the Custom
system. While the variable is called @code{canlock-password}, it is not
This change was made to avoid conflict with the standard binding of
@code{back-to-indentation}, which is also useful in message mode.
+
+@item
+The default for @code{message-forward-show-mml} changed to symbol @code{best}.
+
+The behaviour for the @code{best} value is to show @acronym{MML} (i.e.,
+convert to @acronym{MIME}) when appropriate. @acronym{MML} will not be
+used when forwarding signed or encrypted messages, as the conversion
+invalidate the digital signature.
@end itemize
@iftex
difference is how to access the actual articles. News articles are
commonly fetched via the protocol @acronym{NNTP}, whereas mail
messages could be read from a file on the local disk. The internal
-architecture of Gnus thus comprises a `front end' and a number of
-`back ends'. Internally, when you enter a group (by hitting
+architecture of Gnus thus comprises a ``front end'' and a number of
+``back ends''. Internally, when you enter a group (by hitting
@key{RET}, say), you thereby invoke a function in the front end in
-Gnus. The front end then `talks' to a back end and says things like
+Gnus. The front end then ``talks'' to a back end and says things like
``Give me the list of articles in the foo group'' or ``Show me article
number 4711''.
end accesses news via @acronym{NNTP}, the @code{nnimap} back end
accesses mail via @acronym{IMAP}) or a file format and directory
layout (the @code{nnspool} back end accesses news via the common
-`spool directory' format, the @code{nnml} back end access mail via a
+``spool directory'' format, the @code{nnml} back end access mail via a
file format and directory layout that's quite similar).
Gnus does not handle the underlying media, so to speak---this is all
done by the back ends. A back end is a collection of functions to
access the articles.
-However, sometimes the term `back end' is also used where `server'
-would have been more appropriate. And then there is the term `select
-method' which can mean either. The Gnus terminology can be quite
+However, sometimes the term ``back end'' is also used where ``server''
+would have been more appropriate. And then there is the term ``select
+method'' which can mean either. The Gnus terminology can be quite
confusing.
@item native
A collection of messages in one file. The most common digest format is
specified by RFC 1153.
+@item splitting
+@cindex splitting, terminolgy
+@cindex mail sorting
+@cindex mail filtering (splitting)
+The action of sorting your emails according to certain rules. Sometimes
+incorrectly called mail filtering.
+
@end table
@item
Try doing an @kbd{M-x gnus-version}. If you get something that looks
like @samp{T-gnus 6.16.* (based on Gnus v5.10.*; for SEMI 1.1*, FLIM
-1.1*)} you have the right files loaded. If, on the other hand, you get
-something like @samp{NNTP 3.x} or @samp{nntp flee}, you have some old
+1.1*)} you have the right files loaded. Otherwise you have some old
@file{.el} files lying around. Delete these.
@item
manifests itself by causing Gnus to be very slow. In these cases, you
can use @kbd{M-x toggle-debug-on-quit} and press @kbd{C-g} when things are
slow, and then try to analyze the backtrace (repeating the procedure
-helps isolating the real problem areas).
+helps isolating the real problem areas).
A fancier approach is to use the elisp profiler, ELP. The profiler is
(or should be) fully documented elsewhere, but to get you started
Gnus identifies each message by way of group name and article number. A
few remarks about these article numbers might be useful. First of all,
the numbers are positive integers. Secondly, it is normally not
-possible for later articles to `re-use' older article numbers without
+possible for later articles to ``re-use'' older article numbers without
confusing Gnus. That is, if a group has ever contained a message
numbered 42, then no other message may get that number, or Gnus will get
mightily confused.@footnote{See the function
Third, article numbers must be assigned in order of arrival in the
group; this is not necessarily the same as the date of the message.
-The previous paragraph already mentions all the `hard' restrictions that
+The previous paragraph already mentions all the ``hard'' restrictions that
article numbers must fulfill. But it seems that it might be useful to
assign @emph{consecutive} article numbers, for Gnus gets quite confused
if there are holes in the article numbering sequence. However, due to
-the `no-reuse' restriction, holes cannot be avoided altogether. It's
+the ``no-reuse'' restriction, holes cannot be avoided altogether. It's
also useful for the article numbers to start at 1 to avoid running out
of numbers as long as possible.
-Note that by convention, backends are named @code{nnsomething}, but
+Note that by convention, back ends are named @code{nnsomething}, but
Gnus also comes with some @code{nnnotbackends}, such as
@file{nnheader.el}, @file{nnmail.el} and @file{nnoo.el}.
the function @code{message-make-date} by default). The data should be
in the active buffer format.
-It is okay for this function to return `too many' groups; some back ends
+It is okay for this function to return ``too many'' groups; some back ends
might find it cheaper to return the full list of groups, rather than
just the new groups. But don't do this for back ends with many groups.
Normally, if the user creates the groups herself, there won't be too
The function should return a cons where the @code{car} is the group name and
the @code{cdr} is the article number that the article was entered as.
-The group should exist before the backend is asked to accept the
+The group should exist before the back end is asked to accept the
article for that group.
There should be no data returned.