2001-09-23 Simon Josefsson <jas@extundo.com>
authorSimon Josefsson <jas@extundo.com>
Sat, 22 Sep 2001 22:35:05 +0000 (22:35 +0000)
committerSimon Josefsson <jas@extundo.com>
Sat, 22 Sep 2001 22:35:05 +0000 (22:35 +0000)
* gnus.texi (Top): Move IMAP up from "Other Sources" to "Select
Methods".
(Charsets): Update default value.
(Finding the Parent): Add nnimap.
(Security): Add.
(Mailing List): Add.
(Archived Messages): Comment out XEmacs 19 stuff.
(Using GPG): Add reference to message manual.
(Direct Functions): Mention OpenSSL as well as SSLeay.
(Mail Source Specifiers): Add recent IMAP :stream and
:authentication.
(Agent Commands): Fix.
(GroupLens): Add URL and note about this being historical.
(Wide Characters): Update default value.
(Picon Requirements): Remove old XEmacs 19 stuff.

texi/ChangeLog
texi/gnus.texi

index bc54b09..aa9f3ad 100644 (file)
@@ -1,3 +1,21 @@
+2001-09-23  Simon Josefsson  <jas@extundo.com>
+
+       * gnus.texi (Top): Move IMAP up from "Other Sources" to "Select
+       Methods".
+       (Charsets): Update default value.
+       (Finding the Parent): Add nnimap.
+       (Security): Add.
+       (Mailing List): Add.
+       (Archived Messages): Comment out XEmacs 19 stuff.
+       (Using GPG): Add reference to message manual.
+       (Direct Functions): Mention OpenSSL as well as SSLeay.
+       (Mail Source Specifiers): Add recent IMAP :stream and
+       :authentication.
+       (Agent Commands): Fix.
+       (GroupLens): Add URL and note about this being historical.
+       (Wide Characters): Update default value.
+       (Picon Requirements): Remove old XEmacs 19 stuff.
+
 2001-09-22  Simon Josefsson  <jas@extundo.com>
 
        * gnus.texi (Other Marks): Add Recent.
index c7ee6f8..be77054 100644 (file)
@@ -620,6 +620,7 @@ Select Methods
 * Getting News::                Reading USENET news with Gnus.
 * Getting Mail::                Reading your personal mail with Gnus.
 * Browsing the Web::            Getting messages from a plethora of Web sources.
+* IMAP::                        Using Gnus as a @sc{imap} client.
 * Other Sources::               Reading directories, files, SOUP packets.
 * Combined Groups::             Combining groups into one group.
 * Gnus Unplugged::              Reading news and mail offline.
@@ -686,6 +687,12 @@ Browsing the Web
 * RSS::                         Reading RDF site summary.
 * Customizing w3::              Doing stuff to Emacs/w3 from Gnus.
 
+@sc{imap}
+
+* Splitting in IMAP::           Splitting mail with nnimap.
+* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
+* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
+
 Other Sources
 
 * Directory Groups::            You can read a directory as if it was a newsgroup.
@@ -693,7 +700,6 @@ Other Sources
 * Document Groups::             Single files can be the basis of a group.
 * SOUP::                        Reading @sc{soup} packets ``offline''.
 * Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
-* IMAP::                        Using Gnus as a @sc{imap} client.
 
 Document Groups
 
@@ -705,12 +711,6 @@ SOUP
 * SOUP Groups::                 A backend for reading @sc{soup} packets.
 * SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
 
-@sc{imap}
-
-* Splitting in IMAP::           Splitting mail with nnimap.
-* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
-
 Combined Groups
 
 * Virtual Groups::              Combining articles from many groups.
@@ -8427,13 +8427,13 @@ variable, which is an alist of regexps (use the first item to match full
 group names) and default charsets to be used when reading these groups.
 
 In addition, some people do use soi-disant @sc{mime}-aware agents that
-aren't.  These blithely mark messages as being in @code{iso-8859-1} even
-if they really are in @code{koi-8}.  To help here, the
+aren't.  These blithely mark messages as being in @code{iso-8859-1}
+even if they really are in @code{koi-8}.  To help here, the
 @code{gnus-newsgroup-ignored-charsets} variable can be used.  The
-charsets that are listed here will be ignored.  The variable can be set
-on a group-by-group basis using the group parameters (@pxref{Group
-Parameters}).  The default value is @code{(unknown-8bit)}, which is
-something some agents insist on having in there.
+charsets that are listed here will be ignored.  The variable can be
+set on a group-by-group basis using the group parameters (@pxref{Group
+Parameters}).  The default value is @code{(unknown-8bit x-unknown)},
+which includes values some agents insist on having in there.
 
 @vindex gnus-group-posting-charset-alist
 When posting, @code{gnus-group-posting-charset-alist} is used to
@@ -8660,12 +8660,13 @@ then ask Deja if that fails:
         (nnweb "refer" (nnweb-type dejanews))))
 @end lisp
 
-Most of the mail backends support fetching by @code{Message-ID}, but do
-not do a particularly excellent job at it.  That is, @code{nnmbox} and
-@code{nnbabyl} are able to locate articles from any groups, while
-@code{nnml} and @code{nnfolder} are only able to locate articles that
-have been posted to the current group.  (Anything else would be too time
-consuming.)  @code{nnmh} does not support this at all.
+Most of the mail backends support fetching by @code{Message-ID}, but
+do not do a particularly excellent job at it.  That is, @code{nnmbox}
+and @code{nnbabyl} are able to locate articles from any groups, while
+@code{nnml}, @code{nnfolder} and @code{nnimap}1 are only able to locate
+articles that have been posted to the current group.  (Anything else
+would be too time consuming.)  @code{nnmh} does not support this at
+all.
 
 
 @node Alternative Approaches
@@ -9534,16 +9535,24 @@ to you to figure out, I think.
 @node Security
 @section Security
 
-Gnus is able to verify PGP or S/MIME signed messages or decrypt PGP
-encrypted messages.
+Gnus is able to verify signed messages or decrypt encrypted messages.
+The formats that are supported are PGP and S/MIME, however you need
+some external programs to get things to work:
 
 @enumerate
 @item
 To verify or decrypt PGP messages, you have to install mailcrypt or
-gpg.el.
+gpg.el as well as a OpenPGP implementation (such as GnuPG). @xref{Using GPG}.
+
+@item
+To verify or decrypt S/MIME message, you need to install OpenSSL.
+OpenSSL 0.9.6 or newer is recommended.
 
 @end enumerate
 
+More information on how to set things up can be found in the message
+manual. @xref{Security, ,Security, message, The Message Manual}.
+
 @table @code
 @item mm-verify-option
 @vindex mm-verify-option
@@ -9562,7 +9571,15 @@ protocols. Otherwise, ask user.
 @node Mailing List
 @section Mailing List
 
-Gnus understands some mailing list fields of RFC 2369.
+Gnus understands some mailing list fields of RFC 2369.  To enable it,
+either add a `to-list' group parameter (@pxref{Group Parameters}),
+possibly using @kbd{A M} in the summary buffer, or say:
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'turn-on-gnus-mailing-list-mode)
+@end lisp
+
+That enables the following commands to the summary buffer:
 
 @table @kbd
 
@@ -10338,8 +10355,8 @@ messages in one file per month:
           (concat "mail." (format-time-string "%Y-%m")))))
 @end lisp
 
-(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.)
+@c (XEmacs 19.13 doesn't have @code{format-time-string}, so you'll have to
+@c use a different value for @code{gnus-message-archive-group} there.)
 
 Now, when you send a message off, it will be stored in the appropriate
 group.  (If you want to disable storing for just one particular message,
@@ -10614,10 +10631,11 @@ your @file{~/.emacs} or @file{~/.gnus}:
 @end lisp
 
 To sign or encrypt your message you may choose to use the MML Security
-menu or @kbd{C-c C-m s p} to sign your message using PGP/MIME, @kbd{C-c
-C-m s s} to sign your message using S/MIME. There's also @kbd{C-c C-m c
-p} to encrypt your message with PGP/MIME and @kbd{C-c C-m c s} to
-encrypt using S/MIME.
+menu or @kbd{C-c C-m s p} to sign your message using PGP/MIME,
+@kbd{C-c C-m s s} to sign your message using S/MIME. There's also
+@kbd{C-c C-m c p} to encrypt your message with PGP/MIME and @kbd{C-c
+C-m c s} to encrypt using S/MIME. @xref{Security, ,Security, message,
+The Message Manual}.
 
 Gnus will ask for your passphrase and then it will send your message, if
 you've typed it correctly.
@@ -10658,6 +10676,7 @@ The different methods all have their peculiarities, of course.
 * Getting News::                Reading USENET news with Gnus.
 * Getting Mail::                Reading your personal mail with Gnus.
 * Browsing the Web::            Getting messages from a plethora of Web sources.
+* IMAP::                        Using Gnus as a @sc{imap} client.
 * Other Sources::               Reading directories, files, SOUP packets.
 * Combined Groups::             Combining groups into one group.
 * Gnus Unplugged::              Reading news and mail offline.
@@ -11301,10 +11320,10 @@ remote system.
 
 @findex nntp-open-ssl-stream
 @item nntp-open-ssl-stream
-Opens a connection to a server over a @dfn{secure} channel.  To use this
-you must have SSLay installed
-(@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also need
-@file{ssl.el} (from the W3 distribution, for instance).  You then
+Opens a connection to a server over a @dfn{secure} channel.  To use
+this you must have OpenSSL (@uref{http://www.openssl.org}) or SSLeay
+installed (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}, and you also
+need @file{ssl.el} (from the W3 distribution, for instance).  You then
 define a server as follows:
 
 @lisp
@@ -12044,13 +12063,14 @@ prompted.
 @item :stream
 What stream to use for connecting to the server, this is one of the
 symbols in @code{imap-stream-alist}.  Right now, this means
-@samp{kerberos4}, @samp{ssl} or the default @samp{network}.
+@samp{gssapi}, @samp{kerberos4}, @samp{starttls}, @samp{ssl},
+@samp{shell} or the default @samp{network}.
 
 @item :authentication
-Which authenticator to use for authenticating to the server, this is one
-of the symbols in @code{imap-authenticator-alist}.  Right now, this
-means @samp{kerberos4}, @samp{cram-md5}, @samp{anonymous} or the default
-@samp{login}.
+Which authenticator to use for authenticating to the server, this is
+one of the symbols in @code{imap-authenticator-alist}.  Right now,
+this means @samp{gssapi}, @samp{kerberos4}, @samp{digest-md5},
+@samp{cram-md5}, @samp{anonymous} or the default @samp{login}.
 
 @item :program
 When using the `shell' :stream, the contents of this variable is
