[mew-win32 04030] Re: Meadow 1.15 + Mew 3.3 での全文検索について

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2004年 3月 4日 (木) 17:57:21 JST


## うーん全然わからない。。。

Mew 3.3 でも試してみましたが、

Id: mg,v 2.24 2000/10/02 03:57:45 utashiro Exp 
Id: mg,v 5.0.1.1 2001/09/14 14:59:42 utashiro Exp 

の二つで問題なく動いています。Active perl はちょっと古くて

This is perl, version 5.005_03 built for MSWin32-x86-object

From: Yasushi OHYAMA <paf03637 at example.com> さん曰く
Subject: [mew-win32 04029] Re: Meadow 1.15 + Mew 3.3 での全文検索について
Message-ID: <20040303.033746.65740402.paf03637 at example.com>
Date: Wed, 03 Mar 2004 03:37:46 +0900 (LMT)

> メールのファイルを開いて、sjis-dos でセーブしたら、このファイルに
> 限り日本語検索ができました。とはいえ、これをやると Mew 上では化け
> 化けで読めません。

> (setq mew-prog-grep "mg")
> (setq mew-prog-grep-opts '("-j" "jis" "-e" "-l" "-x" "&mime" ))

"-j jis" というオプションを mg につけているので、jcode.pl の機能
を使って sjis で mg に渡した検索文字列を mg が jis に変換して検
索するようになっています。(と思います)

> 何となく、mg で検索する際に入力するパターン文字列の漢字コードに問
> 題があるような気がします。

うーーん、この辺りの機能が Mew に導入されたとき、パターンの文字
コードの話でいろいろとあった(ぼくも渦中にいた)のですが、Mew 3.3
なら問題ないとおもうのです。

。。。と、いつまでやっていても切りが無いので、実験用のコードを作っ
てみました。添付の test.el を表示した buffer で

M-x eval-buffer

と入力すると、Mew の検索関数をちょっとだけ変えて "*tmp*" という
buffer に情報を表示するようになるので、試してみてください。例え
ば、+inbox で '白井' を検索するとこんな風な結果が出ます。

c:/home/shirai/Mail/inbox
白井
白井
4
3
2
10

-- 
白井秀行@Mew 3.3 のリリース版のはなしですよね?
-------------- next part --------------
(defun mew-summary-pick-with-grep (pattern msgs)
  "A function to pick messages matching PATTERN with 'grep'."
  (setq msgs (delq nil msgs))
  (if (= (length msgs) 1) (setq msgs (cons "/dev/null" msgs)))
  (setq pattern (mew-cs-encode-arg pattern))
  (insert (decode-coding-string pattern 'shift_jis) "\n")
  (let (nxt)
    (while msgs
      (goto-char (point-max))
      (setq nxt (nthcdr mew-prog-grep-max-msgs msgs))
      (if nxt (setcdr (nthcdr (1- mew-prog-grep-max-msgs) msgs) nil))
      (apply 'call-process
	     mew-prog-grep nil t nil
	     (append mew-prog-grep-opts (list pattern) msgs))
      (setq msgs nxt))))

(defun mew-summary-pick-with-external (folder pattern)
  "A function to pick messages matching PATTERN with 
'mew-summary-pick-with-external-function'."
  (let* ((dir (mew-expand-folder folder))
	 (default-directory dir) ;; buffer local
	 (msgs (mew-dir-messages "."))
	 (buf (get-buffer-create "*tmp*")))
    ;; no sort here
    (when msgs
      (save-excursion
	(pop-to-buffer buf)
	(erase-buffer)
	(insert dir "\n")
	(insert pattern "\n")
	(cd dir)
	(mew-piolet
	 mew-cs-text-for-read mew-cs-text-for-write
	 (mew-alet
	  (funcall mew-summary-pick-with-external-function pattern msgs)))
	(goto-char (point-min))
	(setq msgs nil)
	(while (not (eobp))
	  (if (looking-at mew-regex-message-files2)
	      (setq msgs (cons (mew-match-string 0) msgs)))
	  (forward-line)))
      (setq msgs (mew-uniq-list msgs))
      (setq msgs (mapcar 'string-to-int msgs))
      (setq msgs (sort msgs '<))
      (mapcar 'int-to-string msgs))))


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