[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 メーリングリストの案内