\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Red Gnus 0.67 Manual
+@settitle Gnus 5.4.55 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Red Gnus 0.67 Manual
+@title Gnus 5.4.55 Manual
@author by Lars Magne Ingebrigtsen
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96 Free Software Foundation, Inc.
+Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@node Top
-@top The Red Gnus Newsreader
+@top The Gnus Newsreader
@ifinfo
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Red Gnus 0.67
+This manual corresponds to Gnus 5.4.55.
@end ifinfo
What Gnus does when it encounters a new group is determined by the
@code{gnus-subscribe-newsgroup-method} variable.
-This variable should contain a function. Some handy pre-fab values
-are:
+This variable should contain a function. This function will be called
+with the name of the new group as the only parameter.
+
+Some handy pre-fab functions are:
@table @code
@vindex gnus-init-file
When Gnus starts, it will read the @code{gnus-site-init-file}
-(@file{.../site-lisp/gnus.el} by default) and @code{gnus-init-file}
-(@file{~/.gnus.el} by default) files. These are normal Emacs Lisp files
-and can be used to avoid cluttering your @file{.emacs} and
-@file{site-init} files with Gnus stuff.
+(@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
+(@file{~/.gnus} by default) files. These are normal Emacs Lisp files
+and can be used to avoid cluttering your @file{~/.emacs} and
+@file{site-init} files with Gnus stuff. Gnus will also check for files
+with the same names as these, but with @file{.elc} and @file{.el}
+suffixes. In other words, if you have set @code{gnus-init-file} to
+@file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
+and finally @file{~/.gnus} (in this order).
+
@node Auto Save
In any case, if you use @code{some} or @code{nil}, you should definitely
kill all groups that you aren't interested in to speed things up.
+Note that this variable also affects active file retrieval from
+secondary select methods.
+
@node Startup Variables
@section Startup Variables
@vindex gnus-startup-hook
A hook that is run after starting up Gnus successfully.
+@item gnus-started-hook
+@vindex gnus-started-hook
+A hook that is run as the very last thing after starting up Gnus
+successfully.
+
@item gnus-check-bogus-newsgroups
@vindex gnus-check-bogus-newsgroups
If non-@code{nil}, Gnus will check for and delete all bogus groups at
be a letter. @sc{gnus} will call the function
@code{gnus-user-format-function-}@samp{X}, where @samp{X} is the letter
following @samp{%u}. The function will be passed a single dummy
-paratere as argument. The function should return a string, which will
+parameter as argument. The function should return a string, which will
be inserted into the buffer just like information from any other
specifier.
@end table
command, but this one does it without expunging and hiding dormants
(@code{gnus-group-visible-select-group}).
+@item M-C-RET
+@kindex M-C-RET (Group)
+@findex gnus-group-select-group-ephemerally
+Finally, this command selects the current group ephemerally without
+doing any processing of its contents
+(@code{gnus-group-select-group-ephemerally}). Even threading has been
+turned off. Everything you do in the group after selecting it in this
+manner will have no permanent effects.
+
@end table
@vindex gnus-large-newsgroup
(@code{gnus-group-make-doc-group}). If you give a prefix to this
command, you will be prompted for a file name and a file type.
Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
-@code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, and
-@code{forward}. If you run this command without a prefix, Gnus will
-guess at the file type. @xref{Document Groups}.
+@code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
+@code{rfc934}, @code{rfc822-forward}, and @code{forward}. If you run
+this command without a prefix, Gnus will guess at the file type.
+@xref{Document Groups}.
@item G w
@kindex G w (Group)
followup---except that if it is present in a news group, you'll get mail
group semantics when doing @kbd{f}.
+If you do an @kbd{a} command in a mail group and you don't have a
+@code{to-list} group parameter, one will be added automatically upon
+sending the message.
+
@item broken-reply-to
@cindex broken-reply-to
Elements like @code{(broken-reply-to . t)} signals that @code{Reply-To}
@item auto-expire
@cindex auto-expire
-If this symbol is present in the group parameter list, all articles that
-are read will be marked as expirable. For an alternative approach,
-@pxref{Expiring Mail}.
+If the group parameter has an element that looks like @code{(auto-expire
+. t)}, , all articles that are read will be marked as expirable. For an
+alternative approach, @pxref{Expiring Mail}.
@item total-expire
@cindex total-expire
-If this symbol is present, all read articles will be put through the
+If the group parameter has an element that looks like
+@code{(total-expire . t)}, all read articles will be put through the
expiry process, even if they are not marked as expirable. Use with
-caution.
+caution. Unread, ticked and dormant articles are not eligible for
+expiry.
@item expiry-wait
@cindex expiry-wait
Also @pxref{Topic Parameters}.
+Here's an example group parameter list:
+
+@example
+((to-address . "ding@@gnus.org")
+ (auto-expiry . t))
+@end example
+
@node Listing Groups
@section Listing Groups
@item F
@kindex F (Group)
-@findex gnus-find-new-newsgroups
-Find new groups and process them (@code{gnus-find-new-newsgroups}). If
-given a prefix, use the @code{ask-server} method to query the server for
-new groups.
+@findex gnus-group-find-new-groups
+Find new groups and process them (@code{gnus-group-find-new-groups}).
+If given a prefix, use the @code{ask-server} method to query the server
+for new groups.
@item C-c C-x
@kindex C-c C-x (Group)
Copy all groups that match some regular expression to a topic
(@code{gnus-topic-copy-matching}).
+@item T h
+@kindex T h (Topic)
+@findex gnus-topic-toggle-display-empty-topics
+Toggle hiding empty topics
+(@code{gnus-topic-toggle-display-empty-topics}).
+
@item T #
@kindex T # (Topic)
@findex gnus-topic-mark-topic
@item H f
@kindex H f (Group)
-@itemx M-f
@findex gnus-group-fetch-faq
@vindex gnus-group-faq-directory
@cindex FAQ
Describe all groups (@code{gnus-group-describe-all-groups}). If given a
prefix, force Gnus to re-read the description file from the server.
-@item V
+@item H v
+@itemx V
@kindex V (Group)
+@kindex H v (Group)
@cindex version
@findex gnus-version
Display current Gnus version numbers (@code{gnus-version}).
* Saving Articles:: Ways of customizing article saving.
* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
* Article Treatment:: The article buffer can be mangled at will.
+* Article Commands:: Doing various things with the article buffer.
* Summary Sorting:: Sorting the summary buffer in various ways.
* Finding the Parent:: No child support? Get the parent.
* Alternative Approaches:: Reading using non-default summaries.
@item D
@code{Date}.
@item d
-The @code{Date} in @code{YY-MMM} format.
+The @code{Date} in @code{DD-MMM} format.
@item o
The @code{Date} in @code{YYYYMMDDTHHMMSS} format.
@item M
original message (@code{gnus-summary-reply-with-original}). This
command uses the process/prefix convention.
+@item S w
+@kindex S w (Summary)
+@findex gnus-summary-wide-reply
+Mail a wide reply to the author of the current article
+(@code{gnus-summary-wide-reply}).
+
+@item S W
+@kindex S W (Summary)
+@findex gnus-summary-wide-reply-with-original
+Mail a wide reply to the current article and include the original
+message (@code{gnus-summary-reply-with-original}). This command uses
+the process/prefix convention.
+
@item S o m
@kindex S o m (Summary)
@findex gnus-summary-mail-forward
to the @code{root} account, you may want to resend it to
@code{postmaster}. Ordnung muß sein!
+This command understands the process/prefix convention
+(@pxref{Process/Prefix}).
+
@item S O m
@kindex S O m (Summary)
@findex gnus-uu-digest-mail-forward
@item S O p
@kindex S O p (Summary)
@findex gnus-uu-digest-post-forward
+@cindex digests
+@cindex making digests
Digest the current series and forward the result to a newsgroup
-(@code{gnus-uu-digest-mail-forward}).
+(@code{gnus-uu-digest-mail-forward}). This command uses the
+process/prefix convention.
@item S u
@kindex S u (Summary)
If you have just posted the article, and change your mind right away,
there is a trick you can use to cancel/supersede the article without
waiting for the article to appear on your site first. You simply return
-to the post buffer (which is called @code{*post-buf*}). There you will
+to the post buffer (which is called @code{*sent ...*}). There you will
find the article you just posted, with all the headers intact. Change
the @code{Message-ID} header to a @code{Cancel} or @code{Supersedes}
header by substituting one of those words for the word
Ask for a mark and then limit to all articles that have not been marked
with that mark (@code{gnus-summary-limit-to-marks}).
+@item / t
+@kindex / t (Summary)
+@findex gnus-summary-limit-to-age
+Ask for a number and then limit the summary buffer to articles that are
+older than (or equal to) that number of days
+(@code{gnus-summary-limit-to-marks}). If given a prefix, limit to
+articles that are younger than that number of days.
+
@item / n
@kindex / n (Summary)
@findex gnus-summary-limit-to-articles
@cindex threading
@cindex article threading
-Gnus threads articles by default. @dfn{To thread} is to put replies to
-articles directly after the articles they reply to---in a hierarchical
-fashion.
+Gnus threads articles by default. @dfn{To thread} is to put responses
+to articles directly after the articles they respond to---in a
+hierarchical fashion.
@menu
* Customizing Threading:: Variables you can change to affect the threading.
@cindex fuzzy article gathering
If you set this variable to the special value @code{fuzzy}, Gnus will
-use a fuzzy string comparison algorithm on the subjects.
+use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
+Matching}).
@item gnus-simplify-subject-fuzzy-regexp
@vindex gnus-simplify-subject-fuzzy-regexp
If non-@code{nil}, all threads will be hidden when the summary buffer is
generated.
+@item gnus-thread-expunge-below
+@vindex gnus-thread-expunge-below
+All threads that have a total score (as defined by
+@code{gnus-thread-score-function}) less than this number will be
+expunged. This variable is @code{nil} by default, which means that no
+threads are expunged.
+
@item gnus-thread-hide-killed
@vindex gnus-thread-hide-killed
if you kill a thread and this variable is non-@code{nil}, the subtree
@vindex gnus-thread-indent-level
This is a number that says how much each sub-thread should be indented.
The default is 4.
+
+@item gnus-parse-headers-hook
+@vindex gnus-parse-headers-hook
+Hook run before parsing any headers. The default value is
+@code{(gnus-decode-rfc1522)}, which means that QPized headers will be
+slightly decoded in a hackish way. This is likely to change in the
+future when Gnus becomes @sc{MIME}ified.
+
@end table
when doing thread commands. If this variable is @code{nil}, articles in
the same thread with different subjects will not be included in the
operation in question. If this variable is @code{fuzzy}, only articles
-that have subjects that are fuzzily equal will be included.
+that have subjects that are fuzzily equal will be included (@pxref{Fuzzy
+Matching}).
@node Sorting
(setq gnus-thread-sort-functions
'(gnus-thread-sort-by-number
gnus-thread-sort-by-subject
- gnus-thread-sort-by-score))
+ gnus-thread-sort-by-total-score))
@end lisp
The threads that have highest score will be displayed first in the
@code{Archive-name} line and use that as a suggestion for the file
name.
+Here's an example function to clean up file names somewhat. If you have
+lots of mail groups that are called things like
+@samp{nnml:mail.whatever}, you may want to chop off the beginning of
+these group names before creating the file name to save to. The
+following will do just that:
+
+@lisp
+(defun my-save-name (group)
+ (when (string-match "^nnml:mail." group)
+ (substring group (match-end 0))))
+
+(setq gnus-split-methods
+ '((gnus-article-archive-name)
+ (my-save-name)))
+@end lisp
+
+
@vindex gnus-use-long-file-name
Finally, you have the @code{gnus-use-long-file-name} variable. If it is
@code{nil}, all the preceding functions will replace all periods
@item W W p
@kindex W W p (Summary)
@findex gnus-article-hide-pgp
-Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).
+@vindex gnus-article-hide-pgp-hook
+Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}). The
+@code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
+signature has been hidden.
@item W W P
@kindex W W P (Summary)
function in @code{gnus-article-display-hook}, it should be run fairly
late and certainly after any highlighting.
+You can give the command a numerical prefix to specify the width to use
+when filling.
+
@item W c
@kindex W c (Summary)
@findex gnus-article-remove-cr
Do all the three commands above
(@code{gnus-article-strip-blank-lines}).
+@item W E s
+@kindex W E s (Summary)
+@findex gnus-article-strip-leading-space
+Remove all white space from the beginning of all lines of the article
+body (@code{gnus-article-strip-leading-space}).
+
@end table
@findex gnus-article-date-local
Display the date in the local timezone (@code{gnus-article-date-local}).
+@item W T s
+@kindex W T s (Summary)
+@vindex gnus-article-time-format
+@findex gnus-article-date-user
+@findex format-time-string
+Display the date using a user-defined format
+(@code{gnus-article-date-user}). The format is specified by the
+@code{gnus-article-time-format} variable, and is a string that's passed
+to @code{format-time-string}. See the documentation of that variable
+for a list possible format specs.
+
@item W T e
@kindex W T e (Summary)
@findex gnus-article-date-lapsed
listed above.
+@node Article Commands
+@section Article Commands
+
+@table @kbd
+
+@item A P
+@cindex PostScript
+@cindex printing
+@kindex A P (Summary)
+@vindex gnus-ps-print-hook
+@findex gnus-summary-print-article
+Generate and print a PostScript image of the article buffer
+(@code{gnus-summary-print-article}). @code{gnus-ps-print-hook} will be
+run just before printing the buffer.
+
+@end table
+
+
@node Summary Sorting
@section Summary Sorting
@cindex summary sorting
that look something like @samp{<38o6up$6f2@@hymir.ifi.uio.no>}. You
have to get it all exactly right. No fuzzy searches, I'm afraid.
+The current select method will be used when fetching by
+@code{Message-ID} from non-news select method, but you can override this
+by giving this command a prefix.
+
@vindex gnus-refer-article-method
If the group you are reading is located on a backend that does not
support fetching by @code{Message-ID} very well (like @code{nnspool}),
@subsection Pick and Read
@cindex pick and read
-Some newsreaders (like @code{nn} and, uhm, @code{nn}) use a two-phased
-reading interface. The user first marks the articles she wants to read
-from a summary buffer. Then she starts reading the articles with just
-an article buffer displayed.
+Some newsreaders (like @code{nn} and, uhm, @code{Netnews} on VM/CMS) use
+a two-phased reading interface. The user first marks the articles she
+wants to read from a summary buffer. Then she starts reading the
+articles with just an article buffer displayed.
@findex gnus-pick-mode
@kindex M-x gnus-pick-mode
If this variable is non-@code{nil}, Gnus will try to keep the tree
buffer as small as possible to allow more room for the other Gnus
windows. If this variable is a number, the tree buffer will never be
-higher than that number. The default is @code{t}.
+higher than that number. The default is @code{t}. Note that if you
+have several windows displayed side-by-side in a frame and the tree
+buffer is one of these, minimizing the tree window will also resize all
+other windows that are displayed next to it.
@item gnus-generate-tree-function
@vindex gnus-generate-tree-function
@kindex B r (Summary)
@findex gnus-summary-respool-article
Respool the mail article (@code{gnus-summary-move-article}).
+@code{gnus-summary-respool-default-method} will be used as the default
+select method when respooling. This variable is @code{nil} by default,
+which means that the current group select method will be used instead.
@item B w
@itemx e
(@pxref{Saving Articles}). You may customize that variable to create
suggestions you find reasonable.
+@lisp
+(setq gnus-move-split-methods
+ '(("^From:.*Lars Magne" "nnml:junk")
+ ("^Subject:.*gnus" "nnfolder:important")
+ (".*" "nnml:misc")))
+@end lisp
+
@node Various Summary Stuff
@section Various Summary Stuff
it to, for instance, highlight lines or modify the look of the buffer in
some other ungodly manner. I don't care.
+@vindex gnus-summary-ignore-duplicates
+@item gnus-summary-ignore-duplicates
+When Gnus discovers two articles that have the same @code{Message-ID},
+it has to do something drastic. No articles are allowed to have the
+same @code{Message-ID}, but this may happen when reading mail from some
+sources. Gnus allows you to customize what happens with this variable.
+If it is @code{nil} (which is the default), Gnus will rename the
+@code{Message-ID} (for display purposes only) and display the article as
+any other article. If this variable is @code{t}, it won't display the
+article---it'll be as if it never existed.
+
@end table
called before doing much of the exiting, and calls
@code{gnus-summary-expire-articles} by default.
@code{gnus-summary-exit-hook} is called after finishing the exiting
-process.
+process. @code{gnus-group-no-more-groups-hook} is run when returning to
+group mode having no more (unread) groups.
@item Z E
@itemx Q
@findex gnus-summary-prev-group
Exit the group and go to the previous group
(@code{gnus-summary-prev-group}).
+
+@item Z s
+@kindex Z s (Summary)
+@findex gnus-summary-save-newsrc
+Save the current number of read/marked articles in the dribble buffer
+and then save the dribble buffer (@code{gnus-summary-save-newsrc}). If
+given a prefix, also save the @file{.newsrc} file(s). Using this
+command will make exit without updating (the @kbd{Q} command) worthless.
@end table
@vindex gnus-exit-group-hook
List of regexps to match headers included in digested messages. The
headers will be included in the sequence they are matched.
+@item gnus-add-to-list
+@vindex gnus-add-to-list
+If non-@code{nil}, add a @code{to-list} group parameter to mail groups
+that have none when you do a @kbd{a}.
+
@end table
@cindex archived messages
@cindex sent messages
-Gnus provides a few different methods for storing the mail you send.
-The default method is to use the @dfn{archive virtual server} to store
-the mail. If you want to disable this completely, you should set
-@code{gnus-message-archive-group} to @code{nil}.
+Gnus provides a few different methods for storing the mail and news you
+send. The default method is to use the @dfn{archive virtual server} to
+store the messages. If you want to disable this completely, the
+@code{gnus-message-archive-group} variable should be @code{nil}, which
+is the default.
@vindex gnus-message-archive-method
@code{gnus-message-archive-method} says what virtual server Gnus is to
nice---@samp{misc-mail-september-1995}, or whatever. New messages will
continue to be stored in the old (now empty) group.
-That's the default method of archiving sent mail. Gnus also a different
-way for the people who don't like the default method. In that case you
-should set @code{gnus-message-archive-group} to @code{nil}; this will
-disable archiving.
+That's the default method of archiving sent messages. Gnus also a
+different way for the people who don't like the default method. In that
+case you should set @code{gnus-message-archive-group} to @code{nil};
+this will disable archiving.
XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
use a different value for @code{gnus-message-archive-group} there.
message in, you can set this variable to a function that checks the
current newsgroup name and then returns a suitable group name (or list
of names).
+
+This variable can be used instead of @code{gnus-message-archive-group},
+but the latter is the preferred method.
@end table
* Server Commands:: Commands to manipulate servers.
* Example Methods:: Examples server specifications.
* Creating a Virtual Server:: An example session.
+* Server Variables:: Which variables to set.
* Servers and Methods:: You can use server names as select methods.
* Unavailable Servers:: Some servers you try to contact may be down.
@end menu
(nnmh-get-new-mail nil))
@end lisp
+If you are behind a firewall and only have access to the @sc{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.
+Doing this can be rather fiddly, but your virtual server definition
+should probably look something like this:
+
+@lisp
+(nntp "firewall"
+ (nntp-address "the.firewall.machine")
+ (nntp-open-connection-function nntp-open-rlogin)
+ (nntp-end-of-line "\n")
+ (nntp-rlogin-parameters
+ ("telnet" "the.real.nntp.host" "nntp")))
+@end lisp
+
+
@node Creating a Virtual Server
@subsection Creating a Virtual Server
buffer, and you should be able to enter any of the groups displayed.
+@node Server Variables
+@subsection Server Variables
+
+One sticky point when defining variables (both on backends and in Emacs
+in general) is that some variables are typically initialized from other
+variables when the definition of the variables is being loaded. If you
+change the "base" variable after the variables have been loaded, you
+won't change the "derived" variables.
+
+This typically affects directory and file variables. For instance,
+@code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml}
+directory variables are initialized from that variable, so
+@code{nnml-active-file} will be @file{~/Mail/active}. If you define a
+new virtual @code{nnml} server, it will @emph{not} suffice to set just
+@code{nnml-directory}---you have to explicitly set all the file
+variables to be what you want them to be. For a complete list of
+variables for each backend, see each backend's section later in this
+manual, but here's an example @code{nnml} definition:
+
+@lisp
+(nnml "public"
+ (nnml-directory "~/my-mail/")
+ (nnml-active-file "~/my-mail/active")
+ (nnml-newsgroups-file "~/my-mail/newsgroups"))
+@end lisp
+
+
@node Servers and Methods
@subsection Servers and Methods
That might seem quite naughty, but it does make sense most of the time.
Let's say you have 10 groups subscribed to the server
-@samp{nepholococcygia.com}. This server is located somewhere quite far
-away from you, the machine is quite, so it takes 1 minute just to find
-out that it refuses connection from you today. If Gnus were to attempt
-to do that 10 times, you'd be quite annoyed, so Gnus won't attempt to do
-that. Once it has gotten a single ``connection refused'', it will
-regard that server as ``down''.
+@samp{nephelococcygia.com}. This server is located somewhere quite far
+away from you and the machine is quite slow, so it takes 1 minute just
+to find out that it refuses connection from you today. If Gnus were to
+attempt to do that 10 times, you'd be quite annoyed, so Gnus won't
+attempt to do that. Once it has gotten a single ``connection refused'',
+it will regard that server as ``down''.
So, what happens if the machine was only feeling unwell temporarily?
How do you test to see whether the machine has come up again?
server.
@findex nntp-open-rlogin
+@findex nntp-open-telnet
@findex nntp-open-network-stream
-@item nntp-open-server-function
-@vindex nntp-open-server-function
-This function is used to connect to the remote system. Two pre-made
+@item nntp-open-connection-function
+@vindex nntp-open-connection-function
+This function is used to connect to the remote system. Three pre-made
functions are @code{nntp-open-network-stream}, which is the default, and
simply connects to some port or other on the remote system. The other
-is @code{nntp-open-rlogin}, which does an rlogin on the remote system,
-and then does a telnet to the @sc{nntp} server available there.
+two are @code{nntp-open-rlogin}, which does an @samp{rlogin} on the
+remote system, and then does a @samp{telnet} to the @sc{nntp} server
+available there, and @code{nntp-open-telnet}, which does a @samp{telnet}
+to the remote system and then another @samp{telnet} to get to the
+@sc{nntp} server.
+
+@code{nntp-open-rlogin}-related variables:
+
+@table @code
@item nntp-rlogin-parameters
@vindex nntp-rlogin-parameters
-If you use @code{nntp-open-rlogin} as the
-@code{nntp-open-server-function}, this list will be used as the
-parameter list given to @code{rsh}.
+This list will be used as the parameter list given to @code{rsh}.
+
+@item nntp-rlogin-user-name
+@vindex nntp-rlogin-user-name
+User name on the remote system.
+
+@end table
+
+@code{nntp-open-telnet}-related variables:
+
+@table @code
+@item nntp-telnet-command
+@vindex nntp-telnet-command
+Command used to start @samp{telnet}.
+
+@item nntp-telnet-switches
+@vindex nntp-telnet-switches
+List of strings to be used as the switches to the telnet command.
+
+@item nntp-telnet-user-name
+@vindex nntp-telnet-user-name
+User name to log in on the remote system as.
+
+@item nntp-telnet-passwd
+@vindex nntp-telnet-passwd
+Password to use when logging in.
+
+@item nntp-telnet-parameters
+@vindex nntp-telnet-parameters
+A list of strings that will be executed as a command after logging in
+via telnet.
+
+@end table
@item nntp-end-of-line
@vindex nntp-end-of-line
mail belongs in that group.
The last of these groups should always be a general one, and the regular
-expression should @emph{always} be @samp{} so that it matches any
-mails that haven't been matched by any of the other regexps.
+expression should @emph{always} be @samp{} so that it matches any mails
+that haven't been matched by any of the other regexps. (These rules are
+processed from the beginning of the alist toward the end. The first
+rule to make a match will "win", unless you have crossposting enabled.
+In that case, all matching rules will "win".)
If you like to tinker with this yourself, you can set this variable to a
function of your choice. This function will be called without any
@code{t} and be prompted for the password, or set
@code{nnmail-pop-password} to the password itself.
+@code{nnmail-spool-file} can also be a list of mailboxes.
+
Your Emacs has to have been configured with @samp{--with-pop} before
compilation. This is the default, but some installations have it
switched off.
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
is discarded after the splitting has been done, and no changes performed
-in the buffer will show up in any files. @code{article-decode-rfc1522}
+in the buffer will show up in any files. @code{gnus-article-decode-rfc1522}
is one likely function to add to this hook.
@vindex nnmail-pre-get-new-mail-hook
@cindex incoming mail files
@cindex deleting incoming files
If non-@code{nil}, the mail backends will delete the temporary incoming
-file after splitting mail into the proper groups. This is @code{nil} by
-default for reasons of security.
+file after splitting mail into the proper groups. This is @code{t} by
+default.
+
+@c This is @code{nil} by
+@c default for reasons of security.
-Since Red Gnus is an alpha release, it is to be expected to lose mail.
+@c Since Red Gnus is an alpha release, it is to be expected to lose mail.
(No Gnus release since (ding) Gnus 0.10 (or something like that) have
-lost mail, I think, but that's not the point.) By not deleting the
-Incoming* files, one can be sure to not lose mail -- if Gnus totally
-whacks out, one can always recover what was lost.
+lost mail, I think, but that's not the point. (Except certain versions
+of Red Gnus.)) By not deleting the Incoming* files, one can be sure to
+not lose mail -- if Gnus totally whacks out, one can always recover what
+was lost.
Delete the @file{Incoming*} files at will.
@findex delete-file
Function called to delete files. It is @code{delete-file} by default.
+@item nnmail-cache-accepted-message-ids
+@vindex nnmail-cache-accepted-message-ids
+If non-@code{nil}, put the @code{Message-ID}s of articles imported into
+the backend (via @code{Gcc}, for instance) into the mail duplication
+discovery cache. The default is @code{nil}.
+
@end table
(any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
(any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
;; People...
- (any "larsi@@ifi\\.uio\\.no" "people.Lars Magne Ingebrigtsen"))
+ (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
;; Unmatched mail goes to the catch all group.
"misc.misc")
@end lisp
If you use @code{procmail} to split things directory into an @code{nnmh}
directory (which you shouldn't do), you should set
@code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
-ever expiring the final article in a mail newsgroup. This is quite,
-quite important.
+ever expiring the final article (i. e., the article with the highest
+article number) in a mail newsgroup. This is quite, quite important.
Here's an example setup: The incoming spools are located in
@file{~/incoming/} and have @samp{""} as suffixes (i. e., the incoming
articles that are marked as expirable have an @samp{E} in the first
column in the summary buffer.
+By default, if you have auto expiry switched on, Gnus will mark all the
+articles you read as expirable, no matter if they were read or unread
+before. To avoid having articles marked as read marked as expirable
+automatically, you can put something like the following in your
+@file{.gnus} file:
+
+@vindex gnus-mark-article-hook
+@lisp
+(remove-hook 'gnus-mark-article-hook
+ 'gnus-summary-mark-read-and-unread-as-read)
+(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
+@end lisp
+
Note that making a group auto-expirable don't mean that all read
articles are expired---only the articles that are marked as expirable
will be expired. Also note the using the @kbd{d} command won't make
@vindex nnmail-expiry-wait
The @code{nnmail-expiry-wait} variable supplies the default time an
-expirable article has to live. The default is seven days.
+expirable article has to live. Gnus starts counting days from when the
+message @emph{arrived}, not from when it was sent. The default is seven
+days.
Gnus also supplies a function that lets you fine-tune how long articles
are to live, based on what group they are in. Let's say you want to
stored.) If all this sounds scary to you, you can set
@code{nnmail-treat-duplicates} to @code{warn} (which is what it is by
default), and @code{nnmail} won't delete duplicate mails. Instead it
-will generate a brand new @code{Message-ID} for the mail and insert a
-warning into the head of the mail saying that it thinks that this is a
-duplicate of a different message.
+will insert a warning into the head of the mail saying that it thinks
+that this is a duplicate of a different message.
This variable can also be a function. If that's the case, the function
will be called from a buffer narrowed to the message in question with
@item nndoc-article-type
@vindex nndoc-article-type
This should be one of @code{mbox}, @code{babyl}, @code{digest},
-@code{mmdf}, @code{forward}, @code{news}, @code{rnews},
-@code{mime-digest}, @code{clari-briefs}, or @code{guess}.
+@code{mmdf}, @code{forward}, @code{rfc934}, @code{rfc822-forward},
+@code{news}, @code{rnews}, @code{mime-digest}, @code{clari-briefs}, or
+@code{guess}.
@item nndoc-post-type
@vindex nndoc-post-type
@item body-end
If present, this should match the end of the body of the article.
-@item nndoc-file-end
+@item file-end
If present, this should match the end of the file. All text after this
regexp will be totally ignored.
Substring matching.
@item f
-Fuzzy matching.
+Fuzzy matching (@pxref{Fuzzy Matching}).
@item r
Regexp matching
@vindex gnus-summary-default-score
Default score of an article, which is 0 by default.
+@item gnus-summary-expunge-below
+@vindex gnus-summary-expunge-below
+Don't display the summary lines of articles that have scores lower than
+this variable. This is @code{nil} by default, which means that no
+articles will be hidden.
+
@item gnus-score-over-mark
@vindex gnus-score-over-mark
Mark (in the third column) used for articles with a score over the
(eval (ding)))
@end lisp
-This example demonstrates absolutely everything about a score file.
+This example demonstrates most score file elements. For a different
+approach, see @pxref{Advanced Scoring}.
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
element}. This date says when the last time this score entry matched,
which provides a mechanism for expiring the score entries. It this
element is not present, the score entry is permanent. The date is
-represented by the number of days since December 31, 1 ce.
+represented by the number of days since December 31, 1 BCE.
@item
If the fourth element is present, it should be a symbol---the @dfn{type
you e.g. increase the score of followups to your own articles, or
decrease the score of followups to the articles of some known
trouble-maker. Uses the same match types as the @code{From} header
-uses.
+uses. (Using this match key will lead to creation of @file{ADAPT}
+files.)
@item Thread
This match key works along the same lines as the @code{Followup} match
articles.) This will ensure that you can raise/lower the score of an
entire thread, even though some articles in the thread may not have
complete @code{References} headers. Note that using this may lead to
-undeterministic scores of the articles in the thread.
+undeterministic scores of the articles in the thread. (Using this match
+key will lead to creation of @file{ADAPT} files.)
@end table
@end enumerate
@code{gnus-psychoanalyze-user} command to go through the rules and see
what words you like and what words you don't like. Or perhaps not.
+Note that the adaptive word scoring thing is highly experimental and is
+likely to change in the future. Initial impressions seem to indicate
+that it's totally useless as it stands. Some more work (involving more
+rigorous statistical methods) will have to be done to make this useful.
+
@node Home Score File
@section Home Score File
myself:
@lisp
-("references"
- "<x6[0-9a-z]+\\.fsf@@.*eyesore.no>" 1000 nil r)
+("references"
+ ("<x6[0-9a-z]+\\.fsf@@.*eyesore.no>" 1000 nil r))
@end lisp
Whether it's the first two or first three characters that are ``yours''
files are applicable to which group.
Say you want to use the score file
-@file{/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE} and
+@file{/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE} and
all score files in the @file{/ftp@@ftp.some-where:/pub/score} directory:
@lisp
(setq gnus-global-score-files
- '("/ftp@@ftp.ifi.uio.no:/pub/larsi/ding/score/soc.motss.SCORE"
+ '("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
"/ftp@@ftp.some-where:/pub/score/"))
@end lisp
* Undo:: Some actions can be undone.
* Moderation:: What to do if you're a moderator.
* XEmacs Enhancements:: There are more pictures and stuff under XEmacs.
+* Fuzzy Matching:: What's the big fuzz?
+* Thwarting Email Spam:: A how-to on avoiding unsolited commercial email.
* Various Various:: Things that are really various.
@end menu
@code{browse}, @code{message}, @code{pick}, @code{info},
@code{summary-faq}, @code{edit-group}, @code{edit-server},
@code{edit-score}, @code{post}, @code{reply}, @code{forward},
-@code{reply-yank}, @code{mail-bounce}, @code{draft},
-@code{pipe}, @code{bug}, @code{compose-bounce}.
+@code{reply-yank}, @code{mail-bounce}, @code{draft}, @code{pipe},
+@code{bug}, @code{compose-bounce}.
Note that the @code{message} key is used for both
@code{gnus-group-mail} and @code{gnus-summary-mail-other-window}. If
If this variable is @code{nil} (which is the default), the mode line
strings won't be chopped off, and they won't be padded either.
+Note that the default is unlikely to be desirable, as even the
+percentage complete in the buffer may be crowded off the mode line;
+the user should configure this variable appropriately for their
+configuration.
@node Highlighting and Menus
This is the face (i.e., font) used for mouse highlighting in Gnus. No
mouse highlights will be done if @code{gnus-visual} is @code{nil}.
-@item gnus-display-type
-@vindex gnus-display-type
-This variable is symbol indicating the display type Emacs is running
-under. The symbol should be one of @code{color}, @code{grayscale} or
-@code{mono}. If Gnus guesses this display attribute wrongly, either set
-this variable in your @file{~/.emacs} or set the resource
-@code{Emacs.displayType} in your @file{~/.Xdefaults}.
-
-@item gnus-background-mode
-@vindex gnus-background-mode
-This is a symbol indicating the Emacs background brightness. The symbol
-should be one of @code{light} or @code{dark}. If Gnus guesses this
-frame attribute wrongly, either set this variable in your @file{~/.emacs} or
-set the resource @code{Emacs.backgroundMode} in your @file{~/.Xdefaults}.
-`gnus-display-type'.
@end table
There are hooks associated with the creation of all the different menus:
@findex gnus-demon-add-handler
@lisp
-(gnus-demon-add-handler 'gnus-demon-close-connections nil 30)
+(gnus-demon-add-handler 'gnus-demon-close-connections 30 t)
@end lisp
@findex gnus-demon-add-nocem
@findex gnus-demon-add-scanmail
@findex gnus-demon-add-rescan
+@findex gnus-demon-add-scan-timestamps
@findex gnus-demon-add-disconnection
Some ready-made functions to do this has been created:
@code{gnus-demon-add-nocem}, @code{gnus-demon-add-disconnection},
-@code{gnus-demon-add-rescan}, and @code{gnus-demon-add-scanmail}. Just
-put those functions in your @file{.gnus} if you want those abilities.
+@code{gnus-demon-add-scan-timestamps}, @code{gnus-demon-add-rescan}, and
+@code{gnus-demon-add-scanmail}. Just put those functions in your
+@file{.gnus} if you want those abilities.
@findex gnus-demon-init
@findex gnus-demon-cancel
Note that adding daemons can be pretty naughty if you overdo it. Adding
functions that scan all news and mail from all servers every two seconds
is a sure-fire way of getting booted off any respectable system. So
-behave.
+behave.
@node NoCeM
@item gnus-nocem-groups
@vindex gnus-nocem-groups
Gnus will look for NoCeM messages in the groups in this list. The
-default is @code{("alt.nocem.misc" "news.admin.net-abuse.announce")}.
+default is @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
+"alt.nocem.misc" "news.admin.net-abuse.announce")}.
@item gnus-nocem-issuers
@vindex gnus-nocem-issuers
You do not have to heed NoCeM messages from all these people---just the
ones you want to listen to.
+@item gnus-nocem-verifyer
+@vindex gnus-nocem-verifyer
+@findex mc-verify
+This should be a function for verifying that the NoCeM issuer is who she
+says she is. The default is @code{mc-verify}, which is a Mailcrypt
+function. If this is too slow and you don't care for verification
+(which may be dangerous), you can set this variable to @code{nil}.
+
+If you want signed NoCeM messages to be verified and unsigned messages
+not to be verified (but used anyway), you could do something like:
+
+@lisp
+(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
+
+(defun my-gnus-mc-verify ()
+ (not (eq 'forged
+ (ignore-errors
+ (if (mc-verify)
+ t
+ 'forged)))))
+@end lisp
+
+This might be dangerous, though.
+
@item gnus-nocem-directory
@vindex gnus-nocem-directory
This is where Gnus will store its NoCeM cache files. The default is
@end table
+Using NoCeM could potentially be a memory hog. If you have many living
+(i. e., subscribed or unsubscribed groups), your Emacs process will grow
+big. If this is a problem, you should kill off all (or most) of your
+unsubscribed groups (@pxref{Subscription Commands}).
+
@node Picons
@section Picons
If you are a moderator, you can use the @file{gnus-mdrtn.el} package.
It is not included in the standard Gnus package. Write a mail to
-@samp{larsi@@ifi.uio.no} and state what group you moderate, and you'll
+@samp{larsi@@gnus.org} and state what group you moderate, and you'll
get a copy.
The moderation package is implemented as a minor mode for summary
@end table
+@node Fuzzy Matching
+@section Fuzzy Matching
+@cindex fuzzy matching
+
+Gnus provides @dfn{fuzzy matching} of @code{Subject} lines when doing
+things like scoring, thread gathering and thread comparison.
+
+As opposed to regular expression matching, fuzzy matching is very fuzzy.
+It's so fuzzy that there's not even a definition of what @dfn{fuzziness}
+means, and the implementation has changed over time.
+
+Basically, it tries to remove all noise from lines before comparing.
+@samp{Re: }, parenthetical remarks, white space, and so on, are filtered
+out of the strings before comparing the results. This often leads to
+adequate results---even when faced with strings generated by text
+manglers masquerading as newsreaders.
+
+
+@node Thwarting Email Spam
+@section Thwarting Email Spam
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+In these last days of the Usenet, commercial vultures are hanging about
+and grepping through news like crazy to find email addresses they can
+foist off their scams and products to. As a reaction to this, many
+people have started putting nonsense addresses into their @code{From}
+lines. I think this is counterproductive---it makes it difficult for
+people to send you legitimate mail in response to things you write, as
+well as making it difficult to see who wrote what. This rewriting may
+perhaps be a bigger menace than the unsolicited commercial email itself
+in the end.
+
+The biggest problem I have with email spam is that it comes in under
+false pretenses. I press @kbd{g} and Gnus merrily informs me that I
+have 10 new emails. I say ``Golly gee! Happy is me!'' and selects the
+mail group, only to find two pyramid schemes, seven advertisements
+(``New! Miracle tonic for growing full, lustrouos hair on your toes!'')
+and one mail asking me to repent and find some god.
+
+This is annoying.
+
+The way to deal with this is having Gnus split out all spam into a
+@samp{spam} mail group (@pxref{Splitting Mail}).
+
+First, pick one (1) legal mail address that you can be reached at, and
+put it in your @code{From} header of all your news articles. (I've
+chosen @samp{larsi@@trym.ifi.uio.no}, but for many addresses on the form
+@samp{larsi+usenet@@ifi.uio.no} will be a better choice. Ask your
+sysadm whether your sendmail installation accepts keywords in the local
+part of the mail address.)
+
+@lisp
+(setq message-default-news-headers
+ "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
+@end lisp
+
+Then put the following split rule in @code{nnmail-split-fancy}
+(@pxref{Fancy Mail Splitting}):
+
+@lisp
+(
+ ...
+ (to "larsi@@trym.ifi.uio.no"
+ (| ("subject" "re:.*" "misc")
+ ("references" ".*@@.*" "misc")
+ "spam"))
+ ...
+)
+@end lisp
+
+This says that all mail to this address is suspect, but if it has a
+@code{Subject} that starts with a @samp{Re:} or has a @code{References}
+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 @code{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
+twarting scheme? In any case, this is trivial to deal with---you just
+put anything not addressed to you in the @samp{spam} group by ending
+your fancy split rule in this way:
+
+@lisp
+(
+ ...
+ (to "larsi" "misc")
+ "spam")
+@end lisp
+
+In my experience, this will sort virtually everything into the right
+group. You still have to check the @samp{spam} group from time to time to
+check for legitimate mail, though. If you feel like being a good net
+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, availiable FOR FREE
+at @file{<URL: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
+to non-existant domains is yucky, in my opinion.
+
+
@node Various Various
@section Various Various
@cindex mode lines
@table @code
+@item gnus-home-directory
+All Gnus path variables will be initialized from this variable, which
+defaults to @file{~/}.
+
@item gnus-directory
@vindex gnus-directory
-All Gnus directories will be initialized from this variable, which
-defaults to the @samp{SAVEDIR} environment variable, or @file{~/News/}
-if that variable isn't set.
+Most Gnus storage path variables will be initialized from this variable,
+which defaults to the @samp{SAVEDIR} environment variable, or
+@file{~/News/} if that variable isn't set.
@item gnus-default-directory
@vindex gnus-default-directory
``@sc{gnus}''. New vs. old.
The first ``proper'' release of Gnus 5 was done in November 1995 when it
-was included in the Emacs 19.30 distribution.
+was included in the Emacs 19.30 distribution (132 (ding) Gnus releases
+plus 15 Gnus 5.0 releases).
-In May 1996 the next Gnus generation (aka. ``September Gnus'') was
-released under the name ``Gnus 5.2''.
+In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99
+releases)) was released under the name ``Gnus 5.2'' (40 releases).
-On July 28th 1996 work on Red Gnus was begun.
+On July 28th 1996 work on Red Gnus was begun, and it was released on
+January 25th 1997 (after 84 releases) as ``Gnus 5.4''.
If you happen upon a version of Gnus that has a name that is prefixed --
-``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Mamey Sapote Gnus''
--- don't panic. Don't let it know that you're frightened. Back away.
+``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
+don't panic. Don't let it know that you're frightened. Back away.
Slowly. Whatever you do, don't run. Walk away, calmly, until you're
out of its reach. Find a proper released version of Gnus and snuggle up
to that instead.
coming from @code{tin} and @code{Netscape} I know not to use either of
those for posting articles. I would not have known that if it wasn't
for the @code{X-Newsreader} header.
-
-@item References
-Gnus does line breaking on this header. I infer from RFC1036 that being
-conservative in what you output is not creating 5000-character lines, so
-it seems like a good idea to me. However, this standard-to-be says that
-whitespace in the @code{References} header is to be preserved, so... It
-doesn't matter one way or the other to Gnus, so if somebody tells me
-what The Way is, I'll change it. Or not.
@end table
@end table
Wes Hardaker---@file{gnus-picon.el} and the manual section on
@dfn{picons} (@pxref{Picons}).
+@item
+Kim-Minh Kaplan---further work on the picon code.
+
@item
Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
(@pxref{GroupLens}).
Also thanks to the following for patches and stuff:
+Adrian Aichner,
Peter Arius,
+Matt Armstrong,
Marc Auslander,
+Chris Bone,
Mark Borges,
Lance A. Brown,
Kees de Bruin,
Kevin Buhr,
Alastair Burt,
Joao Cachopo,
+Zlatko Calusic,
Massimo Campostrini,
+Dan Christensen,
Michael R. Cook,
Glenn Coombs,
Frank D. Cringle,
Geoffrey T. Dairiki,
+Andre Deparade,
Ulrik Dickow,
Dave Disser,
Joev Dubach,
+Michael Welsh Duggan,
Paul Eggert,
Michael Ernst,
Luc Van Eycken,
Sam Falkner,
Paul Franklin,
+Arne Georg Gleditsch,
David S. Goldberg,
D. Hall,
Magnus Hammerin,
Raja R. Harinath,
+Hisashige Kenji, @c Hisashige
Marc Horowitz,
+Gunnar Horrigmo,
+Brad Howes,
+François Felix Ingrand,
Ishikawa Ichiro, @c Ishikawa
-Francois Felix Ingrand,
Lee Iverson,
+Rajappa Iyer,
Randell Jesup,
Fred Johansen,
+Greg Klanderman,
+Karl Kleinpaste,
+Peter Skov Knudsen,
+Shuhei Kobayashi, @c Kobayashi
Thor Kristoffersen,
Jens Lautenbacher,
Carsten Leonhardt,
+James LewisMoss,
Christian Limpach,
+Markus Linnala,
+Dave Love,
Tonny Madsen,
Shlomo Mahlab,
Nat Makarevitch,
+David Martin,
+Gordon Matzigkeit,
Timo Metzemakers,
Richard Mlynarik,
Lantz Moore,
Morioka Tomohiko, @c Morioka
+Erik Toubro Nielsen,
Hrvoje Niksic,
Andy Norman,
C. R. Oldham,
William Perry,
Stephen Peters,
Ulrich Pfeifer,
+John McClary Prevost,
Colin Rafferty,
Bart Robinson,
+Jason Rumney,
+Dewey M. Sasser,
+Loren Schall,
+Dan Schmidt,
Ralph Schleicher,
+Philippe Schnoebelen,
Randal L. Schwartz,
Danny Siu,
Paul D. Smith,
Jeff Sparkes,
+Toby Speight,
Michael Sperber,
Richard Stallman,
Greg Stark,
+Paul Stodghill,
Kurt Swanson,
Samuel Tardieu,
Teddy,
Chuck Thompson,
Philippe Troin,
+Aaron M. Ucko,
Jan Vroonhof,
Barry A. Warsaw,
Christoph Wedler,
and
Katsumi Yamaoka. @c Yamaoka
+For a full overview of what each person has done, the ChangeLogs
+included in the Gnus alpha distributions should give ample reading
+(550kB and counting).
Apologies to everybody that I've forgotten, of which there are many, I'm
sure.
@menu
* ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus.
* September Gnus:: The Thing Formally Known As Gnus 5.3/5.3.
-* Red Gnus:: The future---Gnus 5.4/5.5.
+* Red Gnus:: Third time best---Gnus 5.4/5.5.
@end menu
These lists are, of course, just @emph{short} overviews of the
@item foreign
@cindex foreign
You can also have any number of foreign groups active at the same time.
-These are groups that use different backends for getting news.
+These are groups that use non-native non-secondary backends for getting
+news.
@item secondary
@cindex secondary
This is the opposite of ephemeral groups. All groups listed in the
group buffer are solid groups.
+@item sparse articles
+@cindex sparse articles
+These are article placeholders shown in the summary buffer when
+@code{gnus-build-sparse-threads} has been switched on.
+
@end table
@cindex gnu.emacs.gnus
@cindex ding mailing list
-You can also ask on the ding mailing list---@samp{ding@@ifi.uio.no}.
-Write to @samp{ding-request@@ifi.uio.no} to subscribe.
+You can also ask on the ding mailing list---@samp{ding@@gnus.org}.
+Write to @samp{ding-request@@gnus.org} to subscribe.
@node A Programmers Guide to Gnus
and general method of operations.
@menu
+* Gnus Utility Functions:: Common functions and variable to use.
* Backend Interface:: How Gnus communicates with the servers.
* Score File Syntax:: A BNF definition of the score file standard.
* Headers:: How Gnus stores headers internally.
@end menu
+@node Gnus Utility Functions
+@subsection Gnus Utility Functions
+@cindex Gnus utility functions
+@cindex utility functions
+@cindex functions
+@cindex internal variables
+
+When writing small functions to be run from hooks (and stuff), it's
+vital to have access to the Gnus internal functions and variables.
+Below is a list of the most common ones.
+
+@table @code
+
+@item gnus-newsgroup-name
+@vindex gnus-newsgroup-name
+This variable holds the name of the current newsgroup.
+
+@item gnus-find-method-for-group
+@findex gnus-find-method-for-group
+A function that returns the select method for @var{group}.
+
+@item gnus-group-real-name
+@findex gnus-group-real-name
+Takes a full (prefixed) Gnus group name, and returns the unprefixed
+name.
+
+@item gnus-group-prefixed-name
+@findex gnus-group-prefixed-name
+Takes an unprefixed group name and a select method, and returns the full
+(prefixed) Gnus group name.
+
+@item gnus-get-info
+@findex gnus-get-info
+Return the group info list for @var{group}.
+
+@item gnus-add-current-to-buffer-list
+@findex gnus-add-current-to-buffer-list
+Add the current buffer to the list of buffers to be killed on Gnus
+exit.
+
+@item gnus-continuum-version
+@findex gnus-continuum-version
+Take a Gnus version string as a parameter and returns a floating point
+number. Earlier versions will always get a lower number than later
+versions.
+
+@item gnus-group-read-only-p
+@findex gnus-group-read-only-p
+Say whether @var{group} is read-only or not.
+
+@item gnus-news-group-p
+@findex gnus-news-group-p
+Say whether @var{group} came from a news backend.
+
+@item gnus-ephemeral-group-p
+@findex gnus-ephemeral-group-p
+Say whether @var{group} is ephemeral or not.
+
+@item gnus-server-to-method
+@findex gnus-server-to-method
+Return the select method corresponding to @var{server}.
+
+@item gnus-server-equal
+@findex gnus-server-equal
+Say whether two virtual servers are equal.
+
+@item gnus-group-native-p
+@findex gnus-group-native-p
+Say whether @var{group} is native or not.
+
+@item gnus-group-secondary-p
+@findex gnus-group-secondary-p
+Say whether @var{group} is secondary or not.
+
+@item gnus-group-foreign-p
+@findex gnus-group-foreign-p
+Say whether @var{group} is foreign or not.
+
+@item group-group-find-parameter
+@findex group-group-find-parameter
+Return the parameter list of @var{group}. If given a second parameter,
+return the value of that parameter for @var{group}.
+
+@item gnus-group-set-parameter
+@findex gnus-group-set-parameter
+Takes three parameters; @var{group}, @var{parameter} and @var{value}.
+
+@item gnus-narrow-to-body
+@findex gnus-narrow-to-body
+Narrow the current buffer to the body of the article.
+
+@item gnus-check-backend-function
+@findex gnus-check-backend-function
+Takes two parameters, @var{function} and @var{group}. If the backend
+@var{group} comes from supports @var{function}, return non-@code{nil}.
+
+@lisp
+(gnus-check-backend-function "request-scan" "nnml:misc")
+=> t
+@end lisp
+
+@item gnus-read-method
+@findex gnus-read-method
+Prompt the user for a select method.
+
+@end table
+
+
@node Backend Interface
@subsection Backend Interface
on successful article retrievement.
-@item (nnchoke-open-group GROUP &optional SERVER)
-
-Make @var{group} the current group.
-
-There should be no data returned by this function.
-
-
@item (nnchoke-request-group GROUP &optional SERVER FAST)
Get data on @var{group}. This function also has the side effect of
A Gnus group info (@pxref{Group Info}) is handed to the backend for
alterations. This comes in handy if the backend really carries all the
-information (as is the case with virtual an imap groups). This function
-may alter the info in any manner it sees fit, and should return the
-(altered) group info. This function may alter the group info
-destructively, so no copying is needed before boogeying.
+information (as is the case with virtual and imap groups). This
+function should destructively alter the info to suit its needs, and
+should return the (altered) group info.
There should be no result data from this function.
files = "files" *[ space <string> ]
exclude-files = "exclude-files" *[ space <string> ]
read-only = "read-only" [ space "nil" / space "t" ]
-adapt = "adapt" [ space "nil" / space "t" / space adapt-rule ]
+adapt = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
adapt-rule = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
local = "local" *[ space "(" <string> space <form> ")" ]
eval = "eval" space <form>
("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
((tick (15 . 19)) (replied 3 6 (19 . 3)))
(nnml "")
- (auto-expire (to-address "ding@@ifi.uio.no")))
+ (auto-expire (to-address "ding@@gnus.org")))
@end example
The first element is the @dfn{group name}---as Gnus knows the group,
@samp{<string>} consed on to a @samp{range}, but that's a bitch to say
in pseudo-BNF.
+If you have a Gnus info and want to access the elements, Gnus offers a
+series of macros for getting/setting these elements.
+
+@table @code
+@item gnus-info-group
+@itemx gnus-info-set-group
+@findex gnus-info-group
+@findex gnus-info-set-group
+Get/set the group name.
+
+@item gnus-info-rank
+@itemx gnus-info-set-rank
+@findex gnus-info-rank
+@findex gnus-info-set-rank
+Get/set the group rank.
+
+@item gnus-info-level
+@itemx gnus-info-set-level
+@findex gnus-info-level
+@findex gnus-info-set-level
+Get/set the group level.
+
+@item gnus-info-score
+@itemx gnus-info-set-score
+@findex gnus-info-score
+@findex gnus-info-set-score
+Get/set the group score.
+
+@item gnus-info-read
+@itemx gnus-info-set-read
+@findex gnus-info-read
+@findex gnus-info-set-read
+Get/set the ranges of read articles.
+
+@item gnus-info-marks
+@itemx gnus-info-set-marks
+@findex gnus-info-marks
+@findex gnus-info-set-marks
+Get/set the lists of ranges of marked articles.
+
+@item gnus-info-method
+@itemx gnus-info-set-method
+@findex gnus-info-method
+@findex gnus-info-set-method
+Get/set the group select method.
+
+@item gnus-info-params
+@itemx gnus-info-set-params
+@findex gnus-info-params
+@findex gnus-info-set-params
+Get/set the group parameters.
+@end table
+
+All the getter functions take one parameter---the info list. The setter
+functions take two parameters---the info list and the new value.
+
+The last three elements in the group info aren't mandatory, so it may be
+necessary to extend the group info before setting the element. If this
+is necessary, you can just pass on a non-@code{nil} third parameter to
+the three final setter functions to have this happen automatically.
+
@node Emacs/XEmacs Code
@subsection Emacs/XEmacs Code
does this @code{defalias} thing with Gnus equivalents instead. Cleaner
all over.
+In the cases when the XEmacs function interface was obviously
+cleaner, I used it instead. For example @code{gnus-region-active-p}
+is an alias for @code{region-active-p} in XEmacs, whereas in Emacs
+it is a function.
+
Of course, I could have chosen XEmacs as my native platform and done
mapping functions the other way around. But I didn't. The performance
hit these indirections impose on Gnus under XEmacs should be slight.