1 ;;; mew-refile-misc.el -- more mew-refile-guess-* functions
3 ;;; Written by: Sen Nagata <sen@eccosys.com>
6 ;; Keywords: refile, mew
13 ;; -put this file in an appropriate directory so emacs can find it
17 ;; (add-hook 'mew-init-hook (lambda () (require 'mew-refile-misc)))
19 ;; in .emacs (or wherever you place your mew settings)
21 ;; -modify the value of mew-refile-guess-control to use any combination of:
23 ;; `mew-refile-guess-by-ml-headers'
24 ;; `mew-refile-guess-by-x-ml-name'
25 ;; `mew-refile-guess-by-mailing-list'
26 ;; `mew-refile-guess-by-x-mailing-list'
30 ;; -does mew provide any functions to extract addresses from header
31 ;; values? there is `mew-header-parse-address-list2', but it drops
32 ;; 'anonymous' addresses...looks like `mew-header-parse-address'
33 ;; may be what i am looking for :-)
43 ;; wrote `mew-refile-guess-by-ml-headers'
47 ;; initial implementation
50 (defconst mew-refile-misc-version "mew-refile-misc.el 0.2")
54 ;; mew-func.el (for `mew-assoc-case-equal')
55 ;; mew-header.el (for `mew-header-get-value')
62 ;; by ml-headers returns: guess1 or nil
64 (defun mew-refile-guess-by-ml-headers ()
65 ;; yes, this is complicated -- i thought it was better to have something
66 ;; than nothing even though i don't really like this way of doing things
68 list-id mailing-list x-mailing-list x-ml-name
72 ;; 'List-Id' is used in mailman
73 ;; List-Id: Mailman mailing list management users <mailman-users.python.org>
74 (if (setq list-id (mew-header-get-value "List-Id:"))
76 (string-match "<\\([^>.]+\\)\\.[^>]+>$" list-id)
78 (cons (match-string 1 list-id)
81 ;; 'Mailing-List' is used by ezmlm
82 ;; Mailing-List: contact freshmeat-news-help@freshmeat.net; run by ezmlm
83 (if (setq mailing-list (mew-header-get-value "Mailing-List:"))
85 (string-match "\\([^ ]+\\)-help\\(@[^;]+\\);" mailing-list)
87 (cons (match-string 1 mailing-list)
90 ;; 'X-Mailing-List' is used by smartlist
91 ;; X-Mailing-List: <debian-devel@lists.debian.org> archive/latest/42880
92 (if (setq x-mailing-list (mew-header-get-value "X-Mailing-List:"))
94 (string-match "^<\\([^@]+\\)@[^>]+>" x-mailing-list)
95 ;;(string-match "^ *<\\([^@]+\\)@[^>]+>" x-mailing-list)
97 (cons (match-string 1 x-mailing-list)
100 ;; 'X-ML-Name' is used by fml -- too bad this isn't helpful all the time
101 ;; X-ML-Name: Mew-dist
102 ;; X-ML-Name: Wanderlust
103 (if (setq x-ml-name (mew-header-get-value "X-ML-Name:"))
105 (string-match "^\\([a-zA-Z0-9_-]+\\)$" x-ml-name)
107 (cons (match-string 1 x-ml-name)
110 ;; for the moment, use only the first guess if any
114 (mew-assoc-case-equal (car headers-list) mew-folder-alist 1))
115 (if ent (setq ret (cons (nth 0 ent) ret)))))
119 ;; by x-ml-name returns: guess1 or nil
121 ;; based on `mew-refile-guess-by-folder'
122 (defun mew-refile-guess-by-x-ml-name ()
124 ;; X-ML-Name: Mew-dist
125 ;; X-ML-Name: tm(ja) / tm ML ...
126 ;; X-ML-Name: Wanderlust
128 ;; perhaps an alist of X-ML-Name: values to folder names would be useful?
129 (let ((x-ml-name (mew-header-get-value "X-ML-Name:"))
133 (setq ent (mew-assoc-case-equal x-ml-name mew-folder-alist 1))
134 (if ent (setq ret (cons (nth 0 ent) ret)))))
138 ;; by mailing-list returns: guess1 or nil
140 ;; based on `mew-refile-guess-by-folder'
141 (defun mew-refile-guess-by-mailing-list ()
143 ;; Mailing-List: contact freshmeat-news-help@freshmeat.net; run by ezmlm
145 ;; should try to extract address and then guess an address from the result
146 (let ((mailing-list (mew-header-get-value "Mailing-List:"))
150 (string-match "\\([^ ]+\\)-help\\(@[^;]+\\);" mailing-list)
151 (setq ml-name (mew-addrstr-extract-user
152 (concat (match-string 1 mailing-list)
153 (match-string 2 mailing-list))))
154 (setq ent (mew-assoc-case-equal ml-name mew-folder-alist 1))
155 (if ent (setq ret (cons (nth 0 ent) ret)))))
159 ;; by x-mailing-list returns: (guess1 guess2 ...) or nil
161 (defun mew-refile-guess-by-x-mailing-list ()
163 ;; X-Mailing-List: <debian-devel@lists.debian.org> archive/latest/42880
166 (let ((temp-list mew-refile-guess-key-list)
168 (setq mew-refile-guess-key-list '("X-Mailing-List:"))
169 (setq results (mew-refile-guess-by-folder))
170 (setq mew-refile-guess-key-list temp-list)
173 (provide 'mew-refile-misc)
175 ;;; mew-refile-misc.el ends here
178 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
182 ; (setq mew-refile-guess-control
184 ; mew-refile-guess-by-ml-headers
185 ; mew-refile-ctrl-throw
186 ; mew-refile-guess-by-x-ml-name
187 ; mew-refile-guess-by-mailing-list
188 ; ; the following one can be done by adding "X-Mailing-List:" to
189 ; ; mew-refile-guess-key-list -- but, it may be useful to do this on its
191 ; mew-refile-guess-by-x-mailing-list
192 ; mew-refile-ctrl-throw
193 ; mew-refile-guess-by-alist
194 ; mew-refile-guess-by-newsgroups
195 ; mew-refile-guess-by-folder
196 ; mew-refile-ctrl-throw
197 ; mew-refile-ctrl-auto-boundary
198 ; ;; deprecated as of 1.94
199 ; ;mew-refile-guess-by-msgid
201 ; mew-refile-guess-by-thread
203 ; mew-refile-guess-by-from-folder
204 ; mew-refile-guess-by-from
205 ; mew-refile-guess-by-default