| www.delorie.com/gnu/docs/emacs/gnus_156.html | search |
![]() Buy the book! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
If the rather simple, standard method for specifying how to split mail
doesn't allow you to do what you want, you can set
nnmail-split-methods to nnmail-split-fancy. Then you can
play with the nnmail-split-fancy variable.
Let's look at an example value of this variable first:
;; Messages from the mailer daemon are not crossposted to any of
;; the ordinary groups. Warnings are put in a separate group
;; from real errors.
(| ("from" mail (| ("subject" "warn.*" "mail.warning")
"mail.misc"))
;; Non-error messages are crossposted to all relevant
;; groups, but we don't crosspost between the group for the
;; (ding) list and the group for other (ding) related mail.
(& (| (any "ding@ifi\\.uio\\.no" "ding.list")
("subject" "ding" "ding.misc"))
;; Other mailing lists...
(any "procmail@informatik\\.rwth-aachen\\.de" "procmail.list")
(any "SmartList@informatik\\.rwth-aachen\\.de" "SmartList.list")
;; Both lists below have the same suffix, so prevent
;; cross-posting to mkpkg.list of messages posted only to
;; the bugs- list, but allow cross-posting when the
;; message was really cross-posted.
(any "bugs-mypackage@somewhere" "mypkg.bugs")
(any "mypackage@somewhere\" - "bugs-mypackage" "mypkg.list")
;; People...
(any "larsi@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
;; Unmatched mail goes to the catch all group.
"misc.misc")
|
This variable has the format of a split. A split is a (possibly) recursive structure where each split may contain other splits. Here are the five possible split syntaxes:
(field value [- restrict
[...]] split): If the split is a list, the
first element of which is a string, then store the message as
specified by split, if header field (a regexp) contains
value (also a regexp). If restrict (yet another regexp)
matches some string after field and before the end of the
matched value, the split is ignored. If none of the
restrict clauses match, split is processed.
(| split...): If the split is a list, and the first
element is | (vertical bar), then process each split until
one of them matches. A split is said to match if it will cause
the mail message to be stored in one or more groups.
(& split...): If the split is a list, and the first
element is &, then process all splits in the list.
junk: If the split is the symbol junk, then don't save
this message. Use with extreme caution.
(: function arg1 arg2 ...): If the split is
a list, and the first element is :, then the second element will
be called as a function with args given as arguments. The
function should return a split.
For instance, the following function could be used to split based on the body of the messages:
(defun split-on-body ()
(save-excursion
(set-buffer " *nnmail incoming*")
(goto-char (point-min))
(when (re-search-forward "Some.*string" nil t)
"string.group")))
|
(! func split): If the split is a list, and the first
element is !, 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.
nil: If the split is nil, it is ignored.
In these splits, field must match a complete field name.
value must match a complete word according to the fundamental mode
syntax table. You can use .* in the regexps to match partial
field names or words. In other words, all value's are wrapped in
`\<' and `\>' pairs.
field and value can also be lisp symbols, in that case they
are expanded as specified by the variable
nnmail-split-abbrev-alist. This is an alist of cons cells, where
the car of a cell contains the key, and the cdr contains the associated
value.
nnmail-split-fancy-syntax-table is the syntax table in effect
when all this splitting is performed.
If you want to have Gnus create groups dynamically based on some
information in the headers (i.e., do replace-match-like
substitutions in the group names), you can say things like:
(any "debian-\\b\\(\\w+\\)@lists.debian.org" "mail.debian.\\1") |
In this example, messages sent to `debian-foo@lists.debian.org' will be filed in `mail.debian.foo'.
If the string contains the element `\&', then the previously matched string will be substituted. Similarly, the elements `\\1' up to `\\9' will be substituted with the text matched by the groupings 1 through 9.
nnmail-split-fancy-with-parent is a function which allows you to
split followups into the same groups their parents are in. Sometimes
you can't make splitting rules for all your mail. For example, your
boss might send you personal mail regarding different projects you are
working on, and as you can't tell your boss to put a distinguishing
string into the subject line, you have to resort to manually moving the
messages into the right group. With this function, you only have to do
it once per thread.
To use this feature, you have to set nnmail-treat-duplicates to a
non-nil value. And then you can include
nnmail-split-fancy-with-parent using the colon feature, like so:
(setq nnmail-split-fancy
'(| (: nnmail-split-fancy-with-parent)
;; other splits go here
))
|
This feature works as follows: when nnmail-treat-duplicates is
non-nil, Gnus records the message id of every message it sees in the
file specified by the variable nnmail-message-id-cache-file,
together with the group it is in (the group is omitted for non-mail
messages). When mail splitting is invoked, the function
nnmail-split-fancy-with-parent then looks at the References (and
In-Reply-To) header of each message to split and searches the file
specified by nnmail-message-id-cache-file for the message ids.
When it has found a parent, it returns the corresponding group name. It
is recommended that you set nnmail-message-id-cache-length to a
somewhat higher number than the default so that the message ids are
still in the cache. (A value of 5000 appears to create a file some 300
kBytes in size.)
When nnmail-cache-accepted-message-ids is non-nil, Gnus
also records the message ids of moved articles, so that the followup
messages goes into the new group.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |