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