projects
/
gnus
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lisp/ChangeLog addition:
[gnus]
/
lisp
/
nnmail.el
diff --git
a/lisp/nnmail.el
b/lisp/nnmail.el
index
2e19009
..
8e789dd
100644
(file)
--- a/
lisp/nnmail.el
+++ b/
lisp/nnmail.el
@@
-1,6
+1,7
@@
;;; nnmail.el --- mail support functions for the Gnus mail backends
;;; nnmail.el --- mail support functions for the Gnus mail backends
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-;; Free Software Foundation, Inc.
+
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;; 2004, 2005, 2006 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news, mail
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Keywords: news, mail
@@
-19,8
+20,8
@@
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 5
9 Temple Place - Suite 330
,
-;; Boston, MA 0211
1-1307
, USA.
+;; Free Software Foundation, Inc., 5
1 Franklin Street, Fifth Floor
,
+;; Boston, MA 0211
0-1301
, USA.
;;; Commentary:
;;; Commentary:
@@
-48,7
+49,7
@@
:group 'nnmail)
(defgroup nnmail-prepare nil
:group 'nnmail)
(defgroup nnmail-prepare nil
- "Preparing (or mangling) new mail after retrival."
+ "Preparing (or mangling) new mail after retri
e
val."
:group 'nnmail)
(defgroup nnmail-duplicate nil
:group 'nnmail)
(defgroup nnmail-duplicate nil
@@
-118,6
+119,7
@@
If nil, the first match found will be used."
(defcustom nnmail-split-fancy-with-parent-ignore-groups nil
"Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'.
This can also be a list of regexps."
(defcustom nnmail-split-fancy-with-parent-ignore-groups nil
"Regexp that matches group names to be ignored when applying `nnmail-split-fancy-with-parent'.
This can also be a list of regexps."
+ :version "22.1"
:group 'nnmail-split
:type '(choice (const :tag "none" nil)
(regexp :value ".*")
:group 'nnmail-split
:type '(choice (const :tag "none" nil)
(regexp :value ".*")
@@
-126,6
+128,7
@@
This can also be a list of regexps."
(defcustom nnmail-cache-ignore-groups nil
"Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert').
This can also be a list of regexps."
(defcustom nnmail-cache-ignore-groups nil
"Regexp that matches group names to be ignored when inserting message ids into the cache (`nnmail-cache-insert').
This can also be a list of regexps."
+ :version "22.1"
:group 'nnmail-split
:type '(choice (const :tag "none" nil)
(regexp :value ".*")
:group 'nnmail-split
:type '(choice (const :tag "none" nil)
(regexp :value ".*")
@@
-223,6
+226,7
@@
From header will be expired to the group \"nnfolder:Work\";
articles containing the sting \"IMPORTANT\" in the Subject header will
be expired to the group \"nnfolder:IMPORTANT.YYYY.MMM\"; and
everything else will be expired to \"nnfolder:Archive-YYYY\"."
articles containing the sting \"IMPORTANT\" in the Subject header will
be expired to the group \"nnfolder:IMPORTANT.YYYY.MMM\"; and
everything else will be expired to \"nnfolder:Archive-YYYY\"."
+ :version "22.1"
:group 'nnmail-expire
:type '(repeat (list (choice :tag "Match against"
(string :tag "Header")
:group 'nnmail-expire
:type '(repeat (list (choice :tag "Match against"
(string :tag "Header")
@@
-351,6
+355,7
@@
discarded after running the split process."
(defcustom nnmail-spool-hook nil
"*A hook called when a new article is spooled."
(defcustom nnmail-spool-hook nil
"*A hook called when a new article is spooled."
+ :version "22.1"
:group 'nnmail
:type 'hook)
:group 'nnmail
:type 'hook)
@@
-365,14
+370,14
@@
messages will be shown to indicate the current status."
(define-widget 'nnmail-lazy 'default
"Base widget for recursive datastructures.
(define-widget 'nnmail-lazy 'default
"Base widget for recursive datastructures.
-This is copy of the `lazy' widget in Emacs 2
1.4
provided for compatibility."
+This is copy of the `lazy' widget in Emacs 2
2.1
provided for compatibility."
:format "%{%t%}: %v"
:convert-widget 'widget-value-convert-widget
:value-create (lambda (widget)
(let ((value (widget-get widget :value))
(type (widget-get widget :type)))
:format "%{%t%}: %v"
:convert-widget 'widget-value-convert-widget
:value-create (lambda (widget)
(let ((value (widget-get widget :value))
(type (widget-get widget :type)))
- (widget-put widget :children
- (list (widget-create-child-value
+ (widget-put widget :children
+ (list (widget-create-child-value
widget (widget-convert type) value)))))
:value-delete 'widget-children-value-delete
:value-get (lambda (widget)
widget (widget-convert type) value)))))
:value-delete 'widget-children-value-delete
:value-get (lambda (widget)
@@
-404,7
+409,7
@@
This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility."
(list :tag "Function with fixed arguments (:)"
:value (:)
(const :format "" :value :)
(list :tag "Function with fixed arguments (:)"
:value (:)
(const :format "" :value :)
- function
+ function
(editable-list :inline t (sexp :tag "Arg"))
)
(list :tag "Function with split arguments (!)"
(editable-list :inline t (sexp :tag "Arg"))
)
(list :tag "Function with split arguments (!)"
@@
-412,11
+417,11
@@
This is copy of the `lazy' widget in Emacs 21.4 provided for compatibility."
(const :format "" !)
function
(editable-list :inline t nnmail-split-fancy))
(const :format "" !)
function
(editable-list :inline t nnmail-split-fancy))
- (list :tag "Field match"
- (choice :tag "Field"
+ (list :tag "Field match"
+ (choice :tag "Field"
regexp symbol)
(choice :tag "Match"
regexp symbol)
(choice :tag "Match"
- regexp
+ regexp
(symbol :value mail))
(repeat :inline t
:tag "Restrictions"
(symbol :value mail))
(repeat :inline t
:tag "Restrictions"
@@
-549,7
+554,7
@@
parameter. It should return nil, `warn' or `delete'."
:group 'nnmail
:type '(repeat symbol))
:group 'nnmail
:type '(repeat symbol))
-(defcustom nnmail-split-header-length-limit
512
+(defcustom nnmail-split-header-length-limit
2048
"Header lines longer than this limit are excluded from the split function."
:version "21.1"
:group 'nnmail
"Header lines longer than this limit are excluded from the split function."
:version "21.1"
:group 'nnmail
@@
-557,11
+562,13
@@
parameter. It should return nil, `warn' or `delete'."
(defcustom nnmail-mail-splitting-charset nil
"Default charset to be used when splitting incoming mail."
(defcustom nnmail-mail-splitting-charset nil
"Default charset to be used when splitting incoming mail."
+ :version "22.1"
:group 'nnmail
:type 'symbol)
(defcustom nnmail-mail-splitting-decodes nil
"Whether the nnmail splitting functionality should MIME decode headers."
:group 'nnmail
:type 'symbol)
(defcustom nnmail-mail-splitting-decodes nil
"Whether the nnmail splitting functionality should MIME decode headers."
+ :version "22.1"
:group 'nnmail
:type 'boolean)
:group 'nnmail
:type 'boolean)
@@
-571,6
+578,15
@@
Normally, regexes given in `nnmail-split-fancy' are implicitly surrounded
by \"\\=\\<...\\>\". If this variable is true, they are not implicitly\
surrounded
by anything."
by \"\\=\\<...\\>\". If this variable is true, they are not implicitly\
surrounded
by anything."
+ :version "22.1"
+ :group 'nnmail
+ :type 'boolean)
+
+(defcustom nnmail-split-lowercase-expanded t
+ "Whether to lowercase expanded entries (i.e. \\N) when splitting mails.
+This avoids the creation of multiple groups when users send to an address
+using different case (i.e. mailing-list@domain vs Mailing-List@Domain)."
+ :version "22.1"
:group 'nnmail
:type 'boolean)
:group 'nnmail
:type 'boolean)
@@
-753,7
+769,7
@@
If SOURCE is a directory spec, try to return the group name component."
(if (not (save-excursion
(and (re-search-backward
"^Content-Length:[ \t]*\\([0-9]+\\)" start t)
(if (not (save-excursion
(and (re-search-backward
"^Content-Length:[ \t]*\\([0-9]+\\)" start t)
- (setq content-length (string-to-
int
+ (setq content-length (string-to-
number
(buffer-substring
(match-beginning 1)
(match-end 1))))
(buffer-substring
(match-beginning 1)
(match-end 1))))
@@
-890,7
+906,7
@@
If SOURCE is a directory spec, try to return the group name component."
(if (not (re-search-forward
"^Content-Length:[ \t]*\\([0-9]+\\)" nil t))
(setq content-length nil)
(if (not (re-search-forward
"^Content-Length:[ \t]*\\([0-9]+\\)" nil t))
(setq content-length nil)
- (setq content-length (string-to-
int
(match-string 1)))
+ (setq content-length (string-to-
number
(match-string 1)))
;; We destroy the header, since none of the backends ever
;; use it, and we do not want to confuse other mailers by
;; having a (possibly) faulty header.
;; We destroy the header, since none of the backends ever
;; use it, and we do not want to confuse other mailers by
;; having a (possibly) faulty header.
@@
-1125,7
+1141,7
@@
FUNC will be called with the group name to determine the article number."
5 "Error in `nnmail-split-methods'; using `bogus' mail group")
(sit-for 1)
'("bogus")))))
5 "Error in `nnmail-split-methods'; using `bogus' mail group")
(sit-for 1)
'("bogus")))))
- (setq split (
gnus-remov
e-duplicates split))
+ (setq split (
mm-delet
e-duplicates split))
;; The article may be "cross-posted" to `junk'. What
;; to do? Just remove the `junk' spec. Don't really
;; see anything else to do...
;; The article may be "cross-posted" to `junk'. What
;; to do? Just remove the `junk' spec. Don't really
;; see anything else to do...
@@
-1404,11
+1420,12
@@
See the documentation for the variable `nnmail-split-fancy' for details."
;; Not in cache, compute a regexp for the field/value pair.
(t
;; Not in cache, compute a regexp for the field/value pair.
(t
- (let* ((field (nth 0 split))
- (value (nth 1 split))
- partial-front
- partial-rear
- regexp)
+ (let ((field (nth 0 split))
+ (value (nth 1 split))
+ (split-rest (cddr split))
+ partial-front
+ partial-rear
+ regexp)
(if (symbolp value)
(setq value (cdr (assq value nnmail-split-abbrev-alist))))
(if (and (>= (length value) 2)
(if (symbolp value)
(setq value (cdr (assq value nnmail-split-abbrev-alist))))
(if (and (>= (length value) 2)
@@
-1420,7
+1437,13
@@
See the documentation for the variable `nnmail-split-fancy' for details."
(string= ".*" (substring value -2)))
(setq value (substring value 0 -2)
partial-rear ""))
(string= ".*" (substring value -2)))
(setq value (substring value 0 -2)
partial-rear ""))
- (when nnmail-split-fancy-match-partial-words
+ ;; Invert the match-partial-words behavior if the optional
+ ;; last element is specified.
+ (while (eq (car split-rest) '-)
+ (setq split-rest (cddr split-rest)))
+ (when (if (cadr split-rest)
+ (not nnmail-split-fancy-match-partial-words)
+ nnmail-split-fancy-match-partial-words)
(setq partial-front ""
partial-rear ""))
(setq regexp (concat "^\\(\\("
(setq partial-front ""
partial-rear ""))
(setq regexp (concat "^\\(\\("
@@
-1435,7
+1458,7
@@
See the documentation for the variable `nnmail-split-fancy' for details."
(or partial-rear "\\>")))
(push (cons split regexp) nnmail-split-cache)
;; Now that it's in the cache, just call nnmail-split-it again
(or partial-rear "\\>")))
(push (cons split regexp) nnmail-split-cache)
;; Now that it's in the cache, just call nnmail-split-it again
- ;; on the same split, which will find it immediately in the cache.
+
;; on the same split, which will find it immediately in the cache.
(nnmail-split-it split))))))
(defun nnmail-expand-newtext (newtext)
(nnmail-split-it split))))))
(defun nnmail-expand-newtext (newtext)
@@
-1464,7
+1487,10
@@
See the documentation for the variable `nnmail-split-fancy' for details."
(setq N 0)
(setq N (- c ?0)))
(when (match-beginning N)
(setq N 0)
(setq N (- c ?0)))
(when (match-beginning N)
- (push (buffer-substring (match-beginning N) (match-end N))
+ (push (if nnmail-split-lowercase-expanded
+ (downcase (buffer-substring (match-beginning N)
+ (match-end N)))
+ (buffer-substring (match-beginning N) (match-end N)))
expanded))))
(setq pos (1+ pos)))
(if did-expand
expanded))))
(setq pos (1+ pos)))
(if did-expand
@@
-1557,7
+1583,7
@@
See the documentation for the variable `nnmail-split-fancy' for details."
(when (stringp id)
;; this will handle cases like `B r' where the group is nil
(let ((grp (or grp gnus-newsgroup-name "UNKNOWN")))
(when (stringp id)
;; this will handle cases like `B r' where the group is nil
(let ((grp (or grp gnus-newsgroup-name "UNKNOWN")))
- (run-hook-with-args 'nnmail-spool-hook
+ (run-hook-with-args 'nnmail-spool-hook
id grp subject sender))
(when nnmail-treat-duplicates
;; Store some information about the group this message is written
id grp subject sender))
(when nnmail-treat-duplicates
;; Store some information about the group this message is written
@@
-1580,7
+1606,7
@@
See the documentation for the variable `nnmail-split-fancy' for details."
(unless (and regexp (string-match regexp grp))
(insert id "\t" grp "\n")))
(insert id "\n"))))))
(unless (and regexp (string-match regexp grp))
(insert id "\t" grp "\n")))
(insert id "\n"))))))
-
+
(defun nnmail-cache-primary-mail-backend ()
(let ((be-list (cons gnus-select-method gnus-secondary-select-methods))
(be nil)
(defun nnmail-cache-primary-mail-backend ()
(let ((be-list (cons gnus-select-method gnus-secondary-select-methods))
(be nil)
@@
-1848,9
+1874,15
@@
See the Info node `(gnus)Fancy Mail Splitting' for more details."
(case-fold-search nil)
(from (or (message-fetch-field "from") ""))
(to (or (message-fetch-field "to") ""))
(case-fold-search nil)
(from (or (message-fetch-field "from") ""))
(to (or (message-fetch-field "to") ""))
- (date (date-to-time
- (or (message-fetch-field "date") (current-time-string))))
+ (date (message-fetch-field "date"))
(target 'delete))
(target 'delete))
+ (setq date (if date
+ (condition-case err
+ (date-to-time date)
+ (error
+ (message "%s" (error-message-string err))
+ (current-time)))
+ (current-time)))
(dolist (regexp-target-pair (reverse nnmail-fancy-expiry-targets) target)
(setq header (car regexp-target-pair))
(cond
(dolist (regexp-target-pair (reverse nnmail-fancy-expiry-targets) target)
(setq header (car regexp-target-pair))
(cond
@@
-1858,7
+1890,7
@@
See the Info node `(gnus)Fancy Mail Splitting' for more details."
;; To or From header
((and (equal header 'to-from)
(or (string-match (cadr regexp-target-pair) from)
;; To or From header
((and (equal header 'to-from)
(or (string-match (cadr regexp-target-pair) from)
- (and (string-match
message-dont-reply-to-names
from)
+ (and (string-match
(message-dont-reply-to-names)
from)
(string-match (cadr regexp-target-pair) to))))
(setq target (format-time-string (caddr regexp-target-pair) date)))
((and (not (equal header 'to-from))
(string-match (cadr regexp-target-pair) to))))
(setq target (format-time-string (caddr regexp-target-pair) date)))
((and (not (equal header 'to-from))
@@
-1951,14
+1983,12
@@
See the Info node `(gnus)Fancy Mail Splitting' for more details."
(with-output-to-temp-buffer "*nnmail split history*"
(with-current-buffer standard-output
(fundamental-mode)) ; for Emacs 20.4+
(with-output-to-temp-buffer "*nnmail split history*"
(with-current-buffer standard-output
(fundamental-mode)) ; for Emacs 20.4+
- (let ((history nnmail-split-history)
- elem)
- (while (setq elem (pop history))
+ (dolist (elem nnmail-split-history)
(princ (mapconcat (lambda (ga)
(concat (car ga) ":" (int-to-string (cdr ga))))
elem
", "))
(princ (mapconcat (lambda (ga)
(concat (car ga) ":" (int-to-string (cdr ga))))
elem
", "))
- (princ "\n"))))
)
+ (princ "\n"))))
(defun nnmail-purge-split-history (group)
"Remove all instances of GROUP from `nnmail-split-history'."
(defun nnmail-purge-split-history (group)
"Remove all instances of GROUP from `nnmail-split-history'."
@@
-1991,4
+2021,5
@@
Doesn't change point."
(provide 'nnmail)
(provide 'nnmail)
+;;; arch-tag: fe8f671a-50db-428a-bb5d-f00462f72ed7
;;; nnmail.el ends here
;;; nnmail.el ends here