[Mew-dist 08349] Re: How to auto refile marked mails.
Kazu TAKAMUNE / 高宗 和暁
takamune at example.com
1999年 3月 30日 (火) 17:41:33 JST
高宗です。こんにちは。
>>> Date: Mon, 29 Mar 1999 20:21:40 +0900
>>> From: Kazu TAKAMUNE / 高宗 和暁 <takamune at example.com> ==「高宗」
高宗> 1) どんなメールを受信したかサマリでは確認したい。
高宗> 2) サマリしか確認しない ML がいくつかあり、
高宗> これらのメールを自動で refile したい(refile 先は複数)。
高宗> ということをしたいのですが、どうするのが適切でしょうか?
高宗> 「マークのついたメールのみを auto-refile する」ことができれば
高宗> 良いのですが、e-lisp はほとんどわからないのが辛い所です。
いきなりですが、やってみたらできてしまいましたので報告します。
(やってから聞けばよかったですね _o_)
これまで e-lisp は setq しか使わないレベルだったのですが、
手も足も出ないのはちょっと悔しかったので、
mew-summary-auto-refile を眺めながら
or や and 果ては not まで describe-function しまくりました。
# lisp は、全て '関数' で、できているのでしょうか!?
その結果、mew-summary-auto-refile の中のたった1行
(and mark mew-refile-auto-refile-skip-any-mark)
の代りに
(not (equal mark mew-mark-review))
とすれば良さそうなことがわかりました。
そこで、この部分を変更した関数を
mew-summary-mark-auto-refile
という名前で .emacs に定義して、
o 'i' で +inbox に受信
Scan.sbr のスクリプトで、上記の 2) のメールに '*' マークが付く。
o +inbox で mew-summary-mark-auto-refile を実行(M-o にバインドしました :-)
2) のメールに 'o' マークが付く。
o 'x' mew-summary-exec
実際に refile される。
とできるようになりました。
作ったものを一応添付しておきます。
もし良ければ mew に取りこんで頂けないでしょうか。
ほとんど同じことをする関数が 2 つあるのはあんまりなので、
もう少しなんとかしたいのですが、lisp 素人には難題です。
--
高宗 和暁(たかむね かずとき)
E-mail: takamune at example.com
-------------- next part --------------
(load-library "mew-summary") ; これがないと次行でエラー
(define-key mew-summary-mode-map "\M-o" 'mew-summary-mark-auto-refile)
(defun mew-summary-mark-auto-refile ()
"Refile each message marked with '*' with in the folder automatically."
(interactive)
(mew-summary-only
(let ((mew-analysis nil)
(after-change-function nil)
(after-change-functions nil)
(mew-use-highlight-x-face nil)
(lines (count-lines (point-min) (point-max)))
(line 1)
(mark nil))
(message "Mark auto refiling ...")
(save-window-excursion
(goto-char (point-min))
(while (not (eobp))
(setq mark (mew-summary-get-mark))
(or (equal mark mew-mark-refile)
(equal mark mew-mark-delete)
; (and mark mew-refile-auto-refile-skip-any-mark)
(not (equal mark mew-mark-review))
(mew-summary-refile nil t))
(forward-line)
(if (equal (% (/ (* 100 line) lines) 10) 0)
(message "Auto refiling ... %s%%"
(/ (* 100 line) lines)))
(setq line (1+ line)))
(message "Mark auto refiling ... done")))))
Mew-dist メーリングリストの案内