Fix nnmail-expiry-wait docs and custom :types

* doc/misc/gnus.texi (Group Parameters, Expiring Mail):
* lisp/gnus/gnus-cus.el (gnus-group-parameters): Clarify
descriptions of nnmail-expiry, nnmail-expiry-wait, and
nnmail-expiry-wait-function.
* lisp/gnus/nnmail.el (nnmail-expiry-wait)
(nnmail-expiry-wait-function): Clarify docstrings and fix custom
:types (bug#36850).
This commit is contained in:
Basil L. Contovounesios 2019-08-02 15:54:09 +03:00
parent 8b7c7762da
commit e7818cb73f
3 changed files with 50 additions and 43 deletions

View file

@ -2917,9 +2917,9 @@ See also @code{gnus-total-expirable-newsgroups}.
If the group parameter has an element that looks like If the group parameter has an element that looks like
@code{(expiry-wait . 10)}, this value will override any @code{(expiry-wait . 10)}, this value will override any
@code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function} @code{nnmail-expiry-wait} and @code{nnmail-expiry-wait-function}
(@pxref{Expiring Mail}) when expiring expirable messages. The value settings (@pxref{Expiring Mail}) when expiring expirable messages.
can either be a number of days (not necessarily an integer) or the The value can be either a number of days (not necessarily an integer),
symbols @code{never} or @code{immediate}. or one of the symbols @code{never} or @code{immediate}.
@item expiry-target @item expiry-target
@cindex expiry-target @cindex expiry-target
@ -15826,40 +15826,46 @@ don't really mix very well.
@vindex nnmail-expiry-wait @vindex nnmail-expiry-wait
The @code{nnmail-expiry-wait} variable supplies the default time an The @code{nnmail-expiry-wait} variable supplies the default time an
expirable article has to live. Gnus starts counting days from when the expirable article has to live. The value of this variable can be
message @emph{arrived}, not from when it was sent. The default is seven either a number of days (not necessarily an integer), or one of the
days. symbols @code{immediate} or @code{never}, meaning an article is
immediately or never expirable, respectively.
Gnus also supplies a function that lets you fine-tune how long articles Gnus starts counting days from when the message @emph{arrived}, not
are to live, based on what group they are in. Let's say you want to from when it was sent. The default is seven days.
have one month expiry period in the @samp{mail.private} group, a one day
expiry period in the @samp{mail.junk} group, and a six day expiry period
everywhere else:
@vindex nnmail-expiry-wait-function @vindex nnmail-expiry-wait-function
The @code{nnmail-expiry-wait-function} variable lets you fine-tune how
long articles are to live, based on what group they are in. When set
to a function, its returned value, if non-@code{nil}, overrides that
of @code{nnmail-expiry-wait}. Otherwise, the value of
@code{nnmail-expiry-wait} is used instead.
For example, let's say you want to have a one month expiry period in
the @samp{mail.private} group, a one day expiry period in the
@samp{mail.junk} group, and a six day expiry period everywhere else.
This can be achieved as follows:
@lisp @lisp
(setq nnmail-expiry-wait-function (setq nnmail-expiry-wait-function
(lambda (group) (lambda (group)
(cond ((string= group "mail.private") (cond ((string= group "mail.private")
31) 31)
((string= group "mail.junk") ((string= group "mail.junk")
1) 1)
((string= group "important") ((string= group "important")
'never) 'never)
(t (t
6)))) 6))))
@end lisp @end lisp
The group names this function is fed are ``unadorned'' group The group names this function is fed are ``unadorned'' group
names---no @samp{nnml:} prefixes and the like. names---no @samp{nnml:} prefixes and the like.
The @code{nnmail-expiry-wait} variable and As an alternative to the variables @code{nnmail-expiry-wait} or
@code{nnmail-expiry-wait-function} function can either be a number (not @code{nnmail-expiry-wait-function}, you can also use the
necessarily an integer) or one of the symbols @code{immediate} or @code{expiry-wait} group parameter to selectively change the expiry
@code{never}. period (@pxref{Group Parameters}).
You can also use the @code{expiry-wait} group parameter to selectively
change the expiry period (@pxref{Group Parameters}).
@vindex nnmail-expiry-target @vindex nnmail-expiry-target
The normal action taken when expiring articles is to delete them. The normal action taken when expiring articles is to delete them.

View file

@ -140,10 +140,10 @@ rules as described later).")
:format "%v")) "\ :format "%v")) "\
When to expire. When to expire.
Overrides any `nnmail-expiry-wait' and `nnmail-expiry-wait-function' Overrides any `nnmail-expiry-wait' or `nnmail-expiry-wait-function'
when expiring expirable messages. The value can either be a number of settings when expiring expirable messages. The value can be
days (not necessarily an integer) or the symbols `never' or either a number of days (not necessarily an integer), or one of
`immediate'.") the symbols `never' or `immediate'.")
(expiry-target (choice :tag "Expiry Target" (expiry-target (choice :tag "Expiry Target"
:value delete :value delete

View file

@ -159,32 +159,33 @@ If nil, groups like \"mail.misc\" will end up in directories like
(defcustom nnmail-expiry-wait 7 (defcustom nnmail-expiry-wait 7
"Expirable articles that are older than this will be expired. "Expirable articles that are older than this will be expired.
This variable can either be a number (which will be interpreted as a This variable can be either a number of days (not necessarily an
number of days) -- this doesn't have to be an integer. This variable integer), or one of the symbols `immediate' or `never', meaning
can also be `immediate' and `never'." an article is immediately or never expirable, respectively.
For more granular control, see `nnmail-expiry-wait-function'."
:group 'nnmail-expire :group 'nnmail-expire
:type '(choice (const immediate) :type '(choice (const :tag "Immediate" immediate)
(number :tag "days") (const :tag "Never" never)
(const never))) (number :tag "Days")))
(defcustom nnmail-expiry-wait-function nil (defcustom nnmail-expiry-wait-function nil
"Variable that holds function to specify how old articles should be before they are expired. "Function to determine how old articles should be before they are expired.
The function will be called with the name of the group that the expiry The function is called with the name of the group that the expiry
is to be performed in, and it should return an integer that says how is to be performed in, and should return a value supported by
many days an article can be stored before it is considered \"old\". `nnmail-expiry-wait', which it overrides. If this variable is
It can also return the values `never' and `immediate'. nil, the value of `nnmail-expiry-wait' is used instead.
E.g.: E.g.:
\(setq nnmail-expiry-wait-function \(setq nnmail-expiry-wait-function
(lambda (newsgroup) (lambda (group)
(cond ((string-match \"private\" newsgroup) 31) (cond ((string-match-p \"private\" group) 31)
((string-match \"junk\" newsgroup) 1) ((string-match-p \"junk\" group) 1)
((string-match \"important\" newsgroup) \\='never) ((string-match-p \"important\" group) \\='never)
(t 7))))" (t 7))))"
:group 'nnmail-expire :group 'nnmail-expire
:type '(choice (const :tag "nnmail-expiry-wait" nil) :type '(choice (const :tag "nnmail-expiry-wait" nil)
(function :format "%v" nnmail-))) (function :tag "Custom function")))
(defcustom nnmail-expiry-target 'delete (defcustom nnmail-expiry-target 'delete
"Variable that says where expired messages should end up. "Variable that says where expired messages should end up.