グレップ結果ファイルのタイトルバー表示No.11335
マボカル さん 06/11/13 21:07
 
こんにちは。マボカルです。
各ファイルがどういうエンコードで保存されているのか、その一覧を
作成するためのマクロをIranoanさんに頂きましたが、

05293 ファイルの文字コードの判定 / マボカル [ 06/11/07 03:33 ]
http://www.maruo.co.jp/hidesoft/4/x05293_.html#5296

正式バージョンである英語版秀丸Ver605で行ったところ以下のような
問題点が発見されたため

 22142 ファイル名がユニコード表記のタグジャンプがNG / マボカル [ 06/11/07 2
1:57 ]  
http://www.maruo.co.jp/hidesoft/2/x22142_.html#22142

正式なエンコード一覧を作成することができませんでした。

Ver6.06β3でこの問題が解消されているということで、もう一度Iranoan
さんのマクロを動かしてみました。結果は正しく出ているようです。
しかしグレップの結果ファイルのタイトルバーを良く見てみると、
やや上部に偏って表記されており、しかも検索語であるタイトルバーの

grep "(.|\n)"

の表示の\nの部分が文字化けしています。

grep "(.|■)" ←制御コードが文字化けされて表示されたような感じ

グレップの結果には影響ないようですが、表記のされ方が目障りです。
というか文字化けされている部分もあるのでよろしくありません。

\が入った検索語のため問題がおきているのかと思って、Iranoanさんの
マクロではなく、普通のグレップで

(.|\n)

のようにやってみたところ、この場合はグレップ結果ファイルの
タイトルバーは問題なく表示されます。現在のところその規則性がよく
分からず、Iranoanさんのマクロを動かしたときにのみ、そうなるの
ですが、どこでどう問題を起こしているのでしょうか?

Iranoanさんのマクロの動きを参考にすると問題点を探し出すヒントに
なるかもしれません。ご確認よろしくお願いします。

ちなみに私の環境は韓国語版XP+英語版秀丸Ver6.06β3ですので、お手
数ですが、XPの言語設定を韓国語に設定してからご確認ください。

それからIranoanさん、以下のマクロありがとうございました。
Ver6.06β3で確認したところ、正しくエンコードを判定してくれている
ようです。


【韓国語版XP】
【秀丸英語版Ver6.06β3】


//---------------------------------------------------
grep "(.|\n)", "*", ".", subdir, filelist, regular, icon;
showwindow 0;
disabledraw;
#grep = hidemaruhandle( 0 );
while( code != eof ){
  tagjump;
  #charset  = charset&63;
  if( #charset == 1 )$charset = "Shift-JIS";
  else if( #charset == 2  )$charset = "Unicode";
  else if( #charset == 3  )$charset = "EUC";
  else if( #charset == 4  )$charset = "JIS";
  else if( #charset == 5  )$charset = "UTF-7";
  else if( #charset == 6  )$charset = "UTF-8";
  else if( #charset == 7  )$charset = "Unicode (Big-Endian)";
  else if( #charset == 8  )$charset = "欧文";
  else if( #charset == 9  )$charset = "簡体字中国語";
  else if( #charset == 10 )$charset = "繁体字中国語";
  else if( #charset == 11 )$charset = "韓国語";
  else if( #charset == 12 )$charset = "韓国語(Johab)";
  else if( #charset == 13 )$charset = "中央ヨーロッパ言語";
  else if( #charset == 14 )$charset = "バルト語";
  else if( #charset == 15 )$charset = "ギリシャ語";
  else if( #charset == 16 )$charset = "キリル言語";
  else if( #charset == 17 )$charset = "シンボル";
  else if( #charset == 18 )$charset = "トルコ語";
  else if( #charset == 19 )$charset = "ヘブライ語";
  else if( #charset == 20 )$charset = "アラビア語";
  else if( #charset == 21 )$charset = "タイ語";
  else if( #charset == 22 )$charset = "ベトナム語";
  else if( #charset == 23 )$charset = "Macintosh";
  else if( #charset == 24 )$charset = "OEM/DOS";
  else if( #charset == 25 )$charset = "その他";
  else if( #charset == 26 )$charset = "バイナリモード";
  ##sub = hidemaruhandle( 0 );
  setactivehidemaru #grep;
  closehidemaru ##sub;
  golineend2;
  insert "\t" + $charset;
  movetolineno 1, lineno + 1;
}
replaceallfast "\([0-9]+\)\t", "\t", regular;
showwindow 1;
//---------------------------------------------------










[ ]
RE:11335 グレップ結果ファイルのタイトルNo.11336
マボカル さん 06/11/13 22:50
 
この現象は要約すれば、マクロ内でグレップを実行する際に、検索語に
\nが含まれている場合にタイトルバーの表示のされ方が変になることと
タイトルバーの検索語の

grep "XXXX"

の部分のXXXXの文字列に\でエスケープした文字が入っている場合、
\nが文字化けするようです。いろいろ調べた結果、これは正確には
文字化けではないですね。テストで以下のような文字列でグレップ
したところ、

grep "(\n|\t|\(|\))"

グレップ結果のタイトルバーは

grep "(■|○|(|))"

みたいな感じになりますが、"\(" と "\)" の部分が、それぞれ
"(" と ")" に表示されているということは、グレップ結果のタイトル
バーでの表記は、マクロ文で記述された文字列をそのまま表示している
のではなくて、正規表現の文法(?)によって解釈された文字列が
表示されているということになるかと思います。

日本語版XP+日本語版秀丸エディタでもこのような現象が起きるで
しょうか?

[ ]
RE:11336 グレップ結果ファイルのタイトルNo.11339
秀丸担当 さん 06/11/14 12:13
 

>grep "(\n|\t|\(|\))"
>
>グレップ結果のタイトルバーは
>
>grep "(■|○|(|))"

日本語XPにおいては、\nの部分が見えないような感じになりました。
マクロでは、マクロの文字列としてのエスケープと、正規表現のエスケープを二
重に書く必要があります。

grep "\n", ... , regular;
ではなく、
grep "\\n", ... , regular;

としたほうがいいと思います。
Iranoanさんのマクロは、ただファイル一覧を取得するだけのものだと思うので、
正規表現が正しく動いているかどうかはあまろ関係無いようです。

[ ]
RE:11339 グレップ結果ファイルのタイトルNo.11340
マボカル さん 06/11/14 12:52
 
秀丸担当さん

ありがとうございます。

>日本語XPにおいては、\nの部分が見えないような感じになりました。
>マクロでは、マクロの文字列としてのエスケープと、正規表現のエスケープを二
>重に書く必要があります。

そういえばそうでしたね。

>grep "\n", ... , regular;
>ではなく、
>grep "\\n", ... , regular;
>
>としたほうがいいと思います。

どちらでも動くのですが、今回のようにタイトルバーに表示される
ようなものは、ご指摘のような表記のほうがいいですね。

>Iranoanさんのマクロは、ただファイル一覧を取得するだけのものだと思うので、
>正規表現が正しく動いているかどうかはあまろ関係無いようです。

ためしにVer6.05に戻してテストしてみたところ、同じ結果が出ました。
もともとこういう具合に表示されていたのですね。気づきません
でした。というわけでお騒がせしました。

[ ]