@end menu
+
@node Starting Up
@chapter Starting Gnus
@cindex starting up
buffer. But, hey, that's your problem. Blllrph!
@findex gnus-no-server
+@kindex M-x gnus-no-server
@c @head
If you know that the server is definitely down, or you just want to read
your mail without bothering with the server at all, you can use the
@code{gnus-no-server} command to start Gnus. That might come in handy
-if you're in a hurry as well.
+if you're in a hurry as well. This command will not attempt to contact
+your primary server---instead, it will just activate all groups on level
+1 and 2. (You should preferrably keep no native groups on those two
+levels.)
@node Slave Gnusii
so the automatic new groups subscription methods become meaningless.
You should always set @code{gnus-check-new-newsgroups} to @code{nil} or
@code{ask-server} if you set this variable to @code{nil} (@pxref{New
-Groups}).
+Groups}). This variable can also be a regular expression. If that's
+the case, remove all groups that do not match this regexp before
+saving. This can be useful in certain obscure situations that involve
+several servers where not all servers support @code{ask-server}.
@vindex gnus-startup-file
The @code{gnus-startup-file} variable says where the startup files are.
startup files.
@vindex gnus-init-file
-When Gnus starts, it will read the @code{gnus-init-file} file, which is
-@file{~/.gnus.el} by default. This is a normal Emacs Lisp file and can
-be used to avoid cluttering your @file{.emacs} file with Gnus stuff.
+When Gnus starts, it will read the @code{gnus-site-init-file} (default
+@file{.../site-lisp/gnus.el}) and @code{gnus-init-file} (default
+@file{~/.gnus.el}) 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.
@node Auto Save
The score of the group.
@item ticked
The number of ticked articles in the group.
+@item total
+The total number of articles in the group. Or rather, MAX-NUMBER minus
+MIN-NUMBER.
@item topic
When using the topic minor mode, this variable is bound to the current
topic being inserted.
@item G d
@kindex G d (Group)
@findex gnus-group-make-directory-group
-Make a directory group. You will be prompted for a directory name
-(@code{gnus-group-make-directory-group}).
+Make a directory group (@pxref{Directory Groups}). You will be prompted
+for a directory name (@code{gnus-group-make-directory-group}).
@item G h
@kindex G h (Group)
@findex gnus-group-enter-directory
Read an arbitrary directory as if with were a newsgroup with the
@code{nneething} backend (@code{gnus-group-enter-directory}).
+@xref{Anything Groups}.
@item G f
@kindex G f (Group)
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.
+guess at the file type. @xref{Document Groups}.
+
+@item G n
+@kindex G n (Group)
+@findex gnus-group-make-web-group
+@cindex DejaNews
+@cindex Alta Vista
+@cindex InReference
+Make an ephemeral group based on a web search
+(@code{gnus-group-make-web-group}). If you give a prefix to this
+command, make a solid group instead. You will be prompted for the
+search engine type and the search string. Legal search engine types
+include @code{dejanews}, @code{altavista} and @code{reference}.
+@xref{Web Searches}.
@item G DEL
@kindex G DEL (Group)
@kindex G V (Group)
@findex gnus-group-make-empty-virtual
Make a new, fresh, empty @code{nnvirtual} group
-(@code{gnus-group-make-empty-virtual}).
+(@code{gnus-group-make-empty-virtual}). @xref{Virtual Groups}.
@item G v
@kindex G v (Group)
messages to the administrative address. This parameter allows you to
put the admin address somewhere convenient.
+@item display
+Elements that look like @code{(display . MODE)} says which articles to
+display on entering the group. Legal values are:
+
+@table @code
+@item all
+Display all articles, both read and unread.
+
+@item default
+Display the default visible articles, which normally includes unread and
+ticked articles.
+@end table
+
@item comment
This parameter allows you to enter a arbitrary comment on the group.
@findex gnus-group-sort-by-alphabet
Sort the group names alphabetically. This is the default.
+@item gnus-group-sort-by-real-name
+@findex gnus-group-sort-by-real-name
+Sort the group alphabetically on the real (unprefixed) group names.
+
@item gnus-group-sort-by-level
@findex gnus-group-sort-by-level
Sort by group level.
@vindex gnus-topic-mode-hook
@code{gnus-topic-mode-hook} is called in topic minor mode buffers.
+@vindex gnus-topic-display-empty-topics
+The @code{gnus-topic-display-empty-topics} says whether to display even
+topics that have no unread articles in them. The default is @code{t}.
+
@node Topic Commands
@subsection Topic Commands
@item M-f
@kindex M-f (Group)
@findex gnus-group-fetch-faq
+@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. @code{ange-ftp} will be used for fetching the file.
+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} 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.
@item D
@kindex D (Group)
@findex gnus-uu-digest-post-forward
Digest the current series and forward the result to a newsgroup
(@code{gnus-uu-digest-mail-forward}).
+
+@item S M-c
+@kindex S M-c (Summary)
+@findex gnus-summary-mail-crosspost-complaint
+@cindex crossposting
+@cindex excessive crossposting
+Send a complaint about excessive crossposting to the author of the
+current article (@code{gnus-summary-mail-crosspost-complaint}).
+
+@findex gnus-crosspost-complaint
+This command is provided as a way to fight back agains the current
+crossposting pandemic that's sweeping Usenet. It will compose a reply
+using the @code{gnus-crosspost-complaint} variable as a preamble. This
+command understands the process/prefix convention
+(@pxref{Process/Prefix}) and will prompt you before sending each mail.
+
@end table
@findex gnus-uu-mark-buffer
Mark all articles in the buffer in the order they appear
(@code{gnus-uu-mark-buffer}).
+
+@item M P k
+@kindex M P k (Summary)
+@findex gnus-summary-kill-process-mark
+Push the current process mark set onto the stack and unmark all articles
+(@code{gnus-summary-kill-process-mark}).
+
+@item M P y
+@kindex M P y (Summary)
+@findex gnus-summary-yank-process-mark
+Pop the previous process mark set from the stack and restore it
+(@code{gnus-summary-yank-process-mark}).
+
+@item M P w
+@kindex M P w (Summary)
+@findex gnus-summary-save-process-mark
+Push the current process mark set onto the stack
+(@code{gnus-summary-save-process-mark}).
+
@end table
@findex gnus-article-remove-cr
Remove CR (@code{gnus-article-remove-cr}).
-@item W L
-@kindex W L (Summary)
-@findex gnus-article-remove-trailing-blank-lines
-Remove all blank lines at the end of the article
-(@code{gnus-article-remove-trailing-blank-lines}).
-
@item W q
@kindex W q (Summary)
@findex gnus-article-de-quoted-unreadable
Add clickable buttons to the article headers
(@code{gnus-article-add-buttons-to-head}).
+@item W E l
+@kindex W E l (Summary)
+@findex gnus-article-strip-leading-blank-lines
+Remove all blank lines from the beginning of the article
+(@code{gnus-article-strip-leading-blank-lines}).
+
+@item W E m
+@kindex W E m (Summary)
+@findex gnus-article-strip-multiple-blank-lines
+Replace all blank lines with empty lines and then all multiple empty
+lines with a single empty line.
+(@code{gnus-article-strip-multiple-blank-lines}).
+
+@item W E t
+@kindex W E t (Summary)
+@findex gnus-article-remove-trailing-blank-lines
+Remove all blank lines at the end of the article
+(@code{gnus-article-remove-trailing-blank-lines}).
+
+@item W E a
+@kindex W E a (Summary)
+@findex gnus-article-strip-blank-lines
+Do all the three commands above
+(@code{gnus-article-strip-blank-lines}).
+
@end table
you'll get the parent. If the parent is already displayed in the
summary buffer, point will just move to this article.
+If given a positive numerical prefix, fetch that many articles back into
+the ancestry. If given a negative numerical prefix, fetch just that
+ancestor. So if you say @kbd{3 ^}, Gnus will fetch the parent, the
+grandparent and the grandgrandparent of the current article. If you say
+@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
+article.
+
@findex gnus-summary-refer-references
@kindex A R (Summary)
You can have Gnus fetch all articles mentioned in the @code{References}
If you want to re-spool an article, you might be curious as to what group
the article will end up in before you do the re-spooling. This command
will tell you (@code{gnus-summary-respool-query}).
+
+@item B p
+@kindex B p (Summary)
+@findex gnus-summary-article-posted-p
+Some people have a tendency to send you "courtesy" copies when they
+follow up to articles you have posted. These usually have a
+@code{Newsgroups} header in them, but not always. This command
+(@code{gnus-summary-article-posted-p}) will try to fetch the current
+article from your news server (or rather, from
+@code{gnus-refer-article-method} or @code{gnus-select-method}) and will
+report back whether it found the article or not. Even if it says that
+it didn't find the article, it may have been posted anyway---mail
+propagation is much faster than news propagation, and the news copy may
+just not have arrived yet.
+
@end table
@vindex gnus-move-split-methods
Remember: Cross-posting is kinda ok, but posting the same article
separately to several groups is not. Massive cross-posting (aka.
-@dfn{velveeta}) is to be avoided at all costs.
+@dfn{velveeta}) is to be avoided at all costs, and you can even use the
+@code{gnus-summary-mail-crosspost-complaint} command to complain about
+excessive crossposting (@pxref{Summary Mail Commands}).
@cindex cross-posting
@cindex Xref
so. It's certainly preferrable to reading the same articles more than
once.
+Duplicate suppression is not a very subtle instrument. It's more like a
+sledge hammer than anything else. It works in a very simple
+fashion---if you have marked an article as read, it adds this Message-ID
+to a cache. The next time it sees this Message-ID, it will mark the
+article as read the the @samp{M} mark. It doesn't care what group it
+saw the article in.
+
@table @code
@item gnus-suppress-duplicates
@vindex gnus-suppress-duplicates
Mark the current server as unreachable
(@code{gnus-server-deny-server}).
+@item M-o
+@kindex M-o (Server)
+@findex gnus-server-open-all-servers
+Open the connections to all servers in the buffer
+(@code{gnus-server-open-all-servers}).
+
+@item M-c
+@kindex M-c (Server)
+@findex gnus-server-close-all-servers
+Close the connections to all servers in the buffer
+(@code{gnus-server-close-all-servers}).
+
@item R
@kindex R (Server)
@findex gnus-server-remove-denials
@code{nntp-server-opened-hook} 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 default is sends the command @code{MODE READER} to
-the server with the @code{nntp-send-mode-reader} function. Another
-popular function is @code{nntp-send-authinfo}, which will prompt you for
-an @sc{nntp} password and stuff.
+the server with the @code{nntp-send-mode-reader} function.
+
+@item nntp-authinfo-function
+@vindex nntp-authinfo-function
+This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
+server. Available functions include:
+
+@table @code
+@item nntp-send-authinfo
+@findex nntp-send-authinfo
+This function will used you current login name as the user name and will
+prompt you for the password. This is the default.
+
+@item nntp-send-nosy-authinfo
+@findex nntp-send-nosy-authinfo
+This function will prompt you for both user name and password.
+
+@item nntp-send-authinfo-from-file
+@findex nntp-send-authinfo-from-file
+This function will use your current login name as the user name and will
+read the @sc{nntp} password from @file{~/.nntp-authinfo}.
+@end table
@item nntp-server-action-alist
@vindex nntp-server-action-alist
element is a regular expression used on the header of each mail to
determine if it belongs in this mail group.
+If the first element is the special symbol @code{junk}, then messages
+that match the regexp will disappear into the aether. Use with
+extreme caution.
+
The second element can also be a function. In that case, it will be
called narrowed to the headers with the first element of the rule as the
argument. It should return a non-@code{nil} value if it thinks that the
This is run in a buffer that holds all the new incoming mail, and can be
used for, well, anything, really.
+@vindex nnmail-split-hook
+@item nnmail-split-hook
+@findex article-decode-rfc1522
+@findex RFC1522 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
+is discarded after the splitting has been done, and no changes perfromed
+in the buffer will show up in any files. @code{article-decode-rfc1522}
+is one likely function to add to this hook.
+
@vindex nnmail-pre-get-new-mail-hook
@vindex nnmail-post-get-new-mail-hook
@item 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{t} by
+file after splitting mail into the proper groups. This is @code{nil} by
default for reasons of security.
+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.
+
+Delete the @file{Incoming*} files at will.
+
@item nnmail-use-long-file-names
@vindex nnmail-use-long-file-names
If non-@code{nil}, the mail backends will use long file and directory
If the rather simple, standard method for specifying how to split mail
doesn't allow you to do what you want, you can set
@code{nnmail-split-methods} to @code{nnmail-split-fancy}. Then you can
-play with the @code{nnmail-split-fancy} variable.
+play with the @code{nnmail-split-fancy} variable.
Let's look at an example value of this variable first:
This variable has the format of a @dfn{split}. A split is a (possibly)
recursive structure where each split may contain other splits. Here are
-the four possible split syntaxes:
+the five possible split syntaxes:
@table @dfn
@item (& SPLIT...)
If the split is a list, and the first element is @code{&}, then process
all SPLITs in the list.
+
+@item junk
+Junk this article.
@end table
In these splits, FIELD must match a complete field name. VALUE must
newsgroups.
@menu
-* Directory Groups:: You can read a directory as if it was a newsgroup.
-* Anything Groups:: Dired? Who needs dired?
-* Document Groups:: Single files can be the basis of a group.
-* SOUP:: Reading @sc{SOUP} packets ``offline''.
+* Directory Groups:: You can read a directory as if it was a newsgroup.
+* Anything Groups:: Dired? Who needs dired?
+* Document Groups:: Single files can be the basis of a group.
+* SOUP:: Reading @sc{SOUP} packets ``offline''.
+* Web Searches:: Creating groups from articles that match a string.
+* Mail-To-News Gateways:: Posting articles via mail-to-news gateways.
@end menu
new & spiffy Gnus mail backend, @code{nndoc} can probably help you with
that. Say you have an old @file{RMAIL} file with mail that you now want
to split into your new @code{nnml} groups. You look at that file using
-@code{nndoc}, set the process mark on all the articles in the buffer
-(@kbd{M P b}, for instance), and then re-spool (@kbd{B r}) using
-@code{nnml}. If all goes well, all the mail in the @file{RMAIL} file is
-now also stored in lots of @code{nnml} directories, and you can delete
-that pesky @file{RMAIL} file. If you have the guts!
+@code{nndoc} (using the @kbd{G f} command in the group buffer
+(@pxref{Foreign Groups})), set the process mark on all the articles in
+the buffer (@kbd{M P b}, for instance), and then re-spool (@kbd{B r})
+using @code{nnml}. If all goes well, all the mail in the @file{RMAIL}
+file is now also stored in lots of @code{nnml} directories, and you can
+delete that pesky @file{RMAIL} file. If you have the guts!
Virtual server variables:
@sc{soup}ed you use the second.
+@node Web Searches
+@subsection Web Searches
+@cindex nnweb
+@cindex DejaNews
+@cindex Alta Vista
+@cindex InReference
+@cindex Usenet searches
+@cindex searching the Usenet
+
+It's, like, too neat to search the Usenet for articles that match a
+string, but it, like, totally @emph{sucks}, like, totally, to use one of
+those, like, Web browsers, and you, like, have to, rilly, like, look at
+the commercials, so, like, with Gnus you can do @emph{rad}, rilly,
+searches without having to use a browser.
+
+The @code{nnweb} backend allows an easy interface to the mighty search
+engine. You create an @code{nnweb} group, enter a search pattern, and
+then enter the group and read the articles like you would any normal
+group. The @kbd{G n} command in the group buffer (@pxref{Foreign
+Groups}) will do this in an easy-to-use fashion.
+
+@code{nnweb} groups don't really lend themselves to being solid
+groups---they have a very fleeting idea of article numbers. In fact,
+each time you enter an @code{nnweb} group (not even changing the search
+pattern), you are likely to get the articles ordered in a different
+manner. Not even using duplicate suppression (@code{Duplicate
+Suppression}) will help, since @code{nnweb} doesn't even know the
+@code{Message-ID} of the articles before reading them using some search
+engines (DejaNews, for instance). The only possible way to keep track
+of which articles you've read is by scoring on the @code{Date}
+header---mark all articles that were posted before the last date you
+read the group as read.
+
+If the search engine changes its output substantially, @code{nnweb}
+won't be able to parse it and will fail. One could hardly fault the Web
+providers if they were to do this---their @emph{raison d'etre} is to
+make money off of advertisements, not to provide services to the
+community. Since @code{nnweb} washes the ads off all the articles, one
+might think that the providers might be somewhat miffed. We'll see.
+
+You must have the @code{url} and @code{w3} package installed to be able
+to use @code{nnweb}.
+
+Virtual server variables:
+
+@table @code
+@item nnweb-type
+@vindex nnweb-type
+What search engine type is being used. The currently supported types
+are @code{dejanews}, @code{altavista} and @code{reference}.
+
+@item nnweb-search
+@vindex nnweb-search
+The search string to feed to the search engine.
+
+@item nnweb-max-hits
+@vindex nnweb-max-hits
+Advisory maximum number of hits per search to display. The default is
+100.
+
+@item nnweb-type-definition
+@vindex nnweb-type-definition
+Type-to-definition alist. This alist says what @code{nnweb} should do
+with the various search engine types. The following elements must be
+present:
+
+@table @code
+@item article
+Function to decode the article and provide something that Gnus
+understands.
+
+@item map
+Function to create an article number to message header and URL alist.
+
+@item search
+Function to send the search string to the search engine.
+
+@item address
+The address the aforementioned function should send the search string
+to.
+
+@item id
+Format string URL to fetch an article by @code{Message-ID}.
+@end table
+
+@end table
+
+
+
+@node Mail-To-News Gateways
+@subsection Mail-To-News Gateways
+@cindex mail-to-news gateways
+@cindex gateways
+
+If your local @code{nntp} server doesn't allow posting, for some reason
+or other, you can post using one of the numerous mail-to-news gateways.
+The @code{nngateway} backend provides the interface.
+
+Note that you can't read anything from this backend---it can only be
+used to post with.
+
+Server variables:
+
+@table @code
+@item nngateway-address
+@vindex nngateway-address
+This is the address of the mail-to-news gateway.
+
+@item nngateway-header-transformation
+@vindex nngateway-header-transformation
+News headers have often have to be transformed in some odd way or other
+for the mail-to-news gateway to accept it. This variable says what
+transformation should be called, and defaults to
+@code{nngateway-simple-header-transformation}. The function is called
+narrowed to the headers to be transformed and with one parameter---the
+gateway address.
+
+This default function just inserts a new @code{To} header based on the
+@code{Newsgroups} header and the gateway address---an article with this
+@code{Newsgroups} header:
+
+@example
+Newsgroups: alt.religion.emacs
+@end example
+
+will get this @code{From} header inserted:
+
+@example
+To: alt-religion-emacs@@GATEWAY
+@end example
+
+@end table
+
+So, to use this, simply say something like:
+
+@lisp
+(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
+@end lisp
+
+
@node Combined Groups
@section Combined Groups
@code{gnus-read-mark} will result in a score rule that increase the
score with 30 points.
+@vindex gnus-default-ignored-adaptive-words
@vindex gnus-ignored-adaptive-words
-Words that appear in the @code{gnus-ignored-adaptive-words} list will be
-ignored.
+Words that appear in the @code{gnus-default-ignored-adaptive-words} list
+will be ignored. If you wish to add more words to be ignored, use the
+@code{gnus-ignored-adaptive-words} list instead.
+
+@vindex gnus-adaptive-word-syntax-table
+When the scoring is done, @code{gnus-adaptive-word-syntax-table} is the
+syntax table in effect. It is similar to the standard syntax table, but
+it considers numbers to be non-word-consituant characters.
After using this scheme for a while, it might be nice to write a
@code{gnus-psychoanalyze-user} command to go through the rules and see
@enumerate
@item
-@var{(regexp . file-name)}. If the @var{regexp} matches the group name,
+@var{(regexp file-name)}. If the @var{regexp} matches the group name,
the @var{file-name} will will be used as the home score file.
@item
@lisp
(setq gnus-home-score-file
;; All groups that match the regexp "\\.emacs"
- '("\\.emacs" . "emacs.SCORE")
+ '("\\.emacs" "emacs.SCORE")
;; All the comp groups in one score file
- ("^comp" . "comp.SCORE"))
+ ("^comp" "comp.SCORE"))
@end lisp
@vindex gnus-home-adapt-file
These two functions are both primarily meant to be used in hooks like
@code{message-sent-hook}.
+If you look closely at your own @code{Message-ID}, you'll notice that
+the first two or three characters are always the same. Here's two of
+mine:
+
+@example
+<x6u3u47icf.fsf@@eyesore.no>
+<x6sp9o7ibw.fsf@@eyesore.no>
+@end example
+
+So ``my'' ident on this machine is @samp{x6}. This can be
+exploited---the following rule will raise the score on all followups to
+myself:
+
+@lisp
+("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''
+is system-dependent.
+
+
@node Scoring Tips
@section Scoring Tips
@cindex scoring tips
* Daemons:: Gnus can do things behind your back.
* NoCeM:: How to avoid spam and other fatty foods.
* Picons:: How to display pictures of what your reading.
+* Moderation:: What to do if you're a moderator.
* Various Various:: Things that are really various.
@end menu
Quite simple, really, but it needs to be made clear so that surprises
are avoided.
+Commands that react to the process mark will push the current list of
+process marked articles onto a stack and will then clear all process
+marked articles. You can restore the previous configuration with the
+@kbd{M P y} command (@pxref{Setting Process Marks}).
+
@vindex gnus-summary-goto-unread
One thing that seems to shock & horrify lots of people is that, for
instance, @kbd{3 d} does exactly the same as @kbd{d} @kbd{d} @kbd{d}.
Return an empty string if the field is equal to the specified value.
@item form
-Use the specified form as the field value when the @samp{@} spec is
+Use the specified form as the field value when the @samp{@@} spec is
used.
@end table
If you use lots of these advanced thingies, you'll find that Gnus gets
quite slow. This can be helped enourmously by running @kbd{M-x
gnus-compile} when you are setisfied with the look of your lines.
-@xref{Compiling}.
+@xref{Compilation}.
@node User-Defined Specs
You can also use tilde modifiers (@pxref{Advanced Formatting} to achieve
much the same without defining new functions. Here's an example:
-@samp{%~(form (count-lines (point-min) (point-max)))@@}. The form
+@samp{%~(form (count-lines (point-min) (point)))@@}. The form
given here will be evaluated to yield the current line number, and then
inserted.
@end table
+@node Moderation
+@section Moderation
+@cindex moderation
+
+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
+get a copy.
+
+The moderation package is implemented as a minor mode for summary
+buffers. Put
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'gnus-moderate)
+@end lisp
+
+in your @file{.gnus.el} file.
+
+If you are the moderation of @samp{rec.zoofle}, this is how it's
+supposed to work:
+
+@enumerate
+@item
+You split your incoming mail by matching on
+@samp{Newsgroups:.*rec.zoofle}, which will put all the to-be-posted
+articles in some mail group---@samp{nnml:rec.zoofle}, for instance.
+
+@item
+You enter that group once in a while and post articles using the @kbd{e}
+(edit-and-post) or @kbd{s} (just send unedited) commands.
+
+@item
+If, while reading the @samp{rec.zoofle} newsgroup, you happen upon some
+articles that weren't approved by you, you can cancel them with the
+@kbd{c} command.
+@end enumerate
+
+To use moderation mode in these two groups, say:
+
+@lisp
+(setq gnus-moderatated-groups
+ "^nnml:rec.zoofle$\\|^rec.zoofle$")
+@end lisp
+
+
@node Various Various
@section Various Various
@cindex mode lines
@table @code
+@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.
+
+@item gnus-default-directory
+@vindex gnus-default-directory
+Not related to the above variable at all---this variable says what the
+default directory of all Gnus buffers should be. If you issue commands
+like @kbd{C-x C-f}, the prompt you'll get starts in the current buffer's
+default directory. If this variable is @code{nil} (which is the
+default), the default directory will be the default directory of the
+buffer you were in when you started Gnus.
+
@item gnus-verbose
@vindex gnus-verbose
This variable is an integer between zero and ten. The higher the value,
@item
Read the help group (@kbd{G h} in the group buffer) for a FAQ and a
how-to.
+
+@item
+@vindex max-lisp-eval-depth
+Gnus works on many recursive structures, and in some extreme (and very
+rare) cases Gnus may recurse down ``too deeply'' and Emacs will beep at
+you. If this happens to you, set @code{max-lisp-eval-depth} to 500 or
+something like that.
@end enumerate
If all else fails, report the problem as a bug.
@menu
* Required Backend Functions:: Functions that must be implemented.
* Optional Backend Functions:: Functions that need not be implemented.
+* Error Messaging:: How to get messages and report errors.
* Writing New Backends:: Extending old backends.
* Hooking New Backends Into Gnus:: What has to be done on the Gnus end.
@end menu
@code{news} if @var{article} in @var{group} is news, @code{mail} if it
is mail and @code{unknown} if the type can't be decided. (The
@var{article} parameter is necessary in @code{nnvirtual} groups which
-might very well combine mail groups and news groups.)
+might very well combine mail groups and news groups.) Both @var{group}
+and @var{article} may be @code{nil}.
There should be no result data from this function.
@end table
+@node Error Messaging
+@subsubsection Error Messaging
+
+@findex nnheader-report
+@findex nnheader-get-report
+The backends should use the function @code{nnheader-report} to report
+error conditions---they should not raise errors when they aren't able to
+perform a request. The first argument to this function is the backend
+symbol, and the rest are interpreted as arguments to @code{format} if
+there are many of them, or just a string if there is one of them.
+This function always returns @code{nil}.
+
+@lisp
+(nnheader-report 'nnchoke "You did something totally bogus")
+
+(nnheader-report 'nnchoke "Could not request group %s" group)
+@end lisp
+
+Gnus, in turn, will call @code{nnheader-get-report} when it gets a
+@code{nil} back from a server, and this function returns the most
+recently reported message for the backend in question. This function
+takes one argument---the server symbol.
+
+Internally, these function access @var{backend}@code{-status-string}, so
+the @code{nnchoke} backend will have its error message stored in
+@code{nnchoke-status-string}.
+
+
@node Writing New Backends
@subsubsection Writing New Backends
-The various backends share many similarities. @code{nnml} is just like
+Many backends are quite similar. @code{nnml} is just like
@code{nnspool}, but it allows you to edit the articles on the server.
@code{nnmh} is just like @code{nnml}, but it doesn't use an active file,
and it doesn't maintain overview databases. @code{nndir} is just like