[Mew-dist 08936] Re: +fromへのrefile
Yoshinari NOMURA
nom at example.com
1999年 5月 24日 (月) 23:59:19 JST
On Mon, 24 May 1999 20:14:00 +0900,
Yoshinari NOMURA <nom at example.com> said:
> 1. guess-by-from は、+from/ 以下からしか guess しない。
> 2. guess-by-default +from/ に新規フォルダを作る場合にのみ使われ
> るはずなので、@domainpart strip するかどうかの flag を付けるだけにする。
>
> のような変更をしようと思うのですが、どうでしょうか。
とりあえずこの方針に沿って mew-refile.el を変更してみました。
・ mew-refile-guess-by-default に
(defvar mew-refile-guess-strip-domainpart t
"*If *non-nil*, mew-refile-guess-by-default strips domainpart of from")
を導入した。
・mew-refile-guess-by-from の学習を以下のように変更した。
ユーザが選んだフォルダの中に +from/... の形をしたフォルダがあ
る場合は、優先的にそれを学習する。
+from/... 以外の形をしたフォルダは以下の特別な場合に限り学習する。
今迄学習していた +from/... なフォルダが既になくなっている。
今迄学習していたフォルダがそもそも +from/... な形ではない。
一回入力してやれば、次からは mew-refile-guess-by-from がずっと覚
えてくれるので +from/foo/bar/baz や +from/foo at example.com のいずれが
好みの人でも問題ないはずです。
from-alist をアドレス補完に使わなくなって、妙な学習をしなくてよ
くなったので、だいぶマシな返事をするようになると思います。
あと、auto-refile がらみで、何かやることがあったような気がしたの
ですが、すみません、手元で見付けられません。
--
nom
--- mew-refile.el.orig Mon Apr 5 13:07:35 1999
+++ mew-refile.el Mon May 24 23:31:26 1999
@@ -3,11 +3,11 @@
;; Author: Yoshinari NOMURA <nom at example.com>
;; Kazu Yamamoto <Kazu at example.com>
;; Created: Jun 11, 1994
-;; Revised: Sep 1, 1998
+;; Revised: May 24, 1999
;;; Code:
-(defconst mew-refile-version "mew-refile.el version 0.65")
+(defconst mew-refile-version "mew-refile.el version 0.66")
(require 'mew)
@@ -71,6 +71,9 @@
"*If *non-nil*, mew-summary-auto-refile doesn't touch
any alredy marked message.")
+(defvar mew-refile-guess-strip-domainpart t
+ "*If *non-nil*, mew-refile-guess-by-default strips domainpart of from")
+
;;
;; initialize function
;;
@@ -244,12 +247,9 @@
;; by from returns: guess1
;;
(defun mew-refile-guess-by-from (&optional addr)
- (let ((from (or addr (mew-header-parse-address mew-from:) "")) default)
+ (let ((from (or addr (mew-header-parse-address mew-from:) "")))
;; search from alist
- (setq default (mew-refile-guess-by-default from))
- (if (file-exists-p (mew-expand-folder default))
- default
- (cdr (assoc from mew-refile-from-alist)))))
+ (cdr (assoc from mew-refile-from-alist))))
;;
;; by To: or Cc: when From: is mine. (Undocumented)
@@ -274,12 +274,13 @@
;; by default returns: guess1
;;
(defun mew-refile-guess-by-default (&optional addr)
- (let ((from (or addr (mew-header-parse-address mew-from:) "")))
+ (let ((from (downcase (or addr (mew-header-parse-address mew-from:) ""))))
+ (if mew-refile-guess-strip-domainpart
+ (setq from (mew-addrstr-extract-user from)))
(if (and mew-folders-default-folder
(not (equal "" mew-folders-default-folder)))
- (concat (file-name-as-directory mew-folders-default-folder)
- (downcase (mew-addrstr-extract-user from)))
- (concat "+" (downcase (mew-addrstr-extract-user from))))))
+ (concat (file-name-as-directory mew-folders-default-folder) from)
+ (concat "+" from))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
@@ -342,30 +343,45 @@
;; learn from "From:" field
;;
(defun mew-refile-guess-by-from-learn (chosen info)
- (let ((from (mew-header-parse-address mew-from:))
- (folder nil)
- ;; ohter people's honest opinion and my honest opinion.
- (oho info)
- (mho (cdr (assoc 'mew-refile-guess-by-from info))))
- (if (or (not from) (not chosen))
- ()
- ;; if my opninion was right, I learn it.
- ;; or a folder was not in other people's opinion,
- ;; I accept it.
+ (let* ((from (mew-header-parse-address mew-from:))
+ (folder nil)
+ (first (car chosen))
+ (entry (or (cdr (assoc from mew-refile-from-alist)) ""))
+ ;; my honest opinion.
+ (mho (cdr (assoc 'mew-refile-guess-by-from info))))
+ (if (or (or (null from) (null chosen)) ;; if from/chosen is empty or
+ (and mho (member mho chosen))) ;; my opninion was right.
+ () ;; do nothing.
+ ;; else, search "+from/.." folder from chosen folders.
(catch 'match
(while chosen
- (if (or (member (car chosen) mho)
- (not (catch 'find
- (while oho
- (and (member (car chosen) (car oho)) (throw 'find t))
- (setq oho (cdr oho))))))
+ (if (mew-refile-guess-default-folder-p (car chosen))
(throw 'match (setq folder (car chosen))))
(setq chosen (cdr chosen))))
- (if folder
- (setq mew-refile-from-alist
- (cons (cons from folder)
- (delete (assoc from mew-refile-from-alist)
- mew-refile-from-alist)))))))
+ (cond
+ ;; if "+from/..." is found in chosen folders, learn it.
+ (folder
+ (setq mew-refile-from-alist
+ (cons (cons from folder)
+ (delete (assoc from mew-refile-from-alist)
+ mew-refile-from-alist))))
+ ;; if chosen folder is not the form of "+from/..."
+ ;; mew-refile-from-alist should be updated only in case of
+ ;; 1. the entry of mew-refile-from-alist is not in mew-folder-list,
+ ;; 2. the entry of mew-refile-from-alist is not the form of "+from/.."
+ ((or (not (mew-folder-member entry mew-folder-list))
+ (not (mew-refile-guess-default-folder-p entry)))
+ (setq mew-refile-from-alist
+ (cons (cons from first)
+ (delete (assoc from mew-refile-from-alist)
+ mew-refile-from-alist))))))))
+
+
+(defun mew-refile-guess-default-folder-p (folder)
+ (string-match
+ (concat "^"(file-name-as-directory
+ mew-folders-default-folder))
+ folder))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
Mew-dist メーリングリストの案内