@setfilename gnus
@settitle Gnus Manual
-@synindex fn cp
-@synindex vr cp
-@synindex pg cp
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex pg cp
@dircategory Emacs
@direntry
* Gnus: (gnus). The newsreader Gnus.
\makeindex
\begin{document}
-\newcommand{\gnusversionname}{Oort Gnus v0.18}
+\newcommand{\gnusversionname}{Gnus v5.10.2}
\newcommand{\gnuschaptername}{}
\newcommand{\gnussectionname}{}
\newcommand{\gnustt}[1]{{\gnusselectttfont{}#1}}
\newcommand{\gnuscode}[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}}
\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
\newcommand{\gnusdfn}[1]{\textit{#1}}
\newcommand{\gnusi}[1]{\textit{#1}}
+\newcommand{\gnusr}[1]{\textrm{#1}}
\newcommand{\gnusstrong}[1]{\textbf{#1}}
\newcommand{\gnusemph}[1]{\textit{#1}}
\newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
\newcommand{\gnusversion}[1]{{\small\textit{#1}}}
\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
\newcommand{\gnusresult}[1]{\gnustt{=> #1}}
-\newcommand{\gnusacronym}[1]{\textit{#1}}
+\newcommand{\gnusacronym}[1]{\textsc{#1}}
\newcommand{\gnusemail}[1]{\textit{#1}}
\newcommand{\gnusbullet}{{${\bullet}$}}
@ifinfo
You can read news (and mail) from within Emacs by using Gnus. The news
-can be gotten by any nefarious means you can think of---@sc{nntp}, local
+can be gotten by any nefarious means you can think of---@acronym{NNTP}, local
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Oort Gnus v0.18.
+This manual corresponds to Gnus v5.10.2.
@end ifinfo
* Scoring:: Assigning values to articles.
* Various:: General purpose settings.
* The End:: Farewell and goodbye.
-* Appendices:: Terminology, Emacs intro, FAQ, History, Internals.
+* Appendices:: Terminology, Emacs intro, @acronym{FAQ}, History, Internals.
* Index:: Variable, function and concept index.
* Key Index:: Key Index.
Other related manuals
* Message:(message). Composing messages.
-* Emacs-MIME:(emacs-mime). Composing messages; MIME-specific parts.
+* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts.
* Sieve:(sieve). Managing Sieve scripts in Emacs.
-* PGG:(pgg). PGP/MIME with Gnus.
+* PGG:(pgg). @acronym{PGP/MIME} with Gnus.
@detailmenu
--- The Detailed Node Listing ---
Group Buffer Format
* Group Line Specification:: Deciding how the group buffer is to look.
-* Group Modeline Specification:: The group buffer modeline.
+* Group Mode Line Specification:: The group buffer mode line.
* Group Highlighting:: Having nice colors in the group buffer.
Group Topics
* 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::
+* Setting Marks::
+* Generic Marking Commands::
+* Setting Process Marks::
Marking Articles
* Article Date:: Grumble, UT!
* Article Display:: Display various stuff---X-Face, Picons, Smileys
* Article Signature:: What is a signature?
-* Article Miscellania:: Various other stuff.
+* Article Miscellanea:: Various other stuff.
Alternative Approaches
* 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
* Hiding Headers:: Deciding what headers should be displayed.
-* Using MIME:: Pushing articles through @sc{mime} before reading them.
+* Using MIME:: Pushing articles through @acronym{MIME} before reading them.
* Customizing Articles:: Tailoring the look of the articles.
* Article Keymap:: Keystrokes available in the article buffer.
* Misc Article:: Other stuff.
* Getting News:: Reading USENET news with Gnus.
* Getting Mail:: Reading your personal mail with Gnus.
* Browsing the Web:: Getting messages from a plethora of Web sources.
-* IMAP:: Using Gnus as a @sc{imap} client.
+* IMAP:: Using Gnus as a @acronym{IMAP} client.
* Other Sources:: Reading directories, files, SOUP packets.
* Combined Groups:: Combining groups into one group.
* Gnus Unplugged:: Reading news and mail offline.
Getting News
-* NNTP:: Reading news from an @sc{nntp} server.
+* NNTP:: Reading news from an @acronym{NNTP} server.
* News Spool:: Reading news from the local spool.
-@sc{nntp}
+@acronym{NNTP}
* Direct Functions:: Connecting directly to the server.
* Indirect Functions:: Connecting indirectly to the server.
* Group Mail Splitting:: Use group customize to drive mail splitting.
* Incorporating Old Mail:: What about the old mail you have?
* Expiring Mail:: Getting rid of unwanted mail.
-* Washing Mail:: Removing gruft from the mail you get.
+* Washing Mail:: Removing cruft from the mail you get.
* Duplicates:: Dealing with duplicated mail.
* Not Reading Mail:: Using mail back ends for reading other files.
* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
Choosing a Mail Back End
* Unix Mail Box:: Using the (quite) standard Un*x mbox.
-* Rmail Babyl:: Emacs programs use the rmail babyl format.
+* Rmail Babyl:: Emacs programs use the Rmail Babyl format.
* Mail Spool:: Store your mail in a private spool?
* MH Spool:: An mhspool-like back end.
* Maildir:: Another one-file-per-message format.
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.
* RSS:: Reading RDF site summary.
* Customizing w3:: Doing stuff to Emacs/w3 from Gnus.
-@sc{imap}
+@acronym{IMAP}
* Splitting in IMAP:: Splitting mail with nnimap.
* Expiring in IMAP:: Expiring mail with nnimap.
* 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 IMAP namespace in Gnus.
+* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
Other Sources
* Agent Basics:: How it all is supposed to work.
* Agent Categories:: How to tell the Gnus Agent what to download.
* Agent Commands:: New commands for all the buffers.
+* Agent Visuals:: Ways that the agent may effect your summary buffer.
* Agent as Cache:: The Agent is a big cache too.
* Agent Expiry:: How to make old articles go away.
* Agent Regeneration:: How to recover from lost connections and other accidents.
-* Agent and IMAP:: How to use the Agent with IMAP.
+* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
* Outgoing Messages:: What happens when you post/mail something?
* Agent Variables:: Customizing is fun.
* Example Setup:: An example @file{~/.gnus.el} file for offline people.
* 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::
Appendices
* Troubleshooting:: What you might try if things do not work.
* Gnus Reference Guide:: Rilly, rilly technical stuff.
* Emacs for Heathens:: A short introduction to Emacsian terms.
-* Frequently Asked Questions::
+* Frequently Asked Questions:: The Gnus FAQ.
History
* Red Gnus:: Third time best---Gnus 5.4/5.5.
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
+* Oort Gnus:: It's big. It's far out. Gnus 5.10.
Customization
native method. All groups not fetched with this method are
foreign groups.
-For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
+For instance, if the @samp{news.somewhere.edu} @acronym{NNTP} server is where
you want to get your daily dosage of news from, you'd say:
@lisp
@vindex gnus-nntpserver-file
@cindex NNTPSERVER
-@cindex @sc{nntp} server
+@cindex @acronym{NNTP} server
If this variable is not set, Gnus will take a look at the
-@code{NNTPSERVER} environment variable. If that variable isn't set,
+@env{NNTPSERVER} environment variable. If that variable isn't set,
Gnus will see whether @code{gnus-nntpserver-file}
-(@file{/etc/nntpserver} by default) has any opinions on the matter. If
-that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server. That's a long shot, though.
+(@file{/etc/nntpserver} by default) has any opinions on the matter.
+If that fails as well, Gnus will try to use the machine running Emacs
+as an @acronym{NNTP} server. That's a long shot, though.
@vindex gnus-nntp-server
If @code{gnus-nntp-server} is set, this variable will override
@vindex gnus-secondary-servers
@vindex gnus-nntp-server
You can also make Gnus prompt you interactively for the name of an
-@sc{nntp} server. If you give a non-numerical prefix to @code{gnus}
+@acronym{NNTP} server. If you give a non-numerical prefix to @code{gnus}
(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
in the @code{gnus-secondary-servers} list (if any). You can also just
type in the name of any server you feel like visiting. (Note that this
@findex gnus-group-browse-foreign-server
@kindex B (Group)
-However, if you use one @sc{nntp} server regularly and are just
+However, if you use one @acronym{NNTP} server regularly and are just
interested in a couple of groups from a different server, you would be
better served by using the @kbd{B} command in the group buffer. It will
let you have a look at what groups are available, and you can subscribe
@section Changing Servers
@cindex changing servers
-Sometimes it is necessary to move from one @sc{nntp} server to another.
+Sometimes it is necessary to move from one @acronym{NNTP} server to another.
This happens very rarely, but perhaps you change jobs, or one server is
very flaky and you want to use another.
@emph{Wrong!}
Article numbers are not (in any way) kept synchronized between different
-@sc{nntp} servers, and the only way Gnus keeps track of what articles
+@acronym{NNTP} servers, and the only way Gnus keeps track of what articles
you have read is by keeping track of article numbers. So when you
change @code{gnus-select-method}, your @file{.newsrc} file becomes
worthless.
If this variable is @code{nil}, Gnus will ask for group info in total
lock-step, which isn't very fast. If it is @code{some} and you use an
-@sc{nntp} server, Gnus will pump out commands as fast as it can, and
+@acronym{NNTP} server, Gnus will pump out commands as fast as it can, and
read all the replies in one swoop. This will normally result in better
performance, but if the server does not support the aforementioned
@code{LIST ACTIVE group} command, this isn't very nice to the server.
@menu
* Group Line Specification:: Deciding how the group buffer is to look.
-* Group Modeline Specification:: The group buffer modeline.
+* Group Mode Line Specification:: The group buffer mode line.
* Group Highlighting:: Having nice colors in the group buffer.
@end menu
There should always be a colon on the line; the cursor always moves to
the colon after performing an operation. @xref{Positioning
-Point}. Nothing else is required---not even the group name. All
+Point}. Nothing else is required---not even the group name. All
displayed text is just window dressing, and is never examined by Gnus.
Gnus stores all real information it needs using text properties.
Estimated total number of articles. (This is really @var{max-number}
minus @var{min-number} plus 1.)
-Gnus uses this estimation because the @sc{nntp} protocol provides
+Gnus uses this estimation because the @acronym{NNTP} protocol provides
efficient access to @var{max-number} and @var{min-number} but getting
the true unread message count is not possible efficiently. For
hysterical raisins, even the mail back ends, where the true number of
comment element in the group parameters.
@item D
-Newsgroup description.
+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.
@item o
@samp{m} if moderated.
group, or a bogus native group.
-@node Group Modeline Specification
-@subsection Group Modeline Specification
-@cindex group modeline
+@node Group Mode Line Specification
+@subsection Group Mode Line Specification
+@cindex group mode line
@vindex gnus-group-mode-line-format
The mode line can be changed by setting
(defface my-group-face-1
'((t (:foreground "Red" :bold t))) "First group face")
(defface my-group-face-2
- '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
+ '((t (:foreground "DarkSeaGreen4" :bold t)))
+ "Second group face")
(defface my-group-face-3
'((t (:foreground "Green4" :bold t))) "Third group face")
(defface my-group-face-4
@end table
@vindex gnus-large-newsgroup
-The @code{gnus-large-newsgroup} variable says what Gnus should consider
-to be a big group. This is 200 by default. If the group has more
+The @code{gnus-large-newsgroup} variable says what Gnus should
+consider to be a big group. If it is @code{nil}, no groups are
+considered big. The default value is 200. If the group has more
(unread and/or ticked) articles than this, Gnus will query the user
-before entering the group. The user can then specify how many articles
-should be fetched from the server. If the user specifies a negative
-number (@code{-n}), the @code{n} oldest articles will be fetched. If it
-is positive, the @code{n} articles that have arrived most recently will
-be fetched.
+before entering the group. The user can then specify how many
+articles should be fetched from the server. If the user specifies a
+negative number (@var{-n}), the @var{n} oldest articles will be
+fetched. If it is positive, the @var{n} articles that have arrived
+most recently will be fetched.
+
+@vindex gnus-large-ephemeral-newsgroup
+@code{gnus-large-ephemeral-newsgroup} is the same as
+@code{gnus-large-newsgroup}, but is only used for ephemeral
+newsgroups.
@vindex gnus-select-group-hook
@vindex gnus-auto-select-first
@item M-x gnus-group-clear-data-on-native-groups
@kindex M-x gnus-group-clear-data-on-native-groups
@findex gnus-group-clear-data-on-native-groups
-If you have switched from one @sc{nntp} server to another, all your marks
+If you have switched from one @acronym{NNTP} server to another, all your marks
and read ranges have become worthless. You can use this command to
clear out all data that you have on your native groups. Use with
caution.
@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 @sc{nntp} groups, @pxref{Browse Foreign Server}.
+to subscribe to @acronym{NNTP} groups (@pxref{Browse Foreign Server}).
@item G r
@kindex G r (Group)
If @code{gnus-activate-foreign-newsgroups} is a positive number,
Gnus will check all foreign groups with this level or lower at startup.
This might take quite a while, especially if you subscribe to lots of
-groups from different @sc{nntp} servers. Also @pxref{Group Levels};
+groups from different @acronym{NNTP} servers. Also @pxref{Group Levels};
@code{gnus-activate-level} also affects activation of foreign
newsgroups.
parameters have this form @emph{except} local variable specs, which are
not dotted pairs, but proper lists.
-Some parameters have correspondant customizable variables, each of which
+Some parameters have correspondent customizable variables, each of which
is an alist of regexps and values.
The following group parameters can be used:
sending the message.
@findex gnus-mailing-list-mode
-@cindex Mail List Groups
+@cindex mail list groups
If this variable is set, @code{gnus-mailing-list-mode} is turned on when
entering summary buffer.
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.
@item broken-reply-to
@cindex broken-reply-to
Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
-headers in this group are to be ignored. This can be useful if you're
-reading a mailing list group where the listserv has inserted
-@code{Reply-To} headers that point back to the listserv itself. This is
-broken behavior. So there!
+headers in this group are to be ignored, and for the header to be hidden
+if @code{reply-to} is part of @code{gnus-boring-article-headers}. This
+can be useful if you're reading a mailing list group where the listserv
+has inserted @code{Reply-To} headers that point back to the listserv
+itself. That is broken behavior. So there!
@item to-group
@cindex to-group
@item an integer
Display the last @var{integer} articles in the group. This is the same as
-entering the group with C-u @var{integer}.
+entering the group with @kbd{C-u @var{integer}}.
@item default
Display the default visible articles, which normally includes unread and
@item banner
@cindex banner
-An item like @code{(banner . "regex")} causes any part of an article
-that matches the regular expression "regex" to be stripped. Instead of
-"regex", you can also use the symbol @code{signature} which strips the
+An item like @code{(banner . @var{regexp})} causes any part of an article
+that matches the regular expression @var{regexp} to be stripped. Instead of
+@var{regexp}, you can also use the symbol @code{signature} which strips the
last signature or any of the elements of the alist
@code{gnus-article-banner-alist}.
in the summary buffer you enter, and the form @code{nil} will be
@code{eval}ed there.
-@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
-@samp{nntp+news.gnus.org:gmane.text.docbook.apps} 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:")} into the group
-parameters for the group.
+Note that this feature sets the variable locally to the summary buffer.
+But some variables are evaluated in the article buffer, or in the
+message buffer (of a reply or followup or otherwise newly created
+message). As a workaround, it might help to add the variable in
+question to @code{gnus-newsgroup-variables}. @xref{Various Summary
+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:")}
+into the group parameters for the group.
This can also be used as a group-specific hook function, if you'd like.
If you want to hear a beep when you enter a group, you could put
List all groups that have unread articles
(@code{gnus-group-list-groups}). If the numeric prefix is used, this
command will list only groups of level ARG and lower. By default, it
-only lists groups of level five (i. e.,
+only lists groups of level five (i.e.,
@code{gnus-group-default-list-level}) or lower (i.e., just subscribed
groups).
@item G S m
@kindex G S m (Group)
@findex gnus-group-sort-groups-by-method
-Sort the group buffer alphabetically by back end name
+Sort the group buffer alphabetically by back end name@*
(@code{gnus-group-sort-groups-by-method}).
@item G S n
@item G P m
@kindex G P m (Group)
@findex gnus-group-sort-selected-groups-by-method
-Sort the groups alphabetically by back end name
+Sort the groups alphabetically by back end name@*
(@code{gnus-group-sort-selected-groups-by-method}).
@item G P n
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
@findex gnus-topic-expire-articles
Run all expirable articles in the current group or topic through the
expiry process (if any)
-(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
+(@code{gnus-topic-expire-articles}). (@pxref{Expiring Mail}).
@item T r
@kindex T r (Topic)
So, let's have a look at an example group buffer:
@example
+@group
Gnus
Emacs -- I wuw it!
3: comp.emacs
Misc
8: comp.binaries.fractals
13: comp.sources.unix
+@end group
@end example
So, here we have one top-level topic (@samp{Gnus}), two topics under
@item gnus-group-name-charset-method-alist
@vindex gnus-group-name-charset-method-alist
-An alist of method and the charset for group names. It is used to show
-non-ASCII group names.
+An alist of method and the charset for group names. It is used to show
+non-@acronym{ASCII} group names.
For example:
@lisp
@cindex UTF-8 group names
@vindex gnus-group-name-charset-group-alist
An alist of regexp of group name and the charset for group names. It
-is used to show non-ASCII group names. @code{((".*" utf-8))} is the
-default value if UTF-8 is supported, otherwise the default is
-@code{nil}.
+is used to show non-@acronym{ASCII} group names. @code{((".*"
+utf-8))} is the default value if UTF-8 is supported, otherwise the
+default is @code{nil}.
For example:
@lisp
@vindex gnus-group-faq-directory
@cindex FAQ
@cindex ange-ftp
-Try to fetch the FAQ for the current group
-(@code{gnus-group-fetch-faq}). Gnus will try to get the FAQ from
-@code{gnus-group-faq-directory}, which is usually a directory on a
-remote machine. This variable can also be a list of directories. In
-that case, giving a prefix to this command will allow you to choose
-between the various sites. @code{ange-ftp} (or @code{efs}) will be used
-for fetching the file.
+Try to fetch the @acronym{FAQ} for the current group
+(@code{gnus-group-fetch-faq}). Gnus will try to get the @acronym{FAQ}
+from @code{gnus-group-faq-directory}, which is usually a directory on
+a remote machine. This variable can also be a list of directories.
+In that case, giving a prefix to this command will allow you to choose
+between the various sites. @code{ange-ftp} (or @code{efs}) will be
+used for fetching the file.
If fetching from the first site is unsuccessful, Gnus will attempt to go
through @code{gnus-group-faq-directory} and try to open them one by one.
@vindex gnus-group-fetch-control-use-browse-url
@cindex control message
Fetch the control messages for the group from the archive at
-@code{ftp.isc.org} (@code{gnus-group-fetch-control}). Query for a
+@code{ftp.isc.org} (@code{gnus-group-fetch-control}). Query for a
group if given a prefix argument.
If @code{gnus-group-fetch-control-use-browse-url} is non-@code{nil},
is only placed in the group with the first matching rule. For
example, the group parameter @samp{(sieve address "sender"
"owner-ding@@hpc.uh.edu")} will generate the following piece of Sieve
-code if @code{gnus-sieve-crosspost} is @code{nil}. (When
+code if @code{gnus-sieve-crosspost} is @code{nil}. (When
@code{gnus-sieve-crosspost} is non-@code{nil}, it looks the same
except that the line containing the call to @code{stop} is removed.)
@}
@end example
-@xref{Top, ,Top, sieve, Emacs Sieve}.
+@xref{Top, Emacs Sieve, Top, sieve, Emacs Sieve}.
@table @kbd
@item L
Number of lines in the article.
@item c
-Number of characters in the article. This specifier is not supported
+Number of characters in the article. This specifier is not supported
in some methods (like nnfolder).
@item k
Pretty-printed version of the number of characters in the article;
You can customize the appearance with the following options. Note
that it is possible to make the thread display look really neat by
-replacing the default ASCII characters with graphic line-drawing
-glyphs.
+replacing the default @acronym{ASCII} characters with graphic
+line-drawing glyphs.
@table @code
@item gnus-sum-thread-tree-root
@vindex gnus-sum-thread-tree-root
Used for the root of a thread. If @code{nil}, use subject
-instead. The default is @samp{> }.
+instead. The default is @samp{> }.
+
+@item gnus-sum-thread-tree-false-root
+@vindex gnus-sum-thread-tree-false-root
+Used for the false root of a thread (@pxref{Loose Threads}). If
+@code{nil}, use subject instead. The default is @samp{> }.
@item gnus-sum-thread-tree-single-indent
@vindex gnus-sum-thread-tree-single-indent
@item gnus-sum-thread-tree-indent
@vindex gnus-sum-thread-tree-indent
-Used for indenting. The default is @samp{ }.
+Used for indenting. The default is @samp{ }.
@item gnus-sum-thread-tree-leaf-with-other
@vindex gnus-sum-thread-tree-leaf-with-other
@item <
Twenty minus thread level spaces.
@item U
-Unread. @xref{Read Articles}.
+Unread. @xref{Read Articles}.
@item R
This misleadingly named specifier is the @dfn{secondary mark}. This
@vindex nnmail-extra-headers
A related variable is @code{nnmail-extra-headers}, which controls when
-to include extra headers when generating overview (@sc{nov}) files.
+to include extra headers when generating overview (@acronym{NOV}) files.
If you have old overview files, you should regenerate them after
changing this variable, by entering the server buffer using @kbd{^},
and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause
support:
The above is mostly useful for mail groups, where you have control over
-the @sc{nov} files that are created. However, if you can persuade your
+the @acronym{NOV} files that are created. However, if you can persuade your
nntp admin to add (in the usual implementation, notably INN):
@example
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)
@findex gnus-summary-reply-broken-reply-to
Mail a reply to the author of the current article but ignore the
@code{Reply-To} field (@code{gnus-summary-reply-broken-reply-to}).
+If you need this because a mailing list incorrectly sets a
+@code{Reply-To} header pointing to the list, you probably want to set
+the @code{broken-reply-to} group parameter instead, so things will work
+correctly. @xref{Group Parameters}.
@item S B R
@kindex S B R (Summary)
is forwarded according to the value of (@code{message-forward-as-mime})
and (@code{message-forward-show-mml}); if the prefix is 1, decode the
message and forward directly inline; if the prefix is 2, forward message
-as an rfc822 @sc{mime} section; if the prefix is 3, decode message and
-forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message
+as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
+forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
directly inline; otherwise, the message is forwarded as no prefix given
but use the flipped value of (@code{message-forward-as-mime}). By
-default, the message is decoded and forwarded as an rfc822 @sc{mime}
+default, the message is decoded and forwarded as an rfc822 @acronym{MIME}
section.
@item S m
@c @icon{gnus-summary-followup-with-original}
@findex gnus-summary-followup-with-original
Post a followup to the current article and include the original message
-(@code{gnus-summary-followup-with-original}). This command uses the
+(@code{gnus-summary-followup-with-original}). This command uses the
process/prefix convention.
@item S n
of (@code{message-forward-as-mime}) and
(@code{message-forward-show-mml}); if the prefix is 1, decode the
message and forward directly inline; if the prefix is 2, forward message
-as an rfc822 @sc{mime} section; if the prefix is 3, decode message and
-forward as an rfc822 @sc{mime} section; if the prefix is 4, forward message
+as an rfc822 @acronym{MIME} section; if the prefix is 3, decode message and
+forward as an rfc822 @acronym{MIME} section; if the prefix is 4, forward message
directly inline; otherwise, the message is forwarded as no prefix given
but use the flipped value of (@code{message-forward-as-mime}). By
-default, the message is decoded and forwarded as an rfc822 @sc{mime} section.
+default, the message is decoded and forwarded as an rfc822 @acronym{MIME} section.
@item S O p
@kindex S O p (Summary)
(months) and @code{Y} (years).
@item
-A specific date. Looks like @code{YYYYY-MM-DD}. The message will be
+A specific date. Looks like @code{YYYY-MM-DD}. The message will be
delayed until that day, at a specific time (eight o'clock by default).
See also @code{gnus-delay-default-hour}.
Articles that according to the server haven't been shown to the user
before are marked with a @samp{N} in the second column
(@code{gnus-recent-mark}). Note that not all servers support this
-mark, in which case it simply never appears. Compare with
+mark, in which case it simply never appears. Compare with
@code{gnus-unseen-mark}.
@item
@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.
article, you could say something like:
@lisp
+@group
(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
(defun my-alter-summary-map ()
(local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
+@end group
@end lisp
+@noindent
or
@lisp
@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.
@kindex / / (Summary)
@findex gnus-summary-limit-to-subject
Limit the summary buffer to articles that match some subject
-(@code{gnus-summary-limit-to-subject}). If given a prefix, exclude
+(@code{gnus-summary-limit-to-subject}). If given a prefix, exclude
matching articles.
@item / a
@kindex / a (Summary)
@findex gnus-summary-limit-to-author
Limit the summary buffer to articles that match some author
-(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
+(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
matching articles.
@item / x
@findex gnus-summary-limit-to-extra
Limit the summary buffer to articles that match one of the ``extra''
headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-extra}). If given a prefix, exclude
+(@code{gnus-summary-limit-to-extra}). If given a prefix, exclude
matching articles.
@item / u
@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
@item / c
@kindex / c (Summary)
@findex gnus-summary-limit-exclude-childless-dormant
-Exclude all dormant articles that have no children from the limit
+Exclude all dormant articles that have no children from the limit@*
(@code{gnus-summary-limit-exclude-childless-dormant}).
@item / C
@kindex / C (Summary)
@findex gnus-summary-limit-mark-excluded-as-read
Mark all excluded unread articles as read
-(@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix,
+(@code{gnus-summary-limit-mark-excluded-as-read}). If given a prefix,
also mark excluded ticked and dormant articles as read.
@item / N
@kindex / N (Summary)
@findex gnus-summary-insert-new-articles
-Insert all new articles in the summary buffer. It scans for new emails
+Insert all new articles in the summary buffer. It scans for new emails
if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
@item / o
@kindex / o (Summary)
@findex gnus-summary-insert-old-articles
-Insert all old articles in the summary buffer. If given a numbered
+Insert all old articles in the summary buffer. If given a numbered
prefix, fetch this number of articles.
@end table
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:
visible effects, but is useful if you use the @kbd{A T} command a lot
(@pxref{Finding the Parent}).
+@item gnus-fetch-old-ephemeral-headers
+@vindex gnus-fetch-old-ephemeral-headers
+Same as @code{gnus-fetch-old-headers}, but only used for ephemeral
+newsgroups.
+
@item gnus-build-sparse-threads
@vindex gnus-build-sparse-threads
Fetching old headers can be slow. A low-rent similar effect can be
This can also be a predicate specifier (@pxref{Predicate Specifiers}).
Available predicates are @code{gnus-article-unread-p} and
-@code{gnus-article-unseen-p}).
+@code{gnus-article-unseen-p}.
Here's an example:
@item T s
@kindex T s (Summary)
@findex gnus-summary-show-thread
-Expose the (sub-)thread hidden under the current article, if any
+Expose the (sub-)thread hidden under the current article, if any@*
(@code{gnus-summary-show-thread}).
@item T h
@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
@cindex article pre-fetch
@cindex pre-fetch
-If you read your news from an @sc{nntp} server that's far away, the
+If you read your news from an @acronym{NNTP} server that's far away, the
network latencies may make reading articles a chore. You have to wait
for a while after pressing @kbd{n} to go to the next article before the
article appears. Why can't Gnus just go ahead and fetch the article
extra connection takes some time, so Gnus startup will be slower.
Gnus will fetch more articles than you will read. This will mean that
-the link between your machine and the @sc{nntp} server will become more
+the link between your machine and the @acronym{NNTP} server will become more
loaded than if you didn't use article pre-fetch. The server itself will
also become more loaded---both with the extra article requests, and the
extra connection.
@cindex article caching
@cindex caching
-If you have an @emph{extremely} slow @sc{nntp} connection, you may
+If you have an @emph{extremely} slow @acronym{NNTP} connection, you may
consider turning article caching on. Each article will then be stored
locally under your home directory. As you may surmise, this could
potentially use @emph{huge} amounts of disk space, as well as eat up all
picture? The @code{gnus-jog-cache} command will go through all
subscribed newsgroups, request all unread articles, score them, and
store them in the cache. You should only ever, ever ever ever, use this
-command if 1) your connection to the @sc{nntp} server is really, really,
+command if 1) your connection to the @acronym{NNTP} server is really, really,
really slow and 2) you have a really, really, really huge disk.
Seriously. One way to cut down on the number of articles downloaded is
to score unwanted articles down and have them marked as read. They will
file (@code{gnus-cache-active-file}). If this file (or any other parts
of the cache) becomes all messed up for some reason or other, Gnus
offers two functions that will try to set things right. @kbd{M-x
-gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
+gnus-cache-generate-nov-databases} will (re)build all the @acronym{NOV}
files, and @kbd{gnus-cache-generate-active} will (re)generate the active
file.
@findex gnus-cache-move-cache
@code{gnus-cache-move-cache} will move your whole
-@code{gnus-cache-directory} to some other location. You get asked to
+@code{gnus-cache-directory} to some other location. You get asked to
where, isn't that cool?
@node Persistent Articles
@item O r
@kindex O r (Summary)
@findex gnus-summary-save-article-rmail
-Save the current article in rmail format
+Save the current article in Rmail format
(@code{gnus-summary-save-article-rmail}).
@item O f
@kindex O P (Summary)
@findex gnus-summary-muttprint
@vindex gnus-summary-muttprint-program
-Save the current article into muttprint. That is, print it using the
-external program Muttprint (see
-@uref{http://muttprint.sourceforge.net/}). The program name and
-options to use is controlled by the variable
-@code{gnus-summary-muttprint-program}. (@code{gnus-summary-muttprint}).
+Save the current article into muttprint. That is, print it using the
+external program @uref{http://muttprint.sourceforge.net/,
+Muttprint}. The program name and options to use is controlled by the
+variable @code{gnus-summary-muttprint-program}.
+(@code{gnus-summary-muttprint}).
@end table
@findex gnus-summary-save-in-rmail
@vindex gnus-rmail-save-name
@findex gnus-plain-save-name
-This is the default format, @dfn{babyl}. Uses the function in the
+This is the default format, @dfn{Babyl}. Uses the function in the
@code{gnus-rmail-save-name} variable to get a file name to save the
article in. The default is @code{gnus-plain-save-name}.
@vindex gnus-article-save-directory
All of these functions, except for the last one, will save the article
in the @code{gnus-article-save-directory}, which is initialized from the
-@code{SAVEDIR} environment variable. This is @file{~/News/} by
+@env{SAVEDIR} environment variable. This is @file{~/News/} by
default.
As you can see above, the functions use different functions to find a
a spool, you could
@lisp
-(setq gnus-use-long-file-name '(not-save)) ; to get a hierarchy
+(setq gnus-use-long-file-name '(not-save)) ; @r{to get a hierarchy}
(setq gnus-default-article-saver
- 'gnus-summary-save-in-file) ; no encoding
+ 'gnus-summary-save-in-file) ; @r{no encoding}
@end lisp
Then just save with @kbd{o}. You'd then read this hierarchy with
@item gnus-uu-ignore-files-by-type
@vindex gnus-uu-ignore-files-by-type
-Files with a @sc{mime} type matching this variable won't be viewed.
+Files with a @acronym{MIME} type matching this variable won't be viewed.
Note that Gnus tries to guess what type the file is based on the name.
-@code{gnus-uu} is not a @sc{mime} package (yet), so this is slightly
+@code{gnus-uu} is not a @acronym{MIME} package (yet), so this is slightly
kludgey.
@item gnus-uu-tmp-dir
@vindex gnus-uu-view-with-metamail
@cindex metamail
Non-@code{nil} means that @code{gnus-uu} will ignore the viewing
-commands defined by the rule variables and just fudge a @sc{mime}
+commands defined by the rule variables and just fudge a @acronym{MIME}
content type based on the file name. The result will be fed to
@code{metamail} for viewing.
* Article Date:: Grumble, UT!
* Article Display:: Display various stuff---X-Face, Picons, Smileys
* Article Signature:: What is a signature?
-* Article Miscellania:: Various other stuff.
+* Article Miscellanea:: Various other stuff.
@end menu
@findex gnus-article-hide
Do quite a lot of hiding on the article buffer
(@kbd{gnus-article-hide}). In particular, this function will hide
-headers, PGP, cited text and the signature.
+headers, @acronym{PGP}, cited text and the signature.
@item W W h
@kindex W W h (Summary)
Strip list identifiers specified in @code{gnus-list-identifiers}. These
are strings some mailing list servers add to the beginning of all
@code{Subject} headers---for example, @samp{[zebra 4711]}. Any leading
-@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
+@samp{Re: } is skipped before stripping. @code{gnus-list-identifiers}
may not contain @code{\\(..\\)}.
@table @code
@item W W P
@kindex W W P (Summary)
@findex gnus-article-hide-pem
-Hide @sc{pem} (privacy enhanced messages) cruft
+Hide @acronym{PEM} (privacy enhanced messages) cruft
(@code{gnus-article-hide-pem}).
@item W W B
sends, you can use the following element to remove them:
@lisp
-("@@yoo-hoo\\.co\\.jp\\'" . "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
+("@@yoo-hoo\\.co\\.jp\\'" .
+ "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n")
@end lisp
@end table
@item gnus-cited-lines-visible
@vindex gnus-cited-lines-visible
The number of lines at the beginning of the cited text to leave
-shown. This can also be a cons cell with the number of lines at the top
+shown. This can also be a cons cell with the number of lines at the top
and bottom of the text, respectively, to remain visible.
@end table
Unwrap lines that appear to be wrapped citation lines. You can control
what lines will be unwrapped by frobbing
@code{gnus-outlook-deuglify-unwrap-min} and
-@code{gnus-outlook-deuglify-unwrap-max}, indicating the miminum and
+@code{gnus-outlook-deuglify-unwrap-max}, indicating the minimum and
maximum length of an unwrapped citation line.
(@code{gnus-article-outlook-unwrap-lines}).
@item W Y a
@kindex W Y a (Summary)
@findex gnus-article-outlook-repair-attribution
-Repair a broken attribution line.
+Repair a broken attribution line.@*
(@code{gnus-article-outlook-repair-attribution}).
@item W Y c
@kindex W q (Summary)
@findex gnus-article-de-quoted-unreadable
Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
-Quoted-Printable is one common @sc{mime} encoding employed when sending
-non-ASCII (i. e., 8-bit) articles. It typically makes strings like
-@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me. Note that this is usually done automatically by
-Gnus if the message in question has a @code{Content-Transfer-Encoding}
-header that says that this encoding has been done.
-If a prefix is given, a charset will be asked for.
+Quoted-Printable is one common @acronym{MIME} encoding employed when
+sending non-@acronym{ASCII} (i.e., 8-bit) articles. It typically
+makes strings like @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which
+doesn't look very readable to me. Note that this is usually done
+automatically by Gnus if the message in question has a
+@code{Content-Transfer-Encoding} header that says that this encoding
+has been done. If a prefix is given, a charset will be asked for.
@item W 6
@kindex W 6 (Summary)
@findex gnus-article-de-base64-unreadable
-Treat base64 (@code{gnus-article-de-base64-unreadable}).
-Base64 is one common @sc{mime} encoding employed when sending non-ASCII
-(i. e., 8-bit) articles. Note that this is usually done
-automatically by Gnus if the message in question has a
-@code{Content-Transfer-Encoding} header that says that this encoding has
-been done.
-If a prefix is given, a charset will be asked for.
+Treat base64 (@code{gnus-article-de-base64-unreadable}). Base64 is
+one common @acronym{MIME} encoding employed when sending
+non-@acronym{ASCII} (i.e., 8-bit) articles. Note that this is
+usually done automatically by Gnus if the message in question has a
+@code{Content-Transfer-Encoding} header that says that this encoding
+has been done. If a prefix is given, a charset will be asked for.
@item W Z
@kindex W Z (Summary)
@item W h
@kindex W h (Summary)
@findex gnus-article-wash-html
-Treat @sc{html} (@code{gnus-article-wash-html}). Note that this is
+Treat @acronym{HTML} (@code{gnus-article-wash-html}). Note that this is
usually done automatically by Gnus if the message in question has a
-@code{Content-Type} header that says that the message is @sc{html}.
+@code{Content-Type} header that says that the message is @acronym{HTML}.
If a prefix is given, a charset will be asked for.
The default is to use the function specified by
@code{mm-text-html-renderer} (@pxref{Display Customization, ,Display
Customization, emacs-mime, The Emacs MIME Manual}) to convert the
-@sc{html}, but this is controlled by the
+@acronym{HTML}, but this is controlled by the
@code{gnus-article-wash-function} variable. Pre-defined functions you
can use include:
Use Emacs/w3.
@item w3m
-Use emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more
-information).
+Use @uref{http://emacs-w3m.namazu.org/, emacs-w3m}.
@item links
-Use Links (see @uref{http://artax.karlin.mff.cuni.cz/~mikulas/links/}).
+Use @uref{http://links.sf.net/, Links}.
@item lynx
-Use Lynx (see @uref{http://lynx.browser.org/}).
+Use @uref{http://lynx.isc.org/, Lynx}.
@item html2text
-Use html2text -- a simple @sc{html} converter included with Gnus.
+Use html2text---a simple @acronym{HTML} converter included with Gnus.
@end table
@item W p
@kindex W p (Summary)
@findex gnus-article-verify-x-pgp-sig
-Verify a signed control message (@code{gnus-article-verify-x-pgp-sig}).
-Control messages such as @code{newgroup} and @code{checkgroups} are
-usually signed by the hierarchy maintainer. You need to add the PGP
-public key of the maintainer to your keyring to verify the
-message.@footnote{PGP keys for many hierarchies are available at
-@uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}}
+Verify a signed control message
+(@code{gnus-article-verify-x-pgp-sig}). Control messages such as
+@code{newgroup} and @code{checkgroups} are usually signed by the
+hierarchy maintainer. You need to add the @acronym{PGP} public key of
+the maintainer to your keyring to verify the
+message.@footnote{@acronym{PGP} keys for many hierarchies are
+available at @uref{ftp://ftp.isc.org/pub/pgpcontrol/README.html}}
@item W s
@kindex W s (Summary)
@findex gnus-summary-force-verify-and-decrypt
-Verify a signed (PGP, @sc{pgp/mime} or @sc{s/mime}) message
+Verify a signed (@acronym{PGP}, @acronym{PGP/MIME} or
+@acronym{S/MIME}) message
(@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
@item W a
This is an alist where each entry has this form:
@lisp
-(REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
+(@var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
@end lisp
@table @var
used to say what headers to apply the buttonize coding to:
@lisp
-(HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
+(@var{header} @var{regexp} @var{button-par} @var{use-p} @var{function} @var{data-par})
@end lisp
@var{header} is a regular expression.
+@end table
-@subsubheading Related variables and functions
+@subsubsection Related variables and functions
+@table @code
@item gnus-button-@var{*}-level
@xref{Article Button Levels}.
@samp{foo123@@bar.invalid} is pushed. Strings like this can be either a
message ID or a mail address. If it is one of the symbols @code{mid} or
@code{mail}, Gnus will always assume that the string is a message ID or
-a mail address, respectivly. If this variable is set to the symbol
+a mail address, respectively. If this variable is set to the symbol
@code{ask}, always query the user what do do. If it is a function, this
-function will be called with the string as it's only argument. The
+function will be called with the string as its only argument. The
function must return @code{mid}, @code{mail}, @code{invalid} or
@code{ask}. The default value is the function
@code{gnus-button-mid-or-mail-heuristic}.
@item gnus-button-mid-or-mail-heuristic
@findex gnus-button-mid-or-mail-heuristic
-Function that guesses whether it's argument is a message ID or a mail
-address. Returns @code{mid} it's a message IDs, @code{mail} if it's a
-mail address, @code{ask} if unsure and @code{invalid} if the string is
-invalid.
+Function that guesses whether its argument is a message ID or a mail
+address. Returns @code{mid} if it's a message IDs, @code{mail} if
+it's a mail address, @code{ask} if unsure and @code{invalid} if the
+string is invalid.
@item gnus-button-mid-or-mail-heuristic-alist
@vindex gnus-button-mid-or-mail-heuristic-alist
variable @code{gnus-parameters}:
@lisp
-;; increase `gnus-button-*-level' in some groups:
+;; @r{increase @code{gnus-button-*-level} in some groups:}
(setq gnus-parameters
'(("\\<\\(emacs\\|gnus\\)\\>" (gnus-button-emacs-level 10))
("\\<unix\\>" (gnus-button-man-level 10))
@item gnus-button-tex-level
@vindex gnus-button-tex-level
-Controls the display of references to TeX or LaTeX stuff, e.g. for CTAN
+Controls the display of references to @TeX{} or LaTeX stuff, e.g. for CTAN
URLs. See the variables @code{gnus-ctan-url},
@code{gnus-button-ctan-handler},
@code{gnus-button-ctan-directory-regexp}, and
@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}).
-All these functions are toggles--if the elements already exist,
+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.
@table @kbd
@lisp
(setq gnus-signature-separator
- '("^-- $" ; The standard
- "^-- *$" ; A common mangling
- "^-------*$" ; Many people just use a looong
- ; line of dashes. Shame!
- "^ *--------*$" ; Double-shame!
- "^________*$" ; Underscores are also popular
- "^========*$")) ; Pervert!
+ '("^-- $" ; @r{The standard}
+ "^-- *$" ; @r{A common mangling}
+ "^-------*$" ; @r{Many people just use a looong}
+ ; @r{line of dashes. Shame!}
+ "^ *--------*$" ; @r{Double-shame!}
+ "^________*$" ; @r{Underscores are also popular}
+ "^========*$")) ; @r{Pervert!}
@end lisp
The more permissive you are, the more likely it is that you'll get false
signature after all.
-@node Article Miscellania
-@subsection Article Miscellania
+@node Article Miscellanea
+@subsection Article Miscellanea
@table @kbd
@item A t
@cindex viewing attachments
The following commands all understand the numerical prefix. For
-instance, @kbd{3 b} means ``view the third @sc{mime} part''.
+instance, @kbd{3 b} means ``view the third @acronym{MIME} part''.
@table @kbd
@item b
@itemx K v
@kindex b (Summary)
@kindex K v (Summary)
-View the @sc{mime} part.
+View the @acronym{MIME} part.
@item K o
@kindex K o (Summary)
-Save the @sc{mime} part.
+Save the @acronym{MIME} part.
@item K c
@kindex K c (Summary)
-Copy the @sc{mime} part.
+Copy the @acronym{MIME} part.
@item K e
@kindex K e (Summary)
-View the @sc{mime} part externally.
+View the @acronym{MIME} part externally.
@item K i
@kindex K i (Summary)
-View the @sc{mime} part internally.
+View the @acronym{MIME} part internally.
@item K |
@kindex K | (Summary)
-Pipe the @sc{mime} part to an external command.
+Pipe the @acronym{MIME} part to an external command.
@end table
-The rest of these @sc{mime} commands do not use the numerical prefix in
+The rest of these @acronym{MIME} commands do not use the numerical prefix in
the same manner:
@table @kbd
@item K b
@kindex K b (Summary)
-Make all the @sc{mime} parts have buttons in front of them. This is
+Make all the @acronym{MIME} parts have buttons in front of them. This is
mostly useful if you wish to save (or perform other actions) on inlined
parts.
@item X m
@kindex X m (Summary)
@findex gnus-summary-save-parts
-Save all parts matching a @sc{mime} type to a directory
+Save all parts matching a @acronym{MIME} type to a directory
(@code{gnus-summary-save-parts}). Understands the process/prefix
convention (@pxref{Process/Prefix}).
charset. If there is no such header in the article, you can give it a
prefix, which will prompt for the charset to decode as. In regional
groups where people post using some common encoding (but do not
-include @sc{mime} headers), you can set the @code{charset} group/topic
+include @acronym{MIME} headers), you can set the @code{charset} group/topic
parameter to the required charset (@pxref{Group Parameters}).
@item W M v
@kindex W M v (Summary)
@findex gnus-mime-view-all-parts
-View all the @sc{mime} parts in the current article
+View all the @acronym{MIME} parts in the current article
(@code{gnus-mime-view-all-parts}).
@end table
@table @code
@item gnus-ignored-mime-types
@vindex gnus-ignored-mime-types
-This is a list of regexps. @sc{mime} types that match a regexp from
+This is a list of regexps. @acronym{MIME} types that match a regexp from
this list will be completely ignored by Gnus. The default value is
@code{nil}.
@item gnus-article-loose-mime
@vindex gnus-article-loose-mime
-If non-@code{nil}, Gnus won't required the @samp{MIME-Version} header
-before interpreting the message as a @sc{mime} message. This helps
+If non-@code{nil}, Gnus won't require the @samp{MIME-Version} header
+before interpreting the message as a @acronym{MIME} message. This helps
when reading messages from certain broken mail user agents. The
default is @code{nil}.
@item gnus-article-emulate-mime
@vindex gnus-article-emulate-mime
-There are other, non-@sc{mime} encoding methods used. The most common
+There are other, non-@acronym{MIME} encoding methods used. The most common
is @samp{uuencode}, but yEncode is also getting to be popular. If
-This variable is non-@code{nil}, Gnus will look in message bodies to
+this variable is non-@code{nil}, Gnus will look in message bodies to
see if it finds these encodings, and if so, it'll run them through the
-Gnus @sc{mime} machinery. The default is @code{t}.
+Gnus @acronym{MIME} machinery. The default is @code{t}.
@item gnus-unbuttonized-mime-types
@vindex gnus-unbuttonized-mime-types
-This is a list of regexps. @sc{mime} types that match a regexp from
-this list won't have @sc{mime} buttons inserted unless they aren't
+This is a list of regexps. @acronym{MIME} types that match a regexp from
+this list won't have @acronym{MIME} buttons inserted unless they aren't
displayed or this variable is overridden by
@code{gnus-buttonized-mime-types}. The default value is
@code{(".*/.*")}. This variable is only used when
-@code{gnus-inhibit-mime-unbuttonizing} is nil.
+@code{gnus-inhibit-mime-unbuttonizing} is @code{nil}.
@item gnus-buttonized-mime-types
@vindex gnus-buttonized-mime-types
-This is a list of regexps. @sc{mime} types that match a regexp from
-this list will have @sc{mime} buttons inserted unless they aren't
+This is a list of regexps. @acronym{MIME} types that match a regexp from
+this list will have @acronym{MIME} buttons inserted unless they aren't
displayed. This variable overrides
@code{gnus-unbuttonized-mime-types}. The default value is @code{nil}.
This variable is only used when @code{gnus-inhibit-mime-unbuttonizing}
-is nil.
+is @code{nil}.
To see e.g. security buttons but no other buttons, you could set this
variable to @code{("multipart/signed")} and leave
@item gnus-inhibit-mime-unbuttonizing
@vindex gnus-inhibit-mime-unbuttonizing
-If this is non-nil, then all @sc{mime} parts get buttons. The default
-value is @code{nil}.
+If this is non-@code{nil}, then all @acronym{MIME} parts get buttons. The
+default value is @code{nil}.
@item gnus-article-mime-part-function
@vindex gnus-article-mime-part-function
-For each @sc{mime} part, this function will be called with the @sc{mime}
+For each @acronym{MIME} part, this function will be called with the @acronym{MIME}
handle as the parameter. The function is meant to be used to allow
users to gather information from the article (e. g., add Vcard info to
the bbdb database) or to do actions based on parts (e. g., automatically
@vindex gnus-mime-multipart-functions
@item gnus-mime-multipart-functions
-Alist of @sc{mime} multipart types and functions to handle them.
+Alist of @acronym{MIME} multipart types and functions to handle them.
@vindex mm-file-name-rewrite-functions
@item mm-file-name-rewrite-functions
-List of functions used for rewriting file names of @sc{mime} parts.
+List of functions used for rewriting file names of @acronym{MIME} parts.
Each function takes a file name as input and returns a file name.
Ready-made functions include@*
@section Charsets
@cindex charsets
-People use different charsets, and we have @sc{mime} to let us know what
+People use different charsets, and we have @acronym{MIME} to let us know what
charsets they use. Or rather, we wish we had. Many people use
-newsreaders and mailers that do not understand or use @sc{mime}, and
+newsreaders and mailers that do not understand or use @acronym{MIME}, and
just send out messages without saying what character sets they use. To
help a bit with this, some local news hierarchies have policies that say
what character set is the default. For instance, the @samp{fj}
group names) and default charsets to be used when reading these groups.
@vindex gnus-newsgroup-ignored-charsets
-In addition, some people do use soi-disant @sc{mime}-aware agents that
+In addition, some people do use soi-disant @acronym{MIME}-aware agents that
aren't. These blithely mark messages as being in @code{iso-8859-1}
even if they really are in @code{koi-8}. To help here, the
@code{gnus-newsgroup-ignored-charsets} variable can be used. The
@vindex gnus-group-posting-charset-alist
When posting, @code{gnus-group-posting-charset-alist} is used to
-determine which charsets should not be encoded using the @sc{mime}
+determine which charsets should not be encoded using the @acronym{MIME}
encodings. For instance, some hierarchies discourage using
quoted-printable header encoding.
Other charset tricks that may be useful, although not Gnus-specific:
-If there are several @sc{mime} charsets that encode the same Emacs
+If there are several @acronym{MIME} charsets that encode the same Emacs
charset, you can choose what charset to use by saying the following:
@lisp
@end lisp
This means that Russian will be encoded using @code{koi8-r} instead of
-the default @code{iso-8859-5} @sc{mime} charset.
+the default @code{iso-8859-5} @acronym{MIME} charset.
If you want to read messages in @code{koi8-u}, you can cheat and say
@findex gnus-summary-refer-parent-article
If you'd like to read the parent of the current article, and it is not
displayed in the summary buffer, you might still be able to. That is,
-if the current group is fetched by @sc{nntp}, the parent hasn't expired
+if the current group is fetched by @acronym{NNTP}, the parent hasn't expired
and the @code{References} in the current article are not mangled, you
can just press @kbd{^} or @kbd{A r}
(@code{gnus-summary-refer-parent-article}). If everything goes well,
@kindex M-^ (Summary)
@cindex Message-ID
@cindex fetching by Message-ID
-You can also ask the @sc{nntp} server for an arbitrary article, no
+You can also ask the @acronym{NNTP} server for an arbitrary article, no
matter what group it belongs to. @kbd{M-^}
(@code{gnus-summary-refer-article}) will ask you for a
@code{Message-ID}, which is one of those long, hard-to-read thingies
@vindex gnus-refer-article-method
If the group you are reading is located on a back end that does not
support fetching by @code{Message-ID} very well (like @code{nnspool}),
-you can set @code{gnus-refer-article-method} to an @sc{nntp} method. It
-would, perhaps, be best if the @sc{nntp} server you consult is the one
+you can set @code{gnus-refer-article-method} to an @acronym{NNTP} method. It
+would, perhaps, be best if the @acronym{NNTP} server you consult is the one
updating the spool you are reading from, but that's not really
necessary.
@item gnus-tree-brackets
@vindex gnus-tree-brackets
This is used for differentiating between ``real'' articles and
-``sparse'' articles. The format is @code{((@var{real-open} . @var{real-close})
-(@var{sparse-open} . @var{sparse-close}) (@var{dummy-open} . @var{dummy-close}))}, and the
-default is @code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
+``sparse'' articles. The format is
+@example
+((@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{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))}.
@item gnus-tree-parent-child-edges
@vindex gnus-tree-parent-child-edges
Here's the same thread displayed in a vertical tree buffer:
@example
+@group
@{***@}
|--------------------------\-----\-----\
(***) [Bjo] [Gun] [Gun]
[Gun] [Eri] [Eri] [odd]
|
[Paa]
+@end group
@end example
If you're using horizontal trees, it might be nice to display the trees
@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
If the value is an integer, @var{n}, update the display every @var{n}
lines. The default is @code{nil}.
+@vindex gnus-summary-display-arrow
+@item gnus-summary-display-arrow
+If non-@code{nil}, display an arrow in the fringe to indicate the
+current article.
+
@vindex gnus-summary-mode-hook
@item gnus-summary-mode-hook
This hook is called when creating a summary mode buffer.
@item gnus-newsgroup-variables
A list of newsgroup (summary buffer) local variables, or cons of
variables and their default values (when the default values are not
-nil), that should be made global while the summary buffer is active.
-These variables can be used to set variables in the group parameters
-while still allowing them to affect operations done in other
-buffers. For example:
+@code{nil}), that should be made global while the summary buffer is
+active. These variables can be used to set variables in the group
+parameters while still allowing them to affect operations done in
+other buffers. For example:
@lisp
(setq gnus-newsgroup-variables
- '(message-use-followup-to
- (gnus-visible-headers .
- "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
+ '(message-use-followup-to
+ (gnus-visible-headers .
+ "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
@end lisp
@end table
@kindex H f (Summary)
@findex gnus-summary-fetch-faq
@vindex gnus-group-faq-directory
-Try to fetch the FAQ (list of frequently asked questions) for the
-current group (@code{gnus-summary-fetch-faq}). Gnus will try to get the
-FAQ from @code{gnus-group-faq-directory}, which is usually a directory
-on a remote machine. This variable can also be a list of directories.
-In that case, giving a prefix to this command will allow you to choose
-between the various sites. @code{ange-ftp} or @code{efs} will probably
-be used for fetching the file.
+Try to fetch the @acronym{FAQ} (list of frequently asked questions)
+for the current group (@code{gnus-summary-fetch-faq}). Gnus will try
+to get the @acronym{FAQ} from @code{gnus-group-faq-directory}, which
+is usually a directory on a remote machine. This variable can also be
+a list of directories. In that case, giving a prefix to this command
+will allow you to choose between the various sites. @code{ange-ftp}
+or @code{efs} will probably be used for fetching the file.
@item H d
@kindex H d (Summary)
@cindex cross-posting
@cindex Xref
-@cindex @sc{nov}
+@cindex @acronym{NOV}
One thing that may cause Gnus to not do the cross-posting thing
-correctly is if you use an @sc{nntp} server that supports @sc{xover}
+correctly is if you use an @acronym{NNTP} server that supports @sc{xover}
(which is very nice, because it speeds things up considerably) which
-does not include the @code{Xref} header in its @sc{nov} lines. This is
+does not include the @code{Xref} header in its @acronym{NOV} lines. This is
Evil, but all too common, alas, alack. Gnus tries to Do The Right Thing
even with @sc{xover} by registering the @code{Xref} lines of all
articles you actually read, but if you kill the articles, or just mark
@cindex LIST overview.fmt
@cindex overview.fmt
-To check whether your @sc{nntp} server includes the @code{Xref} header
+To check whether your @acronym{NNTP} server includes the @code{Xref} header
in its overview files, try @samp{telnet your.nntp.server nntp},
@samp{MODE READER} on @code{inn} servers, and then say @samp{LIST
overview.fmt}. This may not work, but if it does, and the last line you
@enumerate
@item
-The @sc{nntp} server may fail to generate the @code{Xref} header. This
+The @acronym{NNTP} server may fail to generate the @code{Xref} header. This
is evil and not very common.
@item
-The @sc{nntp} server may fail to include the @code{Xref} header in the
+The @acronym{NNTP} server may fail to include the @code{Xref} header in the
@file{.overview} data bases. This is evil and all too common, alas.
@item
You may be reading the same group (or several related groups) from
-different @sc{nntp} servers.
+different @acronym{NNTP} servers.
@item
You may be getting mail that duplicates articles posted to groups.
@section Security
Gnus is able to verify signed messages or decrypt encrypted messages.
-The formats that are supported are PGP, @sc{pgp/mime} and @sc{s/mime},
-however you need some external programs to get things to work:
+The formats that are supported are @acronym{PGP}, @acronym{PGP/MIME}
+and @acronym{S/MIME}, however you need some external programs to get
+things to work:
@enumerate
@item
-To handle PGP and PGP/MIME messages, you have to install an OpenPGP
-implementation such as GnuPG. The lisp interface to GnuPG included
-with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), but
-Mailcrypt and gpg.el are also supported.
+To handle @acronym{PGP} and @acronym{PGP/MIME} messages, you have to
+install an OpenPGP implementation such as GnuPG. The Lisp interface
+to GnuPG included with Gnus is called PGG (@pxref{Top, ,PGG, pgg, PGG
+Manual}), but Mailcrypt and gpg.el are also supported.
@item
-To handle @sc{s/mime} message, you need to install OpenSSL. OpenSSL 0.9.6
+To handle @acronym{S/MIME} message, you need to install OpenSSL. OpenSSL 0.9.6
or newer is recommended.
@end enumerate
@vindex mm-verify-option
Option of verifying signed parts. @code{never}, not verify;
@code{always}, always verify; @code{known}, only verify known
-protocols. Otherwise, ask user.
+protocols. Otherwise, ask user.
@item mm-decrypt-option
@vindex mm-decrypt-option
Option of decrypting encrypted parts. @code{never}, no decryption;
@code{always}, always decrypt; @code{known}, only decrypt known
-protocols. Otherwise, ask user.
+protocols. Otherwise, ask user.
@item mml1991-use
@vindex mml1991-use
-Symbol indicating elisp interface to OpenPGP implementation for PGP
-messages. The default is @code{pgg}, but @code{mailcrypt} and
-@code{gpg} are also supported although deprecated.
+Symbol indicating elisp interface to OpenPGP implementation for
+@acronym{PGP} messages. The default is @code{pgg}, but
+@code{mailcrypt} and @code{gpg} are also supported although
+deprecated.
@item mml2015-use
@vindex mml2015-use
Symbol indicating elisp interface to OpenPGP implementation for
-PGP/MIME messages. The default is @code{pgg}, but @code{mailcrypt}
-and @code{gpg} are also supported although deprecated.
+@acronym{PGP/MIME} messages. The default is @code{pgg}, but
+@code{mailcrypt} and @code{gpg} are also supported although
+deprecated.
@end table
+@cindex snarfing keys
+@cindex importing PGP keys
+@cindex PGP key ring import
+Snarfing OpenPGP keys (i.e., importing keys from articles into your
+key ring) is not supported explicitly through a menu item or command,
+rather Gnus do detect and label keys as @samp{application/pgp-keys},
+allowing you to specify whatever action you think is appropriate
+through the usual @acronym{MIME} infrastructure. You can use a
+@file{~/.mailcap} entry (@pxref{mailcap, , mailcap, emacs-mime, The
+Emacs MIME Manual}) such as the following to import keys using GNU
+Privacy Guard when you click on the @acronym{MIME} button
+(@pxref{Using MIME}).
+
+@example
+application/pgp-keys; gpg --import --interactive --verbose; needsterminal
+@end example
+@noindent
+This happens to also be the default action defined in
+@code{mailcap-mime-data}.
+
@node Mailing List
@section Mailing List
+@cindex mailing list
+@cindex RFC 2396
@kindex A M (summary)
@findex gnus-mailing-list-insinuate
@menu
* Hiding Headers:: Deciding what headers should be displayed.
-* Using MIME:: Pushing articles through @sc{mime} before reading them.
+* Using MIME:: Pushing articles through @acronym{MIME} before reading them.
* Customizing Articles:: Tailoring the look of the articles.
* Article Keymap:: Keystrokes available in the article buffer.
* Misc Article:: Other stuff.
article. That's well and nice, but there's also lots of information
most people do not want to see---what systems the article has passed
through before reaching you, the @code{Message-ID}, the
-@code{References}, etc. ad nauseum---and you'll probably want to get rid
+@code{References}, etc. ad nauseam---and you'll probably want to get rid
of some of those lines. If you want to keep all those lines in the
article buffer, you can set @code{gnus-show-all-headers} to @code{t}.
@code{Newsgroups} header.
@item reply-to
Remove the @code{Reply-To} header if it lists the same address as the
-@code{From} header.
+@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.
@item to-address
Remove the @code{To} header if it only contains the address identical to
-the current groups's @code{to-address} parameter.
+the current group's @code{to-address} parameter.
@item to-list
Remove the @code{To} header if it only contains the address identical to
-the current groups's @code{to-list} parameter.
+the current group's @code{to-list} parameter.
@item cc-list
Remove the @code{CC} header if it only contains the address identical to
-the current groups's @code{to-list} parameter.
+the current group's @code{to-list} parameter.
@item date
Remove the @code{Date} header if the article is less than three days
old.
@node Using MIME
@section Using MIME
-@cindex @sc{mime}
+@cindex @acronym{MIME}
Mime is a standard for waving your hands through the air, aimlessly,
while people stand around yawning.
-@sc{mime}, however, is a standard for encoding your articles, aimlessly,
+@acronym{MIME}, however, is a standard for encoding your articles, aimlessly,
while all newsreaders die of fear.
-@sc{mime} may specify what character set the article uses, the encoding
+@acronym{MIME} may specify what character set the article uses, the encoding
of the characters, and it also makes it possible to embed pictures and
other naughty stuff in innocent-looking articles.
@vindex gnus-display-mime-function
@findex gnus-display-mime
-Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function}
-to display the @sc{mime} parts. This is @code{gnus-display-mime} by
+Gnus pushes @acronym{MIME} articles through @code{gnus-display-mime-function}
+to display the @acronym{MIME} parts. This is @code{gnus-display-mime} by
default, which creates a bundle of clickable buttons that can be used to
-display, save and manipulate the @sc{mime} objects.
+display, save and manipulate the @acronym{MIME} objects.
The following commands are available when you have placed point over a
-@sc{mime} button:
+@acronym{MIME} button:
@table @kbd
@findex gnus-article-press-button
@item RET (Article)
@kindex RET (Article)
@itemx BUTTON-2 (Article)
-Toggle displaying of the @sc{mime} object
-(@code{gnus-article-press-button}). If builtin viewers can not display
+Toggle displaying of the @acronym{MIME} object
+(@code{gnus-article-press-button}). If built-in viewers can not display
the object, Gnus resorts to external viewers in the @file{mailcap}
files. If a viewer has the @samp{copiousoutput} specification, the
object is displayed inline.
@item M-RET (Article)
@kindex M-RET (Article)
@itemx v (Article)
-Prompt for a method, and then view the @sc{mime} object using this
+Prompt for a method, and then view the @acronym{MIME} object using this
method (@code{gnus-mime-view-part}).
@findex gnus-mime-view-part-as-type
@item t (Article)
@kindex t (Article)
-View the @sc{mime} object as if it were a different @sc{mime} media type
+View the @acronym{MIME} object as if it were a different @acronym{MIME} media type
(@code{gnus-mime-view-part-as-type}).
@findex gnus-mime-view-part-as-charset
@item C (Article)
@kindex C (Article)
-Prompt for a charset, and then view the @sc{mime} object using this
+Prompt for a charset, and then view the @acronym{MIME} object using this
charset (@code{gnus-mime-view-part-as-charset}).
@findex gnus-mime-save-part
@item o (Article)
@kindex o (Article)
-Prompt for a file name, and then save the @sc{mime} object
+Prompt for a file name, and then save the @acronym{MIME} object
(@code{gnus-mime-save-part}).
@findex gnus-mime-save-part-and-strip
@item C-o (Article)
@kindex C-o (Article)
-Prompt for a file name, then save the @sc{mime} object and strip it from
+Prompt for a file name, then save the @acronym{MIME} object and strip it from
the article. Then proceed to article editing, where a reasonable
suggestion is being made on how the altered article should look
-like. The stripped @sc{mime} object will be referred via the
-message/external-body @sc{mime} type.
+like. The stripped @acronym{MIME} object will be referred via the
+message/external-body @acronym{MIME} type.
(@code{gnus-mime-save-part-and-strip}).
@findex gnus-mime-delete-part
@item d (Article)
@kindex d (Article)
-Delete the @sc{mime} object from the article and replace it with some
-information about the removed @sc{mime} object
+Delete the @acronym{MIME} object from the article and replace it with some
+information about the removed @acronym{MIME} object
(@code{gnus-mime-delete-part}).
@findex gnus-mime-copy-part
@item c (Article)
@kindex c (Article)
-Copy the @sc{mime} object to a fresh buffer and display this buffer
+Copy the @acronym{MIME} object to a fresh buffer and display this buffer
(@code{gnus-mime-copy-part}). Compressed files like @file{.gz} and
@file{.bz2} are automatically decompressed if
@code{auto-compression-mode} is enabled (@pxref{Compressed Files,,
@findex gnus-mime-print-part
@item p (Article)
@kindex p (Article)
-Print the @sc{mime} object (@code{gnus-mime-print-part}). This
+Print the @acronym{MIME} object (@code{gnus-mime-print-part}). This
command respects the @samp{print=} specifications in the
@file{.mailcap} file.
@findex gnus-mime-inline-part
@item i (Article)
@kindex i (Article)
-Insert the contents of the @sc{mime} object into the buffer
+Insert the contents of the @acronym{MIME} object into the buffer
(@code{gnus-mime-inline-part}) as text/plain. If given a prefix, insert
the raw contents without decoding. If given a numerical prefix, you can
do semi-manual charset stuff (see
-@code{gnus-summary-show-article-charset-alist} in @pxref{Paging the
+@code{gnus-summary-show-article-charset-alist} in @ref{Paging the
Article}).
@findex gnus-mime-view-part-internally
@item E (Article)
@kindex E (Article)
-View the @sc{mime} object with an internal viewer. If no internal
+View the @acronym{MIME} object with an internal viewer. If no internal
viewer is available, use an external viewer
(@code{gnus-mime-view-part-internally}).
@findex gnus-mime-view-part-externally
@item e (Article)
@kindex e (Article)
-View the @sc{mime} object with an external viewer.
+View the @acronym{MIME} object with an external viewer.
(@code{gnus-mime-view-part-externally}).
@findex gnus-mime-pipe-part
@item | (Article)
@kindex | (Article)
-Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).
+Output the @acronym{MIME} object to a process (@code{gnus-mime-pipe-part}).
@findex gnus-mime-action-on-part
@item . (Article)
@kindex . (Article)
-Interactively run an action on the @sc{mime} object
+Interactively run an action on the @acronym{MIME} object
(@code{gnus-mime-action-on-part}).
@end table
-Gnus will display some @sc{mime} objects automatically. The way Gnus
+Gnus will display some @acronym{MIME} objects automatically. The way Gnus
determines which parts to do this with is described in the Emacs
-@sc{mime} manual.
+@acronym{MIME} manual.
It might be best to just use the toggling functions from the article
buffer to avoid getting nasty surprises. (For instance, you enter the
-group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
+group @samp{alt.sing-a-long} and, before you know it, @acronym{MIME} has
decoded the sound file in the article and some horrible sing-a-long song
comes screaming out your speakers, and you can't find the volume button,
because there isn't one, and people are starting to look at you, and you
Any similarity to real events and people is purely coincidental. Ahem.
-Also see @pxref{MIME Commands}.
+Also @pxref{MIME Commands}.
@node Customizing Articles
@end enumerate
You may have noticed that the word @dfn{part} is used here. This refers
-to the fact that some messages are @sc{mime} multipart articles that may
+to the fact that some messages are @acronym{MIME} multipart articles that may
be divided into several parts. Articles that are not multiparts are
considered to contain just a single part.
@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)
@vindex gnus-article-decode-hook
@item gnus-article-decode-hook
-@cindex MIME
-Hook used to decode @sc{mime} articles. The default value is
+@cindex @acronym{MIME}
+Hook used to decode @acronym{MIME} articles. The default value is
@code{(article-decode-charset article-decode-encoded-words)}
@vindex gnus-article-prepare-hook
@end table
@item m
-The number of @sc{mime} parts in the article.
+The number of @acronym{MIME} parts in the article.
@end table
@vindex gnus-use-idna
@item gnus-use-idna
This variable controls whether Gnus performs IDNA decoding of
-internationalized domain names inside @sc{From:}, @sc{To:} and
-@sc{Cc:} headers. This requires GNU Libidn
-(@url{http://www.gnu.org/software/libidn/}, and this variable is only
-enabled if you have installed it.
+internationalized domain names inside @samp{From}, @samp{To} and
+@samp{Cc} headers. This requires
+@uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this
+variable is only enabled if you have installed it.
@end table
* 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
The default function, @code{message-send-mail-with-sendmail}, pipes
your article to the @code{sendmail} binary for further queuing and
sending. When your local system is not configured for sending mail
-using @code{sendmail}, and you have access to a remote @sc{smtp}
+using @code{sendmail}, and you have access to a remote @acronym{SMTP}
server, you can set @code{message-send-mail-function} to
@code{smtpmail-send-it} and make sure to setup the @code{smtpmail}
package correctly. An example:
smtpmail-default-smtp-server "YOUR SMTP HOST")
@end lisp
-To the thing similar to this, there is @code{message-smtpmail-send-it}.
-It is useful if your ISP requires the POP-before-SMTP authentication.
-See the documentation for the function @code{mail-source-touch-pop}.
+To the thing similar to this, there is
+@code{message-smtpmail-send-it}. It is useful if your ISP requires
+the @acronym{POP}-before-@acronym{SMTP} authentication. See the
+documentation for the function @code{mail-source-touch-pop}.
Other possible choices for @code{message-send-mail-function} includes
@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
@cindex mailing lists
If your news server offers groups that are really mailing lists
-gatewayed to the @sc{nntp} server, you can read those groups without
+gatewayed to the @acronym{NNTP} server, you can read those groups without
problems, but you can't post/followup to them without some difficulty.
One solution is to add a @code{to-address} to the group parameters
(@pxref{Group Parameters}). An easier thing to do is set the
@code{emacs-gnus-config} (same as @code{emacs-gnus} plus system
configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus
system type) or a custom string. If you set it to a string, be sure to
-use a valid format, see RFC 2616."
+use a valid format, see RFC 2616.
@end table
(organization "People's Front Against MWM"))
("^rec.humor"
(signature my-funny-signature-randomizer))
- ((equal (system-name) "gnarly") ;; A form
+ ((equal (system-name) "gnarly") ;; @r{A form}
(signature my-quote-randomizer))
- (message-news-p ;; A function symbol
+ (message-news-p ;; @r{A function symbol}
(signature my-news-signature))
- (window-system ;; A value symbol
+ (window-system ;; @r{A value symbol}
("X-Window-System" (format "%s" window-system)))
- ;; If I'm replying to Larsi, set the Organization header.
+ ;; @r{If I'm replying to Larsi, set the Organization header.}
((header "from" "larsi.*org")
(Organization "Somewhere, Inc."))
- ((posting-from-work-p) ;; A user defined function
+ ((posting-from-work-p) ;; @r{A user defined function}
(signature-file "~/.work-signature")
(address "user@@bar.foo")
(body "You are fired.\n\nSincerely, your boss.")
@cindex using s/mime
@cindex using smime
-Gnus can digitally sign and encrypt your messages, using vanilla PGP
-format or @sc{pgp/mime} or @sc{s/mime}. For decoding such messages,
-see the @code{mm-verify-option} and @code{mm-decrypt-option} options
-(@pxref{Security}).
+Gnus can digitally sign and encrypt your messages, using vanilla
+@acronym{PGP} format or @acronym{PGP/MIME} or @acronym{S/MIME}. For
+decoding such messages, see the @code{mm-verify-option} and
+@code{mm-decrypt-option} options (@pxref{Security}).
@vindex gnus-message-replysign
@vindex gnus-message-replyencrypt
@code{gnus-message-replysignencrypted} (on by default) will sign
automatically encrypted messages.
-Instructing MML to perform security operations on a @sc{mime} part is
+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.
@kindex C-c C-m s s
@findex mml-secure-message-sign-smime
-Digitally sign current message using @sc{s/mime}.
+Digitally sign current message using @acronym{S/MIME}.
@item C-c C-m s o
@kindex C-c C-m s o
@findex mml-secure-message-sign-pgp
-Digitally sign current message using PGP.
+Digitally sign current message using @acronym{PGP}.
@item C-c C-m s p
@kindex C-c C-m s p
@findex mml-secure-message-sign-pgp
-Digitally sign current message using @sc{pgp/mime}.
+Digitally sign current message using @acronym{PGP/MIME}.
@item C-c C-m c s
@kindex C-c C-m c s
@findex mml-secure-message-encrypt-smime
-Digitally encrypt current message using @sc{s/mime}.
+Digitally encrypt current message using @acronym{S/MIME}.
@item C-c C-m c o
@kindex C-c C-m c o
@findex mml-secure-message-encrypt-pgp
-Digitally encrypt current message using PGP.
+Digitally encrypt current message using @acronym{PGP}.
@item C-c C-m c p
@kindex C-c C-m c p
@findex mml-secure-message-encrypt-pgpmime
-Digitally encrypt current message using @sc{pgp/mime}.
+Digitally encrypt current message using @acronym{PGP/MIME}.
@item C-c C-m C-n
@kindex C-c C-m C-n
A @dfn{foreign group} is a group not read by the usual (or
default) means. It could be, for instance, a group from a different
-@sc{nntp} server, it could be a virtual group, or it could be your own
+@acronym{NNTP} server, it could be a virtual group, or it could be your own
personal mail group.
A foreign group (or any group, really) is specified by a @dfn{name} and
The @dfn{name} of the group is the name the back end will recognize the
group as.
-For instance, the group @samp{soc.motss} on the @sc{nntp} server
+For instance, the group @samp{soc.motss} on the @acronym{NNTP} server
@samp{some.where.edu} will have the name @samp{soc.motss} and select
method @code{(nntp "some.where.edu")}. Gnus will call this group
@samp{nntp+some.where.edu:soc.motss}, even though the @code{nntp}
* Getting News:: Reading USENET news with Gnus.
* Getting Mail:: Reading your personal mail with Gnus.
* Browsing the Web:: Getting messages from a plethora of Web sources.
-* IMAP:: Using Gnus as a @sc{imap} client.
+* IMAP:: Using Gnus as a @acronym{IMAP} client.
* Other Sources:: Reading directories, files, SOUP packets.
* Combined Groups:: Combining groups into one group.
* Gnus Unplugged:: Reading news and mail offline.
back end represents a virtual server.
For instance, the @code{nntp} back end may be used to connect to several
-different actual @sc{nntp} servers, or, perhaps, to many different ports
-on the same actual @sc{nntp} server. You tell Gnus which back end to
+different actual @acronym{NNTP} servers, or, perhaps, to many different ports
+on the same actual @acronym{NNTP} server. You tell Gnus which back end to
use, and what parameters to set by specifying a @dfn{select method}.
These select method specifications can sometimes become quite
complicated---say, for instance, that you want to read from the
-@sc{nntp} server @samp{news.funet.fi} on port number 13, which
-hangs if queried for @sc{nov} headers and has a buggy select. Ahem.
+@acronym{NNTP} server @samp{news.funet.fi} on port number 13, which
+hangs if queried for @acronym{NOV} headers and has a buggy select. Ahem.
Anyway, if you had to specify that for each group that used this
server, that would be too much work, so Gnus offers a way of naming
select methods, which is what you do in the server buffer.
@cindex proxy
@cindex firewall
-If you are behind a firewall and only have access to the @sc{nntp}
+If you are behind a firewall and only have access to the @acronym{NNTP}
server from the firewall machine, you can instruct Gnus to @code{rlogin}
-on the firewall machine and telnet from there to the @sc{nntp} server.
+on the firewall machine and telnet from there to the @acronym{NNTP} server.
Doing this can be rather fiddly, but your virtual server definition
should probably look something like this:
@node Server Variables
@subsection Server Variables
+@cindex server variables
+@cindex server parameters
One sticky point when defining variables (both on back ends and in Emacs
in general) is that some variables are typically initialized from other
(nnml-newsgroups-file "~/my-mail/newsgroups"))
@end lisp
+Server variables are often called @dfn{server parameters}.
@node Servers and Methods
@subsection Servers and Methods
@cindex news back ends
A newsreader is normally used for reading news. Gnus currently provides
-only two methods of getting news---it can read from an @sc{nntp} server,
+only two methods of getting news---it can read from an @acronym{NNTP} server,
or it can read from a local spool.
@menu
-* NNTP:: Reading news from an @sc{nntp} server.
+* NNTP:: Reading news from an @acronym{NNTP} server.
* News Spool:: Reading news from the local spool.
@end menu
@subsection NNTP
@cindex nntp
-Subscribing to a foreign group from an @sc{nntp} server is rather easy.
-You just specify @code{nntp} as method and the address of the @sc{nntp}
+Subscribing to a foreign group from an @acronym{NNTP} server is rather easy.
+You just specify @code{nntp} as method and the address of the @acronym{NNTP}
server as the, uhm, address.
-If the @sc{nntp} server is located at a non-standard port, setting the
+If the @acronym{NNTP} server is located at a non-standard port, setting the
third element of the select method to this port number should allow you
to connect to the right port. You'll have to edit the group info for
that (@pxref{Foreign Groups}).
@findex nntp-send-authinfo
@findex nntp-send-mode-reader
is run after a connection has been made. It can be used to send
-commands to the @sc{nntp} server after it has been contacted. By
+commands to the @acronym{NNTP} server after it has been contacted. By
default it sends the command @code{MODE READER} to the server with the
@code{nntp-send-mode-reader} function. This function should always be
present in this hook.
@vindex nntp-authinfo-function
@findex nntp-send-authinfo
@vindex nntp-authinfo-file
-This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
+This function will be used to send @samp{AUTHINFO} to the @acronym{NNTP}
server. The default function is @code{nntp-send-authinfo}, which looks
through your @file{~/.authinfo} (or whatever you've set the
@code{nntp-authinfo-file} variable to) for applicable entries. If none
@item nntp-maximum-request
@vindex nntp-maximum-request
-If the @sc{nntp} server doesn't support @sc{nov} headers, this back end
+If the @acronym{NNTP} server doesn't support @acronym{NOV} headers, this back end
will collect headers by sending a series of @code{head} commands. To
speed things up, the back end sends lots of these commands without
waiting for reply, and then reads all the replies. This is controlled
@item nntp-connection-timeout
@vindex nntp-connection-timeout
If you have lots of foreign @code{nntp} groups that you connect to
-regularly, you're sure to have problems with @sc{nntp} servers not
+regularly, you're sure to have problems with @acronym{NNTP} servers not
responding properly, or being too loaded to reply within reasonable
time. This is can lead to awkward problems, which can be helped
somewhat by setting @code{nntp-connection-timeout}. This is an integer
@c @cindex dynamic IP addresses
@c If you're running Gnus on a machine that has a dynamically assigned
@c address, Gnus may become confused. If the address of your machine
-@c changes after connecting to the @sc{nntp} server, Gnus will simply sit
+@c changes after connecting to the @acronym{NNTP} server, Gnus will simply sit
@c waiting forever for replies from the server. To help with this
@c unfortunate problem, you can set this command to a number. Gnus will
@c then, if it sits waiting for a reply from the server longer than that
@item nntp-server-hook
@vindex nntp-server-hook
-This hook is run as the last step when connecting to an @sc{nntp}
+This hook is run as the last step when connecting to an @acronym{NNTP}
server.
@item nntp-buggy-select
@item nntp-nov-is-evil
@vindex nntp-nov-is-evil
-If the @sc{nntp} server does not support @sc{nov}, you could set this
-variable to @code{t}, but @code{nntp} usually checks automatically whether @sc{nov}
+If the @acronym{NNTP} server does not support @acronym{NOV}, you could set this
+variable to @code{t}, but @code{nntp} usually checks automatically whether @acronym{NOV}
can be used.
@item nntp-xover-commands
@vindex nntp-xover-commands
-@cindex nov
+@cindex @acronym{NOV}
@cindex XOVER
-List of strings used as commands to fetch @sc{nov} lines from a
+List of strings used as commands to fetch @acronym{NOV} lines from a
server. The default value of this variable is @code{("XOVER"
"XOVERVIEW")}.
@item nntp-nov-gap
@vindex nntp-nov-gap
-@code{nntp} normally sends just one big request for @sc{nov} lines to
+@code{nntp} normally sends just one big request for @acronym{NOV} lines to
the server. The server responds with one huge list of lines. However,
if you have read articles 2-5000 in the group, and only want to read
-article 1 and 5001, that means that @code{nntp} will fetch 4999 @sc{nov}
+article 1 and 5001, that means that @code{nntp} will fetch 4999 @acronym{NOV}
lines that you will not need. This variable says how
big a gap between two consecutive articles is allowed to be before the
@code{XOVER} request is split into several request. Note that if your
@item nntp-prepare-server-hook
@vindex nntp-prepare-server-hook
-A hook run before attempting to connect to an @sc{nntp} server.
+A hook run before attempting to connect to an @acronym{NNTP} server.
@item nntp-warn-about-losing-connection
@vindex nntp-warn-about-losing-connection
@item nntp-record-commands
@vindex nntp-record-commands
If non-@code{nil}, @code{nntp} will log all commands it sends to the
-@sc{nntp} server (along with a timestamp) in the @samp{*nntp-log*}
-buffer. This is useful if you are debugging a Gnus/@sc{nntp} connection
+@acronym{NNTP} server (along with a timestamp) in the @samp{*nntp-log*}
+buffer. This is useful if you are debugging a Gnus/@acronym{NNTP} connection
that doesn't seem to work.
@item nntp-open-connection-function
@cindex direct connection functions
These functions are called direct because they open a direct connection
-between your machine and the @sc{nntp} server. The behavior of these
+between your machine and the @acronym{NNTP} server. The behavior of these
functions is also affected by commonly understood variables
(@pxref{Common Variables}).
@findex nntp-open-tls-stream
@item nntp-open-tls-stream
Opens a connection to a server over a @dfn{secure} channel. To use
-this you must have GNUTLS installed (see
-@uref{http://www.gnu.org/software/gnutls/}). You then define a server
-as follows:
+this you must have @uref{http://www.gnu.org/software/gnutls/, GNUTLS}
+installed. You then define a server as follows:
@lisp
-;; "nntps" is port 563 and is predefined in our /etc/services
-;; however, gnutls-cli -p doesn't like named ports.
+;; @r{"nntps" is port 563 and is predefined in our @file{/etc/services}}
+;; @r{however, @samp{gnutls-cli -p} doesn't like named ports.}
;;
(nntp "snews.bar.com"
(nntp-open-connection-function nntp-open-tls-stream)
@findex nntp-open-ssl-stream
@item nntp-open-ssl-stream
-Opens a connection to a server over a @dfn{secure} channel. To use this
-you must have OpenSSL (@uref{http://www.openssl.org}) or SSLeay
-installed (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}. You then
-define a server as follows:
+Opens a connection to a server over a @dfn{secure} channel. To use
+this you must have @uref{http://www.openssl.org, OpenSSL} or
+@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL, SSLeay} installed. You
+then define a server as follows:
@lisp
-;; "snews" is port 563 and is predefined in our /etc/services
-;; however, openssl s_client -port doesn't like named ports.
+;; @r{"snews" is port 563 and is predefined in our @file{/etc/services}}
+;; @r{however, @samp{openssl s_client -port} doesn't like named ports.}
;;
(nntp "snews.bar.com"
(nntp-open-connection-function nntp-open-ssl-stream)
@findex nntp-open-telnet-stream
@item nntp-open-telnet-stream
-Opens a connection to an @sc{nntp} server by simply @samp{telnet}'ing
+Opens a connection to an @acronym{NNTP} server by simply @samp{telnet}'ing
it. You might wonder why this function exists, since we have the
default @code{nntp-open-network-stream} which would do the job. (One
of) the reason(s) is that if you are behind a firewall but have direct
@cindex indirect connection functions
These functions are called indirect because they connect to an
-intermediate host before actually connecting to the @sc{nntp} server.
+intermediate host before actually connecting to the @acronym{NNTP} server.
All of these functions and related variables are also said to belong to
the ``via'' family of connection: they're all prefixed with ``via'' to make
things cleaner. The behavior of these functions is also affected by
@item nntp-open-via-rlogin-and-telnet
@findex nntp-open-via-rlogin-and-telnet
Does an @samp{rlogin} on a remote system, and then does a @samp{telnet}
-to the real @sc{nntp} server from there. This is useful for instance if
+to the real @acronym{NNTP} server from there. This is useful for instance if
you need to connect to a firewall machine first.
@code{nntp-open-via-rlogin-and-telnet}-specific variables:
@vindex nntp-via-envuser
If non-@code{nil}, the intermediate @code{telnet} session (client and
server both) will support the @code{ENVIRON} option and not prompt for
-login name. This works for Solaris @code{telnet}, for instance.
+login name. This works for Solaris @code{telnet}, for instance.
@item nntp-via-shell-prompt
@vindex nntp-via-shell-prompt
@subsubsection Common Variables
The following variables affect the behavior of all, or several of the
-pre-made connection functions. When not specified, all functions are
+pre-made connection functions. When not specified, all functions are
affected.
@table @code
@item nntp-address
@vindex nntp-address
-The address of the @sc{nntp} server.
+The address of the @acronym{NNTP} server.
@item nntp-port-number
@vindex nntp-port-number
-Port number to connect to the @sc{nntp} server. The default is
-@samp{nntp}. If you use @sc{nntp} over @sc{tls}/@sc{ssl}, you may
-want to use integer ports rather than named ports (i.e, use @samp{563}
-instead of @samp{snews} or @samp{nntps}), because external TLS/SSL
-tools may not work with named ports.
+Port number to connect to the @acronym{NNTP} server. The default is
+@samp{nntp}. If you use @acronym{NNTP} over
+@acronym{tls}/@acronym{ssl}, you may want to use integer ports rather
+than named ports (i.e, use @samp{563} instead of @samp{snews} or
+@samp{nntps}), because external @acronym{TLS}/@acronym{SSL} tools may
+not work with named ports.
@item nntp-end-of-line
@vindex nntp-end-of-line
-String to use as end-of-line marker when talking to the @sc{nntp}
+String to use as end-of-line marker when talking to the @acronym{NNTP}
server. This is @samp{\r\n} by default, but should be @samp{\n} when
using a non native connection function.
@item nntp-telnet-command
@vindex nntp-telnet-command
-Command to use when connecting to the @sc{nntp} server through
-@samp{telnet}. This is NOT for an intermediate host. This is just for
-the real @sc{nntp} server. The default is @samp{telnet}.
+Command to use when connecting to the @acronym{NNTP} server through
+@samp{telnet}. This is @emph{not} for an intermediate host. This is
+just for the real @acronym{NNTP} server. The default is
+@samp{telnet}.
@item nntp-telnet-switches
@vindex nntp-telnet-switches
@item nnspool-nov-directory
@vindex nnspool-nov-directory
-Where @code{nnspool} will look for @sc{nov} files. This is normally
+Where @code{nnspool} will look for @acronym{NOV} files. This is normally@*
@file{/usr/spool/news/over.view/}.
@item nnspool-lib-dir
@item nnspool-nov-is-evil
@vindex nnspool-nov-is-evil
-If non-@code{nil}, @code{nnspool} won't try to use any @sc{nov} files
+If non-@code{nil}, @code{nnspool} won't try to use any @acronym{NOV} files
that it finds.
@item nnspool-sift-nov-with-sed
@vindex nnspool-sift-nov-with-sed
@cindex sed
If non-@code{nil}, which is the default, use @code{sed} to get the
-relevant portion from the overview file. If nil, @code{nnspool} will
-load the entire file into a buffer and process it there.
+relevant portion from the overview file. If @code{nil},
+@code{nnspool} will load the entire file into a buffer and process it
+there.
@end table
* Group Mail Splitting:: Use group customize to drive mail splitting.
* Incorporating Old Mail:: What about the old mail you have?
* Expiring Mail:: Getting rid of unwanted mail.
-* Washing Mail:: Removing gruft from the mail you get.
+* Washing Mail:: Removing cruft from the mail you get.
* Duplicates:: Dealing with duplicated mail.
* Not Reading Mail:: Using mail back ends for reading other files.
* Choosing a Mail Back End:: Gnus can read a variety of mail formats.
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
they want to treat a message.
Many people subscribe to several mailing lists. These are transported
-via @sc{smtp}, and are therefore mail. But we might go for weeks without
+via @acronym{SMTP}, and are therefore mail. But we might go for weeks without
answering, or even reading these messages very carefully. We may not
need to save them because if we should need to read one again, they are
archived somewhere else.
Some people have local news groups which have only a handful of readers.
-These are transported via @sc{nntp}, and are therefore news. But we may need
+These are transported via @acronym{NNTP}, and are therefore news. But we may need
to read and answer a large fraction of the messages very carefully in
order to do our work. And there may not be an archive, so we may need
to save the interesting messages the same way we would personal mail.
@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
variable is @code{add-name-to-file} by default.)
@kindex M-x nnmail-split-history
-@kindex nnmail-split-history
+@findex nnmail-split-history
If you wish to see where the previous mail split put the messages, you
can use the @kbd{M-x nnmail-split-history} command. If you wish to see
where re-spooling messages would put the messages, you can use
@vindex nnmail-mail-splitting-charset
@vindex nnmail-mail-splitting-decodes
-By default the splitting codes @sc{mime} decodes headers so you can match
-on non-ASCII strings. The @code{nnmail-mail-splitting-charset}
-variable specifies the default charset for decoding. The behaviour
-can be turned off completely by binding
-@code{nnmail-mail-splitting-decodes} to nil, which is useful if you
-want to match articles based on the raw header data.
+By default the splitting codes @acronym{MIME} decodes headers so you
+can match on non-@acronym{ASCII} strings. The
+@code{nnmail-mail-splitting-charset} variable specifies the default
+charset for decoding. The behaviour can be turned off completely by
+binding @code{nnmail-mail-splitting-decodes} to @code{nil}, which is
+useful if you want to match articles based on the raw header data.
@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 @emph{not} happen by default. You can set the variable
-@code{nnmail-resplit-incoming} to a non-nil value to make splitting
-happen even in this case. (This variable has no effect on other kinds
-of entries.)
+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
+@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
+other kinds of entries.)
Gnus gives you all the opportunity you could possibly want for shooting
yourself in the foot. Let's say you create a group that will contain
@node Mail Sources
@subsection Mail Sources
-Mail can be gotten from many different sources---the mail spool, from a
-POP mail server, from a procmail directory, or from a maildir, for
-instance.
+Mail can be gotten from many different sources---the mail spool, from
+a @acronym{POP} mail server, from a procmail directory, or from a
+maildir, for instance.
@menu
* Mail Source Specifiers:: How to specify what a mail source is.
@table @code
@item :path
-The file name. Defaults to the value of the @code{MAIL}
+The file name. Defaults to the value of the @env{MAIL}
environment variable or the value of @code{rmail-spool-directory}
(usually something like @file{/usr/mail/spool/user-name}).
(file)
@end lisp
-If the mail spool file is not located on the local machine, it's best to
-use POP or @sc{imap} or the like to fetch the mail. You can not use ange-ftp
-file names here---it has no way to lock the mail spool while moving the
-mail.
+If the mail spool file is not located on the local machine, it's best
+to use @acronym{POP} or @acronym{IMAP} or the like to fetch the mail.
+You can not use ange-ftp file names here---it has no way to lock the
+mail spool while moving the mail.
If it's impossible to set up a proper server, you can use ssh instead.
@item directory
@vindex nnmail-scan-directory-mail-source-once
-Get mail from several files in a directory. This is typically used when
-you have procmail split the incoming mail into several files. That is,
-there is a one-to-one correspondence between files in that directory and
-groups, so that mail from the file @file{foo.bar.spool} will be put in
-the group @code{foo.bar}. (You can change the suffix to be used instead
-of @code{.spool}.) Setting
-@code{nnmail-scan-directory-mail-source-once} to non-nil forces Gnus to
-scan the mail source only once. This is particularly useful if you want
-to scan mail groups at a specified level.
+Get mail from several files in a directory. This is typically used
+when you have procmail split the incoming mail into several files.
+That is, there is a one-to-one correspondence between files in that
+directory and groups, so that mail from the file @file{foo.bar.spool}
+will be put in the group @code{foo.bar}. (You can change the suffix
+to be used instead of @code{.spool}.) Setting
+@code{nnmail-scan-directory-mail-source-once} to non-@code{nil} forces
+Gnus to scan the mail source only once. This is particularly useful
+if you want to scan mail groups at a specified level.
@vindex nnmail-resplit-incoming
There is also the variable @code{nnmail-resplit-incoming}, if you set
-that to a non-nil value, then the normal splitting process is applied
-to all the files from the directory, @ref{Splitting Mail}.
+that to a non-@code{nil} value, then the normal splitting process is
+applied to all the files from the directory, @ref{Splitting Mail}.
Keywords:
@end lisp
@item pop
-Get mail from a POP server.
+Get mail from a @acronym{POP} server.
Keywords:
@table @code
@item :server
-The name of the POP server. The default is taken from the
-@code{MAILHOST} environment variable.
+The name of the @acronym{POP} server. The default is taken from the
+@env{MAILHOST} environment variable.
@item :port
-The port number of the POP server. This can be a number (eg,
+The port number of the @acronym{POP} server. This can be a number (eg,
@samp{:port 1234}) or a string (eg, @samp{:port "pop3"}). If it is a
string, it should be a service name as listed in @file{/etc/services} on
Unix systems. The default is @samp{"pop3"}. On some systems you might
need to specify it as @samp{"pop-3"} instead.
@item :user
-The user name to give to the POP server. The default is the login
+The user name to give to the @acronym{POP} server. The default is the login
name.
@item :password
-The password to give to the POP server. If not specified, the user is
-prompted.
+The password to give to the @acronym{POP} server. If not specified,
+the user is prompted.
@item :program
-The program to use to fetch mail from the POP server. This should be
-a @code{format}-like string. Here's an example:
+The program to use to fetch mail from the @acronym{POP} server. This
+should be a @code{format}-like string. Here's an example:
@example
fetchmail %u@@%s -P %p %t
the @code{:program} keyword. This can also be a function to be run.
@item :function
-The function to use to fetch mail from the POP server. The function is
-called with one parameter---the name of the file where the mail should
-be moved to.
+The function to use to fetch mail from the @acronym{POP} server. The
+function is called with one parameter---the name of the file where the
+mail should be moved to.
@item :authentication
This can be either the symbol @code{password} or the symbol @code{apop}
If the @code{:program} and @code{:function} keywords aren't specified,
@code{pop3-movemail} will be used.
-Here are some examples. Fetch from the default POP server, using the
-default user name, and default fetcher:
+Here are some examples. Fetch from the default @acronym{POP} server,
+using the default user name, and default fetcher:
@lisp
(pop)
@table @code
@item :path
The name of the directory where the mails are stored. The default is
-taken from the @code{MAILDIR} environment variable or
+taken from the @env{MAILDIR} environment variable or
@file{~/Maildir/}.
@item :subdirs
The subdirectories of the Maildir. The default is
@end lisp
@item imap
-Get mail from a @sc{imap} server. If you don't want to use @sc{imap}
-as intended, as a network mail reading protocol (ie with nnimap), for
-some reason or other, Gnus let you treat it similar to a POP server
-and fetches articles from a given @sc{imap} mailbox. @xref{IMAP}, for
-more information.
+Get mail from a @acronym{IMAP} server. If you don't want to use
+@acronym{IMAP} as intended, as a network mail reading protocol (ie
+with nnimap), for some reason or other, Gnus let you treat it similar
+to a @acronym{POP} server and fetches articles from a given
+@acronym{IMAP} mailbox. @xref{IMAP}, for more information.
-Note that for the Kerberos, GSSAPI, TLS/SSL and STARTTLS support you
+Note that for the Kerberos, GSSAPI, @acronym{TLS}/@acronym{SSL} and STARTTLS support you
may need external programs and libraries, @xref{IMAP}.
Keywords:
@table @code
@item :server
-The name of the @sc{imap} server. The default is taken from the
-@code{MAILHOST} environment variable.
+The name of the @acronym{IMAP} server. The default is taken from the
+@env{MAILHOST} environment variable.
@item :port
-The port number of the @sc{imap} server. The default is @samp{143}, or
-@samp{993} for TLS/SSL connections.
+The port number of the @acronym{IMAP} server. The default is @samp{143}, or
+@samp{993} for @acronym{TLS}/@acronym{SSL} connections.
@item :user
-The user name to give to the @sc{imap} server. The default is the login
+The user name to give to the @acronym{IMAP} server. The default is the login
name.
@item :password
-The password to give to the @sc{imap} server. If not specified, the user is
+The password to give to the @acronym{IMAP} server. If not specified, the user is
prompted.
@item :stream
@item :predicate
The predicate used to find articles to fetch. The default, @samp{UNSEEN
UNDELETED}, is probably the best choice for most people, but if you
-sometimes peek in your mailbox with a @sc{imap} client and mark some
+sometimes peek in your mailbox with a @acronym{IMAP} client and mark some
articles as read (or; SEEN) you might want to set this to @samp{1:*}.
Then all articles in the mailbox is fetched, no matter what. For a
complete list of predicates, see RFC 2060 section 6.4.4.
but more flags are defined in RFC 2060 section 2.3.2.
@item :dontexpunge
-If non-nil, don't remove all articles marked as deleted in the mailbox
-after finishing the fetch.
+If non-@code{nil}, don't remove all articles marked as deleted in the
+mailbox after finishing the fetch.
@end table
-An example @sc{imap} mail source:
+An example @acronym{IMAP} mail source:
@lisp
(imap :server "mail.mycorp.com"
@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}.
+@uref{mail.yahoo.com}.
-NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
+NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
required for url "4.0pre.46".
WARNING: Mails may be lost. NO WARRANTY.
prompted.
@item :dontexpunge
-If non-nil, only fetch unread articles and don't move them to trash
-folder after finishing the fetch.
+If non-@code{nil}, only fetch unread articles and don't move them to
+trash folder after finishing the fetch.
@end table
@table @code
@item :plugged
-If non-nil, fetch the mail even when Gnus is unplugged. If you use
-directory source to get mail, you can specify it as in this example:
+If non-@code{nil}, fetch the mail even when Gnus is unplugged. If you
+use directory source to get mail, you can specify it as in this
+example:
@lisp
(setq mail-sources
@table @code
@item mail-source-crash-box
@vindex mail-source-crash-box
-File where mail will be stored while processing it. The default is
+File where mail will be stored while processing it. The default is@*
@file{~/.emacs-mail-crash-box}.
@item mail-source-delete-incoming
If non-@code{nil}, delete incoming files after handling them. If
@code{t}, delete the files immediately, if @code{nil}, never delete any
files. If a positive number, delete files older than number of days
-(This will only happen, when reveiving new mail). You may also set
+(This will only happen, when receiving new mail). You may also set
@code{mail-source-delete-incoming} to @code{nil} and call
@code{mail-source-delete-old-incoming} from a hook or interactively.
@item mail-source-delete-old-incoming-confirm
@vindex mail-source-delete-old-incoming-confirm
-If @code{non-nil}, ask for for confirmation before deleting old incoming
+If non-@code{nil}, ask for for confirmation before deleting old incoming
files. This variable only applies when
@code{mail-source-delete-incoming} is a positive number.
@item mail-source-movemail-program
@vindex mail-source-movemail-program
-If non-nil, name of program for fetching new mail. If nil,
-@code{movemail} in @var{exec-directory}.
+If non-@code{nil}, name of program for fetching new mail. If
+@code{nil}, @code{movemail} in @var{exec-directory}.
@end table
@code{nil}, the mail back ends will never attempt to fetch mail by
themselves.
-If you want to fetch mail both from your local spool as well as a POP
-mail server, you'd say something like:
+If you want to fetch mail both from your local spool as well as a
+@acronym{POP} mail server, you'd say something like:
@lisp
(setq mail-sources
@vindex nnmail-split-hook
@item nnmail-split-hook
@findex gnus-article-decode-encoded-words
-@findex RFC 1522 decoding
-@findex RFC 2047 decoding
+@cindex RFC 1522 decoding
+@cindex RFC 2047 decoding
Hook run in the buffer where the mail headers of each message is kept
just before the splitting based on these headers is done. The hook is
free to modify the buffer contents in any way it sees fit---the buffer
Let's look at an example value of this variable first:
@lisp
-;; Messages from the mailer daemon are not crossposted to any of
-;; the ordinary groups. Warnings are put in a separate group
-;; from real errors.
+;; @r{Messages from the mailer daemon are not crossposted to any of}
+;; @r{the ordinary groups. Warnings are put in a separate group}
+;; @r{from real errors.}
(| ("from" mail (| ("subject" "warn.*" "mail.warning")
"mail.misc"))
- ;; Non-error messages are crossposted to all relevant
- ;; groups, but we don't crosspost between the group for the
- ;; (ding) list and the group for other (ding) related mail.
+ ;; @r{Non-error messages are crossposted to all relevant}
+ ;; @r{groups, but we don't crosspost between the group for the}
+ ;; @r{(ding) list and the group for other (ding) related mail.}
(& (| (any "ding@@ifi\\.uio\\.no" "ding.list")
("subject" "ding" "ding.misc"))
- ;; Other mailing lists...
+ ;; @r{Other mailing lists@dots{}}
(any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
(any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
- ;; Both lists below have the same suffix, so prevent
- ;; cross-posting to mkpkg.list of messages posted only to
- ;; the bugs- list, but allow cross-posting when the
- ;; message was really cross-posted.
+ ;; @r{Both lists below have the same suffix, so prevent}
+ ;; @r{cross-posting to mkpkg.list of messages posted only to}
+ ;; @r{the bugs- list, but allow cross-posting when the}
+ ;; @r{message was really cross-posted.}
(any "bugs-mypackage@@somewhere" "mypkg.bugs")
(any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list")
- ;; People...
+ ;; @r{People@dots{}}
(any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
- ;; Unmatched mail goes to the catch all group.
+ ;; @r{Unmatched mail goes to the catch all group.}
"misc.misc")
@end lisp
@samp{\<} and @samp{\>} pairs.
@vindex nnmail-split-abbrev-alist
-@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} contains the associated
-value.
+@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}
+contains the associated value. Predefined entries in
+@code{nnmail-split-abbrev-alist} include:
+
+@table @code
+@item from
+Matches the @samp{From}, @samp{Sender} and @samp{Resent-From} fields.
+@item to
+Matches the @samp{To}, @samp{Cc}, @samp{Apparently-To},
+@samp{Resent-To} and @samp{Resent-Cc} fields.
+@item any
+Is the union of the @code{from} and @code{to} entries.
+@end table
@vindex nnmail-split-fancy-syntax-table
@code{nnmail-split-fancy-syntax-table} is the syntax table in effect
messages into the right group. With this function, you only have to do
it once per thread.
-To use this feature, you have to set @code{nnmail-treat-duplicates} and
-@code{nnmail-cache-accepted-message-ids} to a non-nil value. And then
-you can include @code{nnmail-split-fancy-with-parent} using the colon
-feature, like so:
+To use this feature, you have to set @code{nnmail-treat-duplicates}
+and @code{nnmail-cache-accepted-message-ids} to a non-@code{nil}
+value. And then you can include @code{nnmail-split-fancy-with-parent}
+using the colon feature, like so:
@lisp
-(setq nnmail-treat-duplicates 'warn ; or 'delete
+(setq nnmail-treat-duplicates 'warn ; @r{or @code{delete}}
nnmail-cache-accepted-message-ids t
nnmail-split-fancy
'(| (: nnmail-split-fancy-with-parent)
- ;; other splits go here
+ ;; @r{other splits go here}
))
@end lisp
This feature works as follows: when @code{nnmail-treat-duplicates} is
-non-nil, Gnus records the message id of every message it sees in the
-file specified by the variable @code{nnmail-message-id-cache-file},
-together with the group it is in (the group is omitted for non-mail
-messages). When mail splitting is invoked, the function
-@code{nnmail-split-fancy-with-parent} then looks at the References (and
-In-Reply-To) header of each message to split and searches the file
-specified by @code{nnmail-message-id-cache-file} for the message ids.
-When it has found a parent, it returns the corresponding group name
-unless the group name matches the regexp
-@code{nnmail-split-fancy-with-parent-ignore-groups}. It is recommended
-that you set @code{nnmail-message-id-cache-length} to a somewhat higher
-number than the default so that the message ids are still in the cache.
-(A value of 5000 appears to create a file some 300 kBytes in size.)
+non-@code{nil}, Gnus records the message id of every message it sees
+in the file specified by the variable
+@code{nnmail-message-id-cache-file}, together with the group it is in
+(the group is omitted for non-mail messages). When mail splitting is
+invoked, the function @code{nnmail-split-fancy-with-parent} then looks
+at the References (and In-Reply-To) header of each message to split
+and searches the file specified by @code{nnmail-message-id-cache-file}
+for the message ids. When it has found a parent, it returns the
+corresponding group name unless the group name matches the regexp
+@code{nnmail-split-fancy-with-parent-ignore-groups}. It is
+recommended that you set @code{nnmail-message-id-cache-length} to a
+somewhat higher number than the default so that the message ids are
+still in the cache. (A value of 5000 appears to create a file some
+300 kBytes in size.)
@vindex nnmail-cache-accepted-message-ids
When @code{nnmail-cache-accepted-message-ids} is non-@code{nil}, Gnus
also records the message ids of moved articles, so that the followup
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
splits like this:
@lisp
-(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL)
+(: gnus-group-split-fancy @var{groups} @var{no-crosspost} @var{catch-all})
@end lisp
@var{groups} may be a regular expression or a list of group names whose
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 fallback
+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
empty string in any selected group, no catch-all split will be issued.
you. For example, add to your @file{~/.gnus.el}:
@lisp
-(gnus-group-split-setup AUTO-UPDATE CATCH-ALL)
+(gnus-group-split-setup @var{auto-update} @var{catch-all})
@end lisp
If @var{auto-update} is non-@code{nil}, @code{gnus-group-split-update}
course.
To make Gnus get rid of your unwanted mail, you have to mark the
-articles as @dfn{expirable}. (With the default keybindings, this means
+articles as @dfn{expirable}. (With the default key bindings, this means
that you have to type @kbd{E}.) This does not mean that the articles
will disappear right away, however. In general, a mail article will be
deleted from your system if, 1) it is marked as expirable, AND 2) it is
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
string (which should be the name of the group the message should be
moved to), or a function (which will be called in a buffer narrowed to
the message in question, and with the name of the group being moved
-from as its parameter) which should return a target -- either a group
+from as its parameter) which should return a target---either a group
name or @code{delete}.
Here's an example for specifying a group name:
With this setup, any mail that has @code{IMPORTANT} in its Subject
header and was sent in the year @code{YYYY} and month @code{MMM}, will
-get expired to the group @code{nnfolder:IMPORTANT.YYYY.MMM}. If its
+get expired to the group @code{nnfolder:IMPORTANT.YYYY.MMM}. If its
From or To header contains the string @code{boss}, it will get expired
-to @code{nnfolder:Work}. All other mail will get expired to
+to @code{nnfolder:Work}. All other mail will get expired to
@code{nnfolder:Archive-YYYY}.
@vindex nnmail-keep-last-article
@lisp
(setq nnmail-split-fancy
- '(| ;; Messages duplicates go to a separate group.
- ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
- ;; Message from daemons, postmaster, and the like to another.
- (any mail "mail.misc")
- ;; Other rules.
- [ ... ] ))
+ '(| ;; @r{Messages duplicates go to a separate group.}
+ ("gnus-warning" "duplicat\\(e\\|ion\\) of message" "duplicate")
+ ;; @r{Message from daemons, postmaster, and the like to another.}
+ (any mail "mail.misc")
+ ;; @r{Other rules.}
+ [...] ))
@end lisp
-
+@noindent
Or something like:
@lisp
(setq nnmail-split-methods
'(("duplicates" "^Gnus-Warning:.*duplicate")
- ;; Other rules.
+ ;; @r{Other rules.}
[...]))
@end lisp
@vindex nnmh-get-new-mail
@vindex nnfolder-get-new-mail
This might be too much, if, for instance, you are reading mail quite
-happily with @code{nnml} and just want to peek at some old @sc{rmail}
+happily with @code{nnml} and just want to peek at some old Rmail
file you have stashed away with @code{nnbabyl}. All back ends have
variables called back-end-@code{get-new-mail}. If you want to disable
the @code{nnbabyl} mail reading, you edit the virtual server for the
@menu
* Unix Mail Box:: Using the (quite) standard Un*x mbox.
-* Rmail Babyl:: Emacs programs use the rmail babyl format.
+* Rmail Babyl:: Emacs programs use the Rmail Babyl format.
* Mail Spool:: Store your mail in a private spool?
* MH Spool:: An mhspool-like back end.
* Maildir:: Another one-file-per-message format.
@node Rmail Babyl
@subsubsection Rmail Babyl
@cindex nnbabyl
-@cindex rmail mbox
+@cindex Rmail mbox
@vindex nnbabyl-active-file
@vindex nnbabyl-mbox-file
-The @dfn{nnbabyl} back end will use a babyl mail box (aka. @dfn{rmail
+The @dfn{nnbabyl} back end will use a Babyl mail box (aka. @dfn{Rmail
mbox}) to store mail. @code{nnbabyl} will add extra headers to each
mail article to say which group it belongs in.
@table @code
@item nnbabyl-mbox-file
@vindex nnbabyl-mbox-file
-The name of the rmail mbox file. The default is @file{~/RMAIL}
+The name of the Rmail mbox file. The default is @file{~/RMAIL}
@item nnbabyl-active-file
@vindex nnbabyl-active-file
@node Mail Spool
@subsubsection Mail Spool
@cindex nnml
-@cindex mail @sc{nov} spool
+@cindex mail @acronym{NOV} spool
The @dfn{nnml} spool mail format isn't compatible with any other known
format. It should be used with some caution.
@code{nnml} is probably the slowest back end when it comes to article
splitting. It has to create lots of files, and it also generates
-@sc{nov} databases for the incoming mails. This makes it possibly the
+@acronym{NOV} databases for the incoming mails. This makes it possibly the
fastest back end when it comes to reading mail.
@cindex self contained nnml servers
@item nnml-nov-is-evil
@vindex nnml-nov-is-evil
-If non-@code{nil}, this back end will ignore any @sc{nov} files. The
+If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The
default is @code{nil}.
@item nnml-nov-file-name
@vindex nnml-nov-file-name
-The name of the @sc{nov} files. The default is @file{.overview}.
+The name of the @acronym{NOV} files. The default is @file{.overview}.
@item nnml-prepare-save-mail-hook
@vindex nnml-prepare-save-mail-hook
@end table
@findex nnml-generate-nov-databases
-If your @code{nnml} groups and @sc{nov} files get totally out of whack,
+If your @code{nnml} groups and @acronym{NOV} files get totally out of whack,
you can do a complete update by typing @kbd{M-x
nnml-generate-nov-databases}. This command will trawl through the
entire @code{nnml} hierarchy, looking at each and every article, so it
@cindex mh-e mail spool
@code{nnmh} is just like @code{nnml}, except that is doesn't generate
-@sc{nov} databases and it doesn't keep an active file or marks file.
+@acronym{NOV} databases and it doesn't keep an active file or marks file.
This makes @code{nnmh} a @emph{much} slower back end than @code{nnml},
but it also makes it easier to write procmail scripts for.
maildir.
Maildir format was designed to allow concurrent deliveries and
-reading, without needing locks. With other backends, you would have
+reading, without needing locks. With other back ends, you would have
your mail delivered to a spool of some kind, and then you would
configure Gnus to split mail from that spool into your groups. You
can still do that with nnmaildir, but the more common configuration is
corrupt its data in memory, and @code{SIGKILL} will never corrupt its
data in the filesystem.
-nnmaildir stores article marks and NOV data in each maildir. So you
+nnmaildir stores article marks and @acronym{NOV} data in each maildir. So you
can copy a whole maildir from one Gnus setup to another, and you will
keep your marks.
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.
the path of the directory for this server. The form is @code{eval}ed
only when the server is opened; the resulting string is used until the
server is closed. (If you don't know about forms and @code{eval},
-don't worry - a simple string will work.) This parameter is not
+don't worry---a simple string will work.) This parameter is not
optional; you must specify it. I don't recommend using
@code{"~/Mail"} or a subdirectory of it; several other parts of Gnus
use that directory by default for various things, and may get confused
nnmaildir uses several group parameters. It's safe to ignore all
this; the default behavior for nnmaildir is the same as the default
-behavior for other mail backends: articles are deleted after one week,
+behavior for other mail back ends: articles are deleted after one week,
etc. Except for the expiry parameters, all this functionality is
unique to nnmaildir, so you can ignore it if you're just trying to
-duplicate the behavior you already have with another backend.
+duplicate the behavior you already have with another back end.
If the value of any of these parameters is a vector, the first element
is evaluated as a Lisp form and the result is used, rather than the
original value. If the value is not a vector, the value itself is
evaluated as a Lisp form. (This is why these parameters use names
different from those of other, similar parameters supported by other
-backends: they have different, though similar, meanings.) (For
+back ends: they have different, though similar, meanings.) (For
numbers, strings, @code{nil}, and @code{t}, you can ignore the
@code{eval} business again; for other values, remember to use an extra
quote and wrap the value in a vector when appropriate.)
it will be expired, or the symbol @code{never} to specify that
articles should never be expired. If this parameter is not set,
nnmaildir falls back to the usual
-@code{nnmail-expiry-wait}(@code{-function}) variables (overridable by
+@code{nnmail-expiry-wait}(@code{-function}) variables (overrideable by
the @code{expiry-wait}(@code{-function}) group parameters. If you
wanted a value of 3 days, you could use something like @code{[(* 3 24
60 60)]}; nnmaildir will evaluate the form and use the result. An
article (other than via expiry) may also make an article younger.
@item expire-group
-If this is set to a string (a full Gnus group name, like
-@code{"backend+server.address.string:group.name"}), and if it is not
-the name of the same group that the parameter belongs to, then
-articles will be moved to the specified group during expiry before
-being deleted. @emph{If this is set to an nnmaildir group, the
+If this is set to a string such as a full Gnus group name, like
+@example
+"backend+server.address.string:group.name"
+@end example
+and if it is not the name of the same group that the parameter belongs
+to, then articles will be moved to the specified group during expiry
+before being deleted. @emph{If this is set to an nnmaildir group, the
article will be just as old in the destination group as it was in the
source group.} So be careful with @code{expire-age} in the
destination group. If this is set to the name of the same group that
@file{new/} into @file{cur/}; articles are only found in @file{new/},
not @file{cur/}; articles are never deleted; articles cannot be
edited. @file{new/} is expected to be a symlink to the @file{new/}
-directory of another maildir - e.g., a system-wide mailbox containing
+directory of another maildir---e.g., a system-wide mailbox containing
a mailing list of common interest. Everything in the maildir outside
@file{new/} is @emph{not} treated as read-only, so for a shared
mailbox, you do still need to set up your own maildir (or have write
abandoned if it's not worthwhile.
@item nov-cache-size
-An integer specifying the size of the NOV memory cache. To speed
-things up, nnmaildir keeps NOV data in memory for a limited number of
+An integer specifying the size of the @acronym{NOV} memory cache. To speed
+things up, nnmaildir keeps @acronym{NOV} data in memory for a limited number of
articles in each group. (This is probably not worthwhile, and will
probably be removed in the future.) This parameter's value is noticed
-only the first time a group is seen after the server is opened - i.e.,
-when you first start Gnus, typically. The NOV cache is never resized
+only the first time a group is seen after the server is opened---i.e.,
+when you first start Gnus, typically. The @acronym{NOV} cache is never resized
until the server is closed and reopened. The default is an estimate
of the number of articles that would be displayed in the summary
buffer: a count of articles that are either marked with @code{tick} or
request the article in the summary buffer.
@subsubsection NOV data
-An article identified by @code{uniq} has its NOV data (used to
+An article identified by @code{uniq} has its @acronym{NOV} data (used to
generate lines in the summary buffer) stored in
@code{.nnmaildir/nov/uniq}. There is no
@code{nnmaildir-generate-nov-databases} function. (There isn't much
-need for it - an article's NOV data is updated automatically when the
+need for it---an article's @acronym{NOV} data is updated automatically when the
article or @code{nnmail-extra-headers} has changed.) You can force
-nnmaildir to regenerate the NOV data for a single article simply by
-deleting the corresponding NOV file, but @emph{beware}: this will also
+nnmaildir to regenerate the @acronym{NOV} data for a single article simply by
+deleting the corresponding @acronym{NOV} file, but @emph{beware}: this will also
cause nnmaildir to assign a new article number for this article, which
may cause trouble with @code{seen} marks, the Agent, and the cache.
@item nnfolder-nov-is-evil
@vindex nnfolder-nov-is-evil
-If non-@code{nil}, this back end will ignore any @sc{nov} files. The
+If non-@code{nil}, this back end will ignore any @acronym{NOV} files. The
default is @code{nil}.
@item nnfolder-nov-file-suffix
@vindex nnfolder-nov-file-suffix
-The extension for @sc{nov} files. The default is @file{.nov}.
+The extension for @acronym{NOV} files. The default is @file{.nov}.
@item nnfolder-nov-directory
@vindex nnfolder-nov-directory
-The directory where the @sc{nov} files should be stored. If nil,
-@code{nnfolder-directory} is used.
+The directory where the @acronym{NOV} files should be stored. If
+@code{nil}, @code{nnfolder-directory} is used.
@item nnfolder-marks-is-evil
@vindex nnfolder-marks-is-evil
@item nnfolder-marks-directory
@vindex nnfolder-marks-directory
-The directory where the @sc{marks} files should be stored. If nil,
-@code{nnfolder-directory} is used.
+The directory where the @sc{marks} files should be stored. If
+@code{nil}, @code{nnfolder-directory} is used.
@end table
mail within spitting distance of Gnus.
The same concept exists for Usenet itself: Though access to articles is
-typically done by @sc{nntp} these days, once upon a midnight dreary, everyone
+typically done by @acronym{NNTP} these days, once upon a midnight dreary, everyone
in the world got at Usenet by running a reader on the machine where the
-articles lay (the machine which today we call an @sc{nntp} server), and
+articles lay (the machine which today we call an @acronym{NNTP} server), and
access was by the reader stepping into the articles' directory spool
area directly. One can still select between either the @code{nntp} or
@code{nnspool} back ends, to select between these methods, if one happens
format to which mail was converted, primarily involving creating a
spool-file-like entity with a scheme for inserting Babyl-specific
headers and status bits above the top of each message in the file.
-RMAIL was Emacs' first mail reader, it was written by Richard Stallman,
-and Stallman came out of that TOPS/Babyl environment, so he wrote RMAIL
+Rmail was Emacs' first mail reader, it was written by Richard Stallman,
+and Stallman came out of that TOPS/Babyl environment, so he wrote Rmail
to understand the mail files folks already had in existence. Gnus (and
VM, for that matter) continue to support this format because it's
perceived as having some good qualities in those mailer-specific
-headers/status bits stuff. RMAIL itself still exists as well, of
+headers/status bits stuff. Rmail itself still exists as well, of
course, and is still maintained by Stallman.
Both of the above forms leave your mail in a single file on your
CNews-based news system in (for instance) @file{/var/lib/news/active},
or what is returned via the @samp{NNTP LIST} verb) and also creates
@dfn{overview} files for efficient group entry, as has been defined for
-@sc{nntp} servers for some years now. It is slower in mail-splitting,
+@acronym{NNTP} servers for some years now. It is slower in mail-splitting,
due to the creation of lots of files, updates to the @code{nnml} active
file, and additions to overview files on a per-message basis, but it is
extremely fast on access because of what amounts to the indexing support
The Rand MH mail-reading system has been around UNIX systems for a very
long time; it operates by splitting one's spool file of messages into
-individual files, but with little or no indexing support -- @code{nnmh}
+individual files, but with little or no indexing support---@code{nnmh}
is considered to be semantically equivalent to ``@code{nnml} without
active file or overviews''. This is arguably the worst choice, because
one gets the slowness of individual file creation married to the
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 ReiserFS
-(@uref{http://www.namesys.com/}) or another non-block-structured
+you down or takes up very much space, consider switching to
+@uref{http://www.namesys.com/, ReiserFS} or another non-block-structured
file system.
Since maildirs don't require locking for delivery, the maildirs you use
as groups can also be the maildirs your mail is directly delivered to.
-This means you can skip Gnus's mail splitting if your mail is already
+This means you can skip Gnus' mail splitting if your mail is already
organized into different mailboxes during delivery. A @code{directory}
entry in @code{mail-sources} would have a similar effect, but would
require one set of mailboxes for spooling deliveries (in mbox format,
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.
All the web sources require Emacs/w3 and the url library to work.
The main caveat with all these web sources is that they probably won't
-work for a very long time. Gleaning information from the @sc{html} data
+work for a very long time. Gleaning information from the @acronym{HTML} data
is guesswork at best, and when the layout is altered, the Gnus back end
will fail. If you have reasonably new versions of these back ends,
though, you should be ok.
server, take a recursive copy of the server directory. There is no need
to shut down Gnus, so archiving may be invoked by @code{cron} or
similar. You restore the data by restoring the directory tree, and
-adding a server definition pointing to that directory in Gnus. The
+adding a server definition pointing to that directory in Gnus. The
@ref{Article Backlog}, @ref{Asynchronous Fetching} and other things
might interfere with overwriting data, so you may want to shut down Gnus
before you restore the data.
For @code{nnml} or @code{nnmaildir}, you copy all files in the group's
directory. For @code{nnfolder} you need to copy both the base folder
file itself (@file{FOO}, say), and the marks file (@file{FOO.mrk} in
-this example). Restoring the group is done with @kbd{G m} from the Group
+this example). Restoring the group is done with @kbd{G m} from the Group
buffer. The last step makes Gnus notice the new directory.
@code{nnmaildir} notices the new directory automatically, so @kbd{G m}
is unnecessary in that case.
@item nnweb-type
@vindex nnweb-type
What search engine type is being used. The currently supported types
-are @code{google}, @code{dejanews}, and @code{gmane}. Note that
+are @code{google}, @code{dejanews}, and @code{gmane}. Note that
@code{dejanews} is an alias to @code{google}.
@item nnweb-search
@cindex Slashdot
@cindex nnslashdot
-Slashdot (@uref{http://slashdot.org/}) is a popular news site, with
+@uref{http://slashdot.org/, Slashdot} is a popular news site, with
lively discussion following the news articles. @code{nnslashdot} will
let you read this forum in a convenient manner.
command is the most handy tool (@pxref{Foreign Groups}).
When following up to @code{nnslashdot} comments (or posting new
-comments), some light @sc{html}izations will be performed. In
+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
-the end of each line. Other than that, you can just write @sc{html}
+the end of each line. Other than that, you can just write @acronym{HTML}
directly into the message buffer. Note that Slashdot filters out some
-@sc{html} forms.
+@acronym{HTML} forms.
The following variables can be altered to change its behavior:
@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
+news articles and comments. The default is@*
@samp{http://slashdot.org/search.pl?section=&min=%d}.
@item nnslashdot-comments-url
@cindex nnultimate
@cindex Ultimate Bulletin Board
-The Ultimate Bulletin Board (@uref{http://www.ultimatebb.com/}) is
+@uref{http://www.ultimatebb.com/, The Ultimate Bulletin Board} is
probably the most popular Web bulletin board system used. It has a
quite regular and nice interface, and it's possible to get the
information Gnus needs to keep groups updated.
@table @code
@item nnultimate-directory
@vindex nnultimate-directory
-The directory where @code{nnultimate} stores its files. The default is
+The directory where @code{nnultimate} stores its files. The default is@*
@file{~/News/ultimate/}.
@end table
@findex gnus-group-make-warchive-group
The easiest way to get started with @code{nnwarchive} is to say
something like the following in the group buffer: @kbd{M-x
-gnus-group-make-warchive-group RET an_egroup RET egroups RET
-www.egroups.com RET your@@email.address RET}. (Substitute the
-@sc{an_egroup} with the mailing list you subscribed, the
-@sc{your@@email.address} with your email address.), or to browse the
+gnus-group-make-warchive-group RET @var{an_egroup} RET egroups RET
+www.egroups.com RET @var{your@@email.address} RET}. (Substitute the
+@var{an_egroup} with the mailing list you subscribed, the
+@var{your@@email.address} with your email address.), or to browse the
back end by @kbd{B nnwarchive RET mail-archive RET}.
The following @code{nnwarchive} variables can be altered:
@table @code
@item nnwarchive-directory
@vindex nnwarchive-directory
-The directory where @code{nnwarchive} stores its files. The default is
+The directory where @code{nnwarchive} stores its files. The default is@*
@file{~/News/warchive/}.
@item nnwarchive-login
@end lisp
Put that in your @file{.emacs} file, and hitting links in w3-rendered
-@sc{html} in the Gnus article buffers will use @code{browse-url} to
+@acronym{HTML} in the Gnus article buffers will use @code{browse-url} to
follow the link.
@node IMAP
@section IMAP
@cindex nnimap
-@cindex @sc{imap}
+@cindex @acronym{IMAP}
-@sc{imap} is a network protocol for reading mail (or news, or @dots{}),
-think of it as a modernized @sc{nntp}. Connecting to a @sc{imap}
+@acronym{IMAP} is a network protocol for reading mail (or news, or @dots{}),
+think of it as a modernized @acronym{NNTP}. Connecting to a @acronym{IMAP}
server is much similar to connecting to a news server, you just
specify the network address of the server.
-@sc{imap} has two properties. First, @sc{imap} can do everything that
-POP can, it can hence be viewed as a POP++. Secondly, @sc{imap} is a
-mail storage protocol, similar to @sc{nntp} being a news storage
-protocol -- however, @sc{imap} offers more features than @sc{nntp}
-because news is more or less read-only whereas mail is read-write.
+@acronym{IMAP} has two properties. First, @acronym{IMAP} can do
+everything that @acronym{POP} can, it can hence be viewed as a
+@acronym{POP++}. Secondly, @acronym{IMAP} is a mail storage protocol,
+similar to @acronym{NNTP} being a news storage protocol---however,
+@acronym{IMAP} offers more features than @acronym{NNTP} because news
+is more or less read-only whereas mail is read-write.
-If you want to use @sc{imap} as a POP++, use an imap entry in
-@code{mail-sources}. With this, Gnus will fetch mails from the
-@sc{imap} server and store them on the local disk. This is not the
-usage described in this section--@xref{Mail Sources}.
+If you want to use @acronym{IMAP} as a @acronym{POP++}, use an imap
+entry in @code{mail-sources}. With this, Gnus will fetch mails from
+the @acronym{IMAP} server and store them on the local disk. This is
+not the usage described in this section---@xref{Mail Sources}.
-If you want to use @sc{imap} as a mail storage protocol, use an nnimap
+If you want to use @acronym{IMAP} as a mail storage protocol, use an nnimap
entry in @code{gnus-secondary-select-methods}. With this, Gnus will
-manipulate mails stored on the @sc{imap} server. This is the kind of
+manipulate mails stored on the @acronym{IMAP} server. This is the kind of
usage explained in this section.
-A server configuration in @file{~/.gnus.el} with a few @sc{imap} servers
-might look something like the following. (Note that for TLS/SSL, you
-need external programs and libraries, see below.)
+A server configuration in @file{~/.gnus.el} with a few @acronym{IMAP}
+servers might look something like the following. (Note that for
+@acronym{TLS}/@acronym{SSL}, you need external programs and libraries,
+see below.)
@lisp
(setq gnus-secondary-select-methods
- '((nnimap "simpleserver") ; no special configuration
- ; perhaps a ssh port forwarded server:
+ '((nnimap "simpleserver") ; @r{no special configuration}
+ ; @r{perhaps a ssh port forwarded server:}
(nnimap "dolk"
(nnimap-address "localhost")
(nnimap-server-port 1430))
- ; a UW server running on localhost
+ ; @r{a UW server running on localhost}
(nnimap "barbar"
(nnimap-server-port 143)
(nnimap-address "localhost")
(nnimap-list-pattern ("INBOX" "mail/*")))
- ; anonymous public cyrus server:
+ ; @r{anonymous public cyrus server:}
(nnimap "cyrus.andrew.cmu.edu"
(nnimap-authenticator anonymous)
(nnimap-list-pattern "archive.*")
(nnimap-stream network))
- ; a ssl server on a non-standard port:
+ ; @r{a ssl server on a non-standard port:}
(nnimap "vic20"
(nnimap-address "vic20.somewhere.com")
(nnimap-server-port 9930)
@item nnimap-address
@vindex nnimap-address
-The address of the remote @sc{imap} server. Defaults to the virtual
+The address of the remote @acronym{IMAP} server. Defaults to the virtual
server name if not specified.
@item nnimap-server-port
@vindex nnimap-server-port
-Port on server to contact. Defaults to port 143, or 993 for TLS/SSL.
+Port on server to contact. Defaults to port 143, or 993 for @acronym{TLS}/@acronym{SSL}.
Note that this should be an integer, example server specification:
@vindex nnimap-list-pattern
String or list of strings of mailboxes to limit available groups to.
This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via
-@sc{imap}, you'll probably want to limit the mailboxes to those in
+interested in a few---some servers export your home directory via
+@acronym{IMAP}, you'll probably want to limit the mailboxes to those in
@file{~/Mail/*} then.
The string can also be a cons of REFERENCE and the string as above, what
@vindex nnimap-stream
The type of stream used to connect to your server. By default, nnimap
will detect and automatically use all of the below, with the exception
-of TLS/SSL. (@sc{imap} over TLS/SSL is being replaced by STARTTLS, which
-can be automatically detected, but it's not widely deployed yet.)
+of @acronym{TLS}/@acronym{SSL}. (@acronym{IMAP} over
+@acronym{TLS}/@acronym{SSL} is being replaced by STARTTLS, which can
+be automatically detected, but it's not widely deployed yet.)
Example server specification:
@itemize @bullet
@item
-@dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5). Requires the
+@dfn{gssapi:} Connect with GSSAPI (usually Kerberos 5). Requires the
@samp{gsasl} or @samp{imtest} program.
@item
-@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
+@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
@item
@dfn{starttls:} Connect via the STARTTLS extension (similar to
-TLS/SSL). Requires the external library @samp{starttls.el} and program
+@acronym{TLS}/@acronym{SSL}). Requires the external library @samp{starttls.el} and program
@samp{starttls}.
@item
-@dfn{tls:} Connect through TLS. Requires GNUTLS (the program
+@dfn{tls:} Connect through @acronym{TLS}. Requires GNUTLS (the program
@samp{gnutls-cli}).
@item
-@dfn{ssl:} Connect through SSL. Requires OpenSSL (the program
+@dfn{ssl:} Connect through @acronym{SSL}. Requires OpenSSL (the program
@samp{openssl}) or SSLeay (@samp{s_client}).
@item
-@dfn{shell:} Use a shell command to start @sc{imap} connection.
+@dfn{shell:} Use a shell command to start @acronym{IMAP} connection.
@item
@dfn{network:} Plain, TCP/IP network connection.
@end itemize
1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
to make @code{imap.el} use a pty instead of a pipe when communicating
with @samp{imtest}. You will then suffer from a line length
-restrictions on @sc{imap} commands, which might make Gnus seem to hang
+restrictions on @acronym{IMAP} commands, which might make Gnus seem to hang
indefinitely if you have many articles in a mailbox. The variable
@code{imap-kerberos4-program} contain parameters to pass to the imtest
program.
-For TLS connection, the @code{gnutls-cli} program from GNUTLS is
+For @acronym{TLS} connection, the @code{gnutls-cli} program from GNUTLS is
needed. It is available from
@uref{http://www.gnu.org/software/gnutls/}.
@vindex imap-gssapi-program
This parameter specifies a list of command lines that invoke a GSSAPI
-authenticated IMAP stream in a subshell. They are tried sequentially
-until a connection is made, or the list has been exhausted. By
-default, @samp{gsasl} from GNU SASL, available from
+authenticated @acronym{IMAP} stream in a subshell. They are tried
+sequentially until a connection is made, or the list has been
+exhausted. By default, @samp{gsasl} from GNU SASL, available from
@uref{http://www.gnu.org/software/gsasl/}, and the @samp{imtest}
program from Cyrus IMAPD (see @code{imap-kerberos4-program}), are
tried.
@vindex imap-ssl-program
-For SSL connections, the OpenSSL program is available from
-@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
-and nnimap support it too - although the most recent versions of
+For @acronym{SSL} connections, the OpenSSL program is available from
+@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
+and nnimap support it too---although the most recent versions of
SSLeay, 0.9.x, are known to have serious bugs making it
-useless. Earlier versions, especially 0.8.x, of SSLeay are known to
-work. The variable @code{imap-ssl-program} contain parameters to pass
+useless. Earlier versions, especially 0.8.x, of SSLeay are known to
+work. The variable @code{imap-ssl-program} contain parameters to pass
to OpenSSL/SSLeay.
@vindex imap-shell-program
@vindex imap-shell-host
-For @sc{imap} connections using the @code{shell} stream, the variable
+For @acronym{IMAP} connections using the @code{shell} stream, the variable
@code{imap-shell-program} specify what program to call.
@item nnimap-authenticator
@itemize @bullet
@item
-@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Requires
external program @code{gsasl} or @code{imtest}.
@item
-@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
+@dfn{kerberos4:} Kerberos 4 authentication. Requires external program
@code{imtest}.
@item
-@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Requires
+@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Requires
external library @code{digest-md5.el}.
@item
@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
@item
@dfn{login:} Plain-text username/password via LOGIN.
@item
-@dfn{anonymous:} Login as `anonymous', supplying your email address as password.
+@dfn{anonymous:} Login as ``anonymous'', supplying your email address as password.
@end itemize
@item nnimap-expunge-on-close
-@cindex Expunging
+@cindex expunging
@vindex nnimap-expunge-on-close
-Unlike Parmenides the @sc{imap} designers has decided that things that
-doesn't exist actually does exist. More specifically, @sc{imap} has
+Unlike Parmenides the @acronym{IMAP} designers have decided things that
+don't exist actually do exist. More specifically, @acronym{IMAP} has
this concept of marking articles @code{Deleted} which doesn't actually
delete them, and this (marking them @code{Deleted}, that is) is what
-nnimap does when you delete a article in Gnus (with @kbd{B DEL} or
+nnimap does when you delete an article in Gnus (with @kbd{B DEL} or
similar).
Since the articles aren't really removed when we mark them with the
closing a mailbox.
@item never
Never actually delete articles. Currently there is no way of showing
-the articles marked for deletion in nnimap, but other @sc{imap} clients
+the articles marked for deletion in nnimap, but other @acronym{IMAP} clients
may allow you to do this. If you ever want to run the EXPUNGE command
manually, @xref{Expunging mailboxes}.
@item ask
@item nnimap-importantize-dormant
@vindex nnimap-importantize-dormant
-If non-nil (the default), marks dormant articles as ticked (as well),
-for other @sc{imap} clients. Within Gnus, dormant articles will
+If non-@code{nil} (the default), marks dormant articles as ticked (as
+well), for other @acronym{IMAP} clients. Within Gnus, dormant articles will
naturally still (only) be marked as dormant. This is to make dormant
-articles stand out, just like ticked articles, in other @sc{imap}
-clients. (In other words, Gnus has two ``Tick'' marks and @sc{imap}
+articles stand out, just like ticked articles, in other @acronym{IMAP}
+clients. (In other words, Gnus has two ``Tick'' marks and @acronym{IMAP}
has only one.)
Probably the only reason for frobing this would be if you're trying
-enable per-user persistant dormant flags, using something like:
+enable per-user persistent dormant flags, using something like:
@lisp
(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
as ticked for other users.
@item nnimap-expunge-search-string
-@cindex Expunging
+@cindex expunging
@vindex nnimap-expunge-search-string
-This variable contain the @sc{imap} search command sent to server when
+This variable contain the @acronym{IMAP} search command sent to server when
searching for articles eligible for expiring. The default is
@code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
UID set and the second @code{%s} is replaced by a date.
Probably the only useful value to change this to is
@code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
-messages instead of the internal article date. See section 6.4.4 of
+messages instead of the internal article date. See section 6.4.4 of
RFC 2060 for more information on valid strings.
@item nnimap-authinfo-file
variable @code{nntp-authinfo-file} for exact syntax; also see
@ref{NNTP}.
+@item nnimap-need-unselect-to-notice-new-mail
+@vindex nnimap-need-unselect-to-notice-new-mail
+
+Unselect mailboxes before looking for new mail in them. Some servers
+seem to need this under some circumstances; it was reported that
+Courier 1.7.1 did.
+
@end table
@menu
* Expiring in IMAP:: Expiring mail with nnimap.
* 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 IMAP namespace in Gnus.
+* A note on namespaces:: How to (not) use @acronym{IMAP} namespace in Gnus.
@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
-@sc{imap} server has server side splitting and those that have splitting
-seem to use some non-standard protocol. This means that @sc{imap}
-support for Gnus has to do it's 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
@cindex crosspost
@vindex nnimap-split-crosspost
-If non-nil, do crossposting if several split methods match the mail. If
-nil, the first match in @code{nnimap-split-rule} found will be used.
+If non-@code{nil}, do crossposting if several split methods match the
+mail. If @code{nil}, the first match in @code{nnimap-split-rule}
+found will be used.
Nnmail equivalent: @code{nnmail-crosspost}.
@cindex inbox
@vindex nnimap-split-inbox
-A string or a list of strings that gives the name(s) of @sc{imap}
-mailboxes to split from. Defaults to nil, which means that splitting is
-disabled!
+A string or a list of strings that gives the name(s) of @acronym{IMAP}
+mailboxes to split from. Defaults to @code{nil}, which means that
+splitting is disabled!
@lisp
(setq nnimap-split-inbox
No nnmail equivalent.
@item nnimap-split-rule
-@cindex Splitting, rules
+@cindex splitting, rules
@vindex nnimap-split-rule
New mail found in @code{nnimap-split-inbox} will be split according to
this variable.
This variable contains a list of lists, where the first element in the
-sublist gives the name of the @sc{imap} mailbox to move articles
+sublist gives the name of the @acronym{IMAP} mailbox to move articles
matching the regexp in the second element in the sublist. Got that?
Neither did I, we need examples.
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:
The second element can also be a function. In that case, it will be
called with the first element of the rule as the argument, in a buffer
-containing the headers of the article. It should return a non-nil value
-if it thinks that the mail belongs in that group.
+containing the headers of the article. It should return a
+non-@code{nil} value if it thinks that the mail belongs in that group.
Nnmail users might recollect that the last regexp had to be empty to
match all articles (like in the example above). This is not required in
@lisp
(setq nnimap-split-rule
- '(("my1server" (".*" (("ding" "ding@@gnus.org")
- ("junk" "From:.*Simon")))
+ '(("my1server" (".*" (("ding" "ding@@gnus.org")
+ ("junk" "From:.*Simon"))))
("my2server" ("INBOX" nnimap-split-fancy))
- ("my[34]server" (".*" (("private" "To:.*Simon")
- ("junk" my-junk-func)))))
+ ("my[34]server" (".*" (("private" "To:.*Simon")
+ ("junk" my-junk-func))))))
@end lisp
The virtual server name is in fact a regexp, so that the same rules
Mail matching this predicate in @code{nnimap-split-inbox} will be
split, it is a string and the default is @samp{UNSEEN UNDELETED}.
-This might be useful if you use another @sc{imap} client to read mail in
+This might be useful if you use another @acronym{IMAP} client to read mail in
your inbox but would like Gnus to split all articles in the inbox
-regardless of readedness. Then you might change this to
+regardless of readedness. Then you might change this to
@samp{UNDELETED}.
@item nnimap-split-fancy
It's possible to set @code{nnimap-split-rule} to
@code{nnmail-split-fancy} if you want to use fancy
-splitting. @xref{Fancy Mail Splitting}.
+splitting. @xref{Fancy Mail Splitting}.
However, to be able to have different fancy split rules for nnmail and
nnimap back ends you can set @code{nnimap-split-rule} to
@findex nnimap-split-download-body
@vindex nnimap-split-download-body
-Set to non-nil to download entire articles during splitting. This is
-generally not required, and will slow things down considerably. You
-may need it if you want to use an advanced splitting function that
-analyses the body to split the article.
+Set to non-@code{nil} to download entire articles during splitting.
+This is generally not required, and will slow things down
+considerably. You may need it if you want to use an advanced
+splitting function that analyses the body to split the article.
@end table
Even though @code{nnimap} is not a proper @code{nnmail} derived back
end, it supports most features in regular expiring (@pxref{Expiring
-Mail}). Unlike splitting in IMAP (@pxref{Splitting in IMAP}) it do
-not clone the @code{nnmail} variables (i.e., creating
+Mail}). Unlike splitting in @acronym{IMAP} (@pxref{Splitting in
+IMAP}) it does not clone the @code{nnmail} variables (i.e., creating
@var{nnimap-expiry-wait}) but reuse the @code{nnmail} variables. What
follows below are the variables used by the @code{nnimap} expiry
process.
-A note on how the expire mark is stored on the @sc{imap} server is
+A note on how the expire mark is stored on the @acronym{IMAP} server is
appropriate here as well. The expire mark is translated into a
@code{imap} client specific mark, @code{gnus-expire}, and stored on the
message. This means that likely only Gnus will understand and treat
This variable is supported, and internally implemented by calling the
@code{nnmail} functions that handle this. It contains an optimization
-that if the destination is a IMAP group on the same server, the
+that if the destination is a @acronym{IMAP} group on the same server, the
article is copied instead of appended (that is, uploaded again).
@end table
@subsection Editing IMAP ACLs
@cindex editing imap acls
@cindex Access Control Lists
-@cindex Editing @sc{imap} ACLs
+@cindex Editing @acronym{IMAP} ACLs
@kindex G l
@findex gnus-group-nnimap-edit-acl
-ACL stands for Access Control List. ACLs are used in @sc{imap} for
+ACL stands for Access Control List. ACLs are used in @acronym{IMAP} for
limiting (or enabling) other users access to your mail boxes. Not all
-@sc{imap} servers support this, this function will give an error if it
+@acronym{IMAP} servers support this, this function will give an error if it
doesn't.
-To edit a ACL for a mailbox, type @kbd{G l}
-(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
+To edit an ACL for a mailbox, type @kbd{G l}
+(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with an ACL
editing window with detailed instructions.
Some possible uses:
@item
At least with the Cyrus server, you are required to give the user
``anyone'' posting ("p") capabilities to have ``plussing'' work (that is,
-mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
+mail sent to user+mailbox@@domain ending up in the @acronym{IMAP} mailbox
INBOX.mailbox).
@end itemize
@subsection Expunging mailboxes
@cindex expunging
-@cindex Expunge
-@cindex Manual expunging
+@cindex expunge
+@cindex manual expunging
@kindex G x
@findex gnus-group-nnimap-expunge
@cindex IMAP namespace
@cindex namespaces
-The IMAP protocol has a concept called namespaces, described by the
-following text in the RFC:
+The @acronym{IMAP} protocol has a concept called namespaces, described
+by the following text in the RFC:
-@example
+@display
5.1.2. Mailbox Namespace Naming Convention
By convention, the first hierarchical element of any mailbox name
comp.mail.misc newsgroup would have an mailbox name of
"#news.comp.mail.misc", and the name "comp.mail.misc" could refer
to a different object (e.g. a user's private mailbox).
-@end example
-
-While there is nothing in this text that warrants concern for the IMAP
-implementation in Gnus, some servers use namespace prefixes in a way
-that does not work with how Gnus uses mailbox names.
-
-Specifically, University of Washington's IMAP server uses mailbox
-names like @code{#driver.mbx/read-mail} which are valid only in the
-@sc{create} and @sc{append} commands. After the mailbox is created
-(or a messages is appended to a mailbox), it must be accessed without
-the namespace prefix, i.e. @code{read-mail}. Since Gnus do not make it
-possible for the user to guarantee that user entered mailbox names
-will only be used with the CREATE and APPEND commands, you should
-simply not use the namespace prefixed mailbox names in Gnus.
-
-See the UoW @sc{imapd} documentation for the @code{#driver.*/} prefix
+@end display
+
+While there is nothing in this text that warrants concern for the
+@acronym{IMAP} implementation in Gnus, some servers use namespace
+prefixes in a way that does not work with how Gnus uses mailbox names.
+
+Specifically, University of Washington's @acronym{IMAP} server uses
+mailbox names like @code{#driver.mbx/read-mail} which are valid only
+in the @sc{create} and @sc{append} commands. After the mailbox is
+created (or a messages is appended to a mailbox), it must be accessed
+without the namespace prefix, i.e. @code{read-mail}. Since Gnus do
+not make it possible for the user to guarantee that user entered
+mailbox names will only be used with the CREATE and APPEND commands,
+you should simply not use the namespace prefixed mailbox names in
+Gnus.
+
+See the UoW IMAPD documentation for the @code{#driver.*/} prefix
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.
@code{ange-ftp} or @code{efs} will actually allow you to read this
directory over at @samp{sina} as a newsgroup. Distributed news ahoy!
-@code{nndir} will use @sc{nov} files if they are present.
+@code{nndir} will use @acronym{NOV} files if they are present.
@code{nndir} is a ``read-only'' back end---you can't delete or expire
articles with this method. You can use @code{nnmh} or @code{nnml} for
as a newsgroup. Several files types are supported:
@table @code
-@cindex babyl
-@cindex rmail mbox
+@cindex Babyl
+@cindex Rmail mbox
@item babyl
-The babyl (rmail) mail box.
+The Babyl (Rmail) mail box.
@cindex mbox
@cindex Unix mbox
Netscape mail boxes.
@item mime-parts
-@sc{mime} multipart messages.
+@acronym{MIME} multipart messages.
@item standard-digest
The standard (RFC 1153) digest format.
@item mime-digest
-A @sc{mime} digest of messages.
+A @acronym{MIME} digest of messages.
@item lanl-gov-announce
Announcement messages from LANL Gov Announce.
@code{nndoc-add-type} function. It takes two parameters---the first
is the definition itself and the second (optional) parameter says
where in the document type definition alist to put this definition.
-The alist is traversed sequentially, and @code{nndoc-TYPE-type-p} is
-called for a given type @code{TYPE}. So @code{nndoc-mmdf-type-p} is
-called to see whether a document is of @code{mmdf} type, and so on.
-These type predicates should return @code{nil} if the document is not
-of the correct type; @code{t} if it is of the correct type; and a
-number if the document might be of the correct type. A high number
-means high probability; a low number means low probability with
-@samp{0} being the lowest valid number.
+The alist is traversed sequentially, and
+@code{nndoc-@var{type}-type-p} is called for a given type @var{type}.
+So @code{nndoc-mmdf-type-p} is called to see whether a document is of
+@code{mmdf} type, and so on. These type predicates should return
+@code{nil} if the document is not of the correct type; @code{t} if it
+is of the correct type; and a number if the document might be of the
+correct type. A high number means high probability; a low number
+means low probability with @samp{0} being the lowest valid number.
@node SOUP
@item nngateway-mail2news-header-transformation
Creates a @code{To} header that looks like
@code{nngateway-address}.
+@end table
+
+@end table
Here's an example:
nngateway-mail2news-header-transformation)))
@end lisp
-@end table
-
-
-@end table
-
So, to use this, simply say something like:
@lisp
component groups. So if you tick an article in a virtual group, the
article will also be ticked in the component group from whence it
came. (And vice versa---marks from the component groups will also be
-shown in the virtual group.). To create an empty virtual group, run
+shown in the virtual group.). To create an empty virtual group, run
@kbd{G V} (@code{gnus-group-make-empty-virtual}) in the group buffer
and edit the method regexp with @kbd{M-e}
(@code{gnus-group-edit-group-method})
@cindex nnkiboze
@cindex kibozing
-@dfn{Kibozing} is defined by @sc{oed} as ``grepping through (parts of)
+@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 @sc{nntp} server down to a halt
+you. Oh joy! Now you can grind any @acronym{NNTP} server down to a halt
with useless requests! Oh happiness!
@kindex G k (Group)
The address field of the @code{nnkiboze} method is, as with
@code{nnvirtual}, a regexp to match groups to be ``included'' in the
-@code{nnkiboze} group. That's where most similarities between @code{nnkiboze}
-and @code{nnvirtual} end.
+@code{nnkiboze} group. That's where most similarities between
+@code{nnkiboze} and @code{nnvirtual} end.
-In addition to this regexp detailing component groups, an @code{nnkiboze} group
-must have a score file to say what articles are to be included in
-the group (@pxref{Scoring}).
+In addition to this regexp detailing component groups, an
+@code{nnkiboze} group must have a score file to say what articles are
+to be included in the group (@pxref{Scoring}).
@kindex M-x nnkiboze-generate-groups
@findex nnkiboze-generate-groups
You must run @kbd{M-x nnkiboze-generate-groups} after creating the
-@code{nnkiboze} groups you want to have. This command will take time. Lots of
-time. Oodles and oodles of time. Gnus has to fetch the headers from
-all the articles in all the component groups and run them through the
-scoring process to determine if there are any articles in the groups
-that are to be part of the @code{nnkiboze} groups.
+@code{nnkiboze} groups you want to have. This command will take time.
+Lots of time. Oodles and oodles of time. Gnus has to fetch the
+headers from all the articles in all the component groups and run them
+through the scoring process to determine if there are any articles in
+the groups that are to be part of the @code{nnkiboze} groups.
Please limit the number of component groups by using restrictive
regexps. Otherwise your sysadmin may become annoyed with you, and the
-@sc{nntp} site may throw you off and never let you back in again.
+@acronym{NNTP} site may throw you off and never let you back in again.
Stranger things have happened.
@code{nnkiboze} component groups do not have to be alive---they can be dead,
@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 @sc{nov} header lines for all the articles in the group,
+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 @sc{nov} lines removed from the @sc{nov} file.
+their @acronym{NOV} lines removed from the @acronym{NOV} file.
@node Gnus Unplugged
@section Gnus Unplugged
@cindex offline
@cindex unplugged
-@cindex Agent
-@cindex Gnus Agent
-@cindex Gnus Unplugged
+@cindex agent
+@cindex Gnus agent
+@cindex Gnus unplugged
In olden times (ca. February '88), people used to run their newsreaders
on big machines with permanent connections to the net. News transport
* Agent Basics:: How it all is supposed to work.
* Agent Categories:: How to tell the Gnus Agent what to download.
* Agent Commands:: New commands for all the buffers.
+* Agent Visuals:: Ways that the agent may effect your summary buffer.
* Agent as Cache:: The Agent is a big cache too.
* Agent Expiry:: How to make old articles go away.
* Agent Regeneration:: How to recover from lost connections and other accidents.
-* Agent and IMAP:: How to use the Agent with IMAP.
+* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
* Outgoing Messages:: What happens when you post/mail something?
* Agent Variables:: Customizing is fun.
* Example Setup:: An example @file{~/.gnus.el} file for offline people.
@dfn{Downloading} means fetching things from the net to your local
machine. @dfn{Uploading} is doing the opposite.
+You know that Gnus gives you all the opportunity you'd ever want for
+shooting yourself in the foot. Some people call it flexibility. Gnus
+is also customizable to a great extent, which means that the user has a
+say on how Gnus behaves. Other newsreaders might unconditionally shoot
+you in your foot, but with Gnus, you have a choice!
+
+Gnus is never really in plugged or unplugged state. Rather, it applies
+that state to each server individually. This means that some servers
+can be plugged while others can be unplugged. Additionally, some
+servers can be ignored by the Agent altogether (which means that
+they're kinda like plugged always).
+
+So when you unplug the Agent and then wonder why is Gnus opening a
+connection to the Net, the next step to do is to look whether all
+servers are agentized. If there is an unagentized server, you found
+the culprit.
+
+Another thing is the @dfn{offline} state. Sometimes, servers aren't
+reachable. When Gnus notices this, it asks you whether you want the
+server to be switched to offline state. If you say yes, then the
+server will behave somewhat as if it was unplugged, except that Gnus
+will ask you whether you want to switch it back online again.
+
Let's take a typical Gnus session using the Agent.
@itemize @bullet
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
@kbd{J a} on the server (or servers) that you wish to have covered by the
Agent (@pxref{Server Agent Commands}), or @kbd{J r} on automatically
added servers you do not wish to have covered by the Agent. By default,
-all @code{nntp} and @code{nnimap} groups in @code{gnus-select-method} and
+all @code{nntp} and @code{nnimap} servers in @code{gnus-select-method} and
@code{gnus-secondary-select-methods} are agentized.
@item
-
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
to multiple groups. Which you use is entirely up to you. Topic
parameters do override categories so, if you mix the two, you'll have
to take that into account. If you have a few groups that deviate from
-your policy, you can use grou parameters (@pxref{Group Parameters}) to
+your policy, you can use group parameters (@pxref{Group Parameters}) to
configure them.
@item
a rule to decide which source to believe. This rule specifies that
the parameter sources are checked in the following order: group
parameters, topic parameters, agent category, and finally customizable
-variables. So you can mix all of these sources to produce a wide range
+variables. So you can mix all of these sources to produce a wide range
of behavior, just don't blame me if you don't remember where you put
your settings.
The above predicates apply to @emph{all} the groups which belong to the
category. However, if you wish to have a specific predicate for an
individual group within a category, or you're just too lazy to set up a
-new category, you can enter a group's individual predicate in it's group
+new category, you can enter a group's individual predicate in its group
parameters like so:
@lisp
@kindex @@ (Agent Summary)
@findex gnus-agent-toggle-mark
Toggle whether to download the article
-(@code{gnus-agent-toggle-mark}). The dowload mark is @samp{%} by
-default.
+(@code{gnus-agent-toggle-mark}). The download mark is @samp{%} by
+default.
@item J c
@kindex J c (Agent Summary)
@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
@end table
+@node Agent Visuals
+@subsection Agent Visuals
+
+If you open a summary while unplugged and, Gnus knows from the group's
+active range that there are more articles than the headers currently
+stored in the Agent, you may see some articles whose subject looks
+something like @samp{[Undownloaded article #####]}. These are
+placeholders for the missing headers. Aside from setting a mark,
+there is not much that can be done with one of these placeholders.
+When Gnus finally gets a chance to fetch the group's headers, the
+placeholders will automatically be replaced by the actual headers.
+You can configure the summary buffer's maneuvering to skip over the
+placeholders if you care (See @code{gnus-auto-goto-ignores}).
+
+While it may be obvious to all, the only headers and articles
+available while unplugged are those headers and articles that were
+fetched into the Agent while previously plugged. To put it another
+way, "If you forget to fetch something while plugged, you might have a
+less than satisfying unplugged session". For this reason, the Agent
+adds two visual effects to your summary buffer. These effects display
+the download status of each article so that you always know which
+articles will be available when unplugged.
+
+The first visual effect is the @samp{%O} spec. If you customize
+@code{gnus-summary-line-format} to include this specifier, you will add
+a single character field that indicates an article's download status.
+Articles that have been fetched into either the Agent or the Cache,
+will display @code{gnus-downloaded-mark} (defaults to @samp{+}). All
+other articles will display @code{gnus-undownloaded-mark} (defaults to
+@samp{-}). If you open a group that has not been agentized, a space
+(@samp{ }) will be displayed.
+
+The second visual effect are the undownloaded faces. The faces, there
+are three indicating the article's score (low, normal, high), seem to
+result in a love/hate response from many Gnus users. The problem is
+that the face selection is controlled by a list of condition tests and
+face names (See @code{gnus-summary-highlight}). Each condition is
+tested in the order in which it appears in the list so early
+conditions have precedence over later conditions. All of this means
+that, if you tick an undownloaded article, the article will continue
+to be displayed in the undownloaded face rather than the ticked face.
+
+If you use the Agent as a cache (to avoid downloading the same article
+each time you visit it or to minimize your connection time), the
+undownloaded face will probably seem like a good idea. The reason
+being that you do all of our work (marking, reading, deleting) with
+downloaded articles so the normal faces always appear.
+
+For occasional Agent users, the undownloaded faces may appear to be an
+absolutely horrible idea. The issue being that, since most of their
+articles have not been fetched into the Agent, most of the normal
+faces will be obscured by the undownloaded faces. If this is your
+situation, you have two choices available. First, you can completely
+disable the undownload faces by customizing
+@code{gnus-summary-highlight} to delete the three cons-cells that
+refer to the @code{gnus-summary-*-undownloaded-face} faces. Second, if
+you prefer to take a more fine-grained approach, you may set the
+@code{agent-disable-undownloaded-faces} group parameter to t. This
+parameter, like all other agent parameters, may be set on an Agent
+Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
+Parameters}), or an individual group (@pxref{Group Parameters}).
+
@node Agent as Cache
@subsection Agent as Cache
@pxref{Agent Variables}) to always download headers and articles while
plugged. Gnus will almost certainly be slower, but it will be kept
synchronized with the server. That last point probably won't make any
-sense if you are using a nntp or nnimap backend.
+sense if you are using a nntp or nnimap back end.
@node Agent Expiry
@subsection Agent Expiry
@kindex M-x gnus-agent-expire
@kindex M-x gnus-agent-expire-group
@findex gnus-agent-expire-group
-@cindex Agent expiry
-@cindex Gnus Agent expiry
+@cindex agent expiry
+@cindex Gnus agent expiry
@cindex expiry
-The Agent backend, @code{nnagent}, doesn't handle expiry. Well, at
-least it doesn't handle it like other backends. Instead, there are
+The Agent back end, @code{nnagent}, doesn't handle expiry. Well, at
+least it doesn't handle it like other back ends. Instead, there are
special @code{gnus-agent-expire} and @code{gnus-agent-expire-group}
commands that will expire all read articles that are older than
@code{gnus-agent-expire-days} days. They can be run whenever you feel
@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
@node Agent Regeneration
@subsection Agent Regeneration
-@cindex Agent Regeneration
-@cindex Gnus Agent Regeneration
+@cindex agent regeneration
+@cindex Gnus agent regeneration
@cindex regeneration
The local data structures used by @code{nnagent} may become corrupted
@findex gnus-agent-regenerate-group
@kindex M-x gnus-agent-regenerate-group
The command @code{gnus-agent-regenerate-group} uses the local copies
-of individual articles to repair the local NOV(header) database. It
+of individual articles to repair the local @acronym{NOV}(header) database. It
then updates the internal data structures that document which articles
are stored locally. An optional argument will mark articles in the
agent as unread.
@subsection Agent and IMAP
The Agent works with any Gnus back end, including nnimap. However,
-since there are some conceptual differences between @sc{nntp} and
-@sc{imap}, this section (should) provide you with some information to
-make Gnus Agent work smoother as a @sc{imap} Disconnected Mode client.
+since there are some conceptual differences between @acronym{NNTP} and
+@acronym{IMAP}, this section (should) provide you with some information to
+make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client.
The first thing to keep in mind is that all flags (read, ticked, etc)
-are kept on the @sc{imap} server, rather than in @file{.newsrc} as is the
+are kept on the @acronym{IMAP} server, rather than in @file{.newsrc} as is the
case for nntp. Thus Gnus need to remember flag changes when
disconnected, and synchronize these flags when you plug back in.
in the group buffer.
Some things are currently not implemented in the Agent that you'd might
-expect from a disconnected @sc{imap} client, including:
+expect from a disconnected @acronym{IMAP} client, including:
@itemize @bullet
Technical note: the synchronization algorithm does not work by ``pushing''
all local flags to the server, but rather incrementally update the
server view of flags by changing only those flags that were changed by
-the user. Thus, if you set one flag on a article, quit the group and
+the user. Thus, if you set one flag on an article, quit the group and
re-select the group and remove the flag; the flag will be set and
removed from the server when you ``synchronize''. The queued flag
operations can be found in the per-server @code{flags} file in the Agent
@item gnus-agent-cache
@vindex gnus-agent-cache
-Variable to control whether use the locally stored @sc{nov} and
+Variable to control whether use the locally stored @acronym{NOV} and
articles when plugged, e.g. essentially using the Agent as a cache.
-The default is non-nil, which means to use the Agent as a cache.
+The default is non-@code{nil}, which means to use the Agent as a cache.
@item gnus-agent-go-online
@vindex gnus-agent-go-online
@vindex gnus-agent-consider-all-articles
If @code{gnus-agent-consider-all-articles} is non-@code{nil}, the
agent will fetch all missing headers. When @code{nil}, the agent will
-fetch only new headers. The default is @code{nil}.
+fetch only new headers. The default is @code{nil}.
@item gnus-agent-max-fetch-size
@vindex gnus-agent-max-fetch-size
@item gnus-server-unopen-status
@vindex gnus-server-unopen-status
-Perhaps not a Agent variable, but closely related to the Agent, this
+Perhaps not an Agent variable, but closely related to the Agent, this
variable says what will happen if Gnus cannot open a server. If the
Agent is enabled, the default, @code{nil}, makes Gnus ask the user
whether to deny the server or whether to unplug the agent. If the
@item gnus-auto-goto-ignores
@vindex gnus-auto-goto-ignores
-Another variable that isn't a Agent variable, yet so closely related
+Another variable that isn't an Agent variable, yet so closely related
that most will look for it here, this variable tells the summary
buffer how to maneuver around undownloaded (only headers stored in the
agent) and unfetched (neither article nor headers stored) articles.
@file{~/.gnus.el} file to get started.
@lisp
-;;; Define how Gnus is to fetch news. We do this over @sc{nntp}
-;;; from your ISP's server.
+;;; @r{Define how Gnus is to fetch news. We do this over @acronym{NNTP}}
+;;; @r{from your ISP's server.}
(setq gnus-select-method '(nntp "news.your-isp.com"))
-;;; Define how Gnus is to read your mail. We read mail from
-;;; your ISP's POP server.
+;;; @r{Define how Gnus is to read your mail. We read mail from}
+;;; @r{your ISP's @acronym{POP} server.}
(setq mail-sources '((pop :server "pop.your-isp.com")))
-;;; Say how Gnus is to store the mail. We use nnml groups.
+;;; @r{Say how Gnus is to store the mail. We use nnml groups.}
(setq gnus-secondary-select-methods '((nnml "")))
-;;; Make Gnus into an offline newsreader.
-;;; (gnus-agentize) ; The obsolete setting.
-;;; (setq gnus-agent t) ; Now the default.
+;;; @r{Make Gnus into an offline newsreader.}
+;;; (gnus-agentize) ; @r{The obsolete setting.}
+;;; (setq gnus-agent t) ; @r{Now the default.}
@end lisp
That should be it, basically. Put that in your @file{~/.gnus.el} file,
If this is the first time you've run Gnus, you will be subscribed
automatically to a few default newsgroups. You'll probably want to
subscribe to more groups, and to do that, you have to query the
-@sc{nntp} server for a complete list of groups with the @kbd{A A}
+@acronym{NNTP} server for a complete list of groups with the @kbd{A A}
command. This usually takes quite a while, but you only have to do it
once.
@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}.
@item e
Score on an ``extra'' header, that is, one of those in gnus-extra-headers,
-if your @sc{nntp} server tracks additional header data in overviews.
+if your @acronym{NNTP} server tracks additional header data in overviews.
@item f
Score on followups---this matches the author name, and adds scores to
@item gnus-kill-files-directory
@vindex gnus-kill-files-directory
All kill and score files will be stored in this directory, which is
-initialized from the @code{SAVEDIR} environment variable by default.
+initialized from the @env{SAVEDIR} environment variable by default.
This is @file{~/News/} by default.
@item gnus-score-file-suffix
@item gnus-score-thread-simplify
@vindex gnus-score-thread-simplify
-If this variable is non-@code{nil}, article subjects will be simplified
-for subject scoring purposes in the same manner as with
+If this variable is non-@code{nil}, article subjects will be
+simplified for subject scoring purposes in the same manner as with
threading---according to the current value of
-gnus-simplify-subject-functions. If the scoring entry uses
+@code{gnus-simplify-subject-functions}. If the scoring entry uses
@code{substring} or @code{exact} matching, the match will also be
simplified in this manner.
(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
+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
has to be valid syntactically, if not semantically.
Six keys are supported by this alist:
entries will result in new score entries being added for all follow-ups
to articles that matches these score entries.
-Following this key is a arbitrary number of score entries, where each
+Following this key is an arbitrary number of score entries, where each
score entry has one to four elements.
@enumerate
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 @sc{nntp} server tracks NNTP-Posting-Host in overviews:
+if your @acronym{NNTP} server tracks NNTP-Posting-Host in overviews:
@lisp
("111.222.333.444" -1000 nil s "NNTP-Posting-Host")
@end table
@end enumerate
-@cindex Score File Atoms
+@cindex score file atoms
@item mark
The value of this entry should be a number. Any articles with a score
lower than this number will be marked as read.
group name, the @var{file-name} will be used as the home score file.
@item
-A function. If the function returns non-nil, the result will be used as
-the home score file.
+A function. If the function returns non-@code{nil}, the result will
+be used as the home score file.
@item
A string. Use the string as the home score file.
@lisp
(setq gnus-home-score-file
- ;; All groups that match the regexp "\\.emacs"
+ ;; @r{All groups that match the regexp @code{"\\.emacs"}}
'(("\\.emacs" "emacs.SCORE")
- ;; All the comp groups in one score file
+ ;; @r{All the comp groups in one score file}
("^comp" "comp.SCORE")))
@end lisp
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.
encounters what looks like a @code{rn} kill file, it will take a stab at
interpreting it.
-Two summary functions for editing a GNUS kill file:
+Two summary functions for editing a @sc{gnus} kill file:
@table @kbd
@section GroupLens
@cindex GroupLens
-GroupLens (@uref{http://www.cs.umn.edu/Research/GroupLens/}) is a
+@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
news articles generated every day.
@node Using GroupLens
@subsection Using GroupLens
-To use GroupLens you must register a pseudonym with your local Better
-Bit Bureau (BBB).
-@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html} is the only
-better bit in town at the moment.
+To use GroupLens you must register a pseudonym with your local
+@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html, Better Bit
+Bureau (BBB)} is the only better bit in town at the moment.
Once you have registered you'll need to set a couple of variables.
when he's talking about Gnus:
@example
+@group
((&
("from" "Lars Ingebrigtsen")
("subject" "Gnus"))
1000)
+@end group
@end example
Quite simple, huh?
Gnus includes a command to help you while creating your own format
specs. @kbd{M-x gnus-update-format} will @code{eval} the current form,
update the spec in question and pop you to a buffer where you can
-examine the resulting lisp code to be run to generate the line.
+examine the resulting Lisp code to be run to generate the line.
Here's an alternative recipe for the group buffer:
@lisp
-;; Create three face types.
+;; @r{Create three face types.}
(setq gnus-face-1 'bold)
(setq gnus-face-3 'italic)
-;; We want the article count to be in
-;; a bold and green face. So we create
-;; a new face called `my-green-bold'.
+;; @r{We want the article count to be in}
+;; @r{a bold and green face. So we create}
+;; @r{a new face called @code{my-green-bold}.}
(copy-face 'bold 'my-green-bold)
-;; Set the color.
+;; @r{Set the color.}
(set-face-foreground 'my-green-bold "ForestGreen")
(setq gnus-face-2 'my-green-bold)
-;; Set the new & fancy format.
+;; @r{Set the new & fancy format.}
(setq gnus-group-line-format
"%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
@end lisp
can often be more convenient to just output the strings, and then worry
about lining up the following text afterwards.
-To do that, Gnus supplies tabulator specs--@samp{%=}. There are two
+To do that, Gnus supplies tabulator specs---@samp{%=}. There are two
different types---@dfn{hard tabulators} and @dfn{soft tabulators}.
@samp{%50=} will insert space characters to pad the line up to column
@node Wide Characters
@subsection Wide Characters
-Proportional fonts in most countries have characters of the same width.
+Fixed width fonts in most countries have characters of the same width.
Some countries, however, use Latin characters mixed with wider
characters---most notable East Asian countries.
may look like:
@example
+@group
split = frame | horizontal | vertical | buffer | form
frame = "(frame " size *split ")"
horizontal = "(horizontal " size *split ")"
buffer = "(" buf-name " " size *[ "point" ] *[ "frame-focus"] ")"
size = number | frame-params
buf-name = group | article | summary ...
+@end group
@end example
The limitations are that the @code{frame} split can only appear as the
(gnus-demon-close-connections nil 30)
@end lisp
-Here's a handler that scans for PGP headers every hour when Emacs is
-idle:
+Here's a handler that scans for @acronym{PGP} headers every hour when
+Emacs is idle:
@lisp
(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 @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
-"alt.nocem.misc" "news.admin.net-abuse.announce")}.
+default is
+@lisp
+("news.lists.filters" "news.admin.net-abuse.bulletins"
+ "alt.nocem.misc" "news.admin.net-abuse.announce")
+@end lisp
@item gnus-nocem-issuers
@vindex gnus-nocem-issuers
There are many people issuing NoCeM messages. This list says what
-people you want to listen to. The default is @code{("Automoose-1"
-"clewis@@ferret.ocunix.on.ca" "cosmo.roadkill" "SpamHippo"
-"hweede@@snafu.de")}; fine, upstanding citizens all of them.
+people you want to listen to. The default is
+@lisp
+("Automoose-1" "clewis@@ferret.ocunix.on.ca"
+ "cosmo.roadkill" "SpamHippo" "hweede@@snafu.de")
+@end lisp
+fine, upstanding citizens all of them.
-Known despammers that you can put in this list are listed at
+Known despammers that you can put in this list are listed at@*
@uref{http://www.xs4all.nl/~rosalind/nocemreg/nocemreg.html}.
You do not have to heed NoCeM messages from all these people---just the
@item gnus-nocem-directory
@vindex gnus-nocem-directory
-This is where Gnus will store its NoCeM cache files. The default is
+This is where Gnus will store its NoCeM cache files. The default is@*
@file{~/News/NoCeM/}.
@item gnus-nocem-expiry-wait
@node Image Enhancements
@section Image Enhancements
-XEmacs, as well as Emacs 21, is able to display pictures and stuff, so
-Gnus has taken advantage of that.
+XEmacs, as well as Emacs 21@footnote{Emacs 21 on MS Windows doesn't
+support images yet.}, is able to display pictures and stuff, so Gnus has
+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. Its 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 builtin 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 XVarious
-@subsection Various XEmacs Variables
+@node Face
+@subsection Face
+@cindex face
-@table @code
-@item gnus-xmas-glyph-directory
-@vindex gnus-xmas-glyph-directory
-This is where Gnus will look for pictures. Gnus will normally
-auto-detect this directory, but you may set it manually if you have an
-unusual directory structure.
+@c #### FIXME: faces and x-faces'implementations should really be harmonized.
-@item gnus-xmas-logo-color-alist
-@vindex gnus-xmas-logo-color-alist
-This is an alist where the key is a type symbol and the values are the
-foreground and background color of the splash page glyph.
+@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.
-@item gnus-xmas-logo-color-style
-@vindex gnus-xmas-logo-color-style
-This is the key used to look up the color in the alist described above.
-Valid values include @code{flame}, @code{pine}, @code{moss},
-@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
-@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
+@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.
-@item gnus-xmas-modeline-glyph
-@vindex gnus-xmas-modeline-glyph
-A glyph displayed in all Gnus mode lines. It is a tiny gnu head by
-default.
+Gnus provides a few convenience functions and variables to allow
+easier insertion of Face headers in outgoing messages.
-@end table
+@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.
-@subsubsection Toolbar
+@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.
-@table @code
+Here's how you would typically use this function. Put something like the
+following in your @file{~/.gnus.el} file:
-@item gnus-use-toolbar
-@vindex gnus-use-toolbar
-If @code{nil}, don't display toolbars. If non-@code{nil}, it should be
-one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
-@code{right-toolbar}, or @code{left-toolbar}.
+@lisp
+(setq message-required-news-headers
+ (nconc message-required-news-headers
+ (list '(Face . (lambda ()
+ (gnus-face-from-file "~/face.jpg"))))))
+@end lisp
-@item gnus-group-toolbar
-@vindex gnus-group-toolbar
-The toolbar in the group buffer.
-@item gnus-summary-toolbar
-@vindex gnus-summary-toolbar
-The toolbar in the summary buffer.
+@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
+
+@table @code
+@item gnus-xmas-glyph-directory
+@vindex gnus-xmas-glyph-directory
+This is where Gnus will look for pictures. Gnus will normally
+auto-detect this directory, but you may set it manually if you have an
+unusual directory structure.
+
+@item gnus-xmas-logo-color-alist
+@vindex gnus-xmas-logo-color-alist
+This is an alist where the key is a type symbol and the values are the
+foreground and background color of the splash page glyph.
+
+@item gnus-xmas-logo-color-style
+@vindex gnus-xmas-logo-color-style
+This is the key used to look up the color in the alist described above.
+Valid values include @code{flame}, @code{pine}, @code{moss},
+@code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
+@code{labia}, @code{berry}, @code{neutral}, and @code{september}.
+
+@item gnus-xmas-modeline-glyph
+@vindex gnus-xmas-modeline-glyph
+A glyph displayed in all Gnus mode lines. It is a tiny gnu head by
+default.
+
+@end table
+
+@subsubsection Toolbar
+
+@table @code
+
+@item gnus-use-toolbar
+@vindex gnus-use-toolbar
+If @code{nil}, don't display toolbars. If non-@code{nil}, it should be
+one of @code{default-toolbar}, @code{top-toolbar}, @code{bottom-toolbar},
+@code{right-toolbar}, or @code{left-toolbar}.
+
+@item gnus-group-toolbar
+@vindex gnus-group-toolbar
+The toolbar in the group buffer.
+
+@item gnus-summary-toolbar
+@vindex gnus-summary-toolbar
+The toolbar in the summary buffer.
@item gnus-summary-mail-toolbar
@vindex gnus-summary-mail-toolbar
* 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
-a database. The criteria for spam detection vary - it may be the
+@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
header, it's probably ok. All the rest goes to the @samp{spam} group.
(This idea probably comes from Tim Pierce.)
-In addition, many mail spammers talk directly to your @sc{smtp} server
+In addition, many mail spammers talk directly to your @acronym{SMTP} server
and do not include your email address explicitly in the @code{To}
header. Why they do this is unknown---perhaps it's to thwart this
thwarting scheme? In any case, this is trivial to deal with---you just
citizen, you can even send off complaints to the proper authorities on
each unsolicited commercial email---at your leisure.
-If you are also a lazy net citizen, you will probably prefer complaining
-automatically with the @file{gnus-junk.el} package, available FOR FREE
-at @* @uref{http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html}.
-Since most e-mail spam is sent automatically, this may reconcile the
-cosmic balance somewhat.
-
This works for me. It allows people an easy way to contact me (they can
just press @kbd{r} in the usual way), and I'm not bothered at all with
spam. It's a win-win situation. Forging @code{From} headers to point
@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
: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
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.
The ``something costly'' is to burn CPU time, more specifically to
compute a hash collision up to a certain number of bits. The
resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
-header. For more details, and for the external application
+header. For more details, and for the external application
@code{hashcash} you need to install to use this feature, see
@uref{http://www.cypherspace.org/~adam/hashcash/}. Even more
information can be found at @uref{http://www.camram.org/}.
(add-hook 'message-send-hook 'mail-add-payment)
@end lisp
-The @code{hashcash.el} library can be found at
-@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}, or in the Gnus
-development contrib directory.
+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}.
You will need to set up some additional variables as well:
@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:
+So, what happens when you load @file{spam.el}?
+
+First of all, you @strong{must} set the variable
+@code{spam-install-hooks} to @code{t} and install the @code{spam.el} hooks:
+
+@example
+(setq spam-install-hooks t)
+(spam-install-hooks-function)
+@end example
+
+This is automatically done for you if you load @code{spam.el}
+@emph{after} one of the @code{spam-use-*} variables explained later
+are set. So you should load @code{spam.el} after you set one of the
+@code{spam-use-*} variables:
+
+@example
+(setq spam-use-bogofilter t)
+(require 'spam)
+@end example
+
+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.
+@vindex gnus-spam-process-newsgroups
The concepts of ham processors and spam processors are very important.
Ham processors and spam processors for a group can be set with the
@code{spam-process} group parameter, or the
processors take mail known to be spam and process it so similar spam
will be detected later.
+@vindex gnus-spam-newsgroup-contents
Gnus learns from the spam you get. You have to collect your spam in
one or more spam groups, and set or customize the variable
@code{spam-junk-mailgroups} as appropriate. You can also declare
considered @emph{unclassified}. All groups are unclassified by
default.
+@vindex gnus-spam-mark
+@cindex $
In spam groups, all messages are considered to be spam by default:
-they get the @samp{$} mark when you enter the group. You must review
-these messages from time to time and remove the @samp{$} mark for
+they get the @samp{$} mark (@code{gnus-spam-mark}) when you enter the
+group. If you have seen a message, had it marked as spam, then
+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
will study them as spam samples.
Messages may also be deleted in various other ways, and unless
-@code{spam-ham-marks} gets overridden below, marks @samp{R} and
-@samp{r} for default read or explicit delete, marks @samp{X} and
+@code{ham-marks} group parameter gets overridden below, marks @samp{R}
+and @samp{r} for default read or explicit delete, marks @samp{X} and
@samp{K} for automatic or explicit kills, as well as mark @samp{Y} for
low scores, are all considered to be associated with articles which
are not spam. This assumption might be false, in particular if you
use kill files or score files as means for detecting genuine spam, you
-should then adjust the @code{spam-ham-marks} variable.
+should then adjust the @code{ham-marks} group parameter.
-@defvar spam-ham-marks
-You can customize this variable to be the list of marks you want to
-consider ham. By default, the list contains the deleted, read,
-killed, kill-filed, and low-score marks.
+@defvar ham-marks
+You can customize this group or topic parameter to be the list of
+marks you want to consider ham. By default, the list contains the
+deleted, read, killed, kill-filed, and low-score marks.
@end defvar
-@defvar spam-spam-marks
-You can customize this variable to be the list of marks you want to
-consider spam. By default, the list contains only the spam mark.
+@defvar spam-marks
+You can customize this group or topic parameter to be the list of
+marks you want to consider spam. By default, the list contains only
+the spam mark.
@end defvar
When you leave @emph{any} group, regardless of its
spam. Best is to make sure that real spam is marked with @samp{$},
and nothing else.
+@vindex gnus-ham-process-destinations
When you leave a @emph{spam} group, all spam-marked articles are
marked as expired after processing with the spam processor. This is
not done for @emph{unclassified} or @emph{ham} groups. Also, any
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, spam articles are only expired.
+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 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
the @code{spam-process-destination} group parameter or a match in the
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
+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 it.
+but you can customize @code{spam-split-group}.
+
+You can also give @code{spam-split} a parameter,
+e.g. @samp{'spam-use-regex-headers}. Why is this useful?
+
+Take these split rules (with @code{spam-use-regex-headers} and
+@code{spam-use-blackholes} set):
+
+@example
+ nnimap-split-fancy '(|
+ (any "ding" "ding")
+ (: spam-split)
+ ;; default mailbox
+ "mail")
+@end example
+
+Now, the problem is that you want all ding messages to make it to the
+ding folder. But that will let obvious spam (for example, spam
+detected by SpamAssassin, and @code{spam-use-regex-headers}) through,
+when it's sent to the ding list. On the other hand, some messages to
+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
+@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)
+ (any "ding" "ding")
+ (: 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
+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
+specify different spam checks for your nnmail split vs. your nnimap
+split. Go crazy.
+
+You still have to have specific checks such as
+@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 @file{spam.el}, some conditional loading is done depending on
+what @code{spam-use-xyz} variables you have set.
@emph{Note for IMAP users}
The boolean variable @code{nnimap-split-download-body} needs to be
set, if you want to split based on the whole message instead of just
-the headers. By default, the nnimap backend will only retrieve the
-message headers. If you use spam-check-bogofilter, spam-check-ifile,
-or spam-check-stat (the splitters that can benefit from the full
-message body), you should set this variable. It is not set by default
-because it will slow IMAP down.
+the headers. By default, the nnimap back end will only retrieve the
+message headers. If you use @code{spam-check-bogofilter},
+@code{spam-check-ifile}, or @code{spam-check-stat} (the splitters that
+can benefit from the full message body), you should set this variable.
+It is not set by default because it will slow @acronym{IMAP} down, and
+that is not an appropriate decision to make on behalf of the user.
@xref{Splitting in IMAP}.
@emph{TODO: Currently, spam.el only supports insertion of articles
-into a backend. There is no way to tell spam.el that an article is no
+into a back end. There is no way to tell spam.el that an article is no
longer spam or ham.}
@emph{TODO: spam.el needs to provide a uniform way of training all the
@code{spam-split} and their corresponding spam and ham processors:
@menu
-* Blacklists and Whitelists::
-* BBDB Whitelists::
-* Blackholes::
-* Regular Expressions Header Matching::
-* Bogofilter::
-* ifile spam filtering::
-* spam-stat spam filtering::
-* Extending 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::
@end menu
@node Blacklists and Whitelists
@end defvar
+@node Gmane Spam Reporting
+@subsubsection Gmane Spam Reporting
+@cindex spam reporting
+@cindex Gmane, spam reporting
+@cindex Gmane, spam reporting
+@cindex spam
+
+@defvar gnus-group-spam-exit-processor-report-gmane
+
+Add this symbol to a group's @code{spam-process} parameter by
+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.
+
+@end defvar
+
+@node Anti-spam Hashcash Payments
+@subsubsection Anti-spam Hashcash Payments
+@cindex spam filtering
+@cindex hashcash, spam filtering
+@cindex spam
+
+@defvar spam-use-hashcash
+
+Similar to @code{spam-use-whitelist} (@pxref{Blacklists and
+Whitelists}), but uses hashcash tokens for whitelisting messages
+instead of the sender address. You must have the @code{hashcash.el}
+package loaded for @code{spam-use-hashcash} to work properly.
+Messages without a hashcash payment token will be sent to the next
+spam-split rule. This is an explicit filter, meaning that unless a
+hashcash token is found, the messages are not assumed to be spam or
+ham.
+
+@end defvar
+
@node Blackholes
@subsubsection Blackholes
@cindex spam filtering
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
-you set @code{spam-use-dig} to nil. It is not recommended at this
-time to set @code{spam-use-dig} to nil despite the possible
-performance improvements, because some users may be unable to use it,
-but you can try it and see if it works for you.
+@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
+use it, but you can try it and see if it works for you.
@end defvar
@defvar spam-blackhole-good-server-regex
A regular expression for IPs that should not be checked against the
-blackhole server list. When set to nil, it has no effect.
+blackhole server list. When set to @code{nil}, it has no effect.
@end defvar
for debugging or for curiosity, shows the @emph{spamicity} score of
the current article (between 0.0 and 1.0).
-Bogofilter determines if a message is spam based on an internal
-threshold, set at compilation time. That threshold can't be
-customized.
+Bogofilter determines if a message is spam based on a specific
+threshold. That threshold can be customized, consult the Bogofilter
+documentation.
If the @code{bogofilter} executable is not in your path, Bogofilter
processing will be turned off.
@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
+@cindex spam filtering
+@cindex SpamOracle
+@cindex spam
+
+An easy way to filter out spam is to use SpamOracle. SpamOracle is an
+statistical mail filtering tool written by Xavier Leroy and needs to be
+installed separately.
+
+There are several ways to use SpamOracle with Gnus. In all cases, your
+mail is piped through SpamOracle in its @emph{mark} mode. SpamOracle will
+then enter an @samp{X-Spam} header indicating whether it regards the
+mail as a spam mail or not.
+
+One possibility is to run SpamOracle as a @code{:prescript} from the
+@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 @file{spam.el} (@pxref{Filtering Spam
+Using The Spam ELisp Package}) call SpamOracle.
+
+@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
+this example the @samp{INBOX} of an nnimap server is filtered using
+SpamOracle. Mails recognized as spam mails will be moved to
+@code{spam-split-group}, @samp{Junk} in this case. Ham messages stay
+in @samp{INBOX}:
+
+@example
+(setq spam-use-spamoracle t
+ spam-split-group "Junk"
+ nnimap-split-inbox '("INBOX")
+ nnimap-split-rule 'nnimap-split-fancy
+ nnimap-split-fancy '(| (: spam-split) "INBOX"))
+@end example
+
+@defvar spam-use-spamoracle
+Set to @code{t} if you want Gnus to enable spam filtering using
+SpamOracle.
+@end defvar
+
+@defvar spam-spamoracle-binary
+Gnus uses the SpamOracle binary called @file{spamoracle} found in the
+user's PATH. Using the variable @code{spam-spamoracle-binary}, this
+can be customized.
+@end defvar
+
+@defvar spam-spamoracle-database
+By default, SpamOracle uses the file @file{~/.spamoracle.db} as a database to
+store its analyses. This is controlled by the variable
+@code{spam-spamoracle-database} which defaults to @code{nil}. That means
+the default SpamOracle database will be used. In case you want your
+database to live somewhere special, set
+@code{spam-spamoracle-database} to this path.
+@end defvar
+
+SpamOracle employs a statistical algorithm to determine whether a
+message is spam or ham. In order to get good results, meaning few
+false hits or misses, SpamOracle needs training. SpamOracle learns the
+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 @file{spam.el}'s
+spam- and ham-processors, which is much more convenient. For a
+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
+customizing the group parameter or the
+@code{gnus-spam-process-newsgroups} variable. When this symbol is added
+to a group's @code{spam-process} parameter, spam-marked articles will be
+sent to SpamOracle as spam samples.
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-spamoracle
+Add this symbol to a group's @code{spam-process} parameter by
+customizing the group parameter or the
+@code{gnus-spam-process-newsgroups} variable. When this symbol is added
+to a grup's @code{spam-process} parameter, the ham-marked articles in
+@emph{ham} groups will be sent to the SpamOracle as samples of ham
+messages. Note that this ham processor has no effect in @emph{spam} or
+@emph{unclassified} groups.
+@end defvar
+
+@emph{Example:} These are the Group Parameters of an group that has been
+classified as a ham group, meaning that it should only contain ham
+messages.
+@example
+ ((spam-contents gnus-group-spam-classification-ham)
+ (spam-process
+ (gnus-group-spam-exit-processor-spamoracle)))
+@end example
+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
+@code{gnus-group-spam-exit-processor-spamoracle}. This processor sends
+the messages to SpamOracle as new samples for spam.
@node Extending the spam elisp package
@subsubsection Extending the spam elisp package
@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.
@lisp
(defun spam-blackbox-register-spam-routine ()
(spam-generic-register-routine
- ;; the spam function
+ ;; @r{the spam function}
(lambda (article)
(let ((from (spam-fetch-field-from-fast article)))
(when (stringp from)
(blackbox-do-something-with-this-spammer from))))
- ;; the ham function
+ ;; @r{the ham function}
nil))
(defun spam-blackbox-register-ham-routine ()
(spam-generic-register-routine
- ;; the spam function
+ ;; @r{the spam function}
nil
- ;; the ham function
+ ;; @r{the ham function}
(lambda (article)
(let ((from (spam-fetch-field-from-fast article)))
(when (stringp from)
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
@file{~/Mail/mail/misc} (this usually corresponds the the group
@samp{nnml:mail.misc}).
-When you are using IMAP, you won't have the mails available locally,
-so that will not work. One solution is to use the Gnus Agent to cache
-the articles. Then you can use directories such as
+When you are using @acronym{IMAP}, you won't have the mails available
+locally, so that will not work. One solution is to use the Gnus Agent
+to cache the articles. Then you can use directories such as
@file{"~/News/agent/nnimap/mail.yourisp.com/personal_spam"} for
@code{spam-stat-process-spam-directory}. @xref{Agent as Cache}.
@defvar spam-stat
-This variable holds the hash-table with all the statistics -- the
+This variable holds the hash-table with all the statistics---the
dictionary we have been talking about. For every word in either
collection, this hash-table stores a vector describing how often the
word appeared in spam and often it appeared in non-spam mails.
Typical test will involve calls to the following functions:
-@example
+@smallexample
Reset: (setq spam-stat (make-hash-table :test 'equal))
Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
Number of words: (hash-table-count spam-stat)
Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
-@end example
+@end smallexample
Here is how you would create your dictionary:
-@example
+@smallexample
Reset: (setq spam-stat (make-hash-table :test 'equal))
Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
Repeat for any other non-spam group you need...
Reduce table size: (spam-stat-reduce-size)
Save table: (spam-stat-save)
-@end example
+@end smallexample
@node Various Various
@section Various Various
@item gnus-directory
@vindex gnus-directory
Most Gnus storage file and directory variables will be initialized from
-this variable, which defaults to the @samp{SAVEDIR} environment
+this variable, which defaults to the @env{SAVEDIR} environment
variable, or @file{~/News/} if that variable isn't set.
Note that Gnus is mostly loaded when the @file{~/.gnus.el} file is read.
on your system (you OS/2 user you), you could say something like:
@lisp
+@group
(setq nnheader-file-name-translation-alist
'((?: . ?_)))
+@end group
@end lisp
In fact, this is the default value for this variable on OS/2 and MS
@samp{:} in a group name, which is normally used to delimit method and
group).
-@sc{imap} users might want to allow @samp{/} in group names though.
+@acronym{IMAP} users might want to allow @samp{/} in group names though.
@end table
* Troubleshooting:: What you might try if things do not work.
* Gnus Reference Guide:: Rilly, rilly technical stuff.
* Emacs for Heathens:: A short introduction to Emacsian terms.
-* Frequently Asked Questions::
+* Frequently Asked Questions:: The Gnus FAQ
@end menu
@node XEmacs
@section XEmacs
@cindex XEmacs
-@cindex Installing under XEmacs
+@cindex installing under XEmacs
XEmacs is distributed as a collection of packages. You should install
whatever packages the Gnus XEmacs package requires. The current
In addition to the versions of Gnus which have had their releases
coordinated by Lars, one major development has been Semi-gnus from
-Japan. It's based on a library called @sc{semi}, which provides
-@sc{mime} capabilities.
+Japan. It's based on a library called @acronym{SEMI}, which provides
+@acronym{MIME} capabilities.
These Gnusae are based mainly on Gnus 5.6 and Pterodactyl Gnus.
Collectively, they are called ``Semi-gnus'', and different strains are
called T-gnus, ET-gnus, Nana-gnus and Chaos. These provide powerful
-@sc{mime} and multilingualization things, especially important for
+@acronym{MIME} and multilingualization things, especially important for
Japanese users.
look into implementing the changes when the draft is accepted as an RFC.
@item MIME - RFC 2045-2049 etc
-@cindex MIME
-All the various @sc{mime} RFCs are supported.
+@cindex @acronym{MIME}
+All the various @acronym{MIME} RFCs are supported.
@item Disposition Notifications - RFC 2298
Message Mode is able to request notifications from the receiver.
@item PGP - RFC 1991 and RFC 2440
@cindex RFC 1991
@cindex RFC 2440
-RFC 1991 is the original PGP message specification, published as a
-Information RFC. RFC 2440 was the follow-up, now called Open PGP, and
-put on the Standards Track. Both document a non-@sc{mime} aware PGP
-format. Gnus supports both encoding (signing and encryption) and
-decoding (verification and decryption).
+RFC 1991 is the original @acronym{PGP} message specification,
+published as an informational RFC. RFC 2440 was the follow-up, now
+called Open PGP, and put on the Standards Track. Both document a
+non-@acronym{MIME} aware @acronym{PGP} format. Gnus supports both
+encoding (signing and encryption) and decoding (verification and
+decryption).
@item PGP/MIME - RFC 2015/3156
RFC 2015 (superseded by 3156 which references RFC 2440 instead of RFC
-1991) describes the @sc{mime}-wrapping around the RF 1991/2440 format.
+1991) describes the @acronym{MIME}-wrapping around the RF 1991/2440 format.
Gnus supports both encoding and decoding.
@item S/MIME - RFC 2633
-RFC 2633 describes the @sc{s/mime} format.
+RFC 2633 describes the @acronym{S/MIME} format.
@item IMAP - RFC 1730/2060, RFC 2195, RFC 2086, RFC 2359, RFC 2595, RFC 1731
-RFC 1730 is @sc{imap} version 4, updated somewhat by RFC 2060 (@sc{imap} 4
-revision 1). RFC 2195 describes CRAM-MD5 authentication for @sc{imap}. RFC
-2086 describes access control lists (ACLs) for @sc{imap}. RFC 2359
-describes a @sc{imap} protocol enhancement. RFC 2595 describes the proper
-TLS integration (STARTTLS) with @sc{imap}. RFC 1731 describes the
-GSSAPI/Kerberos4 mechanisms for @sc{imap}.
+RFC 1730 is @acronym{IMAP} version 4, updated somewhat by RFC 2060
+(@acronym{IMAP} 4 revision 1). RFC 2195 describes CRAM-MD5
+authentication for @acronym{IMAP}. RFC 2086 describes access control
+lists (ACLs) for @acronym{IMAP}. RFC 2359 describes a @acronym{IMAP}
+protocol enhancement. RFC 2595 describes the proper @acronym{TLS}
+integration (STARTTLS) with @acronym{IMAP}. RFC 1731 describes the
+GSSAPI/Kerberos4 mechanisms for @acronym{IMAP}.
@end table
@itemize @bullet
@item
-Emacs 20.3 and up.
+Emacs 20.7 and up.
@item
-XEmacs 20.4 and up.
+XEmacs 21.1 and up.
@end itemize
@item
Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el, webmail.el,
-nnwarchive and many, many other things connected with @sc{mime} and
+nnwarchive and many, many other things connected with @acronym{MIME} and
other types of en/decoding, as well as general bug fixing, new
functionality and stuff.
Joe Reiss---creator of the smiley faces.
@item
-Justin Sheehy--the FAQ maintainer.
+Justin Sheehy---the @acronym{FAQ} maintainer.
@item
Erik Naggum---help, ideas, support, code and stuff.
* Red Gnus:: Third time best---Gnus 5.4/5.5.
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
+* Oort Gnus:: It's big. It's far out. Gnus 5.10.
@end menu
These lists are, of course, just @emph{short} overviews of the
(@pxref{Group Buffer Format} and @pxref{Summary Buffer Format}).
@item
-Local spool and several @sc{nntp} servers can be used at once
+Local spool and several @acronym{NNTP} servers can be used at once
(@pxref{Select Methods}).
@item
glitches (@pxref{Finding the Parent}).
@item
-Gnus can fetch FAQs and group descriptions (@pxref{Group Information}).
+Gnus can fetch @acronym{FAQ}s and group descriptions (@pxref{Group Information}).
@item
Digests (and other files) can be used as the basis for groups
Marks}).
@item
-A new mail-to-news back end makes it possible to post even when the @sc{nntp}
+A new mail-to-news back end makes it possible to post even when the @acronym{NNTP}
server doesn't allow posting (@pxref{Mail-To-News Gateways}).
@item
@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
-controlling where and how to send @sc{authinfo} to @sc{nntp} servers.
+@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
:suffix ".in")))
@end lisp
-More information is available in the info doc at Select Methods ->
-Getting Mail -> Mail Sources
+@xref{Mail Source Specifiers}.
@item
-Gnus is now a @sc{mime}-capable reader. This affects many parts of
+Gnus is now a @acronym{MIME}-capable reader. This affects many parts of
Gnus, and adds a slew of new commands. See the manual for details.
@item
@item
The user can now decide which extra headers should be included in
-summary buffers and @sc{nov} files.
+summary buffers and @acronym{NOV} files.
@item
@code{gnus-article-display-hook} has been removed. Instead, a number
again, to keep up with ever-changing layouts.
@item
-Gnus can now read @sc{imap} mail via @code{nnimap}.
+Gnus can now read @acronym{IMAP} mail via @code{nnimap}.
@end itemize
+@node Oort Gnus
+@subsubsection Oort Gnus
+@cindex Oort Gnus
+
+New features in Gnus 5.10:
+
+@itemize @bullet
+
+@item
+The revised Gnus @acronym{FAQ} is included in the manual,
+@xref{Frequently Asked Questions}.
+
+@item
+Upgrading from previous (stable) version if you have used Oort.
+
+If you have tried Oort (the unstable Gnus branch leading to this
+release) but went back to a stable version, be careful when upgrading to
+this version. In particular, you will probably want to remove all
+@file{.marks} (nnml) and @file{.mrk} (nnfolder) files, so that flags are
+read from your @file{.newsrc.eld} instead of from the
+@file{.marks}/@file{.mrk} file where this release store flags. See a
+later entry for more information about marks. Note that downgrading
+isn't save in general.
+
+@item
+Article Buttons
+
+More buttons for URLs, mail addresses, Message-IDs, Info links, man
+pages and Emacs or Gnus related references. @xref{Article Buttons}. The
+variables @code{gnus-button-@var{*}-level} can be used to control the
+appearance of all article buttons. @xref{Article Button Levels}.
+
+@item
+Dired integration
+
+@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
+@lisp
+(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
+@end lisp
+
+@item
+Gnus can display RSS newsfeeds as a newsgroup. @xref{RSS}.
+
+@item
+Single-part yenc encoded attachments can be decoded.
+
+@item
+Picons
+
+The picons code has been reimplemented to work in GNU Emacs---some of
+the previous options have been removed or renamed.
+
+Picons are small ``personal icons'' representing users, domain and
+newsgroups, which can be displayed in the Article buffer.
+@xref{Picons}.
+
+@item
+If the new option @code{gnus-treat-body-boundary} is non-@code{nil}, a
+boundary line is drawn at the end of the headers.
+
+@item
+Retrieval of charters and control messages
+
+There are new commands for fetching newsgroup charters (@kbd{H c}) and
+control messages (@kbd{H C}).
+
+@item
+Delayed articles
+
+You can delay the sending of a message with @kbd{C-c C-j} in the Message
+buffer. The messages are delivered at specified time. This is useful
+for sending yourself reminders. @xref{Delayed Articles}.
+
+@item
+If @code{auto-compression-mode} is enabled, attachments are automatically
+decompressed when activated.
+
+@item
+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
+article. Use @code{(setq gnus-summary-display-arrow nil)} to disable it.
+
+@item
+Warn about email replies to news
+
+Do you often find yourself replying to news by email by mistake? Then
+the new option @code{gnus-confirm-mail-reply-to-news} is just the thing for
+you.
+
+@item
+If the new option @code{gnus-summary-display-while-building} is
+non-@code{nil}, the summary buffer is shown and updated as it's being
+built.
+
+@item
+The new @code{recent} mark @samp{.} indicates newly arrived messages (as
+opposed to old but unread messages).
+
+@item
+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
+related commands in mailing list groups. @xref{Mailing List}.
+
+@item
+The Date header can be displayed in a format that can be read aloud
+in English. @xref{Article Date}.
+
+@item
+The envelope sender address can be customized when using Sendmail.
+@xref{Mail Variables, Mail Variables,, message, Message Manual}.
+
+@item
+diffs are automatically highlighted in groups matching
+@code{mm-uu-diff-groups-regexp}
+
+@item
+@acronym{TLS} wrapper shipped with Gnus
+
+@acronym{TLS}/@acronym{SSL} is now supported in @acronym{IMAP} and
+@acronym{NNTP} via @file{tls.el} and GNUTLS. The old
+@acronym{TLS}/@acronym{SSL} support via (external third party)
+@file{ssl.el} and OpenSSL still works.
+
+@item
+New @file{make.bat} for compiling and installing Gnus under MS Windows
+
+Use @file{make.bat} if you want to install Gnus under MS Windows, the
+first argument to the batch-program should be the directory where
+@file{xemacs.exe} respectively @file{emacs.exe} is located, iff you want
+to install Gnus after compiling it, give @file{make.bat} @code{/copy} as
+the second parameter.
+
+@file{make.bat} has been rewritten from scratch, it now features
+automatic recognition of XEmacs and GNU Emacs, generates
+@file{gnus-load.el}, checks if errors occur while compilation and
+generation of info files and reports them at the end of the build
+process. It now uses @code{makeinfo} if it is available and falls
+back to @file{infohack.el} otherwise. @file{make.bat} should now
+install all files which are necessary to run Gnus and be generally a
+complete replacement for the @code{configure; make; make install}
+cycle used under Unix systems.
+
+The new @file{make.bat} makes @file{make-x.bat} superfluous, so it has
+been removed.
+
+@item
+Support for non-@acronym{ASCII} domain names
+
+Message supports non-@acronym{ASCII} domain names in From:, To: and
+Cc: and will query you whether to perform encoding when you try to
+send a message. The variable @code{message-use-idna} controls this.
+Gnus will also decode non-@acronym{ASCII} domain names in From:, To:
+and Cc: when you view a message. The variable @code{gnus-use-idna}
+controls this.
+
+@item
+Better handling of Microsoft citation styles
+
+Gnus now tries to recognize the mangled header block that some Microsoft
+mailers use to indicate that the rest of the message is a citation, even
+though it is not quoted in any way. The variable
+@code{gnus-cite-unsightly-citation-regexp} matches the start of these
+citations.
+
+@item
+@code{gnus-article-skip-boring}
+
+If you set @code{gnus-article-skip-boring} to @code{t}, then Gnus will
+not scroll down to show you a page that contains only boring text,
+which by default means cited text and signature. You can customize
+what is skippable using @code{gnus-article-boring-faces}.
+
+This feature is especially useful if you read many articles that
+consist of a little new content at the top with a long, untrimmed
+message cited below.
+
+@item
+The format spec @code{%C} for positioning point has changed to @code{%*}.
+
+@item
+The new variable @code{gnus-parameters} can be used to set group parameters.
+
+Earlier this was done only via @kbd{G p} (or @kbd{G c}), which stored
+the parameters in @file{~/.newsrc.eld}, but via this variable you can
+enjoy the powers of customize, and simplified backups since you set the
+variable in @file{~/.emacs} instead of @file{~/.newsrc.eld}. The
+variable maps regular expressions matching group names to group
+parameters, a'la:
+@lisp
+(setq gnus-parameters
+ '(("mail\\..*"
+ (gnus-show-threads nil)
+ (gnus-use-scoring nil))
+ ("^nnimap:\\(foo.bar\\)$"
+ (to-group . "\\1"))))
+@end lisp
+
+@item
+Smileys (@samp{:-)}, @samp{;-)} etc) are now iconized for Emacs too.
+
+Put @code{(setq gnus-treat-display-smileys nil)} in @file{~/.emacs} to
+disable it.
+
+@item
+Gnus no longer generate the Sender: header automatically.
+
+Earlier it was generated iff the user configurable email address was
+different from the Gnus guessed default user address. As the guessing
+algorithm is rarely correct these days, and (more controversially) the
+only use of the Sender: header was to check if you are entitled to
+cancel/supersede news (which is now solved by Cancel Locks instead,
+see another entry), generation of the header has been disabled by
+default. See the variables @code{message-required-headers},
+@code{message-required-news-headers}, and
+@code{message-required-mail-headers}.
+
+@item
+Features from third party @file{message-utils.el} added to @file{message.el}.
+
+Message now asks if you wish to remove @samp{(was: <old subject>)} from
+subject lines (see @code{message-subject-trailing-was-query}). @kbd{C-c
+M-m} and @kbd{C-c M-f} inserts markers indicating included text.
+@kbd{C-c C-f a} adds a X-No-Archive: header. @kbd{C-c C-f x} inserts
+appropriate headers and a note in the body for cross-postings and
+followups (see the variables @code{message-cross-post-@var{*}}).
+
+@item
+References and X-Draft-Headers are no longer generated when you start
+composing messages and @code{message-generate-headers-first} is
+@code{nil}.
+
+@item
+Improved anti-spam features.
+
+Gnus is now able to take out spam from your mail and news streams
+using a wide variety of programs and filter rules. Among the supported
+methods are RBL blocklists, bogofilter and white/blacklists. Hooks
+for easy use of external packages such as SpamAssassin and Hashcash
+are also new. @xref{Thwarting Email Spam}.
+
+@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.
+
+@item
+Gnus decodes morse encoded messages if you press @kbd{W m}.
+
+@item
+Unread count correct in nnimap groups.
+
+The estimated number of unread articles in the group buffer should now
+be correct for nnimap groups. This is achieved by calling
+@code{nnimap-fixup-unread-after-getting-new-news} from the
+@code{gnus-setup-news-hook} (called on startup) and
+@code{gnus-after-getting-new-news-hook}. (called after getting new
+mail). If you have modified those variables from the default, you may
+want to add @code{nnimap-fixup-unread-after-getting-new-news} again. If
+you were happy with the estimate and want to save some (minimal) time
+when getting new mail, remove the function.
+
+@item
+Group Carbon Copy (GCC) quoting
+
+To support groups that contains SPC and other weird characters, groups
+are quoted before they are placed in the Gcc: header. This means
+variables such as @code{gnus-message-archive-group} should no longer
+contain quote characters to make groups containing SPC work. Also, if
+you are using the string @samp{nnml:foo, nnml:bar} (indicating Gcc
+into two groups) you must change it to return the list
+@code{("nnml:foo" "nnml:bar")}, otherwise the Gcc: line will be quoted
+incorrectly. Note that returning the string @samp{nnml:foo, nnml:bar}
+was incorrect earlier, it just didn't generate any problems since it
+was inserted directly.
+
+@item
+@file{~/News/overview/} not used.
+
+As a result of the following change, the @file{~/News/overview/}
+directory is not used any more. You can safely delete the entire
+hierarchy.
+
+@item
+@code{gnus-agent}
+
+The Gnus Agent has seen a major updated and is now enabled by default,
+and all nntp and nnimap servers from @code{gnus-select-method} and
+@code{gnus-secondary-select-method} are agentized by default. Earlier
+only the server in @code{gnus-select-method} was agentized by the
+default, and the agent was disabled by default. When the agent is
+enabled, headers are now also retrieved from the Agent cache instead
+of the back ends when possible. Earlier this only happened in the
+unplugged state. You can enroll or remove servers with @kbd{J a} and
+@kbd{J r} in the server buffer. Gnus will not download articles into
+the Agent cache, unless you instruct it to do so, though, by using
+@kbd{J u} or @kbd{J s} from the Group buffer. You revert to the old
+behaviour of having the Agent disabled with @code{(setq gnus-agent
+nil)}. Note that putting @code{(gnus-agentize)} in @file{~/.gnus.el}
+is not needed any more.
+
+@item
+@code{gnus-summary-line-format}
+
+The default value changed to @samp{%U%R%z%I%(%[%4L: %-23,23f%]%)
+%s\n}. Moreover @code{gnus-extra-headers},
+@code{nnmail-extra-headers} and @code{gnus-ignored-from-addresses}
+changed their default so that the users name will be replaced by the
+recipient's name or the group name posting to for @acronym{NNTP}
+groups.
+
+@item
+@file{deuglify.el} (@code{gnus-article-outlook-deuglify-article})
+
+A new file from Raymond Scholz @email{rscholz@@zonix.de} for deuglifying
+broken Outlook (Express) articles.
+
+@item
+@code{(require 'gnus-load)}
+
+If you use a stand-alone Gnus distribution, you'd better add
+@code{(require 'gnus-load)} into your @file{~/.emacs} after adding the Gnus
+lisp directory into load-path.
+
+File @file{gnus-load.el} contains autoload commands, functions and variables,
+some of which may not be included in distributions of Emacsen.
+
+@item
+@code{gnus-slave-unplugged}
+
+A new command which starts Gnus offline in slave mode.
+
+@item
+@code{message-insinuate-rmail}
+
+Adding @code{(message-insinuate-rmail)} and @code{(setq
+mail-user-agent 'gnus-user-agent)} in @file{.emacs} convinces Rmail to
+compose, reply and forward messages in message-mode, where you can
+enjoy the power of @acronym{MML}.
+
+@item
+@code{message-minibuffer-local-map}
+
+The line below enables BBDB in resending a message:
+@lisp
+(define-key message-minibuffer-local-map [(tab)]
+ 'bbdb-complete-name)
+@end lisp
+
+@item
+Externalizing and deleting of attachments.
+
+If @code{gnus-gcc-externalize-attachments} or
+@code{message-fcc-externalize-attachments} is non-@code{nil}, attach
+local files as external parts.
+
+The command @code{gnus-mime-save-part-and-strip} (bound to @kbd{C-o}
+on @acronym{MIME} buttons) saves a part and replaces the part with an
+external one. @code{gnus-mime-delete-part} (bound to @kbd{d} on
+@acronym{MIME} buttons) removes a part. It works only on back ends
+that support editing.
+
+@item
+@code{gnus-default-charset}
+
+The default value is determined from the
+@code{current-language-environment} variable, instead of
+@code{iso-8859-1}. Also the @samp{.*} item in
+@code{gnus-group-charset-alist} is removed.
+
+@item
+@code{gnus-posting-styles}
+
+Add a new format of match like
+@lisp
+((header "to" "larsi.*org")
+ (Organization "Somewhere, Inc."))
+@end lisp
+The old format like the lines below is obsolete, but still accepted.
+@lisp
+(header "to" "larsi.*org"
+ (Organization "Somewhere, Inc."))
+@end lisp
+
+@item
+@code{message-ignored-news-headers} and @code{message-ignored-mail-headers}
+
+@samp{X-Draft-From} and @samp{X-Gnus-Agent-Meta-Information} have been
+added into these two variables. If you customized those, perhaps you
+need add those two headers too.
+
+@item
+Gnus reads the @acronym{NOV} and articles in the Agent if plugged.
+
+If one reads an article while plugged, and the article already exists
+in the Agent, it won't get downloaded once more. @code{(setq
+gnus-agent-cache nil)} reverts to the old behavior.
+
+@item
+Gnus supports the ``format=flowed'' (RFC 2646) parameter. On
+composing messages, it is enabled by @code{use-hard-newlines}.
+Decoding format=flowed was present but not documented in earlier
+versions.
+
+@item
+Gnus supports the generation of RFC 2298 Disposition Notification requests.
+
+This is invoked with the @kbd{C-c M-n} key binding from message mode.
+
+@item
+Gnus supports Maildir groups.
+
+Gnus includes a new back end @file{nnmaildir.el}. @xref{Maildir}.
+
+@item
+Printing capabilities are enhanced.
+
+Gnus supports Muttprint natively with @kbd{O P} from the Summary and
+Article buffers. Also, each individual @acronym{MIME} part can be
+printed using @kbd{p} on the @acronym{MIME} button.
+
+@item
+Message supports the Importance: (RFC 2156) header.
+
+In the message buffer, @kbd{C-c C-f C-i} or @kbd{C-c C-u} cycles through
+the valid values.
+
+@item
+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
+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
+security sensitive data. Publishing your canlock string on the web
+will not allow anyone to be able to anything she could not already do.
+The behaviour can be changed by customizing @code{message-insert-canlock}.
+
+@item
+Gnus supports server-side mail filtering using Sieve.
+
+Sieve rules can be added as Group Parameters for groups, and the
+complete Sieve script is generated using @kbd{D g} from the Group
+buffer, and then uploaded to the server using @kbd{C-c C-l} in the
+generated Sieve buffer. @xref{Sieve Commands}, and the new Sieve
+manual @ref{Top, , Top, sieve, Emacs Sieve}.
+
+@item
+Extended format specs.
+
+Format spec @samp{%&user-date;} is added into
+@code{gnus-summary-line-format-alist}. Also, user defined extended
+format specs are supported. The extended format specs look like
+@samp{%u&foo;}, which invokes function
+@code{gnus-user-format-function-@var{foo}}. Because @samp{&} is used as the
+escape character, old user defined format @samp{%u&} is no longer supported.
+
+@item
+@kbd{/ *} (@code{gnus-summary-limit-include-cached}) is rewritten.
+
+It was aliased to @kbd{Y c}
+(@code{gnus-summary-insert-cached-articles}). The new function filters
+out other articles.
+
+@item Some limiting commands accept a @kbd{C-u} prefix to negate the match.
+
+If @kbd{C-u} is used on subject, author or extra headers, i.e., @kbd{/
+s}, @kbd{/ a}, and @kbd{/ x}
+(@code{gnus-summary-limit-to-@{subject,author,extra@}}) respectively, the
+result will be to display all articles that do not match the expression.
+
+@item
+Group names are treated as UTF-8 by default.
+
+This is supposedly what USEFOR wanted to migrate to. See
+@code{gnus-group-name-charset-group-alist} and
+@code{gnus-group-name-charset-method-alist} for customization.
+
+@item
+The nnml and nnfolder back ends store marks for each groups.
+
+This makes it possible to take backup of nnml/nnfolder servers/groups
+separately of @file{~/.newsrc.eld}, while preserving marks. It also
+makes it possible to share articles and marks between users (without
+sharing the @file{~/.newsrc.eld} file) within e.g. a department. It
+works by storing the marks stored in @file{~/.newsrc.eld} in a per-group
+file @file{.marks} (for nnml) and @file{@var{groupname}.mrk} (for
+nnfolder, named @var{groupname}). If the nnml/nnfolder is moved to
+another machine, Gnus will automatically use the @file{.marks} or
+@file{.mrk} file instead of the information in @file{~/.newsrc.eld}.
+The new server variables @code{nnml-marks-is-evil} and
+@code{nnfolder-marks-is-evil} can be used to disable this feature.
+
+@item
+The menu bar item (in Group and Summary buffer) named ``Misc'' has
+been renamed to ``Gnus''.
+
+@item
+The menu bar item (in Message mode) named ``@acronym{MML}'' has been
+renamed to ``Attachments''. Note that this menu also contains security
+related stuff, like signing and encryption (@pxref{Security, Security,,
+message, Message Manual}).
+
+@item
+@code{gnus-group-charset-alist} and
+@code{gnus-group-ignored-charsets-alist}.
+
+The regexps in these variables are compared with full group names
+instead of real group names in 5.8. Users who customize these
+variables should change those regexps accordingly. For example:
+@lisp
+("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
+@end lisp
+
+@item
+Gnus supports @acronym{PGP} (RFC 1991/2440), @acronym{PGP/MIME} (RFC
+2015/3156) and @acronym{S/MIME} (RFC 2630-2633).
+
+It needs an external @acronym{S/MIME} and OpenPGP implementation, but no
+additional Lisp libraries. This add several menu items to the
+Attachments menu, and @kbd{C-c RET} key bindings, when composing
+messages. This also obsoletes @code{gnus-article-hide-pgp-hook}.
+
+@item
+Gnus inlines external parts (message/external).
+
+@item
+@acronym{MML} (Mime compose) prefix changed from @kbd{M-m} to @kbd{C-c
+C-m}.
+
+This change was made to avoid conflict with the standard binding of
+@code{back-to-indentation}, which is also useful in message mode.
+@end itemize
+
@iftex
@page
@item news
@cindex news
This is what you are supposed to use this thing for---reading news.
-News is generally fetched from a nearby @sc{nntp} server, and is
+News is generally fetched from a nearby @acronym{NNTP} server, and is
generally publicly available to everybody. If you post news, the entire
world is likely to read just what you have written, and they'll all
snigger mischievously. Behind your back.
@cindex back end
Gnus considers mail and news to be mostly the same, really. The only
difference is how to access the actual articles. News articles are
-commonly fetched via the protocol 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 @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 ``Give me the list of articles in the foo
-group'' or ``Show me article number 4711''.
-
-So a back end mainly defines either a protocol (the @code{nntp} back end
-accesses news via NNTP, the @code{nnimap} back end accesses mail via
-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 file format and directory layout that's
-quite similar).
+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
+@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
+``Give me the list of articles in the foo group'' or ``Show me article
+number 4711''.
+
+So a back end mainly defines either a protocol (the @code{nntp} back
+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
+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
@item headers
@cindex headers
A collection of such lines, or a collection of heads. Or even a
-collection of @sc{nov} lines.
+collection of @acronym{NOV} lines.
-@item @sc{nov}
-@cindex nov
+@item @acronym{NOV}
+@cindex @acronym{NOV}
When Gnus enters a group, it asks the back end for the headers of all
unread articles in the group. Most servers support the News OverView
format, which is more compact and much faster to read and parse than the
@item ephemeral groups
@cindex ephemeral groups
+@cindex temporary groups
Most groups store data on what articles you have read. @dfn{Ephemeral}
groups are groups that will have no data stored---when you exit the
group, it'll disappear into the aether.
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
If you run Emacs on a machine locally, and get your news from a machine
over some very thin strings, you want to cut down on the amount of data
-Gnus has to get from the @sc{nntp} server.
+Gnus has to get from the @acronym{NNTP} server.
@table @code
@item gnus-nov-is-evil
This one has to be @code{nil}. If not, grabbing article headers from
-the @sc{nntp} server will not be very fast. Not all @sc{nntp} servers
+the @acronym{NNTP} server will not be very fast. Not all @acronym{NNTP} servers
support @sc{xover}; Gnus will detect this by itself.
@end table
flee}, you have some old @file{.el} files lying around. Delete these.
@item
-Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
-how-to.
+Read the help group (@kbd{G h} in the group buffer) for a
+@acronym{FAQ} and a how-to.
@item
@vindex max-lisp-eval-depth
@cindex edebug
If you want to debug your problem further before reporting, possibly
in order to solve the problem yourself and send a patch, you can use
-edebug. Debugging lisp code is documented in the Elisp manual
+edebug. Debugging Lisp code is documented in the Elisp manual
(@pxref{Debugging, , Debugging Lisp Programs, elisp, The GNU Emacs
Lisp Reference Manual}). To get you started with edebug, consider if
you discover some weird behaviour when pressing @kbd{c}, the first
@cindex elp
@cindex profile
@cindex slow
-Sometimes, a problem do not directly generate a elisp error but
+Sometimes, a problem do not directly generate an elisp error but
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). A fancier approach is to use
-the elisp profiler, ELP. The profiler is (or should be) fully
-documented elsewhere, but to get you started there are a few steps
-that need to be followed. First, instrument the part of Gnus you are
-interested in for profiling, e.g. @kbd{M-x elp-instrument-package RET
-gnus} or @kbd{M-x elp-instrument-package RET message}. Then perform
-the operation that is slow and press @kbd{M-x elp-results}. You will
-then see which operations that takes time, and can debug them further.
-If the entire operation takes much longer than the time spent in the
-slowest function in the profiler output, you probably profiled the
-wrong part of Gnus. To reset profiling statistics, use @kbd{M-x
-elp-reset-all}. @kbd{M-x elp-restore-all} is supposed to remove
-profiling, but given the complexities and dynamic code generation in
-Gnus, it might not always work perfectly.
-
-If you just need help, you are better off asking on
-@samp{gnu.emacs.gnus}. I'm not very helpful.
+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
+there are a few steps that need to be followed. First, instrument the
+part of Gnus you are interested in for profiling, e.g. @kbd{M-x
+elp-instrument-package RET gnus} or @kbd{M-x elp-instrument-package
+RET message}. Then perform the operation that is slow and press
+@kbd{M-x elp-results}. You will then see which operations that takes
+time, and can debug them further. If the entire operation takes much
+longer than the time spent in the slowest function in the profiler
+output, you probably profiled the wrong part of Gnus. To reset
+profiling statistics, use @kbd{M-x elp-reset-all}. @kbd{M-x
+elp-restore-all} is supposed to remove profiling, but given the
+complexities and dynamic code generation in Gnus, it might not always
+work perfectly.
@cindex gnu.emacs.gnus
@cindex ding mailing list
-You can also ask on the ding mailing list---@email{ding@@gnus.org}.
-Write to @email{ding-request@@gnus.org} to subscribe.
+If you just need help, you are better off asking on
+@samp{gnu.emacs.gnus}. I'm not very helpful. You can also ask on
+@email{ding@@gnus.org, the ding mailing list}. Write to
+@email{ding-request@@gnus.org} to subscribe.
@page
@findex gnus-group-foreign-p
Says whether @var{group} is foreign or not.
-@item group-group-find-parameter
-@findex group-group-find-parameter
+@item gnus-group-find-parameter
+@findex gnus-group-find-parameter
Returns the parameter list of @var{group}. If given a second parameter,
returns the value of that parameter for @var{group}.
@node Back End Interface
@subsection Back End Interface
-Gnus doesn't know anything about @sc{nntp}, spools, mail or virtual
+Gnus doesn't know anything about @acronym{NNTP}, spools, mail or virtual
groups. It only knows how to talk to @dfn{virtual servers}. A virtual
server is a @dfn{back end} and some @dfn{back end variables}. As examples
of the first, we have @code{nntp}, @code{nnspool} and @code{nnmbox}. As
Some back ends could be said to be @dfn{server-forming} back ends, and
some might be said not to be. The latter are back ends that generally
only operate on one group at a time, and have no concept of ``server''
--- they have a group, and they deliver info on that group and nothing
+---they have a group, and they deliver info on that group and nothing
more.
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}.
sequences (lists) of article numbers, and most back ends do not support
retrieval of @code{Message-ID}s. But they should try for both.
-The result data should either be HEADs or @sc{nov} lines, and the result
+The result data should either be HEADs or @acronym{NOV} lines, and the result
value should either be @code{headers} or @code{nov} to reflect this.
This might later be expanded to @code{various}, which will be a mixture
-of HEADs and @sc{nov} lines, but this is currently not supported by Gnus.
+of HEADs and @acronym{NOV} lines, but this is currently not supported by Gnus.
If @var{fetch-old} is non-@code{nil} it says to try fetching ``extra
headers'', in some meaning of the word. This is generally done by
If @var{server} is the current virtual server, and the connection to the
physical server is alive, then this function should return a
-non-@code{nil} vlue. This function should under no circumstances
+non-@code{nil} value. This function should under no circumstances
attempt to reconnect to a server we have lost connection to.
There should be no data returned.
@item (nnchoke-request-update-info GROUP INFO &optional SERVER)
A Gnus group info (@pxref{Group Info}) is handed to the back end for
-alterations. This comes in handy if the back end really carries all the
-information (as is the case with virtual and imap groups). This
+alterations. This comes in handy if the back end really carries all
+the information (as is the case with virtual and imap groups). This
function should destructively alter the info to suit its needs, and
-should return a non-nil value.
+should return a non-@code{nil} value.
There should be no result data from this function.
Set/remove/add marks on articles. Normally Gnus handles the article
marks (such as read, ticked, expired etc) internally, and store them in
-@file{~/.newsrc.eld}. Some back ends (such as @sc{imap}) however carry
+@file{~/.newsrc.eld}. Some back ends (such as @acronym{IMAP}) however carry
all information about the articles on the server, so Gnus need to
propagate the mark information to the server.
This function may be called at any time (by Gnus or anything else) to
request that the back end check for incoming articles, in one way or
-another. A mail back end will typically read the spool file or query the
-POP server when this function is invoked. The @var{group} doesn't have
-to be heeded---if the back end decides that it is too much work just
-scanning for a single group, it may do a total scan of all groups. It
-would be nice, however, to keep things local if that's practical.
+another. A mail back end will typically read the spool file or query
+the @acronym{POP} server when this function is invoked. The
+@var{group} doesn't have to be heeded---if the back end decides that
+it is too much work just scanning for a single group, it may do a
+total scan of all groups. It would be nice, however, to keep things
+local if that's practical.
There should be no result data from this function.
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.
Below is a slightly shortened version of the @code{nndir} back end.
@lisp
-;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995,96 Free Software Foundation, Inc.
+;;; @r{nndir.el --- single directory newsgroup access for Gnus}
+;; @r{Copyright (C) 1995,96 Free Software Foundation, Inc.}
-;;; Code:
+;;; @r{Code:}
(require 'nnheader)
(require 'nnmh)
(defvoo nndir-status-string "" nil nnmh-status-string)
(defconst nndir-version "nndir 1.0")
-;;; Interface functions.
+;;; @r{Interface functions.}
(nnoo-define-basics nndir)
@subsection Score File Syntax
Score files are meant to be easily parseable, but yet extremely
-mallable. It was decided that something that had the same read syntax
+mallable. It was decided that something that had the same read syntax
as an Emacs Lisp list would fit that spec.
Here's a typical score file:
@subsection Headers
Internally Gnus uses a format for storing article headers that
-corresponds to the @sc{nov} format in a mysterious fashion. One could
-almost suspect that the author looked at the @sc{nov} specification and
+corresponds to the @acronym{NOV} format in a mysterious fashion. One could
+almost suspect that the author looked at the @acronym{NOV} specification and
just shamelessly @emph{stole} the entire thing, and one would be right.
@dfn{Header} is a severely overloaded term. ``Header'' is used in
@c mode: texinfo
@c coding: iso-8859-1
@c End:
-% LocalWords: BNF mucho detailmenu cindex kindex kbd
-% LocalWords: findex Gnusae vindex dfn dfn samp nntp setq nnspool nntpserver
-% LocalWords: nnmbox newusers Blllrph NEWGROUPS dingnusdingnusdingnus
-% LocalWords: pre fab rec comp nnslashdot regex ga ga sci nnml nnbabyl nnmh
-% LocalWords: nnfolder emph looong eld newsreaders defun init elc pxref