@@ -13896,1172 +13916,1170 @@ Put that in your @file{.emacs} file, and hitting links in w3-rendered
 @sc{html} in the Gnus article buffers will use @code{browse-url} to
 follow the link.
 
+@node IMAP
+@section @sc{imap}
+@cindex nnimap
+@cindex @sc{imap}
 
-@node Other Sources
-@section Other Sources
+@sc{imap} is a network protocol for reading mail (or news, or ...),
+think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap}
+server is much similar to connecting to a news server, you just
+specify the network address of the server.
 
-Gnus can do more than just read news or mail.  The methods described
-below allow Gnus to view directories and files as if they were
-newsgroups.
+@sc{imap} has two properties.  First, @sc{imap} can do everything that
+POP can, it can hence be viewed as POP++.  Secondly, @sc{imap} is a
+mail storage protocol, similar to @sc{nntp} being a news storage
+protocol.  (@sc{imap} offers more features than @sc{nntp} because news
+is more or less read-only whereas mail is read-write.)
 
-@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''.
-* Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
-* IMAP::                        Using Gnus as a @sc{imap} client.
-@end menu
+If you want to use @sc{imap} as POP++, use an imap entry in
+mail-sources.  With this, Gnus will fetch mails from the @sc{imap}
+server and store them on the local disk.  This is not the usage
+described in this section.  @xref{Mail Sources}.
 
+If you want to use @sc{imap} as a mail storage protocol, use an nnimap
+entry in gnus-secondary-select-methods.  With this, Gnus will
+manipulate mails stored on the @sc{imap} server.  This is the kind of
+usage explained in this section.
 
-@node Directory Groups
-@subsection Directory Groups
-@cindex nndir
-@cindex directory groups
+A server configuration in @code{~/.gnus} with a few @sc{imap} servers
+might look something like this:
 
-If you have a directory that has lots of articles in separate files in
-it, you might treat it as a newsgroup.  The files have to have numerical
-names, of course.
+@lisp
+(setq gnus-secondary-select-methods
+      '((nnimap "simpleserver") ; no special configuration
+        ; perhaps a ssh port forwarded server:
+        (nnimap "dolk"
+                (nnimap-address "localhost")
+                (nnimap-server-port 1430))
+        ; a UW server running on localhost
+        (nnimap "barbar"
+                (nnimap-server-port 143)
+                (nnimap-address "localhost")
+                (nnimap-list-pattern ("INBOX" "mail/*")))
+        ; anonymous public cyrus server:
+        (nnimap "cyrus.andrew.cmu.edu"
+                (nnimap-authenticator anonymous)
+                (nnimap-list-pattern "archive.*")
+                (nnimap-stream network))
+        ; a ssl server on a non-standard port:
+        (nnimap "vic20"
+                (nnimap-address "vic20.somewhere.com")
+                (nnimap-server-port 9930)
+                (nnimap-stream ssl))))
+@end lisp
 
-This might be an opportune moment to mention @code{ange-ftp} (and its
-successor @code{efs}), that most wonderful of all wonderful Emacs
-packages.  When I wrote @code{nndir}, I didn't think much about it---a
-backend to read directories.  Big deal.
+The following variables can be used to create a virtual @code{nnimap}
+server:
 
-@code{ange-ftp} changes that picture dramatically.  For instance, if you
-enter the @code{ange-ftp} file name
-@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
-@code{ange-ftp} or @code{efs} will actually allow you to read this
-directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
+@table @code
 
-@code{nndir} will use @sc{nov} files if they are present.
+@item nnimap-address
+@vindex nnimap-address
 
-@code{nndir} is a ``read-only'' backend---you can't delete or expire
-articles with this method.  You can use @code{nnmh} or @code{nnml} for
-whatever you use @code{nndir} for, so you could switch to any of those
-methods if you feel the need to have a non-read-only @code{nndir}.
+The address of the remote @sc{imap} server.  Defaults to the virtual
+server name if not specified.
 
+@item nnimap-server-port
+@vindex nnimap-server-port
+Port on server to contact.  Defaults to port 143, or 993 for SSL.
 
-@node Anything Groups
-@subsection Anything Groups
-@cindex nneething
+Note that this should be a integer, example server specification:
 
-From the @code{nndir} backend (which reads a single spool-like
-directory), it's just a hop and a skip to @code{nneething}, which
-pretends that any arbitrary directory is a newsgroup.  Strange, but
-true.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-server-port 4711))
+@end lisp
 
