123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- From 45e37537620e594f0fb77210a9163e3da246666d Mon Sep 17 00:00:00 2001
- From: Daniel Dehennin <daniel.dehennin@baby-gnu.org>
- Date: Thu, 12 Apr 2018 00:40:13 +0200
- Subject: [PATCH] Gnus Group Mail Spliting on mailing-list headers
- * texi/gnus.texi: Document the new `list' split abbreviation and
- `match-list' group parameter (bug#25346).
- * lisp/gnus-mlspl.el: Use the `list' abbreviation when the new
- `match-list' group parameter is set to `t'.
- The split regexp is modified to match either `@` or `.` as domain
- separator to comply with RFC2919 IDs too.
- * lisp/nnmail.el: Add new `list' split abbreviation matching common
- mailing-list headers.
- ---
- doc/misc/gnus.texi | 18 ++++++++++++++++++
- etc/NEWS | 5 +++++
- lisp/gnus/gnus-mlspl.el | 25 +++++++++++++++++++------
- lisp/gnus/nnmail.el | 3 ++-
- 4 files changed, 44 insertions(+), 7 deletions(-)
- diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi
- index cc4b2342be..de219c6e56 100644
- --- a/doc/misc/gnus.texi
- +++ b/doc/misc/gnus.texi
- @@ -3102,6 +3102,21 @@ Group Parameters
- The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve,
- Top, sieve, Emacs Sieve}.
-
- +@item match-list
- +@cindex match-list
- +If this parameter is set to @code{t} and @code{nnmail-split-method} is
- +set to @code{gnus-group-split}, Gnus will match @code{to-address},
- +@code{to-list}, @code{extra-aliases} and @code{split-regexp} against
- +the @code{list} split abbreviation. The split regexp is modified to
- +match either a @code{@@} or a dot @code{.} in mail addresses to
- +conform to RFC2919 @code{List-ID}.
- +
- +See @code{nnmail-split-abbrev-alist} for the regular expression
- +matching mailing-list headers.
- +
- +See @pxref{Group Mail Splitting} to automatically split on group
- +parameters.
- +
- @item (agent parameters)
- If the agent has been enabled, you can set any of its parameters to
- control the behavior of the agent in individual groups. See Agent
- @@ -15475,6 +15490,9 @@ Fancy Mail Splitting
- @item any
- Is the union of the @code{from} and @code{to} entries.
- @end table
- +@item list
- +Matches the @samp{List-ID}, @samp{List-Post}, @samp{X-Mailing-List},
- +@samp{X-BeenThere} and @samp{X-Loop} fields.
-
- @vindex nnmail-split-fancy-syntax-table
- @code{nnmail-split-fancy-syntax-table} is the syntax table in effect
- diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
- index fb45007c12..599b9c61dc 100644
- --- a/lisp/gnus/gnus-mlspl.el
- +++ b/lisp/gnus/gnus-mlspl.el
- @@ -182,7 +182,8 @@ gnus-group-split-fancy
- (to-list (cdr (assoc 'to-list params)))
- (extra-aliases (cdr (assoc 'extra-aliases params)))
- (split-regexp (cdr (assoc 'split-regexp params)))
- - (split-exclude (cdr (assoc 'split-exclude params))))
- + (split-exclude (cdr (assoc 'split-exclude params)))
- + (match-list (cdr (assoc 'match-list params))))
- (when (or to-address to-list extra-aliases split-regexp)
- ;; regexp-quote to-address, to-list and extra-aliases
- ;; and add them all to split-regexp
- @@ -202,16 +203,28 @@ gnus-group-split-fancy
- "\\|")
- "\\)"))
- ;; Now create the new SPLIT
- - (push (append
- - (list 'any split-regexp)
- + (let ((split-regexp-with-list-ids
- + (replace-regexp-in-string "@" "[@.]" split-regexp t t))
- + (exclude
- ;; Generate RESTRICTs for SPLIT-EXCLUDEs.
- (if (listp split-exclude)
- (apply #'append
- (mapcar (lambda (arg) (list '- arg))
- split-exclude))
- - (list '- split-exclude))
- - (list group-clean))
- - split)
- + (list '- split-exclude))))
- +
- + (if match-list
- + ;; Match RFC2919 IDs or mail addresses
- + (push (append
- + (list 'list split-regexp-with-list-ids)
- + exclude
- + (list group-clean))
- + split)
- + (push (append
- + (list 'any split-regexp)
- + exclude
- + (list group-clean))
- + split)))
- ;; If it matches the empty string, it is a catch-all
- (when (string-match split-regexp "")
- (setq catch-all nil)))))))))
- diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
- index b2c86d35d1..5083fa2487 100644
- --- a/lisp/gnus/nnmail.el
- +++ b/lisp/gnus/nnmail.el
- @@ -515,7 +515,8 @@
- (to . "to\\|cc\\|apparently-to\\|resent-to\\|resent-cc")
- (from . "from\\|sender\\|resent-from")
- (nato . "to\\|cc\\|resent-to\\|resent-cc")
- - (naany . "from\\|to\\|cc\\|sender\\|resent-from\\|resent-to\\|resent-cc"))
- + (naany . "from\\|to\\|cc\\|sender\\|resent-from\\|resent-to\\|resent-cc")
- + (list . "list-id\\|list-post\\|x-mailing-list\||x-beenthere\\|x-loop"))
- "*Alist of abbreviations allowed in `nnmail-split-fancy'."
- :group 'nnmail-split
- :type '(repeat (cons :format "%v" symbol regexp)))
- --
- 2.17.0
|