X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=texi%2Fgnus.texi;h=3b5118093d58c807153013a48c827c6fecb1462e;hb=2ff131474a99f8d5658c3cd0e2398070750d78ad;hp=8109b74fda4ff66a6bdb53404fdcb4d1b69baeb2;hpb=d8f7efd1ce52b6a692873cc41a208d32aca02a59;p=elisp%2Fgnus.git- diff --git a/texi/gnus.texi b/texi/gnus.texi index 8109b74..3b51180 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -590,7 +590,7 @@ Customizing Threading * Loose Threads:: How Gnus gathers loose threads into bigger threads. * Filling In Threads:: Making the threads displayed look fuller. * More Threading:: Even more variables for fiddling with threads. -* Low-Level Threading:: You thought it was over... but you were wrong! +* Low-Level Threading:: You thought it was over@dots{} but you were wrong! Decoding Articles @@ -711,6 +711,7 @@ Choosing a Mail Back End * Rmail Babyl:: Emacs programs use the rmail babyl format. * Mail Spool:: Store your mail in a private spool? * MH Spool:: An mhspool-like back end. +* Maildir:: Another one-file-per-message format. * Mail Folders:: Having one file for each group. * Comparing Mail Back Ends:: An in-depth looks at pros and cons. @@ -729,7 +730,7 @@ Browsing the Web * Splitting in IMAP:: Splitting mail with nnimap. * Expiring in IMAP:: Expiring mail with nnimap. * Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox. -* Expunging mailboxes:: Equivalent of a "compress mailbox" button. +* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button. * A note on namespaces:: How to (not) use IMAP namespace in Gnus. Other Sources @@ -1143,8 +1144,8 @@ information in the normal (i.e., master) @file{.newsrc} file. If the @file{.newsrc*} files have not been saved in the master when the slave starts, you may be prompted as to whether to read an auto-save -file. If you answer "yes", the unsaved changes to the master will be -incorporated into the slave. If you answer "no", the slave may see some +file. If you answer ``yes'', the unsaved changes to the master will be +incorporated into the slave. If you answer ``no'', the slave may see some messages as unread that have been read in the master. @node Fetching a Group @@ -1451,9 +1452,14 @@ saving. This can be useful in certain obscure situations that involve several servers where not all servers support @code{ask-server}. @vindex gnus-startup-file +@vindex gnus-backup-startup-file +@vindex version-control The @code{gnus-startup-file} variable says where the startup files are. The default value is @file{~/.newsrc}, with the Gnus (El Dingo) startup file being whatever that one is, with a @samp{.eld} appended. +If you want version control for this file, set +@code{gnus-backup-startup-file}. It respects the same values as the +@code{version-control} variable. @vindex gnus-save-newsrc-hook @vindex gnus-save-quick-newsrc-hook @@ -1950,8 +1956,8 @@ The score of the group. @item ticked The number of ticked articles in the group. @item total -The total number of articles in the group. Or rather, MAX-NUMBER minus -MIN-NUMBER plus one. +The total number of articles in the group. Or rather, +@var{max-number} minus @var{min-number} plus one. @item topic When using the topic minor mode, this variable is bound to the current topic being inserted. @@ -2058,10 +2064,10 @@ Select the current group, switch to the summary buffer and display the first unread article (@code{gnus-group-read-group}). If there are no unread articles in the group, or if you give a non-numerical prefix to this command, gnus will offer to fetch all the old articles in this -group from the server. If you give a numerical prefix @var{N}, @var{N} -determines the number of articles gnus will fetch. If @var{N} is -positive, gnus fetches the @var{N} newest articles, if @var{N} is -negative, Gnus fetches the @code{abs(@var{N})} oldest articles. +group from the server. If you give a numerical prefix @var{n}, @var{n} +determines the number of articles Gnus will fetch. If @var{n} is +positive, Gnus fetches the @var{n} newest articles, if @var{n} is +negative, Gnus fetches the @code{abs(@var{n})} oldest articles. Thus, @kbd{SPC} enters the group normally, @kbd{C-u SPC} offers old articles, @kbd{C-u 4 2 SPC} fetches the 42 newest articles, and @kbd{C-u @@ -2656,7 +2662,7 @@ Here's an example group parameter list: (auto-expire . t)) @end example -We see that each element consists of a "dotted pair"---the thing before +We see that each element consists of a ``dotted pair''---the thing before the dot is the key, while the thing after the dot is the value. All the parameters have this form @emph{except} local variable specs, which are not dotted pairs, but proper lists. @@ -2827,8 +2833,8 @@ display on entering the group. Valid values are: Display all articles, both read and unread. @item an integer -Display the last INTEGER articles in the group. This is the same as -entering the group with C-u INTEGER. +Display the last @var{integer} articles in the group. This is the same as +entering the group with C-u @var{integer}. @item default Display the default visible articles, which normally includes unread and @@ -2975,7 +2981,7 @@ Group parameters can be set via the @code{gnus-parameters} variable too. But some variables, such as @code{visible}, have no effect. For example: -@example +@lisp (setq gnus-parameters '(("mail\\..*" (gnus-show-threads nil) @@ -2994,7 +3000,7 @@ example: ("list\\..*" (total-expire . t) (broken-reply-to . t)))) -@end example +@end lisp String value of parameters will be subjected to regexp substitution, as the @code{to-group} example shows. @@ -3490,10 +3496,10 @@ To get this @emph{fab} functionality you simply turn on (ooh!) the is a toggling command.) Go ahead, just try it. I'll still be here when you get back. La de -dum... Nice tune, that... la la la... What, you're back? Yes, and -now press @kbd{l}. There. All your groups are now listed under -@samp{misc}. Doesn't that make you feel all warm and fuzzy? Hot and -bothered? +dum@dots{} Nice tune, that@dots{} la la la@dots{} What, you're back? +Yes, and now press @kbd{l}. There. All your groups are now listed +under @samp{misc}. Doesn't that make you feel all warm and fuzzy? +Hot and bothered? If you want this permanently enabled, you should add that minor mode to the hook for the group mode. Put the following line in your @@ -3676,13 +3682,15 @@ Toggle hiding empty topics @kindex T # (Topic) @findex gnus-topic-mark-topic Mark all groups in the current topic with the process mark -(@code{gnus-topic-mark-topic}). +(@code{gnus-topic-mark-topic}). This command works recursively on +sub-topics unless given a prefix. @item T M-# @kindex T M-# (Topic) @findex gnus-topic-unmark-topic Remove the process mark from all groups in the current topic -(@code{gnus-topic-unmark-topic}). +(@code{gnus-topic-unmark-topic}). This command works recursively on +sub-topics unless given a prefix. @item C-c C-x @kindex C-c C-x (Topic) @@ -3993,7 +4001,7 @@ post to the group under the point. If the prefix is 1, prompt for group to post to. @xref{Composing Messages}. This function actually prepares a news even when using mail groups. -This is useful for "posting" messages to mail groups without actually +This is useful for ``posting'' messages to mail groups without actually sending them over the network: they're just saved directly to the group in question. The corresponding back end must have a request-post method for this to work though. @@ -4671,10 +4679,11 @@ headers are used instead. @vindex nnmail-extra-headers A related variable is @code{nnmail-extra-headers}, which controls when -to include extra headers when generating overview (@sc{nov}) files. If -you have old overview files, you should regenerate them after changing -this variable, by entering the server buffer using `^', and then `g' on -the appropriate mail server (e.g. nnml) to cause regeneration. +to include extra headers when generating overview (@sc{nov}) files. +If you have old overview files, you should regenerate them after +changing this variable, by entering the server buffer using @kbd{^}, +and then @kbd{g} on the appropriate mail server (e.g. nnml) to cause +regeneration. @vindex gnus-summary-line-format You also have to instruct Gnus to display the data by changing the @@ -4916,6 +4925,10 @@ If you want to fetch new articles or redisplay the group, see Select the current article, or, if that one's read already, the next unread article (@code{gnus-summary-next-page}). +If you have an article window open already and you press @kbd{SPACE} +again, the article will be scrolled. This lets you conveniently +@kbd{SPACE} through an entire newsgroup. @pxref{Paging the Article}. + @item G n @itemx n @kindex n (Summary) @@ -5055,6 +5068,15 @@ Pressing @kbd{SPACE} will scroll the current article forward one page, or, if you have come to the end of the current article, will choose the next article (@code{gnus-summary-next-page}). +@vindex gnus-article-boring-faces +@vindex gnus-article-skip-boring +If @code{gnus-article-skip-boring} is non-@code{nil} and the rest of +the article consists only of citations and signature, then it will be +skipped; the next article will be shown instead. You can customize +what is considered uninteresting with +@code{gnus-article-boring-faces}. You can manually view the article's +pages, no matter how boring, using @kbd{C-M-v}. + @item DEL @kindex DEL (Summary) @findex gnus-summary-prev-page @@ -5240,7 +5262,7 @@ post to the current group. If given a prefix, disable that. If the prefix is 1, prompt for a group to post to. This function actually prepares a news even when using mail groups. -This is useful for "posting" messages to mail groups without actually +This is useful for ``posting'' messages to mail groups without actually sending them over the network: they're just saved directly to the group in question. The corresponding back end must have a request-post method for this to work though. @@ -6335,7 +6357,7 @@ displayed as empty lines in the summary buffer. * Loose Threads:: How Gnus gathers loose threads into bigger threads. * Filling In Threads:: Making the threads displayed look fuller. * More Threading:: Even more variables for fiddling with threads. -* Low-Level Threading:: You thought it was over... but you were wrong! +* Low-Level Threading:: You thought it was over@dots{} but you were wrong! @end menu @@ -6814,7 +6836,7 @@ Go to the top of the thread (@code{gnus-summary-top-thread}). @vindex gnus-thread-operation-ignore-subject If you ignore subject while threading, you'll naturally end up with threads that have several different subjects in them. If you then issue -a command like `T k' (@code{gnus-summary-kill-thread}) you might not +a command like @kbd{T k} (@code{gnus-summary-kill-thread}) you might not wish to kill the entire thread, but just those parts of the thread that have the same subject as the current article. If you like this idea, you can fiddle with @code{gnus-thread-operation-ignore-subject}. If it @@ -6956,7 +6978,7 @@ loaded than if you didn't use article pre-fetch. The server itself will also become more loaded---both with the extra article requests, and the extra connection. -Ok, so now you know that you shouldn't really use this thing... unless +Ok, so now you know that you shouldn't really use this thing@dots{} unless you really want to. @vindex gnus-asynchronous @@ -6974,13 +6996,15 @@ pre-fetch all the articles it can without bound. If it is @vindex gnus-async-prefetch-article-p @findex gnus-async-read-p There are probably some articles that you don't want to pre-fetch---read -articles, for instance. The @code{gnus-async-prefetch-article-p} variable controls whether an article is to be pre-fetched. This function should -return non-@code{nil} when the article in question is to be -pre-fetched. The default is @code{gnus-async-read-p}, which returns -@code{nil} on read articles. The function is called with an article -data structure as the only parameter. +articles, for instance. The @code{gnus-async-prefetch-article-p} +variable controls whether an article is to be pre-fetched. This +function should return non-@code{nil} when the article in question is +to be pre-fetched. The default is @code{gnus-async-read-p}, which +returns @code{nil} on read articles. The function is called with an +article data structure as the only parameter. -If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like: +If, for instance, you wish to pre-fetch only unread articles shorter +than 100 lines, you could say something like: @lisp (defun my-async-short-unread-p (data) @@ -7380,7 +7404,7 @@ File names like @file{~/News/larsi}. You can have gnus suggest where to save articles by plonking a regexp into the @code{gnus-split-methods} alist. For instance, if you would like to save articles related to gnus in the file @file{gnus-stuff}, and articles -related to VM in @code{vm-stuff}, you could set this variable to something +related to VM in @file{vm-stuff}, you could set this variable to something like: @lisp @@ -7665,7 +7689,7 @@ variables are of the form @vindex gnus-uu-user-view-rules @cindex sox This variable is consulted first when viewing files. If you wish to use, -for instance, @code{sox} to convert an @samp{.au} sound file, you could +for instance, @code{sox} to convert an @file{.au} sound file, you could say something like: @lisp (setq gnus-uu-user-view-rules @@ -7811,7 +7835,7 @@ Non-@code{nil} means that @code{gnus-uu} will post the encoded file in a thread. This may not be smart, as no other decoder I have seen is able to follow threads when collecting uuencoded articles. (Well, I have seen one package that does that---@code{gnus-uu}, but somehow, I don't -think that counts...) Default is @code{nil}. +think that counts@dots{}) Default is @code{nil}. @item gnus-uu-post-separate-description @vindex gnus-uu-post-separate-description @@ -8147,14 +8171,14 @@ the sender of an article has a certain mail address specified in @item gnus-article-address-banner-alist @vindex gnus-article-address-banner-alist Alist of mail addresses and banners. Each element has the form -@code{(ADDRESS . BANNER)}, where ADDRESS is a regexp matching a mail -address in the From header, BANNER is one of a symbol @code{signature}, -an item in @code{gnus-article-banner-alist}, a regexp and @code{nil}. -If ADDRESS matches author's mail address, it will remove things like -advertisements. For example, if a sender has the mail address -@samp{hail@@yoo-hoo.co.jp} and there is a banner something like -@samp{Do You Yoo-hoo!?} in all articles he sends, you can use the -following element to remove them: +@code{(@var{address} . @var{banner})}, where @var{address} is a regexp +matching a mail address in the From header, @var{banner} is one of a +symbol @code{signature}, an item in @code{gnus-article-banner-alist}, +a regexp and @code{nil}. If @var{address} matches author's mail +address, it will remove things like advertisements. For example, if a +sender has the mail address @samp{hail@@yoo-hoo.co.jp} and there is a +banner something like @samp{Do You Yoo-hoo!?} in all articles he +sends, you can use the following element to remove them: @lisp ("@@yoo-hoo\\.co\\.jp\\'" . "\n_+\nDo You Yoo-hoo!\\?\n.*\n.*\n") @@ -8260,6 +8284,13 @@ This is not really washing, it's sort of the opposite of washing. If you type this, you see the article exactly as it exists on disk or on the server. +@item g +Force redisplaying of the current article +(@code{gnus-summary-show-article}). This is also not really washing. +If you type this, you see the article without any previously applied +interactive Washing functions but with all default treatments +(@pxref{Customizing Articles}). + @item W l @kindex W l (Summary) @findex gnus-summary-stop-page-breaking @@ -9748,7 +9779,7 @@ when respooling, if any (@code{gnus-summary-respool-trace}). @item B p @kindex B p (Summary) @findex gnus-summary-article-posted-p -Some people have a tendency to send you "courtesy" copies when they +Some people have a tendency to send you ``courtesy'' copies when they follow up to articles you have posted. These usually have a @code{Newsgroups} header in them, but not always. This command (@code{gnus-summary-article-posted-p}) will try to fetch the current @@ -10341,13 +10372,9 @@ and @code{gpg} are also supported although deprecated. @kindex A M (summary) @findex gnus-mailing-list-insinuate Gnus understands some mailing list fields of RFC 2369. To enable it, -either add a `to-list' group parameter (@pxref{Group Parameters}), +add a @code{to-list} group parameter (@pxref{Group Parameters}), possibly using @kbd{A M} (@code{gnus-mailing-list-insinuate}) in the -summary buffer, or say: - -@lisp -(add-hook 'gnus-summary-mode-hook 'turn-on-gnus-mailing-list-mode) -@end lisp +summary buffer. That enables the following commands to the summary buffer: @@ -10504,6 +10531,12 @@ name. @item to-address Remove the @code{To} header if it only contains the address identical to the current groups's @code{to-address} parameter. +@item to-list +Remove the @code{To} header if it only contains the address identical to +the current groups's @code{to-list} parameter. +@item cc-list +Remove the @code{CC} header if it only contains the address identical to +the current groups's @code{to-list} parameter. @item date Remove the @code{Date} header if the article is less than three days old. @@ -10578,7 +10611,8 @@ Also see @pxref{MIME Commands}. @cindex article customization A slew of functions for customizing how the articles are to look like -exist. You can call these functions interactively, or you can have them +exist. You can call these functions interactively +(@pxref{Article Washing}), or you can have them called automatically when you select the articles. To have them called automatically, you should set the corresponding @@ -10705,6 +10739,8 @@ is controlled by @code{gnus-body-boundary-delimiter}. @item gnus-treat-hide-citation-maybe (t, integer) @item gnus-treat-hide-headers (head) @item gnus-treat-hide-signature (t, last) +@item gnus-treat-strip-banner (t, last) +@item gnus-treat-strip-list-identifiers (head) @xref{Article Hiding}. @@ -10753,11 +10789,13 @@ A few additional keystrokes are available: @kindex SPACE (Article) @findex gnus-article-next-page Scroll forwards one page (@code{gnus-article-next-page}). +This is exactly the same as @kbd{h SPACE h}. @item DEL @kindex DEL (Article) @findex gnus-article-prev-page Scroll backwards one page (@code{gnus-article-prev-page}). +This is exactly the same as @kbd{h DEL h}. @item C-c ^ @kindex C-c ^ (Article) @@ -11063,13 +11101,17 @@ really are mailing lists. Then, at least, followups to the mailing lists will work most of the time. Posting to these groups (@kbd{a}) is still a pain, though. -@item gnus-version-expose-system -@vindex gnus-version-expose-system +@item gnus-user-agent +@vindex gnus-user-agent +@cindex User-Agent -Your system type (@code{system-configuration} variable, such as -@samp{i686-pc-linux}) is exposed in the auto-generated by default -User-Agent header. Sometimes, it may be desireable (mostly because of -aesthetic reasons) to turn it off. In this case, set it to @code{nil}. +This variable controls which information should be exposed in the +User-Agent header. It can be one of the symbols @code{gnus} (show only +Gnus version), @code{emacs-gnus} (show only Emacs and Gnus versions), +@code{emacs-gnus-config} (same as @code{emacs-gnus} plus system +configuration), @code{emacs-gnus-type} (same as @code{emacs-gnus} plus +system type) or a custom string. If you set it to a string, be sure to +use a valid format, see RFC 2616." @end table @@ -11301,16 +11343,17 @@ signature and the @samp{What me?} @code{Organization} header. The first element in each style is called the @code{match}. If it's a string, then Gnus will try to regexp match it against the group name. -If it is the form @code{(header MATCH REGEXP)}, then Gnus will look in -the original article for a header whose name is MATCH and compare that -REGEXP. MATCH and REGEXP are strings. (There original article is the -one you are replying or following up to. If you are not composing a -reply or a followup, then there is nothing to match against.) If the -@code{match} is a function symbol, that function will be called with no -arguments. If it's a variable symbol, then the variable will be +If it is the form @code{(header @var{match} @var{regexp})}, then Gnus +will look in the original article for a header whose name is +@var{match} and compare that @var{regexp}. @var{match} and +@var{regexp} are strings. (There original article is the one you are +replying or following up to. If you are not composing a reply or a +followup, then there is nothing to match against.) If the +@code{match} is a function symbol, that function will be called with +no arguments. If it's a variable symbol, then the variable will be referenced. If it's a list, then that list will be @code{eval}ed. In -any case, if this returns a non-@code{nil} value, then the style is said -to @dfn{match}. +any case, if this returns a non-@code{nil} value, then the style is +said to @dfn{match}. Each style may contain an arbitrary amount of @dfn{attributes}. Each attribute consists of a @code{(@var{name} @var{value})} pair. The @@ -11899,8 +11942,8 @@ buffer, and you should be able to enter any of the groups displayed. One sticky point when defining variables (both on back ends and in Emacs in general) is that some variables are typically initialized from other variables when the definition of the variables is being loaded. If you -change the "base" variable after the variables have been loaded, you -won't change the "derived" variables. +change the ``base'' variable after the variables have been loaded, you +won't change the ``derived'' variables. This typically affects directory and file variables. For instance, @code{nnml-directory} is @file{~/Mail/} by default, and all @code{nnml} @@ -12327,10 +12370,9 @@ 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 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 +Opens a connection to a server over a @dfn{secure} channel. To use this +you must have OpenSSL (@uref{http://www.openssl.org}) or SSLeay +installed (@uref{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL}. You then define a server as follows: @lisp @@ -12373,7 +12415,7 @@ session, which is not a good idea. These functions are called indirect because they connect to an intermediate host before actually connecting to the @sc{nntp} server. All of these functions and related variables are also said to belong to -the "via" family of connection: they're all prefixed with "via" to make +the ``via'' family of connection: they're all prefixed with ``via'' to make things cleaner. The behavior of these functions is also affected by commonly understood variables (@pxref{Common Variables}). @@ -12396,7 +12438,7 @@ Command used to log in on the intermediate host. The default is @vindex nntp-via-rlogin-command-switches List of strings to be used as the switches to @code{nntp-via-rlogin-command}. The default is @code{nil}. If you use -@samp{ssh} for `nntp-via-rlogin-command', you may set this to +@samp{ssh} for @code{nntp-via-rlogin-command}, you may set this to @samp{("-C")} in order to compress all data connections, otherwise set this to @samp{("-t")} or @samp{("-C" "-t")} if the telnet command requires a pseudo-tty allocation on an intermediate host. @@ -12673,8 +12715,8 @@ It's quite easy to use Gnus to read your new mail. You just plonk the mail back end of your choice into @code{gnus-secondary-select-methods}, and things will happen automatically. -For instance, if you want to use @code{nnml} (which is a "one file per -mail" back end), you could put the following in your @file{.gnus.el} file: +For instance, if you want to use @code{nnml} (which is a ``one file per +mail'' back end), you could put the following in your @file{.gnus.el} file: @lisp (setq gnus-secondary-select-methods '((nnml ""))) @@ -12682,7 +12724,7 @@ mail" back end), you could put the following in your @file{.gnus.el} file: Now, the next time you start Gnus, this back end will be queried for new articles, and it will move all the messages in your spool file to its -directory, which is @code{~/Mail/} by default. The new group that will +directory, which is @file{~/Mail/} by default. The new group that will be created (@samp{mail.misc}) will be subscribed, and you can read it like any other group. @@ -12739,11 +12781,11 @@ argument. It should return a non-@code{nil} value if it thinks that the mail belongs in that group. The last of these groups should always be a general one, and the regular -expression should @emph{always} be @samp{} so that it matches any mails +expression should @emph{always} be @samp{*} so that it matches any mails that haven't been matched by any of the other regexps. (These rules are processed from the beginning of the alist toward the end. The first -rule to make a match will "win", unless you have crossposting enabled. -In that case, all matching rules will "win".) +rule to make a match will ``win'', unless you have crossposting enabled. +In that case, all matching rules will ``win''.) If you like to tinker with this yourself, you can set this variable to a function of your choice. This function will be called without any @@ -12760,7 +12802,7 @@ some add @code{X-Gnus-Group} headers; most rename the Unix mbox The mail back ends all support cross-posting. If several regexps match, the mail will be ``cross-posted'' to all those groups. @code{nnmail-crosspost} says whether to use this mechanism or not. Note -that no articles are crossposted to the general (@samp{}) group. +that no articles are crossposted to the general (@samp{*}) group. @vindex nnmail-crosspost-link-function @cindex crosspost @@ -12786,7 +12828,7 @@ function. @vindex nnmail-mail-splitting-charset @vindex nnmail-mail-splitting-decodes -By default the splitting codes MIME decodes headers so you can match +By default the splitting codes @sc{mime} decodes headers so you can match on non-ASCII strings. The @code{nnmail-mail-splitting-charset} variable specifies the default charset for decoding. The behaviour can be turned off completely by binding @@ -12862,6 +12904,10 @@ Keywords: The file name. Defaults to the value of the @code{MAIL} environment variable or the value of @code{rmail-spool-directory} (usually something like @file{/usr/mail/spool/user-name}). + +@item :prescript +@itemx :postscript +Script run before/after fetching mail. @end table An example file mail source: @@ -13081,7 +13127,7 @@ Keywords: @item :path The name of the directory where the mails are stored. The default is taken from the @code{MAILDIR} environment variable or -@samp{~/Maildir/}. +@file{~/Maildir/}. @item :subdirs The subdirectories of the Maildir. The default is @samp{("new" "cur")}. @@ -13151,7 +13197,7 @@ this means @samp{gssapi}, @samp{kerberos4}, @samp{digest-md5}, @item :program When using the `shell' :stream, the contents of this variable is -mapped into the `imap-shell-program' variable. This should be a +mapped into the @code{imap-shell-program} variable. This should be a @code{format}-like string (or list of strings). Here's an example: @example @@ -13165,7 +13211,7 @@ The valid format specifier characters are: The name of the server. @item l -User name from `imap-default-user'. +User name from @code{imap-default-user}. @item p The port number of the server. @@ -13306,7 +13352,18 @@ File where mail will be stored while processing it. The default is @item mail-source-delete-incoming @vindex mail-source-delete-incoming -If non-@code{nil}, delete incoming files after handling them. +If non-@code{nil}, delete incoming files after handling them. If +@code{t}, delete the files immediately, if @code{nil}, never delete any +files. If a positive number, delete files older than number of days +(This will only happen, when reveiving new mail). You may also set +@code{mail-source-delete-incoming} to @code{nil} and call +@code{mail-source-delete-old-incoming} from a hook or interactively. + +@item mail-source-delete-old-incoming-confirm +@vindex mail-source-delete-old-incoming-confirm +If @code{non-nil}, ask for for confirmation before deleting old incoming +files. This variable only applies when +@code{mail-source-delete-incoming} is a positive number. @item mail-source-ignore-errors @vindex mail-source-ignore-errors @@ -13556,10 +13613,10 @@ The @samp{" *nnmail incoming*"} is narrowed to the message in question when the @code{:} function is run. @item -@code{(! @var{func} @var{split})}: If the split is a list, and the first -element is @code{!}, then SPLIT will be processed, and FUNC will be -called as a function with the result of SPLIT as argument. FUNC should -return a split. +@code{(! @var{func} @var{split})}: If the split is a list, and the +first element is @code{!}, then @var{split} will be processed, and +@var{func} will be called as a function with the result of @var{split} +as argument. @var{func} should return a split. @item @code{nil}: If the split is @code{nil}, it is ignored. @@ -14223,16 +14280,14 @@ depends on what format you want to store your mail in. There are six different mail back ends in the standard Gnus, and more back ends are available separately. The mail back end most people use (because it is possibly the fastest) is @code{nnml} (@pxref{Mail -Spool}). You might notice that only five back ends are listed below; -@code{nnmaildir}'s documentation has not yet been completely -incorporated into this manual. Until it is, you can find it at -@uref{http://multivac.cwru.edu./nnmaildir/}. +Spool}). @menu * Unix Mail Box:: Using the (quite) standard Un*x mbox. * Rmail Babyl:: Emacs programs use the rmail babyl format. * Mail Spool:: Store your mail in a private spool? * MH Spool:: An mhspool-like back end. +* Maildir:: Another one-file-per-message format. * Mail Folders:: Having one file for each group. * Comparing Mail Back Ends:: An in-depth looks at pros and cons. @end menu @@ -14351,19 +14406,19 @@ Virtual server settings: @table @code @item nnml-directory @vindex nnml-directory -All @code{nnml} directories will be placed under this directory. -The default is the value of `message-directory' (whose default value is -@file{~/Mail}). +All @code{nnml} directories will be placed under this directory. The +default is the value of @code{message-directory} (whose default value +is @file{~/Mail}). @item nnml-active-file @vindex nnml-active-file The active file for the @code{nnml} server. The default is -@file{~/Mail/active"}. +@file{~/Mail/active}. @item nnml-newsgroups-file @vindex nnml-newsgroups-file The @code{nnml} group descriptions file. @xref{Newsgroups File -Format}. The default is @file{~/Mail/newsgroups"}. +Format}. The default is @file{~/Mail/newsgroups}. @item nnml-get-new-mail @vindex nnml-get-new-mail @@ -14444,6 +14499,242 @@ to set this variable to @code{t}. The default is @code{nil}. @end table +@node Maildir +@subsubsection Maildir +@cindex nnmaildir +@cindex maildir + +@code{nnmaildir} stores mail in the maildir format, with each maildir +corresponding to a group in Gnus. This format is documented here: +@uref{http://cr.yp.to/proto/maildir.html} and here: +@uref{http://www.qmail.org/man/man5/maildir.html}. nnmaildir also +stores extra information in the @file{.nnmaildir/} directory within a +maildir. + +Maildir format was designed to allow concurrent deliveries and +reading, without needing locks. With other backends, you would have +your mail delivered to a spool of some kind, and then you would +configure Gnus to split mail from that spool into your groups. You +can still do that with nnmaildir, but the more common configuration is +to have your mail delivered directly to the maildirs that appear as +group in Gnus. + +nnmaildir is designed to be perfectly reliable: @kbd{C-g} will never +corrupt its data in memory, and @code{SIGKILL} will never corrupt its +data in the filesystem. + +nnmaildir stores article marks and NOV data in each maildir. So you +can copy a whole maildir from one Gnus setup to another, and you will +keep your marks. + +Virtual server settings: + +@table @code +@item directory +For each of your nnmaildir servers (it's very unlikely that you'd need +more than one), you need to create a directory and populate it with +symlinks to maildirs (and nothing else; do not choose a directory +already used for other purposes). You could also put maildirs +themselves (instead of symlinks to them) directly in the server +directory, but that would break @code{nnmaildir-request-delete-group}, +so you wouldn't be able to delete those groups from within Gnus. (You +could still delete them from your shell with @code{rm -r foo}.) Each +maildir will be represented in Gnus as a newsgroup on that server; the +filename of the symlink will be the name of the group. Any filenames +in the directory starting with `.' are ignored. The directory is +scanned when you first start Gnus, and each time you type @kbd{g} in +the group buffer; if any maildirs have been removed or added, +nnmaildir notices at these times. + +The value of the @code{directory} parameter should be a Lisp form +which is processed by @code{eval} and @code{expand-file-name} to get +the path of the directory for this server. The form is @code{eval}ed +only when the server is opened; the resulting string is used until the +server is closed. (If you don't know about forms and @code{eval}, +don't worry - a simple string will work.) This parameter is not +optional; you must specify it. I don't recommend using @file{~/Mail} +or a subdirectory of it; several other parts of Gnus use that +directory by default for various things, and may get confused if +nnmaildir uses it too. @file{~/.nnmaildir} is a typical value. + +@item create-directory +This should be a Lisp form which is processed by @code{eval} and +@code{expand-file-name} to get the name of the directory where new +maildirs are created. The form is @code{eval}ed only when the server +is opened; the resulting string is used until the server is closed. +This parameter is optional, but if you do not supply it, you cannot +create new groups from within Gnus. (You could still create them from +your shell with @code{mkdir -m 0700 foo foo/tmp foo/new foo/cur}.) A +relative path is interpreted as relative to the @code{directory} path. +@code{create-directory} and @code{directory} must be different; +otherwise, group creation and deletion will break. (If you don't need +those features, you can omit @code{create-directory} entirely.) + +@item directory-files +This should be a function with the same interface as +@code{directory-files} (such as @code{directory-files} itself). It is +used to scan the server's @code{directory} for maildirs. This +parameter is optional; the default is +@code{nnheader-directory-files-safe} if +@code{nnheader-directory-files-is-safe} is @code{nil}, and +@code{directory-files} otherwise. +(@code{nnheader-directory-files-is-safe} is checked only once when the +server is opened; if you want to check it each time the directory is +scanned, you'll have to provide your own function that does that.) + +@item get-new-mail +If non-@code{nil}, then after scanning for new mail in the group +maildirs themselves as usual, this server will also incorporate mail +the conventional Gnus way, from @code{mail-sources} according to +@code{nnmail-split-methods} or @code{nnmail-split-fancy}. The default +value is @code{nil}. + +Do @emph{not} use the same maildir both in @code{mail-sources} and as +an nnmaildir group. The results might happen to be useful, but that +would be by chance, not by design, and the results might be different +in the future. If your split rules create new groups, remember to +supply a @code{create-directory} server parameter. +@end table + +@subsubsection Group parameters + +nnmaildir uses several group parameters. It's safe to ignore all +this; the default behavior for nnmaildir is the same as the default +behavior for other mail backends: articles are deleted after one week, +etc. Except for the expiry parameters, all this functionality is +unique to nnmaildir, so you can ignore it if you're just trying to +duplicate the behavior you already have with another backend. + +If the value of any of these parameters is a vector, the first element +is evaluated as a Lisp form and the result is used, rather than the +original value. If the value is not a vector, the value itself is +evaluated as a Lisp form. (This is why these parameters use names +different from those of other, similar parameters supported by other +backends: they have different, though similar, meanings.) (For +numbers, strings, @code{nil}, and @code{t}, you can ignore the +@code{eval} business again; for other values, remember to use an extra +quote and wrap the value in a vector when appropriate.) + +@table @code +@item expire-age +An integer specifying the minimum age, in seconds, of an article before +it will be expired, or the symbol @code{never} to specify that +articles should never be expired. If this parameter is not set, +nnmaildir falls back to the usual +@code{nnmail-expiry-wait}(@code{-function}) variables (overridable by +the @code{expiry-wait}(@code{-function}) group parameters. If you +wanted a value of 3 days, you could use something like @code{[(* 3 24 +60 60)]}; nnmaildir will evaluate the form and use the result. An +article's age is measured starting from the article file's +modification time. Normally, this is the same as the article's +delivery time, but editing an article makes it younger. Moving an +article (other than via expiry) may also make an article younger. + +@item expire-group +If this is set to a string (a full Gnus group name, like +@code{"backend+server.address.string:group.name"}), and if it is not +the name of the same group that the parameter belongs to, then +articles will be moved to the specified group during expiry before +being deleted. @emph{If this is set to an nnmaildir group, the +article will be just as old in the destination group as it was in the +source group.} So be careful with @code{expire-age} in the destination +group. + +@item read-only +If this is set to @code{t}, nnmaildir will treat the articles in this +maildir as read-only. This means: articles are not renamed from +@file{new/} into @file{cur/}; articles are only found in @file{new/}, +not @file{cur/}; articles are never deleted; articles cannot be +edited. @file{new/} is expected to be a symlink to the @file{new/} +directory of another maildir - e.g., a system-wide mailbox containing +a mailing list of common interest. Everything in the maildir outside +@file{new/} is @emph{not} treated as read-only, so for a shared +mailbox, you do still need to set up your own maildir (or have write +permission to the shared mailbox); your maildir just won't contain +extra copies of the articles. + +@item directory-files +A function with the same interface as @code{directory-files}. It is +used to scan the directories in the maildir corresponding to this +group to find articles. The default is the function specified by the +server's @code{directory-files} parameter. + +@item always-marks +A list of mark symbols, such as +@code{['(read expire)]}. Whenever Gnus asks nnmaildir for +article marks, nnmaildir will say that all articles have these +marks, regardless of whether the marks stored in the filesystem +say so. This is a proof-of-concept feature that will probably be +removed eventually; it ought to be done in Gnus proper, or +abandoned if it's not worthwhile. + +@item never-marks +A list of mark symbols, such as @code{['(tick expire)]}. Whenever +Gnus asks nnmaildir for article marks, nnmaildir will say that no +articles have these marks, regardless of whether the marks stored in +the filesystem say so. @code{never-marks} overrides +@code{always-marks}. This is a proof-of-concept feature that will +probably be removed eventually; it ought to be done in Gnus proper, or +abandoned if it's not worthwhile. + +@item nov-cache-size +An integer specifying the size of the NOV memory cache. To speed +things up, nnmaildir keeps NOV data in memory for a limited number of +articles in each group. (This is probably not worthwhile, and will +probably be removed in the future.) This parameter's value is noticed +only the first time a group is seen after the server is opened - i.e., +when you first start Gnus, typically. The NOV cache is never resized +until the server is closed and reopened. The default is an estimate +of the number of articles that would be displayed in the summary +buffer: a count of articles that are either marked with @code{tick} or +not marked with @code{read}, plus a little extra. +@end table + +@subsubsection Article identification +Articles are stored in the @file{cur/} subdirectory of each maildir. +Each article file is named like @code{uniq:info}, where @code{uniq} +contains no colons. nnmaildir ignores, but preserves, the +@code{:info} part. (Other maildir readers typically use this part of +the filename to store marks.) The @code{uniq} part uniquely +identifies the article, and is used in various places in the +@file{.nnmaildir/} subdirectory of the maildir to store information +about the corresponding article. The full pathname of an article is +available in the variable @code{nnmaildir-article-file-name} after you +request the article in the summary buffer. + +@subsubsection NOV data +An article identified by @code{uniq} has its NOV data (used to +generate lines in the summary buffer) stored in +@code{.nnmaildir/nov/uniq}. There is no +@code{nnmaildir-generate-nov-databases} function. (There isn't much +need for it - an article's NOV data is updated automatically when the +article or @code{nnmail-extra-headers} has changed.) You can force +nnmaildir to regenerate the NOV data for a single article simply by +deleting the corresponding NOV file, but @emph{beware}: this will also +cause nnmaildir to assign a new article number for this article, which +may cause trouble with @code{seen} marks, the Agent, and the cache. + +@subsubsection Article marks +An article identified by @code{uniq} is considered to have the mark +@code{flag} when the file @file{.nnmaildir/marks/flag/uniq} exists. +When Gnus asks nnmaildir for a group's marks, nnmaildir looks for such +files and reports the set of marks it finds. When Gnus asks nnmaildir +to store a new set of marks, nnmaildir creates and deletes the +corresponding files as needed. (Actually, rather than create a new +file for each mark, it just creates hard links to +@file{.nnmaildir/markfile}, to save inodes.) + +You can invent new marks by creating a new directory in +@file{.nnmaildir/marks/}. You can tar up a maildir and remove it from +your server, untar it later, and keep your marks. You can add and +remove marks yourself by creating and deleting mark files. If you do +this while Gnus is running and your nnmaildir server is open, it's +best to exit all summary buffers for nnmaildir groups and type @kbd{s} +in the group buffer first, and to type @kbd{g} or @kbd{M-g} in the +group buffer afterwards. Otherwise, Gnus might not pick up the +changes, and might undo them. + + @node Mail Folders @subsubsection Mail Folders @cindex nnfolder @@ -14484,7 +14775,7 @@ The name of the active file. The default is @file{~/Mail/active}. @item nnfolder-newsgroups-file @vindex nnfolder-newsgroups-file The name of the group descriptions file. @xref{Newsgroups File -Format}. The default is @file{~/Mail/newsgroups"} +Format}. The default is @file{~/Mail/newsgroups} @item nnfolder-get-new-mail @vindex nnfolder-get-new-mail @@ -14656,7 +14947,7 @@ slowness of access parsing when learning what's new in one's groups. Basically the effect of @code{nnfolder} is @code{nnmbox} (the first method described above) on a per-group basis. That is, @code{nnmbox} -itself puts *all* one's mail in one file; @code{nnfolder} provides a +itself puts @emph{all} one's mail in one file; @code{nnfolder} provides a little bit of optimization to this so that each of one's mail groups has a Unix mail box file. It's faster than @code{nnmbox} because each group can be parsed separately, and still provides the simple Unix mail box @@ -14958,7 +15249,7 @@ The password to use when posting. @item nnslashdot-directory @vindex nnslashdot-directory Where @code{nnslashdot} will store its files. The default is -@samp{~/News/slashdot/}. +@file{~/News/slashdot/}. @item nnslashdot-active-url @vindex nnslashdot-active-url @@ -15015,7 +15306,7 @@ The following @code{nnultimate} variables can be altered: @item nnultimate-directory @vindex nnultimate-directory The directory where @code{nnultimate} stores its files. The default is -@samp{~/News/ultimate/}. +@file{~/News/ultimate/}. @end table @@ -15045,7 +15336,7 @@ The following @code{nnwarchive} variables can be altered: @item nnwarchive-directory @vindex nnwarchive-directory The directory where @code{nnwarchive} stores its files. The default is -@samp{~/News/warchive/}. +@file{~/News/warchive/}. @item nnwarchive-login @vindex nnwarchive-login @@ -15076,7 +15367,7 @@ The following @code{nnrss} variables can be altered: @item nnrss-directory @vindex nnrss-directory The directory where @code{nnrss} stores its files. The default is -@samp{~/News/rss/}. +@file{~/News/rss/}. @end table @@ -15153,7 +15444,7 @@ follow the link. @cindex nnimap @cindex @sc{imap} -@sc{imap} is a network protocol for reading mail (or news, or ...), +@sc{imap} is a network protocol for reading mail (or news, or @dots{}), think of it as a modernized @sc{nntp}. Connecting to a @sc{imap} server is much similar to connecting to a news server, you just specify the network address of the server. @@ -15174,7 +15465,7 @@ entry in @code{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. -A server configuration in @code{~/.gnus} with a few @sc{imap} servers +A server configuration in @file{~/.gnus} with a few @sc{imap} servers might look something like the following. (Note that for SSL/TLS, you need external programs and libraries, see below.) @@ -15278,8 +15569,7 @@ 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}) as well as the external -library @samp{ssl.el}. +@samp{openssl}) or SSLeay (@samp{s_client}). @item @dfn{shell:} Use a shell command to start @sc{imap} connection. @item @@ -15304,8 +15594,7 @@ and nnimap support it too - although the most recent versions of SSLeay, 0.9.x, are known to have serious bugs making it useless. Earlier versions, especially 0.8.x, of SSLeay are known to work. The variable @code{imap-ssl-program} contain parameters to pass -to OpenSSL/SSLeay. You also need @samp{ssl.el} (from the W3 -distribution, for instance). +to OpenSSL/SSLeay. @vindex imap-shell-program @vindex imap-shell-host @@ -15368,7 +15657,7 @@ The possible options are: @table @code @item always -The default behavior, delete all articles marked as "Deleted" when +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 @@ -15432,7 +15721,7 @@ variable @code{nntp-authinfo-file} for exact syntax; also see * Splitting in IMAP:: Splitting mail with nnimap. * Expiring in IMAP:: Expiring mail with nnimap. * Editing IMAP ACLs:: Limiting/enabling other users access to a mailbox. -* Expunging mailboxes:: Equivalent of a "compress mailbox" button. +* Expunging mailboxes:: Equivalent of a ``compress mailbox'' button. * A note on namespaces:: How to (not) use IMAP namespace in Gnus. @end menu @@ -15528,8 +15817,8 @@ 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". +end. The first rule to make a match will ``win'', unless you have +crossposting enabled. In that case, all matching rules will ``win''. 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 @@ -15632,7 +15921,7 @@ messages. Most do, fortunately. @item nnmail-expiry-wait-function These variables are fully supported. The expire value can be a -number, the symbol @var{immediate} or @var{never}. +number, the symbol @code{immediate} or @code{never}. @item nnmail-expiry-target @@ -15664,12 +15953,12 @@ Some possible uses: @itemize @bullet @item -Giving "anyone" the "lrs" rights (lookup, read, keep seen/unseen flags) +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, +``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 @@ -15722,7 +16011,7 @@ Specifically, University of Washington's IMAP server uses mailbox names like @code{#driver.mbx/read-mail} which are valid only in the @sc{create} and @sc{append} commands. After the mailbox is created (or a messages is appended to a mailbox), it must be accessed without -the namespace prefix, i.e @code{read-mail}. Since Gnus do not make it +the namespace prefix, i.e. @code{read-mail}. Since Gnus do not make it possible for the user to guarantee that user entered mailbox names will only be used with the CREATE and APPEND commands, you should simply not use the namespace prefixed mailbox names in Gnus. @@ -16075,15 +16364,17 @@ the head from the body may contain a single space; and that the body is run through @code{nndoc-unquote-dashes} before being delivered. 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. +@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. @node SOUP @@ -16298,7 +16589,7 @@ 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/"}. +reply packet. The default is @file{~/SOUP/replies/}. @item nnsoup-replies-format-type @vindex nnsoup-replies-format-type @@ -16712,7 +17003,7 @@ all @code{nntp} and @code{nnimap} groups in @code{gnus-select-method} and Decide on download policy. @xref{Agent Categories}. @item -Uhm... that's it. +Uhm@dots{} that's it. @end itemize @@ -16875,7 +17166,7 @@ misconfigured systems/mailers out there and so an article's date is not always a reliable indication of when it was posted. Hell, some people just don't give a damn. -The above predicates apply to *all* the groups which belong to the +The above predicates apply to @emph{all} the groups which belong to the category. However, if you wish to have a specific predicate for an individual group within a category, or you're just too lazy to set up a new category, you can enter a group's individual predicate in it's group @@ -16951,8 +17242,8 @@ Again, note the omission of the outermost parenthesis here. @item Agent score file -These score files must *only* contain the permitted scoring keywords -stated above. +These score files must @emph{only} contain the permitted scoring +keywords stated above. example: @@ -16991,7 +17282,7 @@ your desired @code{downloading} criteria for a group are the same as your These directives in either the category definition or a group's parameters will cause the agent to read in all the applicable score -files for a group, *filtering out* those sections that do not +files for a group, @emph{filtering out} those sections that do not relate to one of the permitted subset of scoring keywords. @itemize @bullet @@ -17389,12 +17680,12 @@ Creating/deleting nnimap groups when unplugged. @end itemize -Technical note: the synchronization algorithm does not work by "pushing" +Technical note: the synchronization algorithm does not work by ``pushing'' all local flags to the server, but rather incrementally update the server view of flags by changing only those flags that were changed by the user. Thus, if you set one flag on a article, quit the group and re-select the group and remove the flag; the flag will be set and -removed from the server when you "synchronize". The queued flag +removed from the server when you ``synchronize''. The queued flag operations can be found in the per-server @code{flags} file in the Agent directory. It's emptied when you synchronize flags. @@ -17572,7 +17863,7 @@ may ask: @item If I read an article while plugged, and the article already exists in the Agent, will it get downloaded once more? -@strong{No}, unless @code{gnus-agent-cache} is `nil'. +@strong{No}, unless @code{gnus-agent-cache} is @code{nil}. @end table @@ -17767,7 +18058,7 @@ Score on the number of lines. Score on the @code{Message-ID} header. @item e -Score on an "extra" header, that is, one of those in gnus-extra-headers, +Score on an ``extra'' header, that is, one of those in gnus-extra-headers, if your @sc{nntp} server tracks additional header data in overviews. @item f @@ -17938,14 +18229,15 @@ This is @file{~/News/} by default. @item gnus-score-file-suffix @vindex gnus-score-file-suffix Suffix to add to the group name to arrive at the score file name -(@samp{SCORE} by default.) +(@file{SCORE} by default.) @item gnus-score-uncacheable-files @vindex gnus-score-uncacheable-files @cindex score cache All score files are normally cached to avoid excessive re-loading of score files. However, if this might make your Emacs grow big and -bloated, so this regexp can be used to weed out score files unlikely to be needed again. It would be a bad idea to deny caching of +bloated, so this regexp can be used to weed out score files unlikely +to be needed again. It would be a bad idea to deny caching of @file{all.SCORE}, while it might be a good idea to not cache @file{comp.infosystems.www.authoring.misc.ADAPT}. In fact, this variable is @samp{ADAPT$} by default, so no adaptive score files will @@ -18351,11 +18643,12 @@ file for a number of groups. @item local @cindex local variables -The value of this entry should be a list of @code{(VAR VALUE)} pairs. -Each @var{var} will be made buffer-local to the current summary buffer, -and set to the value specified. This is a convenient, if somewhat -strange, way of setting variables in some groups if you don't like hooks -much. Note that the @var{value} won't be evaluated. +The value of this entry should be a list of @code{(@var{var} +@var{value})} pairs. Each @var{var} will be made buffer-local to the +current summary buffer, and set to the value specified. This is a +convenient, if somewhat strange, way of setting variables in some +groups if you don't like hooks much. Note that the @var{value} won't +be evaluated. @end table @@ -18489,7 +18782,7 @@ let you use different rules in different groups. @vindex gnus-adaptive-file-suffix The adaptive score entries will be put into a file where the name is the group name with @code{gnus-adaptive-file-suffix} appended. The default -is @samp{ADAPT}. +is @file{ADAPT}. @vindex gnus-score-exact-adapt-limit When doing adaptive scoring, substring or fuzzy matching would probably @@ -18882,7 +19175,7 @@ should probably have a long expiry period, though, as some sites keep old articles for a long time. @end itemize -... I wonder whether other newsreaders will support global score files +@dots{} I wonder whether other newsreaders will support global score files in the future. @emph{Snicker}. Yup, any day now, newsreaders like Blue Wave, xrn and 1stReader are bound to implement scoring. Should we start holding our breath yet? @@ -19076,8 +19369,8 @@ you, based on how the people you usually agree with have already rated. In GroupLens, an article is rated on a scale from 1 to 5, inclusive. Where 1 means something like this article is a waste of bandwidth and 5 means that the article was really good. The basic question to ask -yourself is, "on a scale from 1 to 5 would I like to see more articles -like this one?" +yourself is, ``on a scale from 1 to 5 would I like to see more articles +like this one?'' There are four ways to enter a rating for an article in GroupLens. @@ -19521,7 +19814,7 @@ Many commands do not use the process/prefix convention. All commands that do explicitly say so in this manual. To apply the process/prefix convention to commands that do not use it, you can use the @kbd{M-&} command. For instance, to mark all the articles in the group as -expirable, you could say `M P b M-& E'. +expirable, you could say @kbd{M P b M-& E}. @node Interactive @@ -20924,7 +21217,7 @@ external programs from the @code{pbmplus} package and friends.@footnote{On a GNU/Linux system look for packages with names like @code{netpbm}, @code{libgr-progs} and @code{compface}.}) -(NOTE: @code{x-face} is used in the variable/function names, not +(Note: @code{x-face} is used in the variable/function names, not @code{xface}). Gnus provides a few convenience functions and variables to allow @@ -21358,11 +21651,12 @@ done. Suggested useful values include 17 to 29. @item hashcash-payment-alist @vindex hashcash-payment-alist Some receivers may require you to spend burn more CPU time than the -default. This variable contains a list of @samp{(ADDR AMOUNT)} cells, -where ADDR is the receiver (email address or newsgroup) and AMOUNT is -the number of bits in the collision that is needed. It can also -contain @samp{(ADDR STRING AMOUNT)} cells, where the STRING is the -string to use (normally the email address or newsgroup name is used). +default. This variable contains a list of @samp{(@var{addr} +@var{amount})} cells, where @var{addr} is the receiver (email address +or newsgroup) and @var{amount} is the number of bits in the collision +that is needed. It can also contain @samp{(@var{addr} @var{string} +@var{amount})} cells, where the @var{string} is the string to use +(normally the email address or newsgroup name is used). @item hashcash @vindex hashcash @@ -21450,7 +21744,7 @@ In spam groups, all messages are considered to be spam by default: they get the @samp{$} mark when you enter the group. You must review these messages from time to time and remove the @samp{$} mark for every message that is not spam after all. To remove the @samp{$} -mark, you can use @kbd{M-u} to "unread" the article, or @kbd{d} for +mark, you can use @kbd{M-u} to ``unread'' the article, or @kbd{d} for declaring it read the non-spam way. When you leave a group, all spam-marked (@samp{$}) articles are sent to a spam processor which will study them as spam samples. @@ -21926,10 +22220,10 @@ incoming mail, provide the following: @item code -@example +@lisp (defvar spam-use-blackbox nil "True if blackbox should be used.") -@end example +@end lisp Add @example @@ -21943,6 +22237,11 @@ functionality Write the @code{spam-check-blackbox} function. It should return @samp{nil} or @code{spam-split-group}. See the existing @code{spam-check-*} functions for examples of what you can do. + +Make sure to add @code{spam-use-blackbox} to +@code{spam-list-of-statistical-checks} if Blackbox is a statistical +mail analyzer that needs the full message body to operate. + @end enumerate For processing spam and ham messages, provide the following: @@ -21955,7 +22254,7 @@ code Note you don't have to provide a spam or a ham processor. Only provide them if Blackbox supports spam or ham processing. -@example +@lisp (defvar gnus-group-spam-exit-processor-blackbox "blackbox" "The Blackbox summary exit spam processor. Only applicable to spam groups.") @@ -21964,12 +22263,12 @@ Only applicable to spam groups.") "The whitelist summary exit ham processor. Only applicable to non-spam (unclassified and ham) groups.") -@end example +@end lisp @item functionality -@example +@lisp (defun spam-blackbox-register-spam-routine () (spam-generic-register-routine ;; the spam function @@ -21989,7 +22288,7 @@ functionality (let ((from (spam-fetch-field-from-fast article))) (when (stringp from) (blackbox-do-something-with-this-ham-sender from)))))) -@end example +@end lisp Write the @code{blackbox-do-something-with-this-ham-sender} and @code{blackbox-do-something-with-this-spammer} functions. You can add @@ -22118,10 +22417,10 @@ The filename used to store the dictionary. This defaults to In order to use @code{spam-stat} to split your mail, you need to add the following to your @file{~/.gnus} file: -@example +@lisp (require 'spam-stat) (spam-stat-load) -@end example +@end lisp This will load the necessary Gnus code, and the dictionary you created. @@ -22136,11 +22435,11 @@ In the simplest case, you only have two groups, @samp{mail.misc} and spam or it should go into @samp{mail.misc}. If it is spam, then @code{spam-stat-split-fancy} will return @samp{mail.spam}. -@example +@lisp (setq nnmail-split-fancy `(| (: spam-stat-split-fancy) "mail.misc")) -@end example +@end lisp @defvar spam-stat-split-fancy-spam-group The group to use for spam. Default is @samp{mail.spam}. @@ -22150,12 +22449,12 @@ If you also filter mail with specific subjects into other groups, use the following expression. Only mails not matching the regular expression are considered potential spam. -@example +@lisp (setq nnmail-split-fancy `(| ("Subject" "\\bspam-stat\\b" "mail.emacs") (: spam-stat-split-fancy) "mail.misc")) -@end example +@end lisp If you want to filter for spam first, then you must be careful when creating the dictionary. Note that @code{spam-stat-split-fancy} must @@ -22163,12 +22462,12 @@ consider both mails in @samp{mail.emacs} and in @samp{mail.misc} as non-spam, therefore both should be in your collection of non-spam mails, when creating the dictionary! -@example +@lisp (setq nnmail-split-fancy `(| (: spam-stat-split-fancy) ("Subject" "\\bspam-stat\\b" "mail.emacs") "mail.misc")) -@end example +@end lisp You can combine this with traditional filtering. Here, we move all HTML-only mails into the @samp{mail.spam.filtered} group. Note that since @@ -22177,13 +22476,13 @@ HTML-only mails into the @samp{mail.spam.filtered} group. Note that since nor in your collection of non-spam mails, when creating the dictionary! -@example +@lisp (setq nnmail-split-fancy `(| ("Content-Type" "text/html" "mail.spam.filtered") (: spam-stat-split-fancy) ("Subject" "\\bspam-stat\\b" "mail.emacs") "mail.misc")) -@end example +@end lisp @node Low-level interface to the spam-stat dictionary @@ -22239,10 +22538,10 @@ spam-stat-split-fancy)} to @code{nnmail-split-fancy} Make sure you load the dictionary before using it. This requires the following in your @file{~/.gnus} file: -@example +@lisp (require 'spam-stat) (spam-stat-load) -@end example +@end lisp Typical test will involve calls to the following functions: @@ -22795,7 +23094,7 @@ off> no, wait, that absolutely does not work'' policy for releases. Micro$oft---bah. Amateurs. I'm @emph{much} worse. (Or is that ``worser''? ``much worser''? ``worsest''?) -I would like to take this opportunity to thank the Academy for... oops, +I would like to take this opportunity to thank the Academy for@dots{} oops, wrong show. @itemize @bullet @@ -23674,12 +23973,12 @@ re-highlighting of the article buffer. New element in @code{gnus-boring-article-headers}---@code{long-to}. @item - @kbd{M-i} symbolic prefix command. See the section "Symbolic -Prefixes" in the Gnus manual for details. + @kbd{M-i} symbolic prefix command. See the section ``Symbolic +Prefixes'' in the Gnus manual for details. @item @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix -@kbd{a} to add the score rule to the "all.SCORE" file. +@kbd{a} to add the score rule to the @file{all.SCORE} file. @item @code{gnus-simplify-subject-functions} variable to allow greater @@ -23749,7 +24048,7 @@ been added. @code{gnus-adaptive-word-minimum} variable. @item - The "lapsed date" article header can be kept continually + The ``lapsed date'' article header can be kept continually updated by the @code{gnus-start-date-timer} command. @item @@ -24346,14 +24645,14 @@ evaluate expressions using @kbd{M-:} or inspect variables using @cindex slow Sometimes, a problem do not directly generate a elisp error but manifests itself by causing Gnus to be very slow. In these cases, you -can use @kbd{M-x toggle-debug-on-quit} and press C-j when things are +can use @kbd{M-x toggle-debug-on-quit} and press @kbd{C-j} when things are slow, and then try to analyze the backtrace (repeating the procedure helps isolating the real problem areas). A fancier approach is to use the elisp profiler, ELP. The profiler is (or should be) fully documented elsewhere, but to get you started there are a few steps that need to be followed. First, instrument the part of Gnus you are interested in for profiling, e.g. @kbd{M-x elp-instrument-package RET -gnus} or @kbd{M-x elp-instrument-packagre RET message}. Then perform +gnus} or @kbd{M-x elp-instrument-package RET message}. Then perform the operation that is slow and press @kbd{M-x elp-results}. You will then see which operations that takes time, and can debug them further. If the entire operation takes much longer than the time spent in the @@ -24368,8 +24667,8 @@ If you just need help, you are better off asking on @cindex gnu.emacs.gnus @cindex ding mailing list -You can also ask on the ding mailing list---@samp{ding@@gnus.org}. -Write to @samp{ding-request@@gnus.org} to subscribe. +You can also ask on the ding mailing list---@email{ding@@gnus.org}. +Write to @email{ding-request@@gnus.org} to subscribe. @page @@ -24628,8 +24927,8 @@ value should either be @code{headers} or @code{nov} to reflect this. This might later be expanded to @code{various}, which will be a mixture of HEADs and @sc{nov} lines, but this is currently not supported by Gnus. -If @var{fetch-old} is non-@code{nil} it says to try fetching "extra -headers", in some meaning of the word. This is generally done by +If @var{fetch-old} is non-@code{nil} it says to try fetching ``extra +headers'', in some meaning of the word. This is generally done by fetching (at most) @var{fetch-old} extra headers less than the smallest article number in @code{articles}, and filling the gaps as well. The presence of this parameter can be ignored if the back end finds it @@ -24667,13 +24966,16 @@ valid-message = "221 " " Article retrieved." eol header = eol @end example +@cindex BNF +(The version of BNF used here is the one used in RFC822.) + If the return value is @code{nov}, the data buffer should contain @dfn{network overview database} lines. These are basically fields separated by tabs. @example nov-buffer = *nov-line -nov-line = 8*9 [ field ] eol +nov-line = field 7*8[ field ] eol field = @end example @@ -25011,8 +25313,7 @@ able to delete. There should be no result data returned. -@item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM -&optional LAST) +@item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM &optional LAST) This function should move @var{article} (which is a number) from @var{group} by calling @var{accept-form}. @@ -25162,9 +25463,9 @@ of @code{nndir}. (The same with @code{nnmh}.) This macro defines some common functions that almost all back ends should have. -@example +@lisp (nnoo-define-basics nndir) -@end example +@end lisp @item deffoo This macro is just like @code{defun} and takes the same parameters. In @@ -25175,11 +25476,11 @@ function as being public so that other back ends can inherit it. This macro allows mapping of functions from the current back end to functions from the parent back ends. -@example +@lisp (nnoo-map-functions nndir (nnml-retrieve-headers 0 nndir-current-group 0 0) (nnmh-request-article 0 nndir-current-group 0 0)) -@end example +@end lisp This means that when @code{nndir-retrieve-headers} is called, the first, third, and fourth parameters will be passed on to @@ -25191,13 +25492,13 @@ This macro allows importing functions from back ends. It should be the last thing in the source file, since it will only define functions that haven't already been defined. -@example +@lisp (nnoo-import nndir (nnmh nnmh-request-list nnmh-request-newgroups) (nnml)) -@end example +@end lisp This means that calls to @code{nndir-request-list} should just be passed on to @code{nnmh-request-list}, while all public functions from