-When @code{nneething} is presented with a directory, it will scan this
-directory and assign article numbers to each file.  When you enter such
-a group, @code{nneething} must create ``headers'' that Gnus can use.
-After all, Gnus is a newsreader, in case you're forgetting.
-@code{nneething} does this in a two-step process.  First, it snoops each
-file in question.  If the file looks like an article (i.e., the first
-few lines look like headers), it will use this as the head.  If this is
-just some arbitrary file without a head (e.g. a C source file),
-@code{nneething} will cobble up a header out of thin air.  It will use
-file ownership, name and date and do whatever it can with these
-elements.
+@item nnimap-list-pattern
+@vindex nnimap-list-pattern
+String or list of strings of mailboxes to limit available groups to.
+This is used when the server has very many mailboxes and you're only
+interested in a few -- some servers export your home directory via
+@sc{imap}, you'll probably want to limit the mailboxes to those in
+@file{~/Mail/*} then.
 
-All this should happen automatically for you, and you will be presented
-with something that looks very much like a newsgroup.  Totally like a
-newsgroup, to be precise.  If you select an article, it will be displayed
-in the article buffer, just as usual.
+The string can also be a cons of REFERENCE and the string as above, what
+REFERENCE is used for is server specific, but on the University of
+Washington server it's a directory that will be concatenated with the
+mailbox.
 
-If you select a line that represents a directory, Gnus will pop you into
-a new summary buffer for this @code{nneething} group.  And so on.  You can
-traverse the entire disk this way, if you feel like, but remember that
-Gnus is not dired, really, and does not intend to be, either.
+Example server specification:
 
-There are two overall modes to this action---ephemeral or solid.  When
-doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
-will not store information on what files you have read, and what files
-are new, and so on.  If you create a solid @code{nneething} group the
-normal way with @kbd{G m}, Gnus will store a mapping table between
-article numbers and file names, and you can treat this group like any
-other groups.  When you activate a solid @code{nneething} group, you will
-be told how many unread articles it contains, etc., etc.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
+                               ("~friend/Mail/" . "list/*"))))
+@end lisp
 
-Some variables:
+@item nnimap-stream
+@vindex nnimap-stream
+The type of stream used to connect to your server.  By default, nnimap
+will detect and automatically use all of the below, with the exception
+of SSL. (SSL is being replaced by STARTTLS, which can be automatically
+detected, but it's not widely deployed yet).
 
-@table @code
-@item nneething-map-file-directory
-@vindex nneething-map-file-directory
-All the mapping files for solid @code{nneething} groups will be stored
-in this directory, which defaults to @file{~/.nneething/}.
+Example server specification:
 
-@item nneething-exclude-files
-@vindex nneething-exclude-files
-All files that match this regexp will be ignored.  Nice to use to exclude
-auto-save files and the like, which is what it does by default.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-stream ssl))
+@end lisp
 
-@item nneething-include-files
-@vindex nneething-include-files
-Regexp saying what files to include in the group.  If this variable is
-non-@code{nil}, only files matching this regexp will be included.
+Please note that the value of @code{nnimap-stream} is a symbol!
 
-@item nneething-map-file
-@vindex nneething-map-file
-Name of the map files.
-@end table
+@itemize @bullet
+@item
+@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Requires the
+@samp{imtest} program.
+@item
+@dfn{kerberos4:} Connect with kerberos 4. Requires the @samp{imtest} program.
+@item
+@dfn{starttls:} Connect via the STARTTLS extension (similar to
+SSL). Requires the external library @samp{starttls.el} and program
+@samp{starttls}.
+@item
+@dfn{ssl:} Connect through SSL. Requires OpenSSL (the
+program @samp{openssl}) or SSLeay (@samp{s_client}).
+@item
+@dfn{shell:} Use a shell command to start @sc{imap} connection.
+@item
+@dfn{network:} Plain, TCP/IP network connection.
+@end itemize
 
+@vindex imap-kerberos4-program
+The @samp{imtest} program is shipped with Cyrus IMAPD.  If you're
+using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version
+1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
+to make @code{imap.el} use a pty instead of a pipe when communicating
+with @samp{imtest}.  You will then suffer from a line length
+restrictions on IMAP commands, which might make Gnus seem to hang
+indefinitely if you have many articles in a mailbox.  The variable
+@code{imap-kerberos4-program} contain parameters to pass to the imtest
+program.
 
-@node Document Groups
-@subsection Document Groups
-@cindex nndoc
-@cindex documentation group
-@cindex help group
+@vindex imap-ssl-program
+For SSL connections, the OpenSSL program is available from
+@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
+and nnimap support it too - altough the most recent versions of
+SSLeay, 0.9.x, are known to have serious bugs making it
+useless. Earlier versions, especially 0.8.x, of SSLeay are known to
+work. The variable @code{imap-ssl-program} contain parameters to pass
+to OpenSSL/SSLeay.
 
-@code{nndoc} is a cute little thing that will let you read a single file
-as a newsgroup.  Several files types are supported:
+@vindex imap-shell-program
+@vindex imap-shell-host
+For @sc{imap} connections using the @code{shell} stream, the variable
+@code{imap-shell-program} specify what program to call.
 
-@table @code
-@cindex babyl
-@cindex rmail mbox
+@item nnimap-authenticator
+@vindex nnimap-authenticator
 
-@item babyl
-The babyl (rmail) mail box.
-@cindex mbox
-@cindex Unix mbox
+The authenticator used to connect to the server.  By default, nnimap
+will use the most secure authenticator your server is capable of.
 
-@item mbox
-The standard Unix mbox file.
+Example server specification:
 
-@cindex MMDF mail box
-@item mmdf
-The MMDF mail box format.
+@lisp
+(nnimap "mail.server.com"
+        (nnimap-authenticator anonymous))
+@end lisp
 
-@item news
-Several news articles appended into a file.
+Please note that the value of @code{nnimap-authenticator} is a symbol!
 
-@item rnews
-@cindex rnews batch files
-The rnews batch transport format.
-@cindex forwarded messages
+@itemize @bullet
+@item
+@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
+external program @code{imtest}.
+@item
+@dfn{kerberos4:} Kerberos authentication. Require external program
+@code{imtest}.
+@item
+@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
+external library @code{digest-md5.el}.
+@item
+@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
+@item
+@dfn{login:} Plain-text username/password via LOGIN.
+@item
+@dfn{anonymous:} Login as `anonymous', supplying your emailadress as password.
+@end itemize
 
-@item forward
-Forwarded articles.
+@item nnimap-expunge-on-close
+@cindex Expunging
+@vindex nnimap-expunge-on-close
+Unlike Parmenides the @sc{imap} designers has decided that things that
+doesn't exist actually does exist.  More specifically, @sc{imap} has
+this concept of marking articles @code{Deleted} which doesn't actually
+delete them, and this (marking them @code{Deleted}, that is) is what
+nnimap does when you delete a article in Gnus (with @kbd{G DEL} or
+similar).
 
-@item nsmail
-Netscape mail boxes.
+Since the articles aren't really removed when we mark them with the
+@code{Deleted} flag we'll need a way to actually delete them.  Feel like
+running in circles yet?
 
-@item mime-parts
-MIME multipart messages.
+Traditionally, nnimap has removed all articles marked as @code{Deleted}
+when closing a mailbox but this is now configurable by this server
+variable.
 
-@item standard-digest
-The standard (RFC 1153) digest format.
+The possible options are:
+
+@table @code
+
+@item always
+The default behavior, delete all articles marked as "Deleted" when
+closing a mailbox.
+@item never
+Never actually delete articles.  Currently there is no way of showing
+the articles marked for deletion in nnimap, but other @sc{imap} clients
+may allow you to do this.  If you ever want to run the EXPUNGE command
+manually, @xref{Expunging mailboxes}.
+@item ask
+When closing mailboxes, nnimap will ask if you wish to expunge deleted
+articles or not.
 
-@item slack-digest
-Non-standard digest format---matches most things, but does it badly.
 @end table
 
-You can also use the special ``file type'' @code{guess}, which means
-that @code{nndoc} will try to guess what file type it is looking at.
-@code{digest} means that @code{nndoc} should guess what digest type the
-file is.
+@item nnimap-importantize-dormant
+@vindex nnimap-importantize-dormant
 
-@code{nndoc} will not try to change the file or insert any extra headers into
-it---it will simply, like, let you use the file as the basis for a
-group.  And that's it.
+If non-nil, marks dormant articles as ticked (as well), for other IMAP
+clients. Within Gnus, dormant articles will naturally still (only) be
+marked as ticked.  This is to make dormant articles stand out, just
+like ticked articles, in other IMAP clients. (In other words, Gnus has
+two ``Tick'' marks and IMAP has only one.)
 
-If you have some old archived articles that you want to insert into your
-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} (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!
+Probably the only reason for frobing this would be if you're trying
+enable per-user persistant dormant flags, using something like:
 
-Virtual server variables:
+@lisp
+(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
+        (format "gnus-dormant-%s" (user-login-name)))
+(setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
+        (format "KEYWORD gnus-dormant-%s" (user-login-name)))
+@end lisp
 
-@table @code
-@item nndoc-article-type
-@vindex nndoc-article-type
-This should be one of @code{mbox}, @code{babyl}, @code{digest},
-@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
-@code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.
+In this case, you would not want the per-user dormant flag showing up
+as ticked for other users.
+
+@item nnimap-expunge-search-string
+@cindex Expunging
+@vindex nnimap-expunge-search-string
+
+This variable contain the IMAP search command sent to server when
+searching for articles eligible for expiring.  The default is
+@code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
+UID set and the second @code{%s} is replaced by a date.
+
+Probably the only useful value to change this to is
+@code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
+messages instead of the internal article date. See section 6.4.4 of
+RFC 2060 for more information on valid strings.
+
+@item nnimap-authinfo-file
+@vindex nnimap-authinfo-file
+
+A file containing credentials used to log in on servers.  The format is
+(almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
+variable @code{nntp-authinfo-file} for exact syntax; also see
+@ref{NNTP}.
 
-@item nndoc-post-type
-@vindex nndoc-post-type
-This variable says whether Gnus is to consider the group a news group or
-a mail group.  There are two valid values:  @code{mail} (the default)
-and @code{news}.
 @end table
 
 @menu
-* Document Server Internals::   How to add your own document types.
+* Splitting in IMAP::           Splitting mail with nnimap.
+* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
+* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
 @end menu
 
 
-@node Document Server Internals
-@subsubsection Document Server Internals
 
-Adding new document types to be recognized by @code{nndoc} isn't
-difficult.  You just have to whip up a definition of what the document
-looks like, write a predicate function to recognize that document type,
-and then hook into @code{nndoc}.
+@node Splitting in IMAP
+@subsection Splitting in @sc{imap}
+@cindex splitting imap mail
 
-First, here's an example document type definition:
+Splitting is something Gnus users has loved and used for years, and now
+the rest of the world is catching up.  Yeah, dream on, not many
+@sc{imap} server has server side splitting and those that have splitting
+seem to use some non-standard protocol.  This means that @sc{imap}
+support for Gnus has to do it's own splitting.
 
-@example
-(mmdf
- (article-begin .  "^\^A\^A\^A\^A\n")
- (body-end .  "^\^A\^A\^A\^A\n"))
-@end example
+And it does.
 
-The definition is simply a unique @dfn{name} followed by a series of
-regexp pseudo-variable settings.  Below are the possible
-variables---don't be daunted by the number of variables; most document
-types can be defined with very few settings:
+Here are the variables of interest:
 
 @table @code
-@item first-article
-If present, @code{nndoc} will skip past all text until it finds
-something that match this regexp.  All text before this will be
-totally ignored.
-
-@item article-begin
-This setting has to be present in all document type definitions.  It
-says what the beginning of each article looks like.
 
-@item head-begin-function
-If present, this should be a function that moves point to the head of
-the article.
+@item nnimap-split-crosspost
+@cindex splitting, crosspost
+@cindex crosspost
+@vindex nnimap-split-crosspost
 
-@item nndoc-head-begin
-If present, this should be a regexp that matches the head of the
-article.
+If non-nil, do crossposting if several split methods match the mail.  If
+nil, the first match in @code{nnimap-split-rule} found will be used.
 
-@item nndoc-head-end
-This should match the end of the head of the article.  It defaults to
-@samp{^$}---the empty line.
+Nnmail equivalent: @code{nnmail-crosspost}.
 
-@item body-begin-function
-If present, this function should move point to the beginning of the body
-of the article.
+@item nnimap-split-inbox
+@cindex splitting, inbox
+@cindex inbox
+@vindex nnimap-split-inbox
 
-@item body-begin
-This should match the beginning of the body of the article.  It defaults
-to @samp{^\n}.
+A string or a list of strings that gives the name(s) of @sc{imap}
+mailboxes to split from.  Defaults to nil, which means that splitting is
+disabled!
 
-@item body-end-function
-If present, this function should move point to the end of the body of
-the article.
+@lisp
+(setq nnimap-split-inbox
+      '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
+@end lisp
 
-@item body-end
-If present, this should match the end of the body of the article.
+No nnmail equivalent.
 
-@item file-end
-If present, this should match the end of the file.  All text after this
-regexp will be totally ignored.
+@item nnimap-split-rule
+@cindex Splitting, rules
+@vindex nnimap-split-rule
 
-@end table
+New mail found in @code{nnimap-split-inbox} will be split according to
+this variable.
 
-So, using these variables @code{nndoc} is able to dissect a document
-file into a series of articles, each with a head and a body.  However, a
-few more variables are needed since not all document types are all that
-news-like---variables needed to transform the head or the body into
-something that's palatable for Gnus:
+This variable contains a list of lists, where the first element in the
+sublist gives the name of the @sc{imap} mailbox to move articles
+matching the regexp in the second element in the sublist.  Got that?
+Neither did I, we need examples.
 
-@table @code
-@item prepare-body-function
-If present, this function will be called when requesting an article.  It
-will be called with point at the start of the body, and is useful if the
-document has encoded some parts of its contents.
+@lisp
+(setq nnimap-split-rule
+      '(("INBOX.nnimap"
+         "^Sender: owner-nnimap@@vic20.globalcom.se")
+        ("INBOX.junk"    "^Subject:.*MAKE MONEY")
+        ("INBOX.private" "")))
+@end lisp
 
-@item article-transform-function
-If present, this function is called when requesting an article.  It's
-meant to be used for more wide-ranging transformation of both head and
-body of the article.
+This will put all articles from the nnimap mailing list into mailbox
+INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
+into INBOX.junk and everything else in INBOX.private.
 
-@item generate-head-function
-If present, this function is called to generate a head that Gnus can
-understand.  It is called with the article number as a parameter, and is
-expected to generate a nice head for the article in question.  It is
-called when requesting the headers of all articles.
+The first string may contain `\\1' forms, like the ones used by
+replace-match to insert sub-expressions from the matched text.  For
+instance:
 
-@end table
+@lisp
+("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
+@end lisp
 
-Let's look at the most complicated example I can come up with---standard
-digests:
+The second element can also be a function.  In that case, it will be
+called with the first element of the rule as the argument, in a buffer
+containing the headers of the article.  It should return a non-nil value
+if it thinks that the mail belongs in that group.
 
-@example
-(standard-digest
- (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
- (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
- (prepare-body-function . nndoc-unquote-dashes)
- (body-end-function . nndoc-digest-body-end)
- (head-end . "^ ?$")
- (body-begin . "^ ?\n")
- (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
- (subtype digest guess))
-@end example
+Nnmail users might recollect that the last regexp had to be empty to
+match all articles (like in the example above).  This is not required in
+nnimap.  Articles not matching any of the regexps will not be moved out
+of your inbox.  (This might affect performance if you keep lots of
+unread articles in your inbox, since the splitting code would go over
+them every time you fetch new mail.)
 
-We see that all text before a 70-width line of dashes is ignored; all
-text after a line that starts with that @samp{^End of} is also ignored;
-each article begins with a 30-width line of dashes; the line separating
-the head from the body may contain a single space; and that the body is
-run through @code{nndoc-unquote-dashes} before being delivered.
+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".
 
-To hook your own document definition into @code{nndoc}, use the
-@code{nndoc-add-type} function.  It takes two parameters---the first is
-the definition itself and the second (optional) parameter says where in
-the document type definition alist to put this definition.  The alist is
-traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document
-is of @code{mmdf} type, and so on.  These type predicates should return
-@code{nil} if the document is not of the correct type; @code{t} if it is
-of the correct type; and a number if the document might be of the
-correct type.  A high number means high probability; a low number means
-low probability with @samp{0} being the lowest valid number.
+This variable can also have a function as its value, the function will
+be called with the headers narrowed and should return a group where it
+thinks the article should be split to.  See @code{nnimap-split-fancy}.
 
+The splitting code tries to create mailboxes if it need too.
 
-@node SOUP
-@subsection SOUP
-@cindex SOUP
-@cindex offline
+To allow for different split rules on different virtual servers, and
+even different split rules in different inboxes on the same server,
+the syntax of this variable have been extended along the lines of:
 
-In the PC world people often talk about ``offline'' newsreaders.  These
-are thingies that are combined reader/news transport monstrosities.
-With built-in modem programs.  Yecchh!
+@lisp
+(setq nnimap-split-rule
+      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
+                                  ("junk"    "From:.*Simon")))
+        ("my2server"    ("INBOX" nnimap-split-fancy))
+        ("my[34]server" (".*"    (("private" "To:.*Simon")
+                                  ("junk"    my-junk-func)))))
+@end lisp
 
-Of course, us Unix Weenie types of human beans use things like
-@code{uucp} and, like, @code{nntpd} and set up proper news and mail
-transport things like Ghod intended.  And then we just use normal
-newsreaders.
+The virtual server name is in fact a regexp, so that the same rules
+may apply to several servers.  In the example, the servers
+@code{my3server} and @code{my4server} both use the same rules.
+Similarly, the inbox string is also a regexp.  The actual splitting
+rules are as before, either a function, or a list with group/regexp or
+group/function elements.
 
-However, it can sometimes be convenient to do something that's a bit
-easier on the brain if you have a very slow modem, and you're not really
-that interested in doing things properly.
+Nnmail equivalent: @code{nnmail-split-methods}.
 
-A file format called @sc{soup} has been developed for transporting news
-and mail from servers to home machines and back again.  It can be a bit
-fiddly.
+@item nnimap-split-predicate
+@cindex splitting
+@vindex nnimap-split-predicate
 
-First some terminology:
+Mail matching this predicate in @code{nnimap-split-inbox} will be
+split, it is a string and the default is @samp{UNSEEN UNDELETED}.
 
-@table @dfn
+This might be useful if you use another @sc{imap} client to read mail in
+your inbox but would like Gnus to split all articles in the inbox
+regardless of readedness. Then you might change this to
+@samp{UNDELETED}.
 
-@item server
-This is the machine that is connected to the outside world and where you
-get news and/or mail from.
+@item nnimap-split-fancy
+@cindex splitting, fancy
+@findex nnimap-split-fancy
+@vindex nnimap-split-fancy
 
-@item home machine
-This is the machine that you want to do the actual reading and responding
-on.  It is typically not connected to the rest of the world in any way.
+It's possible to set @code{nnimap-split-rule} to
+@code{nnmail-split-fancy} if you want to use fancy
+splitting. @xref{Fancy Mail Splitting}.
 
-@item packet
-Something that contains messages and/or commands.  There are two kinds
-of packets:
+However, to be able to have different fancy split rules for nnmail and
+nnimap backends you can set @code{nnimap-split-rule} to
+@code{nnimap-split-fancy} and define the nnimap specific fancy split
+rule in @code{nnimap-split-fancy}.
 
-@table @dfn
-@item message packets
-These are packets made at the server, and typically contain lots of
-messages for you to read.  These are called @file{SoupoutX.tgz} by
-default, where @var{x} is a number.
+Example:
 
-@item response packets
-These are packets made at the home machine, and typically contains
-replies that you've written.  These are called @file{SoupinX.tgz} by
-default, where @var{x} is a number.
+@lisp
+(setq nnimap-split-rule 'nnimap-split-fancy
+      nnimap-split-fancy ...)
+@end lisp
 
-@end table
+Nnmail equivalent: @code{nnmail-split-fancy}.
 
 @end table
 
+@node Editing IMAP ACLs
+@subsection Editing @sc{imap} ACLs
+@cindex editing imap acls
+@cindex Access Control Lists
+@cindex Editing @sc{imap} ACLs
+@kindex G l
+@findex gnus-group-nnimap-edit-acl
 
-@enumerate
+ACL stands for Access Control List.  ACLs are used in @sc{imap} for
+limiting (or enabling) other users access to your mail boxes.  Not all
+@sc{imap} servers support this, this function will give an error if it
+doesn't.
 
-@item
-You log in on the server and create a @sc{soup} packet.  You can either
-use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
-can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
-s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
+To edit a ACL for a mailbox, type @kbd{G l}
+(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
+editing window with detailed instructions.
 
-@item
-You transfer the packet home.  Rail, boat, car or modem will do fine.
+Some possible uses:
 
+@itemize @bullet
 @item
-You put the packet in your home directory.
-
+Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
+on your mailing list mailboxes enables other users on the same server to
+follow the list without subscribing to it.
 @item
-You fire up Gnus on your home machine using the @code{nnsoup} backend as
-the native or secondary server.
+At least with the Cyrus server, you are required to give the user
+"anyone" posting ("p") capabilities to have "plussing" work (that is,
+mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
+INBOX.mailbox).
+@end itemize
 
-@item
-You read articles and mail and answer and followup to the things you
-want (@pxref{SOUP Replies}).
+@node Expunging mailboxes
+@subsection Expunging mailboxes
+@cindex expunging
 
-@item
-You do the @kbd{G s r} command to pack these replies into a @sc{soup}
-packet.
+@cindex Expunge
+@cindex Manual expunging
+@kindex G x
+@findex gnus-group-nnimap-expunge
 
-@item
-You transfer this packet to the server.
+If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
+you may want the option of expunging all deleted articles in a mailbox
+manually.  This is exactly what @kbd{G x} does.
 
-@item
-You use Gnus to mail this packet out with the @kbd{G s s} command.
+Currently there is no way of showing deleted articles, you can just
+delete them.
 
-@item
-You then repeat until you die.
 
-@end enumerate
 
-So you basically have a bipartite system---you use @code{nnsoup} for
-reading and Gnus for packing/sending these @sc{soup} packets.
+@node Other Sources
+@section Other Sources
+
+Gnus can do more than just read news or mail.  The methods described
+below allow Gnus to view directories and files as if they were
+newsgroups.
 
 @menu
-* SOUP Commands::               Commands for creating and sending @sc{soup} packets
-* SOUP Groups::                 A backend for reading @sc{soup} packets.
-* SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
+* 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''.
+* Mail-To-News Gateways::       Posting articles via mail-to-news gateways.
 @end menu
 
 
-@node SOUP Commands
-@subsubsection SOUP Commands
-
-These are commands for creating and manipulating @sc{soup} packets.
-
-@table @kbd
-@item G s b
-@kindex G s b (Group)
-@findex gnus-group-brew-soup
-Pack all unread articles in the current group
-(@code{gnus-group-brew-soup}).  This command understands the
-process/prefix convention.
+@node Directory Groups
+@subsection Directory Groups
+@cindex nndir
+@cindex directory groups
 
-@item G s w
-@kindex G s w (Group)
-@findex gnus-soup-save-areas
-Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
+If you have a directory that has lots of articles in separate files in
+it, you might treat it as a newsgroup.  The files have to have numerical
+names, of course.
 
-@item G s s
-@kindex G s s (Group)
-@findex gnus-soup-send-replies
-Send all replies from the replies packet
-(@code{gnus-soup-send-replies}).
+This might be an opportune moment to mention @code{ange-ftp} (and its
+successor @code{efs}), that most wonderful of all wonderful Emacs
+packages.  When I wrote @code{nndir}, I didn't think much about it---a
+backend to read directories.  Big deal.
 
-@item G s p
-@kindex G s p (Group)
-@findex gnus-soup-pack-packet
-Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
+@code{ange-ftp} changes that picture dramatically.  For instance, if you
+enter the @code{ange-ftp} file name
+@file{/ftp.hpc.uh.edu:/pub/emacs/ding-list/} as the directory name,
+@code{ange-ftp} or @code{efs} will actually allow you to read this
+directory over at @samp{sina} as a newsgroup.  Distributed news ahoy!
 
-@item G s r
-@kindex G s r (Group)
-@findex nnsoup-pack-replies
-Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
+@code{nndir} will use @sc{nov} files if they are present.
 
-@item O s
-@kindex O s (Summary)
-@findex gnus-soup-add-article
-This summary-mode command adds the current article to a @sc{soup} packet
-(@code{gnus-soup-add-article}).  It understands the process/prefix
-convention (@pxref{Process/Prefix}).
+@code{nndir} is a ``read-only'' backend---you can't delete or expire
+articles with this method.  You can use @code{nnmh} or @code{nnml} for
+whatever you use @code{nndir} for, so you could switch to any of those
+methods if you feel the need to have a non-read-only @code{nndir}.
 
-@end table
 
+@node Anything Groups
+@subsection Anything Groups
+@cindex nneething
 
-There are a few variables to customize where Gnus will put all these
-thingies:
+From the @code{nndir} backend (which reads a single spool-like
+directory), it's just a hop and a skip to @code{nneething}, which
+pretends that any arbitrary directory is a newsgroup.  Strange, but
+true.
 
-@table @code
+When @code{nneething} is presented with a directory, it will scan this
+directory and assign article numbers to each file.  When you enter such
+a group, @code{nneething} must create ``headers'' that Gnus can use.
+After all, Gnus is a newsreader, in case you're forgetting.
+@code{nneething} does this in a two-step process.  First, it snoops each
+file in question.  If the file looks like an article (i.e., the first
+few lines look like headers), it will use this as the head.  If this is
+just some arbitrary file without a head (e.g. a C source file),
+@code{nneething} will cobble up a header out of thin air.  It will use
+file ownership, name and date and do whatever it can with these
+elements.
 
-@item gnus-soup-directory
-@vindex gnus-soup-directory
-Directory where Gnus will save intermediate files while composing
-@sc{soup} packets.  The default is @file{~/SoupBrew/}.
+All this should happen automatically for you, and you will be presented
+with something that looks very much like a newsgroup.  Totally like a
+newsgroup, to be precise.  If you select an article, it will be displayed
+in the article buffer, just as usual.
 
-@item gnus-soup-replies-directory
-@vindex gnus-soup-replies-directory
-This is what Gnus will use as a temporary directory while sending our
-reply packets.  @file{~/SoupBrew/SoupReplies/} is the default.
+If you select a line that represents a directory, Gnus will pop you into
+a new summary buffer for this @code{nneething} group.  And so on.  You can
+traverse the entire disk this way, if you feel like, but remember that
+Gnus is not dired, really, and does not intend to be, either.
 
-@item gnus-soup-prefix-file
-@vindex gnus-soup-prefix-file
-Name of the file where Gnus stores the last used prefix.  The default is
-@samp{gnus-prefix}.
+There are two overall modes to this action---ephemeral or solid.  When
+doing the ephemeral thing (i.e., @kbd{G D} from the group buffer), Gnus
+will not store information on what files you have read, and what files
+are new, and so on.  If you create a solid @code{nneething} group the
+normal way with @kbd{G m}, Gnus will store a mapping table between
+article numbers and file names, and you can treat this group like any
+other groups.  When you activate a solid @code{nneething} group, you will
+be told how many unread articles it contains, etc., etc.
 
-@item gnus-soup-packer
-@vindex gnus-soup-packer
-A format string command for packing a @sc{soup} packet.  The default is
-@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
+Some variables:
 
-@item gnus-soup-unpacker
-@vindex gnus-soup-unpacker
-Format string command for unpacking a @sc{soup} packet.  The default is
-@samp{gunzip -c %s | tar xvf -}.
+@table @code
+@item nneething-map-file-directory
+@vindex nneething-map-file-directory
+All the mapping files for solid @code{nneething} groups will be stored
+in this directory, which defaults to @file{~/.nneething/}.
 
-@item gnus-soup-packet-directory
-@vindex gnus-soup-packet-directory
-Where Gnus will look for reply packets.  The default is @file{~/}.
+@item nneething-exclude-files
+@vindex nneething-exclude-files
+All files that match this regexp will be ignored.  Nice to use to exclude
+auto-save files and the like, which is what it does by default.
 
-@item gnus-soup-packet-regexp
-@vindex gnus-soup-packet-regexp
-Regular expression matching @sc{soup} reply packets in
-@code{gnus-soup-packet-directory}.
+@item nneething-include-files
+@vindex nneething-include-files
+Regexp saying what files to include in the group.  If this variable is
+non-@code{nil}, only files matching this regexp will be included.
 
+@item nneething-map-file
+@vindex nneething-map-file
+Name of the map files.
 @end table
 
 
-@node SOUP Groups
-@subsubsection @sc{soup} Groups
-@cindex nnsoup
-
-@code{nnsoup} is the backend for reading @sc{soup} packets.  It will
-read incoming packets, unpack them, and put them in a directory where
-you can read them at leisure.
+@node Document Groups
+@subsection Document Groups
+@cindex nndoc
+@cindex documentation group
+@cindex help group
 
-These are the variables you can use to customize its behavior:
+@code{nndoc} is a cute little thing that will let you read a single file
+as a newsgroup.  Several files types are supported:
 
 @table @code
+@cindex babyl
+@cindex rmail mbox
 
-@item nnsoup-tmp-directory
-@vindex nnsoup-tmp-directory
-When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
-directory.  (@file{/tmp/} by default.)
-
-@item nnsoup-directory
-@vindex nnsoup-directory
-@code{nnsoup} then moves each message and index file to this directory.
-The default is @file{~/SOUP/}.
-
-@item nnsoup-replies-directory
-@vindex nnsoup-replies-directory
-All replies will be stored in this directory before being packed into a
-reply packet.  The default is @file{~/SOUP/replies/"}.
+@item babyl
+The babyl (rmail) mail box.
+@cindex mbox
+@cindex Unix mbox
 
-@item nnsoup-replies-format-type
-@vindex nnsoup-replies-format-type
-The @sc{soup} format of the replies packets.  The default is @samp{?n}
-(rnews), and I don't think you should touch that variable.  I probably
-shouldn't even have documented it.  Drats!  Too late!
+@item mbox
+The standard Unix mbox file.
 
-@item nnsoup-replies-index-type
-@vindex nnsoup-replies-index-type
-The index type of the replies packet.  The default is @samp{?n}, which
-means ``none''.  Don't fiddle with this one either!
+@cindex MMDF mail box
+@item mmdf
+The MMDF mail box format.
 
-@item nnsoup-active-file
-@vindex nnsoup-active-file
-Where @code{nnsoup} stores lots of information.  This is not an ``active
-file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
-this file or mess it up in any way, you're dead.  The default is
-@file{~/SOUP/active}.
+@item news
+Several news articles appended into a file.
 
-@item nnsoup-packer
-@vindex nnsoup-packer
-Format string command for packing a reply @sc{soup} packet.  The default
-is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
+@item rnews
+@cindex rnews batch files
+The rnews batch transport format.
+@cindex forwarded messages
 
-@item nnsoup-unpacker
-@vindex nnsoup-unpacker
-Format string command for unpacking incoming @sc{soup} packets.  The
-default is @samp{gunzip -c %s | tar xvf -}.
+@item forward
+Forwarded articles.
 
-@item nnsoup-packet-directory
-@vindex nnsoup-packet-directory
-Where @code{nnsoup} will look for incoming packets.  The default is
-@file{~/}.
+@item nsmail
+Netscape mail boxes.
 
-@item nnsoup-packet-regexp
-@vindex nnsoup-packet-regexp
-Regular expression matching incoming @sc{soup} packets.  The default is
-@samp{Soupout}.
+@item mime-parts
+MIME multipart messages.
 
-@item nnsoup-always-save
-@vindex nnsoup-always-save
-If non-@code{nil}, save the replies buffer after each posted message.
+@item standard-digest
+The standard (RFC 1153) digest format.
 
+@item slack-digest
+Non-standard digest format---matches most things, but does it badly.
 @end table
 
+You can also use the special ``file type'' @code{guess}, which means
+that @code{nndoc} will try to guess what file type it is looking at.
+@code{digest} means that @code{nndoc} should guess what digest type the
+file is.
 
-@node SOUP Replies
-@subsubsection SOUP Replies
-
-Just using @code{nnsoup} won't mean that your postings and mailings end
-up in @sc{soup} reply packets automagically.  You have to work a bit
-more for that to happen.
-
-@findex nnsoup-set-variables
-The @code{nnsoup-set-variables} command will set the appropriate
-variables to ensure that all your followups and replies end up in the
-@sc{soup} system.
-
-In specific, this is what it does:
-
-@lisp
-(setq message-send-news-function 'nnsoup-request-post)
-(setq message-send-mail-function 'nnsoup-request-mail)
-@end lisp
-
-And that's it, really.  If you only want news to go into the @sc{soup}
-system you just use the first line.  If you only want mail to be
-@sc{soup}ed you use the second.
-
-
-@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.
+@code{nndoc} will not try to change the file or insert any extra headers into
+it---it will simply, like, let you use the file as the basis for a
+group.  And that's it.
 
-Note that you can't read anything from this backend---it can only be
-used to post with.
+If you have some old archived articles that you want to insert into your
+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} (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!
 
-Server variables:
+Virtual server variables:
 
 @table @code
-@item nngateway-address
-@vindex nngateway-address
-This is the address of the mail-to-news gateway.
+@item nndoc-article-type
+@vindex nndoc-article-type
+This should be one of @code{mbox}, @code{babyl}, @code{digest},
+@code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
+@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
+@code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.
+
+@item nndoc-post-type
+@vindex nndoc-post-type
+This variable says whether Gnus is to consider the group a news group or
+a mail group.  There are two valid values:  @code{mail} (the default)
+and @code{news}.
+@end table
 
-@item nngateway-header-transformation
-@vindex nngateway-header-transformation
-News headers 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.
+@menu
+* Document Server Internals::   How to add your own document types.
+@end menu
 
-This default function just inserts a new @code{To} header based on the
-@code{Newsgroups} header and the gateway address.
-For instance, an article with this @code{Newsgroups} header:
 
-@example
-Newsgroups: alt.religion.emacs
-@end example
+@node Document Server Internals
+@subsubsection Document Server Internals
 
-will get this @code{From} header inserted:
+Adding new document types to be recognized by @code{nndoc} isn't
+difficult.  You just have to whip up a definition of what the document
+looks like, write a predicate function to recognize that document type,
+and then hook into @code{nndoc}.
+
+First, here's an example document type definition:
 
 @example
-To: alt-religion-emacs@@GATEWAY
+(mmdf
+ (article-begin .  "^\^A\^A\^A\^A\n")
+ (body-end .  "^\^A\^A\^A\^A\n"))
 @end example
 
-The following pre-defined functions exist:
+The definition is simply a unique @dfn{name} followed by a series of
+regexp pseudo-variable settings.  Below are the possible
+variables---don't be daunted by the number of variables; most document
+types can be defined with very few settings:
 
-@findex nngateway-simple-header-transformation
 @table @code
+@item first-article
+If present, @code{nndoc} will skip past all text until it finds
+something that match this regexp.  All text before this will be
+totally ignored.
 
-@item nngateway-simple-header-transformation
-Creates a @code{To} header that looks like
-@var{newsgroup}@@@code{nngateway-address}.
+@item article-begin
+This setting has to be present in all document type definitions.  It
+says what the beginning of each article looks like.
 
-@findex nngateway-mail2news-header-transformation
+@item head-begin-function
+If present, this should be a function that moves point to the head of
+the article.
 
-@item nngateway-mail2news-header-transformation
-Creates a @code{To} header that looks like
-@code{nngateway-address}.
+@item nndoc-head-begin
+If present, this should be a regexp that matches the head of the
+article.
 
-Here's an example:
+@item nndoc-head-end
+This should match the end of the head of the article.  It defaults to
+@samp{^$}---the empty line.
 
-@lisp
-(setq gnus-post-method
-      '(nngateway
-        "mail2news@@replay.com"
-        (nngateway-header-transformation
-         nngateway-mail2news-header-transformation)))
-@end lisp
+@item body-begin-function
+If present, this function should move point to the beginning of the body
+of the article.
 
-@end table
+@item body-begin
+This should match the beginning of the body of the article.  It defaults
+to @samp{^\n}.
+
+@item body-end-function
+If present, this function should move point to the end of the body of
+the article.
+
+@item body-end
+If present, this should match the end of the body of the article.
 
+@item file-end
+If present, this should match the end of the file.  All text after this
+regexp will be totally ignored.
 
 @end table
 
-So, to use this, simply say something like:
+So, using these variables @code{nndoc} is able to dissect a document
+file into a series of articles, each with a head and a body.  However, a
+few more variables are needed since not all document types are all that
+news-like---variables needed to transform the head or the body into
+something that's palatable for Gnus:
 
-@lisp
-(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
-@end lisp
+@table @code
+@item prepare-body-function
+If present, this function will be called when requesting an article.  It
+will be called with point at the start of the body, and is useful if the
+document has encoded some parts of its contents.
 
+@item article-transform-function
+If present, this function is called when requesting an article.  It's
+meant to be used for more wide-ranging transformation of both head and
+body of the article.
 
+@item generate-head-function
+If present, this function is called to generate a head that Gnus can
+understand.  It is called with the article number as a parameter, and is
+expected to generate a nice head for the article in question.  It is
+called when requesting the headers of all articles.
 
-@node IMAP
-@subsection @sc{imap}
-@cindex nnimap
-@cindex @sc{imap}
+@end table
 
-@sc{imap} is a network protocol for reading mail (or news, or ...),
-think of it as a modernized @sc{nntp}.  Connecting to a @sc{imap}
-server is much similar to connecting to a news server, you just
-specify the network address of the server.
+Let's look at the most complicated example I can come up with---standard
+digests:
 
-@sc{imap} has two properties.  First, @sc{imap} can do everything that
-POP can, it can hence be viewed as POP++.  Secondly, @sc{imap} is a
-mail storage protocol, similar to @sc{nntp} being a news storage
-protocol.  (@sc{imap} offers more features than @sc{nntp} because news
-is more or less read-only whereas mail is read-write.)
+@example
+(standard-digest
+ (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
+ (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
+ (prepare-body-function . nndoc-unquote-dashes)
+ (body-end-function . nndoc-digest-body-end)
+ (head-end . "^ ?$")
+ (body-begin . "^ ?\n")
+ (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
+ (subtype digest guess))
+@end example
 
-If you want to use @sc{imap} as POP++, use an imap entry in
-mail-sources.  With this, Gnus will fetch mails from the @sc{imap}
-server and store them on the local disk.  This is not the usage
-described in this section.  @xref{Mail Sources}.
+We see that all text before a 70-width line of dashes is ignored; all
+text after a line that starts with that @samp{^End of} is also ignored;
+each article begins with a 30-width line of dashes; the line separating
+the head from the body may contain a single space; and that the body is
+run through @code{nndoc-unquote-dashes} before being delivered.
 
-If you want to use @sc{imap} as a mail storage protocol, use an nnimap
-entry in gnus-secondary-select-methods.  With this, Gnus will
-manipulate mails stored on the @sc{imap} server.  This is the kind of
-usage explained in this section.
+To hook your own document definition into @code{nndoc}, use the
+@code{nndoc-add-type} function.  It takes two parameters---the first is
+the definition itself and the second (optional) parameter says where in
+the document type definition alist to put this definition.  The alist is
+traversed sequentially, and @code{nndoc-TYPE-type-p} is called for a given type @code{TYPE}.  So @code{nndoc-mmdf-type-p} is called to see whether a document
+is of @code{mmdf} type, and so on.  These type predicates should return
+@code{nil} if the document is not of the correct type; @code{t} if it is
+of the correct type; and a number if the document might be of the
+correct type.  A high number means high probability; a low number means
+low probability with @samp{0} being the lowest valid number.
 
-A server configuration in @code{~/.gnus} with a few @sc{imap} servers
-might look something like this:
 
-@lisp
-(setq gnus-secondary-select-methods
-      '((nnimap "simpleserver") ; no special configuration
-        ; perhaps a ssh port forwarded server:
-        (nnimap "dolk"
-                (nnimap-address "localhost")
-                (nnimap-server-port 1430))
-        ; a UW server running on localhost
-        (nnimap "barbar"
-                (nnimap-server-port 143)
-                (nnimap-address "localhost")
-                (nnimap-list-pattern ("INBOX" "mail/*")))
-        ; anonymous public cyrus server:
-        (nnimap "cyrus.andrew.cmu.edu"
-                (nnimap-authenticator anonymous)
-                (nnimap-list-pattern "archive.*")
-                (nnimap-stream network))
-        ; a ssl server on a non-standard port:
-        (nnimap "vic20"
-                (nnimap-address "vic20.somewhere.com")
-                (nnimap-server-port 9930)
-                (nnimap-stream ssl))))
-@end lisp
+@node SOUP
+@subsection SOUP
+@cindex SOUP
+@cindex offline
 
-The following variables can be used to create a virtual @code{nnimap}
-server:
+In the PC world people often talk about ``offline'' newsreaders.  These
+are thingies that are combined reader/news transport monstrosities.
+With built-in modem programs.  Yecchh!
 
-@table @code
+Of course, us Unix Weenie types of human beans use things like
+@code{uucp} and, like, @code{nntpd} and set up proper news and mail
+transport things like Ghod intended.  And then we just use normal
+newsreaders.
 
-@item nnimap-address
-@vindex nnimap-address
+However, it can sometimes be convenient to do something that's a bit
+easier on the brain if you have a very slow modem, and you're not really
+that interested in doing things properly.
 
-The address of the remote @sc{imap} server.  Defaults to the virtual
-server name if not specified.
+A file format called @sc{soup} has been developed for transporting news
+and mail from servers to home machines and back again.  It can be a bit
+fiddly.
 
-@item nnimap-server-port
-@vindex nnimap-server-port
-Port on server to contact.  Defaults to port 143, or 993 for SSL.
+First some terminology:
 
-Note that this should be a integer, example server specification:
+@table @dfn
 
-@lisp
-(nnimap "mail.server.com"
-        (nnimap-server-port 4711))
-@end lisp
+@item server
+This is the machine that is connected to the outside world and where you
+get news and/or mail from.
 
-@item nnimap-list-pattern
-@vindex nnimap-list-pattern
-String or list of strings of mailboxes to limit available groups to.
-This is used when the server has very many mailboxes and you're only
-interested in a few -- some servers export your home directory via
-@sc{imap}, you'll probably want to limit the mailboxes to those in
-@file{~/Mail/*} then.
+@item home machine
+This is the machine that you want to do the actual reading and responding
+on.  It is typically not connected to the rest of the world in any way.
 
-The string can also be a cons of REFERENCE and the string as above, what
-REFERENCE is used for is server specific, but on the University of
-Washington server it's a directory that will be concatenated with the
-mailbox.
+@item packet
+Something that contains messages and/or commands.  There are two kinds
+of packets:
 
-Example server specification:
+@table @dfn
+@item message packets
+These are packets made at the server, and typically contain lots of
+messages for you to read.  These are called @file{SoupoutX.tgz} by
+default, where @var{x} is a number.
 
-@lisp
-(nnimap "mail.server.com"
-        (nnimap-list-pattern ("INBOX" "Mail/*" "alt.sex.*"
-                               ("~friend/Mail/" . "list/*"))))
-@end lisp
+@item response packets
+These are packets made at the home machine, and typically contains
+replies that you've written.  These are called @file{SoupinX.tgz} by
+default, where @var{x} is a number.
 
-@item nnimap-stream
-@vindex nnimap-stream
-The type of stream used to connect to your server.  By default, nnimap
-will detect and automatically use all of the below, with the exception
-of SSL. (SSL is being replaced by STARTTLS, which can be automatically
-detected, but it's not widely deployed yet).
+@end table
 
-Example server specification:
+@end table
 
-@lisp
-(nnimap "mail.server.com"
-        (nnimap-stream ssl))
-@end lisp
 
-Please note that the value of @code{nnimap-stream} is a symbol!
+@enumerate
 
-@itemize @bullet
 @item
-@dfn{gssapi:} Connect with GSSAPI (usually kerberos 5). Requires the
-@samp{imtest} program.
+You log in on the server and create a @sc{soup} packet.  You can either
+use a dedicated @sc{soup} thingie (like the @code{awk} program), or you
+can use Gnus to create the packet with its @sc{soup} commands (@kbd{O
+s} and/or @kbd{G s b}; and then @kbd{G s p}) (@pxref{SOUP Commands}).
+
 @item
-@dfn{kerberos4:} Connect with kerberos 4. Requires the @samp{imtest} program.
+You transfer the packet home.  Rail, boat, car or modem will do fine.
+
 @item
-@dfn{starttls:} Connect via the STARTTLS extension (similar to
-SSL). Requires the external library @samp{starttls.el} and program
-@samp{starttls}.
+You put the packet in your home directory.
+
 @item
-@dfn{ssl:} Connect through SSL. Requires OpenSSL (the
-program @samp{openssl}) or SSLeay (@samp{s_client}).
+You fire up Gnus on your home machine using the @code{nnsoup} backend as
+the native or secondary server.
+
 @item
-@dfn{shell:} Use a shell command to start @sc{imap} connection.
+You read articles and mail and answer and followup to the things you
+want (@pxref{SOUP Replies}).
+
 @item
-@dfn{network:} Plain, TCP/IP network connection.
-@end itemize
+You do the @kbd{G s r} command to pack these replies into a @sc{soup}
+packet.
 
-@vindex imap-kerberos4-program
-The @samp{imtest} program is shipped with Cyrus IMAPD.  If you're
-using @samp{imtest} from Cyrus IMAPD < 2.0.14 (which includes version
-1.5.x and 1.6.x) you need to frob @code{imap-process-connection-type}
-to make @code{imap.el} use a pty instead of a pipe when communicating
-with @samp{imtest}.  You will then suffer from a line length
-restrictions on IMAP commands, which might make Gnus seem to hang
-indefinitely if you have many articles in a mailbox.  The variable
-@code{imap-kerberos4-program} contain parameters to pass to the imtest
-program.
+@item
+You transfer this packet to the server.
 
-@vindex imap-ssl-program
-For SSL connections, the OpenSSL program is available from
-@uref{http://www.openssl.org/}. OpenSSL was formerly known as SSLeay,
-and nnimap support it too - altough the most recent versions of
-SSLeay, 0.9.x, are known to have serious bugs making it
-useless. Earlier versions, especially 0.8.x, of SSLeay are known to
-work. The variable @code{imap-ssl-program} contain parameters to pass
-to OpenSSL/SSLeay.
+@item
+You use Gnus to mail this packet out with the @kbd{G s s} command.
 
-@vindex imap-shell-program
-@vindex imap-shell-host
-For @sc{imap} connections using the @code{shell} stream, the variable
-@code{imap-shell-program} specify what program to call.
+@item
+You then repeat until you die.
 
-@item nnimap-authenticator
-@vindex nnimap-authenticator
+@end enumerate
 
-The authenticator used to connect to the server.  By default, nnimap
-will use the most secure authenticator your server is capable of.
+So you basically have a bipartite system---you use @code{nnsoup} for
+reading and Gnus for packing/sending these @sc{soup} packets.
 
-Example server specification:
+@menu
+* SOUP Commands::               Commands for creating and sending @sc{soup} packets
+* SOUP Groups::                 A backend for reading @sc{soup} packets.
+* SOUP Replies::                How to enable @code{nnsoup} to take over mail and news.
+@end menu
 
-@lisp
-(nnimap "mail.server.com"
-        (nnimap-authenticator anonymous))
-@end lisp
 
-Please note that the value of @code{nnimap-authenticator} is a symbol!
+@node SOUP Commands
+@subsubsection SOUP Commands
 
-@itemize @bullet
-@item
-@dfn{gssapi:} GSSAPI (usually kerberos 5) authentication. Require
-external program @code{imtest}.
-@item
-@dfn{kerberos4:} Kerberos authentication. Require external program
-@code{imtest}.
-@item
-@dfn{digest-md5:} Encrypted username/password via DIGEST-MD5. Require
-external library @code{digest-md5.el}.
-@item
-@dfn{cram-md5:} Encrypted username/password via CRAM-MD5.
-@item
-@dfn{login:} Plain-text username/password via LOGIN.
-@item
-@dfn{anonymous:} Login as `anonymous', supplying your emailadress as password.
-@end itemize
+These are commands for creating and manipulating @sc{soup} packets.
 
-@item nnimap-expunge-on-close
-@cindex Expunging
-@vindex nnimap-expunge-on-close
-Unlike Parmenides the @sc{imap} designers has decided that things that
-doesn't exist actually does exist.  More specifically, @sc{imap} has
-this concept of marking articles @code{Deleted} which doesn't actually
-delete them, and this (marking them @code{Deleted}, that is) is what
-nnimap does when you delete a article in Gnus (with @kbd{G DEL} or
-similar).
+@table @kbd
+@item G s b
+@kindex G s b (Group)
+@findex gnus-group-brew-soup
+Pack all unread articles in the current group
+(@code{gnus-group-brew-soup}).  This command understands the
+process/prefix convention.
 
-Since the articles aren't really removed when we mark them with the
-@code{Deleted} flag we'll need a way to actually delete them.  Feel like
-running in circles yet?
+@item G s w
+@kindex G s w (Group)
+@findex gnus-soup-save-areas
+Save all @sc{soup} data files (@code{gnus-soup-save-areas}).
 
-Traditionally, nnimap has removed all articles marked as @code{Deleted}
-when closing a mailbox but this is now configurable by this server
-variable.
+@item G s s
+@kindex G s s (Group)
+@findex gnus-soup-send-replies
+Send all replies from the replies packet
+(@code{gnus-soup-send-replies}).
 
-The possible options are:
+@item G s p
+@kindex G s p (Group)
+@findex gnus-soup-pack-packet
+Pack all files into a @sc{soup} packet (@code{gnus-soup-pack-packet}).
 
-@table @code
+@item G s r
+@kindex G s r (Group)
+@findex nnsoup-pack-replies
+Pack all replies into a replies packet (@code{nnsoup-pack-replies}).
 
-@item always
-The default behavior, delete all articles marked as "Deleted" when
-closing a mailbox.
-@item never
-Never actually delete articles.  Currently there is no way of showing
-the articles marked for deletion in nnimap, but other @sc{imap} clients
-may allow you to do this.  If you ever want to run the EXPUNGE command
-manually, @xref{Expunging mailboxes}.
-@item ask
-When closing mailboxes, nnimap will ask if you wish to expunge deleted
-articles or not.
+@item O s
+@kindex O s (Summary)
+@findex gnus-soup-add-article
+This summary-mode command adds the current article to a @sc{soup} packet
+(@code{gnus-soup-add-article}).  It understands the process/prefix
+convention (@pxref{Process/Prefix}).
 
 @end table
 
-@item nnimap-importantize-dormant
-@vindex nnimap-importantize-dormant
 
-If non-nil, marks dormant articles as ticked (as well), for other IMAP
-clients. Within Gnus, dormant articles will naturally still (only) be
-marked as ticked.  This is to make dormant articles stand out, just
-like ticked articles, in other IMAP clients. (In other words, Gnus has
-two ``Tick'' marks and IMAP has only one.)
+There are a few variables to customize where Gnus will put all these
+thingies:
 
-Probably the only reason for frobing this would be if you're trying
-enable per-user persistant dormant flags, using something like:
+@table @code
 
-@lisp
-(setcdr (assq 'dormant nnimap-mark-to-flag-alist)
-        (format "gnus-dormant-%s" (user-login-name)))
-(setcdr (assq 'dormant nnimap-mark-to-predicate-alist)
-        (format "KEYWORD gnus-dormant-%s" (user-login-name)))
-@end lisp
+@item gnus-soup-directory
+@vindex gnus-soup-directory
+Directory where Gnus will save intermediate files while composing
+@sc{soup} packets.  The default is @file{~/SoupBrew/}.
 
-In this case, you would not want the per-user dormant flag showing up
-as ticked for other users.
+@item gnus-soup-replies-directory
+@vindex gnus-soup-replies-directory
+This is what Gnus will use as a temporary directory while sending our
+reply packets.  @file{~/SoupBrew/SoupReplies/} is the default.
 
-@item nnimap-expunge-search-string
-@cindex Expunging
-@vindex nnimap-expunge-search-string
+@item gnus-soup-prefix-file
+@vindex gnus-soup-prefix-file
+Name of the file where Gnus stores the last used prefix.  The default is
+@samp{gnus-prefix}.
 
-This variable contain the IMAP search command sent to server when
-searching for articles eligible for expiring.  The default is
-@code{"UID %s NOT SINCE %s"}, where the first @code{%s} is replaced by
-UID set and the second @code{%s} is replaced by a date.
+@item gnus-soup-packer
+@vindex gnus-soup-packer
+A format string command for packing a @sc{soup} packet.  The default is
+@samp{tar cf - %s | gzip > $HOME/Soupout%d.tgz}.
 
-Probably the only useful value to change this to is
-@code{"UID %s NOT SENTSINCE %s"}, which makes nnimap use the Date: in
-messages instead of the internal article date. See section 6.4.4 of
-RFC 2060 for more information on valid strings.
+@item gnus-soup-unpacker
+@vindex gnus-soup-unpacker
+Format string command for unpacking a @sc{soup} packet.  The default is
+@samp{gunzip -c %s | tar xvf -}.
 
-@item nnimap-authinfo-file
-@vindex nnimap-authinfo-file
+@item gnus-soup-packet-directory
+@vindex gnus-soup-packet-directory
+Where Gnus will look for reply packets.  The default is @file{~/}.
 
-A file containing credentials used to log in on servers.  The format is
-(almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
-variable @code{nntp-authinfo-file} for exact syntax; also see
-@ref{NNTP}.
+@item gnus-soup-packet-regexp
+@vindex gnus-soup-packet-regexp
+Regular expression matching @sc{soup} reply packets in
+@code{gnus-soup-packet-directory}.
 
 @end table
 
-@menu
-* Splitting in IMAP::           Splitting mail with nnimap.
-* Editing IMAP ACLs::           Limiting/enabling other users access to a mailbox.
-* Expunging mailboxes::         Equivalent of a "compress mailbox" button.
-@end menu
 
+@node SOUP Groups
+@subsubsection @sc{soup} Groups
+@cindex nnsoup
 
+@code{nnsoup} is the backend for reading @sc{soup} packets.  It will
+read incoming packets, unpack them, and put them in a directory where
+you can read them at leisure.
 
-@node Splitting in IMAP
-@subsubsection Splitting in @sc{imap}
-@cindex splitting imap mail
+These are the variables you can use to customize its behavior:
 
-Splitting is something Gnus users has loved and used for years, and now
-the rest of the world is catching up.  Yeah, dream on, not many
-@sc{imap} server has server side splitting and those that have splitting
-seem to use some non-standard protocol.  This means that @sc{imap}
-support for Gnus has to do it's own splitting.
+@table @code
 
-And it does.
+@item nnsoup-tmp-directory
+@vindex nnsoup-tmp-directory
+When @code{nnsoup} unpacks a @sc{soup} packet, it does it in this
+directory.  (@file{/tmp/} by default.)
+
+@item nnsoup-directory
+@vindex nnsoup-directory
+@code{nnsoup} then moves each message and index file to this directory.
+The default is @file{~/SOUP/}.
 
-Here are the variables of interest:
+@item nnsoup-replies-directory
+@vindex nnsoup-replies-directory
+All replies will be stored in this directory before being packed into a
+reply packet.  The default is @file{~/SOUP/replies/"}.
 
-@table @code
+@item nnsoup-replies-format-type
+@vindex nnsoup-replies-format-type
+The @sc{soup} format of the replies packets.  The default is @samp{?n}
+(rnews), and I don't think you should touch that variable.  I probably
+shouldn't even have documented it.  Drats!  Too late!
 
-@item nnimap-split-crosspost
-@cindex splitting, crosspost
-@cindex crosspost
-@vindex nnimap-split-crosspost
+@item nnsoup-replies-index-type
+@vindex nnsoup-replies-index-type
+The index type of the replies packet.  The default is @samp{?n}, which
+means ``none''.  Don't fiddle with this one either!
 
-If non-nil, do crossposting if several split methods match the mail.  If
-nil, the first match in @code{nnimap-split-rule} found will be used.
+@item nnsoup-active-file
+@vindex nnsoup-active-file
+Where @code{nnsoup} stores lots of information.  This is not an ``active
+file'' in the @code{nntp} sense; it's an Emacs Lisp file.  If you lose
+this file or mess it up in any way, you're dead.  The default is
+@file{~/SOUP/active}.
 
-Nnmail equivalent: @code{nnmail-crosspost}.
+@item nnsoup-packer
+@vindex nnsoup-packer
+Format string command for packing a reply @sc{soup} packet.  The default
+is @samp{tar cf - %s | gzip > $HOME/Soupin%d.tgz}.
 
-@item nnimap-split-inbox
-@cindex splitting, inbox
-@cindex inbox
-@vindex nnimap-split-inbox
+@item nnsoup-unpacker
+@vindex nnsoup-unpacker
+Format string command for unpacking incoming @sc{soup} packets.  The
+default is @samp{gunzip -c %s | tar xvf -}.
 
-A string or a list of strings that gives the name(s) of @sc{imap}
-mailboxes to split from.  Defaults to nil, which means that splitting is
-disabled!
+@item nnsoup-packet-directory
+@vindex nnsoup-packet-directory
+Where @code{nnsoup} will look for incoming packets.  The default is
+@file{~/}.
 
-@lisp
-(setq nnimap-split-inbox
-      '("INBOX" ("~/friend/Mail" . "lists/*") "lists.imap"))
-@end lisp
+@item nnsoup-packet-regexp
+@vindex nnsoup-packet-regexp
+Regular expression matching incoming @sc{soup} packets.  The default is
+@samp{Soupout}.
 
-No nnmail equivalent.
+@item nnsoup-always-save
+@vindex nnsoup-always-save
+If non-@code{nil}, save the replies buffer after each posted message.
 
-@item nnimap-split-rule
-@cindex Splitting, rules
-@vindex nnimap-split-rule
+@end table
 
-New mail found in @code{nnimap-split-inbox} will be split according to
-this variable.
 
-This variable contains a list of lists, where the first element in the
-sublist gives the name of the @sc{imap} mailbox to move articles
-matching the regexp in the second element in the sublist.  Got that?
-Neither did I, we need examples.
+@node SOUP Replies
+@subsubsection SOUP Replies
 
-@lisp
-(setq nnimap-split-rule
-      '(("INBOX.nnimap"
-         "^Sender: owner-nnimap@@vic20.globalcom.se")
-        ("INBOX.junk"    "^Subject:.*MAKE MONEY")
-        ("INBOX.private" "")))
-@end lisp
+Just using @code{nnsoup} won't mean that your postings and mailings end
+up in @sc{soup} reply packets automagically.  You have to work a bit
+more for that to happen.
 
-This will put all articles from the nnimap mailing list into mailbox
-INBOX.nnimap, all articles containing MAKE MONEY in the Subject: line
-into INBOX.junk and everything else in INBOX.private.
+@findex nnsoup-set-variables
+The @code{nnsoup-set-variables} command will set the appropriate
+variables to ensure that all your followups and replies end up in the
+@sc{soup} system.
 
-The first string may contain `\\1' forms, like the ones used by
-replace-match to insert sub-expressions from the matched text.  For
-instance:
+In specific, this is what it does:
 
 @lisp
-("INBOX.lists.\\1"     "^Sender: owner-\\([a-z-]+\\)@@")
+(setq message-send-news-function 'nnsoup-request-post)
+(setq message-send-mail-function 'nnsoup-request-mail)
 @end lisp
 
-The second element can also be a function.  In that case, it will be
-called with the first element of the rule as the argument, in a buffer
-containing the headers of the article.  It should return a non-nil value
-if it thinks that the mail belongs in that group.
+And that's it, really.  If you only want news to go into the @sc{soup}
+system you just use the first line.  If you only want mail to be
+@sc{soup}ed you use the second.
 
-Nnmail users might recollect that the last regexp had to be empty to
-match all articles (like in the example above).  This is not required in
-nnimap.  Articles not matching any of the regexps will not be moved out
-of your inbox.  (This might affect performance if you keep lots of
-unread articles in your inbox, since the splitting code would go over
-them every time you fetch new mail.)
 
-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".
+@node Mail-To-News Gateways
+@subsection Mail-To-News Gateways
+@cindex mail-to-news gateways
+@cindex gateways
 
-This variable can also have a function as its value, the function will
-be called with the headers narrowed and should return a group where it
-thinks the article should be split to.  See @code{nnimap-split-fancy}.
+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.
 
-The splitting code tries to create mailboxes if it need too.
+Note that you can't read anything from this backend---it can only be
+used to post with.
 
-To allow for different split rules on different virtual servers, and
-even different split rules in different inboxes on the same server,
-the syntax of this variable have been extended along the lines of:
+Server variables:
 
-@lisp
-(setq nnimap-split-rule
-      '(("my1server"    (".*"    (("ding"    "ding@@gnus.org")
-                                  ("junk"    "From:.*Simon")))
-        ("my2server"    ("INBOX" nnimap-split-fancy))
-        ("my[34]server" (".*"    (("private" "To:.*Simon")
-                                  ("junk"    my-junk-func)))))
-@end lisp
+@table @code
+@item nngateway-address
+@vindex nngateway-address
+This is the address of the mail-to-news gateway.
 
-The virtual server name is in fact a regexp, so that the same rules
-may apply to several servers.  In the example, the servers
-@code{my3server} and @code{my4server} both use the same rules.
-Similarly, the inbox string is also a regexp.  The actual splitting
-rules are as before, either a function, or a list with group/regexp or
-group/function elements.
+@item nngateway-header-transformation
+@vindex nngateway-header-transformation
+News headers 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.
 
-Nnmail equivalent: @code{nnmail-split-methods}.
+This default function just inserts a new @code{To} header based on the
+@code{Newsgroups} header and the gateway address.
+For instance, an article with this @code{Newsgroups} header:
 
-@item nnimap-split-predicate
-@cindex splitting
-@vindex nnimap-split-predicate
+@example
+Newsgroups: alt.religion.emacs
+@end example
 
-Mail matching this predicate in @code{nnimap-split-inbox} will be
-split, it is a string and the default is @samp{UNSEEN UNDELETED}.
+will get this @code{From} header inserted:
 
-This might be useful if you use another @sc{imap} client to read mail in
-your inbox but would like Gnus to split all articles in the inbox
-regardless of readedness. Then you might change this to
-@samp{UNDELETED}.
+@example
+To: alt-religion-emacs@@GATEWAY
+@end example
 
-@item nnimap-split-fancy
-@cindex splitting, fancy
-@findex nnimap-split-fancy
-@vindex nnimap-split-fancy
+The following pre-defined functions exist:
 
-It's possible to set @code{nnimap-split-rule} to
-@code{nnmail-split-fancy} if you want to use fancy
-splitting. @xref{Fancy Mail Splitting}.
+@findex nngateway-simple-header-transformation
+@table @code
 
-However, to be able to have different fancy split rules for nnmail and
-nnimap backends you can set @code{nnimap-split-rule} to
-@code{nnimap-split-fancy} and define the nnimap specific fancy split
-rule in @code{nnimap-split-fancy}.
+@item nngateway-simple-header-transformation
+Creates a @code{To} header that looks like
+@var{newsgroup}@@@code{nngateway-address}.
 
-Example:
+@findex nngateway-mail2news-header-transformation
+
+@item nngateway-mail2news-header-transformation
+Creates a @code{To} header that looks like
+@code{nngateway-address}.
+
+Here's an example:
 
 @lisp
-(setq nnimap-split-rule 'nnimap-split-fancy
-      nnimap-split-fancy ...)
+(setq gnus-post-method
+      '(nngateway
+        "mail2news@@replay.com"
+        (nngateway-header-transformation
+         nngateway-mail2news-header-transformation)))
 @end lisp
 
-Nnmail equivalent: @code{nnmail-split-fancy}.
-
 @end table
 
-@node Editing IMAP ACLs
-@subsubsection Editing @sc{imap} ACLs
-@cindex editing imap acls
-@cindex Access Control Lists
-@cindex Editing @sc{imap} ACLs
-@kindex G l
-@findex gnus-group-nnimap-edit-acl
-
-ACL stands for Access Control List.  ACLs are used in @sc{imap} for
-limiting (or enabling) other users access to your mail boxes.  Not all
-@sc{imap} servers support this, this function will give an error if it
-doesn't.
-
-To edit a ACL for a mailbox, type @kbd{G l}
-(@code{gnus-group-edit-nnimap-acl}) and you'll be presented with a ACL
-editing window with detailed instructions.
-
-Some possible uses:
-
-@itemize @bullet
-@item
-Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags)
-on your mailing list mailboxes enables other users on the same server to
-follow the list without subscribing to it.
-@item
-At least with the Cyrus server, you are required to give the user
-"anyone" posting ("p") capabilities to have "plussing" work (that is,
-mail sent to user+mailbox@@domain ending up in the @sc{imap} mailbox
-INBOX.mailbox).
-@end itemize
-
-@node Expunging mailboxes
-@subsubsection Expunging mailboxes
-@cindex expunging
 
-@cindex Expunge
-@cindex Manual expunging
-@kindex G x
-@findex gnus-group-nnimap-expunge
+@end table
 
-If you're using the @code{never} setting of @code{nnimap-expunge-on-close},
-you may want the option of expunging all deleted articles in a mailbox
-manually.  This is exactly what @kbd{G x} does.
+So, to use this, simply say something like:
 
-Currently there is no way of showing deleted articles, you can just
-delete them.
+@lisp
+(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
+@end lisp
 
 
 
@@ -15737,7 +15755,7 @@ Articles that have a score higher than this have a high score.  Default
 @subsection Agent Commands
 
 All the Gnus Agent commands are on the @kbd{J} submap.  The @kbd{J j}
-(@code{gnus-agent-toggle-plugged} command works in all modes, and
+(@code{gnus-agent-toggle-plugged}) command works in all modes, and
 toggles the plugged/unplugged state of the Gnus Agent.
 
 
@@ -17468,9 +17486,10 @@ before.
 @section GroupLens
 @cindex GroupLens
 
-GroupLens is a collaborative filtering system that helps you work
-together with other people to find the quality news articles out of the
-huge volume of news articles generated every day.
+GroupLens (@uref{http://www.cs.umn.edu/Research/GroupLens/}) is a
+collaborative filtering system that helps you work together with other
+people to find the quality news articles out of the huge volume of
+news articles generated every day.
 
 To accomplish this the GroupLens system combines your opinions about
 articles you have already read with the opinions of others who have done
@@ -17482,6 +17501,9 @@ of a prediction, what they thought of the article.  You can use this
 prediction to help you decide whether or not you want to read the
 article.
 
+@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
+so this section is mostly of historical interest.
+
 @menu
 * Using GroupLens::             How to make Gnus use GroupLens.
 * Rating Articles::             Letting GroupLens know how you rate articles.
@@ -18306,7 +18328,7 @@ these coutries, that's not true.
 @vindex gnus-use-correct-string-widths
 To help fix this, you can set @code{gnus-use-correct-string-widths} to
 @code{t}.  This makes buffer generation slower, but the results will be
-prettieer.  The default value is @code{nil}.
+prettieer.  The default value is @code{t}.
 
 
 
@@ -19197,13 +19219,10 @@ picons to be installed into a location pointed to by
 @node Picon Requirements
 @subsubsection Picon Requirements
 
-To have Gnus display Picons for you, you must be running XEmacs
-19.13 or greater since all other versions of Emacs aren't yet able to
-display images.
-
-Additionally, you must have @code{x} support compiled into XEmacs.  To
-display color picons which are much nicer than the black & white one,
-you also need one of @code{xpm} or @code{gif} compiled into XEmacs.
+To have Gnus display Picons for you, you must have @code{x} support
+compiled into XEmacs.  To display color picons which are much nicer
+than the black & white one, you also need one of @code{xpm} or
+@code{gif} compiled into XEmacs.
 
 @vindex gnus-picons-convert-x-face
 If you want to display faces from @code{X-Face} headers, you should have