[Mew-dist 04720] grep Japanese

Mito mit at example.com
1998年 5月 14日 (木) 20:46:55 JST


pick 関係で日本語の検索に関してです。

Emacs 20 だけだと思いますが、mew-piolet() で write を
mew-cs-noconv にした場合、引き数に渡る文字列も変換されないた
め、日本語検索ができませんでした。
# XEmacs 2x では問題なく検索できました。
# 私の環境だけの問題でしたら教えてください。

とりあえず mew-summary-pick の

     (mew-piolet
       mew-cs-autoconv mew-cs-noconv
       (mew-im-call-process nil mew-prog-imgrep ;; xxx
 			    (format "--src=%s" folder)
 			    (format "--expression=%s" epat) range))


の部分の mew-cs-noconv を nil にすると上手く検索できるように
なりましたが、これは call-process の場合で、start-process の
場合は nil にしても内部コード(emacs-mule?)のまま渡ってしまい
検索できませんでした。

もちろん、
(mew-set-process-cs mew-summary-buffer-process read mew-cs-noconv)
の mew-cs-noconv を nil や euc-jp-unix などにしてもだめでし
た。

色々やってはみたのですが、start-process の引き数のコード変換
をする方法が判りませんでしたので、start-process に渡す前にコー
ド変換するようにしてみました。

imls や imgrep なども日本語にしか対応していないようですので、
とりあえずOKかなと思い、call-process の方もこのようにしてみ
ました。

他によい解決策がありましたらお願いします。

ついでに、iso-2022-jp で imls --grep をするとGrep.pm の 
parse_expression() で、エラーになったので、安直ですが修正し
てみました。
# 必要性はないと思いますが。
-- 
5/14 20:08頃
NECソフトウェア新潟 水戸
mailto:mit at example.com \n
-------------- next part --------------
--- mew-pick.el	1998/05/14 09:24:52	1.1
+++ mew-pick.el	1998/05/14 09:26:01
@@ -286,7 +286,12 @@
        mew-cs-autoconv mew-cs-noconv
        (mew-im-call-process nil mew-prog-imgrep ;; xxx
 			    (format "--src=%s" folder)
-			    (format "--expression=%s" epat) range))
+			    (format "--expression=%s"
+				    (if (and mew-temacs-p
+					     (eq mew-mule-version 3))
+					(mew-cs-encode-string epat 'euc-jp)
+				      epat))
+			    range))
       (goto-char (point-min))
       (cond 
        ((looking-at "imgrep: no message") (message "No such messages") nil)
-------------- next part --------------
--- mew-scan.el	1998/05/14 09:12:15	1.1
+++ mew-scan.el	1998/05/14 09:30:13
@@ -147,8 +147,13 @@
 				    ((equal mode 'mew-virtual-mode)
 				     (list
 				      (concat "--src=" (mew-join "," folders))
-				      (concat "--grep=" grep)))
-				    ))
+				      (concat "--grep="
+					      (if (and mew-temacs-p
+						       (eq mew-mule-version 3))
+						  (mew-cs-encode-string
+						   grep 'euc-jp)
+						grep))))
+				      ))
 				  ))
 			 ))
 	    (mew-set-process-cs mew-summary-buffer-process read mew-cs-noconv)
-------------- next part --------------
--- Grep.pm.in	1998/05/14 04:26:04	1.1
+++ Grep.pm.in	1998/05/14 10:43:23
@@ -149,6 +149,10 @@
     my ($token, $quote) = ('') x 2;
 
     my $str;
+
+    require 'jcode.pl';
+    $expr = jcode::euc($expr) if jcode::what($expr) eq 'jis' ;
+
   LEX:
     foreach $str (split($STOPCHARS, $expr)) {
 


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