\input texinfo
+@include gnus-overrides.texi
+
@setfilename ../../info/gnus
@settitle Gnus Manual
@syncodeindex fn cp
@end iflatex
@end iftex
-@dircategory Emacs
+@dircategory Emacs network features
@direntry
* Gnus: (gnus). The newsreader Gnus.
@end direntry
@titlepage
+@ifset WEBHACKDEVEL
+@title Gnus Manual (DEVELOPMENT VERSION)
+@end ifset
+@ifclear WEBHACKDEVEL
@title Gnus Manual
+@end ifclear
@author by Lars Magne Ingebrigtsen
@page
news. This variable should be a list where the first element says
@dfn{how} and the second element says @dfn{where}. This method is your
native method. All groups not fetched with this method are
-foreign groups.
+secondary or foreign groups.
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:
@node Checking New Groups
@subsection Checking New Groups
-Gnus normally determines whether a group is new or not by comparing the
-list of groups from the active file(s) with the lists of subscribed and
-dead groups. This isn't a particularly fast method. If
-@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
-server for new groups since the last time. This is both faster and
-cheaper. This also means that you can get rid of the list of killed
-groups altogether, so you may set @code{gnus-save-killed-list} to
-@code{nil}, which will save time both at startup, at exit, and all over.
-Saves disk space, too. Why isn't this the default, then?
-Unfortunately, not all servers support this command.
+Gnus normally determines whether a group is new or not by comparing
+the list of groups from the active file(s) with the lists of
+subscribed and dead groups. This isn't a particularly fast method.
+If @code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will
+ask the server for new groups since the last time. This is both
+faster and cheaper. This also means that you can get rid of the list
+of killed groups (@pxref{Group Levels}) altogether, so you may set
+@code{gnus-save-killed-list} to @code{nil}, which will save time both
+at startup, at exit, and all over. Saves disk space, too. Why isn't
+this the default, then? Unfortunately, not all servers support this
+command.
I bet I know what you're thinking now: How do I find out whether my
server supports @code{ask-server}? No? Good, because I don't have a
@item gnus-subscribe-zombies
@vindex gnus-subscribe-zombies
-Make all new groups zombies. This is the default. You can browse the
-zombies later (with @kbd{A z}) and either kill them all off properly
-(with @kbd{S z}), or subscribe to them (with @kbd{u}).
+Make all new groups zombies (@pxref{Group Levels}). This is the
+default. You can browse the zombies later (with @kbd{A z}) and either
+kill them all off properly (with @kbd{S z}), or subscribe to them
+(with @kbd{u}).
@item gnus-subscribe-randomly
@vindex gnus-subscribe-randomly
@code{gnus-subscribe-options-newsgroup-method} is used instead. This
variable defaults to @code{gnus-subscribe-alphabetically}.
+The ``options -n'' format is very simplistic. The syntax above is all
+that is supports -- you can force-subscribe hierarchies, or you can
+deny hierarchies, and that's it.
+
@vindex gnus-options-not-subscribe
@vindex gnus-options-subscribe
If you don't want to mess with your @file{.newsrc} file, you can just
The @code{gnus-startup-file} variable says where the startup files are.
The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup
file being whatever that one is, with a @samp{.eld} appended.
-If you want version control for this file, set
+If you want to keep multiple numbered backups of this file, set
@code{gnus-backup-startup-file}. It respects the same values as the
@code{version-control} variable.
go back to showing nonempty subscribed groups again. Thus, unsubscribed
groups are hidden, in a way.
+@cindex zombie groups
Zombie and killed groups are similar to unsubscribed groups in that they
are hidden by default. But they are different from subscribed and
unsubscribed groups in that Gnus doesn't ask the news server for
Predicates include @code{tick}, @code{unsend}, @code{undownload},
@code{unread}, @code{dormant}, @code{expire}, @code{reply},
@code{killed}, @code{bookmark}, @code{score}, @code{save},
-@code{cache}, @code{forward}, @code{unseen} and @code{recent}.
+@code{cache}, @code{forward}, and @code{unseen}.
@end table
@findex gnus-group-list-dormant
List all groups with dormant articles (@code{gnus-group-list-dormant}).
+@item A !
+@kindex A ! (Group)
+@findex gnus-group-list-ticked
+List all groups with ticked articles (@code{gnus-group-list-ticked}).
+
@item A /
@kindex A / (Group)
@findex gnus-group-list-limit
-List groups limited within the current selection
-(@code{gnus-group-list-limit}).
+Further limit groups within the current selection
+(@code{gnus-group-list-limit}). If you've first limited to groups
+with dormant articles with @kbd{A ?}, you can then further limit with
+@kbd{A / c}, which will then limit to groups with cached articles,
+giving you the groups that have both dormant articles and cached
+articles.
@item A f
@kindex A f (Group)
Desired cursor position (instead of after first colon).
@item &user-date;
Age sensitive date format. Various date format is defined in
-@code{gnus-summary-user-date-format-alist}.
+@code{gnus-user-date-format-alist}.
@item u
User defined specifier. The next character in the format string should
be a letter. Gnus will call the function
the process/prefix convention, but only uses the headers from the
first article to determine the recipients.
+@item S L
+@kindex S L (Summary)
+@findex gnus-summary-reply-to-list-with-original
+When replying to a message from a mailing list, send a reply to that
+message to the mailing list, and include the original message
+(@code{gnus-summary-reply-to-list-with-original}).
+
@item S v
@kindex S v (Summary)
@findex gnus-summary-very-wide-reply
religiously) are marked with an @samp{S} in the second column
(@code{gnus-saved-mark}).
-@item
-@vindex gnus-recent-mark
-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
-@code{gnus-unseen-mark}.
-
@item
@vindex gnus-unseen-mark
Articles that haven't been seen before in Gnus by the user are marked
with a @samp{.} in the second column (@code{gnus-unseen-mark}).
-Compare with @code{gnus-recent-mark}.
@item
@vindex gnus-downloaded-mark
Each function takes two threads and returns non-@code{nil} if the first
thread should be sorted before the other. Note that sorting really is
-normally done by looking only at the roots of each thread.
+normally done by looking only at the roots of each thread. Exceptions
+to this rule are @code{gnus-thread-sort-by-most-recent-number} and
+@code{gnus-thread-sort-by-most-recent-date}.
If you use more than one function, the primary sort key should be the
last function in the list. You should probably always include
Date: 6 weeks, 4 days, 1 hour, 3 minutes, 8 seconds ago
@end example
-This line is updated continually by default. If you wish to switch
-that off, say:
+This line is updated continually by default. The frequency (in
+seconds) is controlled by the @code{gnus-article-update-date-headers}
+variable.
+
+If you wish to switch updating off, say:
@vindex gnus-article-update-date-headers
@lisp
When a key ``matches'', the result is used.
@item @code{nil}
-No message archiving will take place. This is the default.
+No message archiving will take place.
@end table
Let's illustrate:
repeating one more time, with some spurious capitalizations: IF you do
NOT mark articles as EXPIRABLE, Gnus will NEVER delete those ARTICLES.
+@vindex gnus-auto-expirable-marks
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
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
-expirable.
+@samp{R}, @samp{O}, @samp{K}, @samp{Y} (and so on) are considered
+expirable. @code{gnus-auto-expirable-marks} has the full list of
+these marks.
When should either auto-expire or total-expire be used? Most people
who are subscribed to mailing lists split each list into its own group
efficient, and it's not a particularly good idea to interrupt them (with
@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
-synchronized with the group.
+Note that other functions 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
prevent expiration in selected groups.
@item
If you use the Gnus registry: don't use the registry with
@code{nnmairix} groups (put them in
-@code{gnus-registry-unfollowed-groups}). Be @emph{extra careful} if
-you use @code{gnus-registry-split-fancy-with-parent}; mails which are
-split into @code{nnmairix} groups are usually gone for good as soon as
-you check the group for new mail (yes, it has happened to me...).
+@code{gnus-registry-unfollowed-groups}; this is the default). Be
+@emph{extra careful} if you use
+@code{gnus-registry-split-fancy-with-parent}; mails which are split
+into @code{nnmairix} groups are usually gone for good as soon as you
+check the group for new mail (yes, it has happened to me...).
@item
Therefore: @emph{Never ever} put ``real'' mails into @code{nnmairix}
@item gnus-interactive-exit
@vindex gnus-interactive-exit
-Require confirmation before exiting Gnus. This variable is @code{t} by
-default.
+If non-@code{nil}, require a confirmation when exiting Gnus. If
+@code{quiet}, update any active summary buffers automatically without
+querying. The default value is @code{t}.
@end table
return a string. When the mouse passes over text with this property
set, a balloon window will appear and display the string. Please
refer to @ref{Tooltips, ,Tooltips, emacs, The Emacs Manual},
-(in GNU Emacs) or the doc string of @code{balloon-help-mode} (in
+(in Emacs) or the doc string of @code{balloon-help-mode} (in
XEmacs) for more information on this. (For technical reasons, the
guillemets have been approximated as @samp{<<} and @samp{>>} in this
paragraph.)
to fiddle with @code{gnus-tree-minimize-window} to avoid having the
windows resized.
+@subsection Window Configuration Names
+
+Here's a list of most of the currently known window configurations,
+and when they're used:
+
+@table @code
+@item group
+The group buffer.
+
+@item summary
+Entering a group and showing only the summary.
+
+@item article
+Selecting an article.
+
+@item server
+The server buffer.
+
+@item browse
+Browsing groups from the server buffer.
+
+@item message
+Composing a (new) message.
+
+@item only-article
+Showing only the article buffer.
+
+@item edit-article
+Editing an article.
+
+@item edit-form
+Editing group parameters and the like.
+
+@item edit-score
+Editing a server definition.
+
+@item post
+Composing a news message.
+
+@item reply
+Replying or following up an article without yanking the text.
+
+@item forward
+Forwarding a message.
+
+@item reply-yank
+Replying or following up an article with yanking the text.
+
+@item mail-bound
+Bouncing a message.
+
+@item pipe
+Sending an article to an external process.
+
+@item bug
+Sending a bug report.
+
+@item score-trace
+Displaying the score trace.
+
+@item score-words
+Displaying the score words.
+
+@item split-trace
+Displaying the split trace.
+
+@item compose-bounce
+Composing a bounce message.
+
+@item mml-preview
+Previewing a @acronym{MIME} part.
+
+@end table
+
+
@subsection Example Window Configurations
@itemize @bullet
The @code{gnus-face-properties-alist} variable affects the appearance of
displayed Face images. @xref{X-Face}.
-Viewing an @code{Face} header requires an Emacs that is able to display
+Viewing a @code{Face} header requires an Emacs that is able to display
PNG images.
@c Maybe add this:
@c (if (featurep 'xemacs)
@end enumerate
@menu
-* Setup::
+* Gnus Registry Setup::
* Fancy splitting to parent::
* Registry Article Refer Method::
* Store custom flags and keywords::
* Store arbitrary data::
@end menu
-@node Setup
-@subsection Setup
+@node Gnus Registry Setup
+@subsection Gnus Registry Setup
Fortunately, setting up the Gnus registry is pretty easy:
@lisp
-(setq gnus-registry-max-entries 2500
- gnus-registry-use-long-group-names t)
+(setq gnus-registry-max-entries 2500)
(gnus-registry-initialize)
@end lisp
("spam" t)
("train" t))
gnus-registry-max-entries 500000
- gnus-registry-use-long-group-names t
+ ;; this is the default
gnus-registry-track-extra '(sender subject))
@end lisp
-They say: keep a lot of messages around, use long group names, track
-messages by sender and subject (not just parent Message-ID), and when
-the registry splits incoming mail, use a majority rule to decide where
-messages should go if there's more than one possibility. In addition,
-the registry should ignore messages in groups that match ``nntp'',
-``nnrss'', ``spam'', or ``train.''
+They say: keep a lot of messages around, track messages by sender and
+subject (not just parent Message-ID), and when the registry splits
+incoming mail, use a majority rule to decide where messages should go
+if there's more than one possibility. In addition, the registry
+should ignore messages in groups that match ``nntp'', ``nnrss'',
+``spam'', or ``train.''
You are doubtless impressed by all this, but you ask: ``I am a Gnus
user, I customize to live. Give me more.'' Here you go, these are
The groups that will not be followed by
@code{gnus-registry-split-fancy-with-parent}. They will still be
remembered by the registry. This is a list of regular expressions.
-@end defvar
-
-@defvar gnus-registry-ignored-groups
-The groups that will not be remembered by the registry. This is a
-list of regular expressions, also available through Group/Topic
-customization (so you can ignore or keep a specific group or a whole
-topic).
-@end defvar
-
-@defvar gnus-registry-use-long-group-names
-Whether the registry will use long group names. It's recommended to
-set this to @code{t}, although everything works if you don't. Future
-functionality will require it.
+By default any group name that ends with ``delayed'', ``drafts'',
+``queue'', or ``INBOX'', belongs to the nnmairix backend, or contains
+the word ``archive'' is not followed.
@end defvar
@defvar gnus-registry-max-entries
registry will keep.
@end defvar
+@defvar gnus-registry-max-pruned-entries
+The maximum number (an integer or @code{nil} for unlimited) of entries
+the registry will keep after pruning.
+@end defvar
+
@defvar gnus-registry-cache-file
-The file where the registry will be stored between Gnus sessions.
+The file where the registry will be stored between Gnus sessions. By
+default the file name is @code{.gnus.registry.eioio} in the same
+directory as your @code{.newsrc.eld}.
@end defvar
@node Registry Article Refer Method
;; Keep enough entries to have a good hit rate when referring to an
;; article using the registry. Use long group names so that Gnus
;; knows where the article is.
-(setq gnus-registry-max-entries 2500
- gnus-registry-use-long-group-names t)
+(setq gnus-registry-max-entries 2500)
(gnus-registry-initialize)
@defvar gnus-registry-track-extra
This is a list of symbols, so it's best to change it from the
-Customize interface. By default it's @code{nil}, but you may want to
-track @code{subject} and @code{sender} as well when splitting by parent.
-It may work for you. It can be annoying if your mail flow is large and
+Customize interface. By default it's @code{(subject sender)}, which
+may work for you. It can be annoying if your mail flow is large and
people don't stick to the same groups.
@end defvar
This is a symbol, so it's best to change it from the Customize
interface. By default it's @code{nil}, but you may want to set it to
@code{majority} or @code{first} to split by sender or subject based on
-the majority of matches or on the first found.
+the majority of matches or on the first found. I find @code{majority}
+works best.
@end defvar
@node Store custom flags and keywords
will offer the available marks for completion.
@end defun
+You can use @code{defalias} to install a summary line formatting
+function that will show the registry marks. There are two flavors of
+this function, either showing the marks as single characters, using
+their @code{:char} property, or showing the marks as full strings.
+
+@lisp
+;; show the marks as single characters (see the :char property in
+;; `gnus-registry-marks'):
+;; (defalias 'gnus-user-format-function-M 'gnus-registry-article-marks-to-chars)
+
+;; show the marks by name (see `gnus-registry-marks'):
+;; (defalias 'gnus-user-format-function-M 'gnus-registry-article-marks-to-names)
+@end lisp
+
+
@node Store arbitrary data
@subsection Store arbitrary data
store arbitrary data (as long as it can be converted to a list for
storage).
-@defun gnus-registry-store-extra-entry (id key value)
-Store @code{value} in the extra data key @code{key} for message
-@code{id}.
-@end defun
-
-@defun gnus-registry-delete-extra-entry (id key)
-Delete the extra data key @code{key} for message @code{id}.
+@defun gnus-registry-set-id-key (id key value)
+Store @code{value} under @code{key} for message @code{id}.
@end defun
-@defun gnus-registry-fetch-extra (id key)
-Get the extra data key @code{key} for message @code{id}.
+@defun gnus-registry-get-id-key (id key)
+Get the data under @code{key} for message @code{id}.
@end defun
@defvar gnus-registry-extra-entries-precious
the second parameter.
@file{make.bat} has been rewritten from scratch, it now features
-automatic recognition of XEmacs and GNU Emacs, generates
+automatic recognition of XEmacs and 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
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
Gnus supports RFC 2369 mailing list headers, and adds a number of
related commands in mailing list groups. @xref{Mailing List}.
@item native
@cindex native
Gnus will always use one method (and back end) as the @dfn{native}, or
-default, way of getting news.
+default, way of getting news. Groups from the native select method
+have names like @samp{gnu.emacs.gnus}.
@item foreign
@cindex foreign
-You can also have any number of foreign groups active at the same time.
-These are groups that use non-native non-secondary back ends for getting
-news.
+You can also have any number of foreign groups active at the same
+time. These are groups that use non-native non-secondary back ends
+for getting news. Foreign groups have names like
+@samp{nntp+news.gmane.org:gmane.emacs.gnus.devel}.
@item secondary
@cindex secondary
-Secondary back ends are somewhere half-way between being native and being
-foreign, but they mostly act like they are native.
+Secondary back ends are somewhere half-way between being native and
+being foreign, but they mostly act like they are native, but they, too
+have names like @samp{nntp+news.gmane.org:gmane.emacs.gnus.devel}.
@item article
@cindex article
marks (preserving all marks not mentioned). @var{mark} is a list of
marks; where each mark is a symbol. Currently used marks are
@code{read}, @code{tick}, @code{reply}, @code{expire}, @code{killed},
-@code{dormant}, @code{save}, @code{download}, @code{unsend},
-@code{forward} and @code{recent}, but your back end should, if
-possible, not limit itself to these.
+@code{dormant}, @code{save}, @code{download}, @code{unsend}, and
+@code{forward}, but your back end should, if possible, not limit
+itself to these.
Given contradictory actions, the last action in the list should be the
effective one. That is, if your action contains a request to add the