181号Information

(!)
自宅設置サーバーのHDDがトんじゃったので,現在復旧作業中です...
Diary>40[41]42
CONTENTS

じゆうちょう

41 mewで,lgrepを使って日本語全文検索(途中) スクリプト 2011-03-21 17:09:01

mewで日本語全文検索しようとすると設定にひと手間かかっちゃいます. 以下の設定をするとgrepでなんちゃって日本語検索できます.横着.. lgrepを使うので元々のコードに2行だけ追加してます. ~/.mew.elに書いておくことで日本語全文検索できるようになります.

mew-prog-grep-opts-Isで入力コードを指定してるので,モチロンISO2022-JPで保存されてるファイルしか対象にならんです...Base64&UTF-8メールとかは,むりんぐ.げしょ

本気でやるなら,mew-grepとか作った方がいいとおもぅ.それよりサーチエンジンを入れよう.

環境に応じてmew-prog-grep-optsのオプションを変更して下さい.

-I入力コーディングのスイッチ
-O出力コーディングのスイッチ
-Kキーボードコーディングのスイッチ
aauto-select
jiso-2022-jp
ejeuc-japan
u8UTF-8
sshift-jis

ちなみに,追加した行はlgrepの-lオプションの動作がgrepと 同じでなかったのでその調整です.

emacs23.1,mew6.3,仮想端末は入出力キーボード全てUTF-8です.

(defun mew-summary-selection-by-pick-with-grep1 (prog opts pattern folder msgs)
  (let ((dir (mew-expand-folder folder))
  (file (mew-make-temp-name))
  (rttl 0) nxt)
    (if (= (length msgs) 1) (setq msgs (cons null-device msgs)))
    (if pattern (setq pattern (mew-cs-encode-arg pattern)))
    (with-temp-buffer
      (mew-set-buffer-multibyte t)
      (cd dir)
      (mew-piolet mew-cs-text-for-read mew-cs-text-for-write
  (mew-alet ;; xxx
   (while msgs
     (goto-char (point-max))
     (setq nxt (nthcdr mew-prog-grep-max-msgs msgs))
     (if nxt (mew-ntake mew-prog-grep-max-msgs msgs))
     (apply 'call-process prog nil t nil
      (append opts (and pattern (list pattern)) msgs))
     (setq msgs nxt)))
  (setq msgs nil)
  (while (re-search-forward ":.*$" nil t) ;; for lgrep 追加行
    (replace-match ""))                   ;; for lgrep 追加行
  (setq msgs nil)
  (goto-char (point-min))
  (while (re-search-forward mew-regex-message-files2 nil t)
    (setq msgs (cons (mew-match-string 1) msgs))
    (forward-line))
  (setq msgs (mew-uniq-list msgs))
  (setq msgs (mapcar 'string-to-number msgs))
  (setq msgs (sort msgs '<))
  (setq msgs (mapcar 'number-to-string msgs)))
      (mew-erase-buffer)
      (setq rttl (length msgs))
      (insert "CD: " folder "\n")
      (mapc (lambda (x) (insert (mew-msg-get-filename x) "\n")) msgs)
      (mew-frwlet mew-cs-text-for-read mew-cs-text-for-write
  (write-region (point-min) (point-max) file nil 'no-msg))
      (list file rttl))))

(setq mew-prog-grep "lgrep")
(setq mew-prog-grep-opts '("-l" "-Kj" "-Ou8" "-Is"))
 
Diary>40[41]42