[mew-dist 28904] Re: 特定フォルダ以下をauto-refileの対象から外すには?

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2009年 3月 9日 (月) 13:24:54 JST


白井です。

From: Tatsuo Ishii <ishii at example.com> さん曰く
Subject: [mew-dist 28903] Re: 特定フォルダ以下をauto-refileの対象から外すには?
Message-ID: <20090309.124539.82127671.t-ishii at example.com>
Date: Mon, 09 Mar 2009 12:45:39 +0900 (JST)

> お察しの通り、mew-refile-guess-by-folder のようです。この関数をいじっ
> て、"Mail-2008"の方に行きそうだったらそうならないようにすることになる
> のでしょうか?

> mew-refile-guess-by-folder        return: +Mail-2008/PostgreSQL/jpug-kyushu

そうなります。しかし、mew-refile-guess-by-folder 自体を改造する
のはよろしくないので、流用して他の関数を定義する方が良いと思います。

例えば、以下のように mew-refile-guess-by-folder-not-old() を定義
して、mew-refile-guess-control に追加すれば OK でしょう。

(defvar mew-refile-guess-by-folder-not-old-alist nil)

(defun mew-refile-guess-by-folder-not-old ()
  (let ((to-cc (mew-header-parse-address-list mew-refile-guess-key-list))
	(proto mew-inherit-refile-proto)
	(case mew-inherit-refile-case)
	alist tmp sep ent ret ml-addr ml-name)
    (when (mew-folder-localp proto)
      (setq sep mew-path-separator)
      (if mew-refile-guess-by-folder-not-old-alist
	  (setq alist mew-refile-guess-by-folder-not-old-alist)
	(setq alist (mew-proto-folder-alist proto case))
	(while alist
	  (unless (string-match "^\\+Mail-[12][0-9][0-9][0-9]" (car (car alist)))
	    (setq tmp (cons (car alist) tmp)))
	  (setq alist (cdr alist)))
	(setq alist (nreverse tmp))
	(setq mew-refile-guess-by-folder-not-old-alist alist))
      (dolist (tc to-cc)
	(setq ml-addr (mew-addrstr-parse-address (or tc "")))
	(when ml-addr
	  (setq ml-name (mew-addrstr-extract-user ml-addr))
	  (setq ent (or (funcall mew-assoc-folder ml-addr alist sep)
			(funcall mew-assoc-folder ml-name alist sep)))
	  (mew-addq ret (nth 0 ent))))
      (nreverse ret))))

(setq mew-refile-guess-control
      '(mew-refile-guess-by-alist
	mew-refile-ctrl-throw
	mew-refile-guess-by-newsgroups
	mew-refile-guess-by-folder-not-old	;; 追加
	mew-refile-ctrl-throw
	mew-refile-ctrl-auto-boundary
	mew-refile-guess-by-folder		;; 適当な位置に動かす(消すのもあり)
	mew-refile-guess-by-thread
	mew-refile-ctrl-throw
	mew-refile-guess-by-from-folder
	mew-refile-ctrl-throw
	mew-refile-guess-by-from
	mew-refile-ctrl-throw
	mew-refile-guess-by-default))

これで、M-o のときに +Mail-2008/... が出てくることはなくなると思
います。

なお、

(1) 二回目以降は +Mail-XXXX を除いた alist を使いまわしているた
    め、後からフォルダを追加したり、削除したりしたら、Emacs を立
    ち上げ直すか、
    (setq mew-refile-guess-by-folder-not-old-alist nil)
    としないとダメです。 

(2) ローカルフォルダ限定です。IMAP にも対応出来ますが、少々面倒
    くさくなるので、もし必要ならまた今度。

といった感じです。

-- 
白井秀行 (mailto:shirai at example.com)

# 似たようなものを使っているので、すぐ出来てしまいました ^^;;;



Mew-dist メーリングリストの案内