[mew-dist 26586] Re: 検索

Hideaki Togashi hideak-t at example.com
2005年 9月 8日 (木) 19:30:03 JST


アスキーのとがしです。こんにちは。

試すのが遅くなって、すみません。

From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Subject: [mew-dist 26554] Re: 検索
Date: Wed, 31 Aug 2005 16:18:45 +0900 (JST)
> > この仕様だと grep 検索機能が結構制限されてしまいますが、
> > 何とかならないでしょうか。
> 
> パターンの指定のときに RET を押し、低レベルな入力方法へ行って下さい。
> 
> それで問題があれば、教えて下さい。

bogo

とかは、出来ないみたいですね。

bsfilter -a --list-spam

とすると、"-a" を opt、"--list-spam" を pattern と勘違いしてくれて、無
事動いてくれます。


しかし、いちいちこれらを指定するのも面倒なので、今は mew-summary-pick 
と mew-summary-pick-with-grep を参考にして、適当にこんなものを書いてし
のいでいます。一部自信がないですが。キーアサインは、bsfilter 付属の 
mua/mew4/mew.el をそのまま。bogofilter の bogo (sh) でも使えると思いま
す。

;-----------------------------------------------------------------
(defvar mew-prog-spamfilter "bsfilter")
(defvar mew-prog-spamfilter-opts '("-a" "--list-spam"))

(defun mew-summary-pick-spam (&optional regionp)
  "Pick messages according to the results of bsfilter.
Then put the '*' mark onto them. 'bsfilter' is called as a
picking command. If called with '\\[universal-argument]', the
target is the region."
  (interactive "P")
  (mew-pickable
   (mew-summary-with-mewl
    (let* ((folder (mew-pickable-folder))
	   (msgs (mew-summary-pick-msgs folder regionp))
	   (prog mew-prog-spamfilter)
	   (opts mew-prog-spamfilter-opts))
      (if (not msgs)
	  (message "No message")
	(if (not (mew-which-exec prog))
	    (message "'%s' not found" prog)
	  (mew-sinfo-set-find-key "")
	  (message "Picking messages in %s..." folder)
	  (setq msgs (mew-summary-pick-spam-with-prog prog opts folder msgs))
	  (message "Picking messages in %s...done" folder)
	  (mew-summary-pick-ls folder msgs)))))))

(defun mew-summary-pick-spam-with-prog (prog opts folder src-msgs)
  "A function to pick spam."
  (let* ((dir (mew-expand-folder folder))
	 (default-directory dir) ;; buffer local
	 msgs nxt)
    ;; no sort here
    (if (= (length src-msgs) 1) (setq src-msgs (cons null-device src-msgs)))
    (with-temp-buffer
      (mew-set-buffer-multibyte t)
      (cd dir)
      (mew-piolet
       mew-cs-text-for-read mew-cs-text-for-write
       (while src-msgs
	 (goto-char (point-max))
	 (setq nxt (nthcdr mew-prog-grep-max-msgs src-msgs))
	 (if nxt (setcdr (nthcdr (1- mew-prog-grep-max-msgs) src-msgs) nil))
	 (apply 'call-process prog nil t nil(append opts src-msgs))
	 (setq src-msgs nxt)))
      (goto-char (point-min))
      (while (re-search-forward mew-regex-message-files2 nil t)
	(setq msgs (cons (mew-match-string 0) msgs))
	(forward-line)))
    (setq msgs (mew-uniq-list msgs))
    (setq msgs (mapcar 'string-to-number msgs))
    (setq msgs (sort msgs '<))
    (mapcar 'number-to-string msgs)))

(define-key mew-summary-mode-map "bm" 'mew-summary-pick-spam)
;-----------------------------------------------------------------

そういえば、info の spam 対策のところは、まだ " を使うようになってます
ね。

-- 
Hideaki Togashi <hideak-t at example.com>



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