grepdialog2についてNo.08153
jechabon さん 14/01/17 15:14
 
jechabonです。

Ver8.32β2→8.33にバージョンアップしたら、grepdialog2マクロの
挙動が変わってしまったので報告します。

grepdialog2 searchbuffer, grepfilebuffer, "", searchoption;

grepの実行で、検索するファイルが (現在の内容) だった場合、
上記のマクロは今までは問題なく実行できましたが、Ver8.33だと
下記内容のエラーダイアログが表示されて実行できなくなって
しまいました。

grepするファイルの先頭文字に"\x01"が指定されています。
エラー箇所の内容(変換した内容):
 grepdialog2 searchbuffer, grepfilebuffer, "", searchoption;

[ ]
RE:08153 grepdialog2についてNo.08154
秀丸担当 さん 14/01/17 16:29
 

バグ情報ありがとうございます。
V8.32β4から確かにそうなってしまっていました。
grep文については理由があって、grep文にgrepfilebufferをそのまま渡してしま
うと、内部的に先頭の"\x01"に続く文字列が一時的なファイルとして扱われて削
除されてしまうというまずい問題があって、(現在の内容)でgrepした直後の
grepfilebufferは渡せないように修正がありました。

ただそれはgrep文についての話で、grepdialog2文についてはそのまま渡せるよ
うにするべきでした。
まずはV8.40の次のβ版で修正させていただきます。
V8.34を出すかどうかはいまのところ未定ですが、もし出す場合はそちらでも修
正するようにします。

現状で回避するとしたら、以下のようにして回避できました。

if(leftstr(grepfilebuffer,1)=="\x01"){
  grepdialog2 searchbuffer, "(現在の内容)", "", searchoption;
}else{
  grepdialog2 searchbuffer, grepfilebuffer, "", searchoption;
}

grepダイアログボックスに「(現在の内容)」というファイル名として渡すとそれ
が特別な文字列として解釈されて、それで回避できました。
つまり「(現在の内容)」という名前のファイル名そのものを1つだけ指定するこ
とができなくて、それをやろうとすると現在の内容として解釈されるのですが、
それはそれで以前からのできないことでした。
このファイル名については現状では仕方ないことになってしまっています。

[ ]
RE:08154 grepdialog2についてNo.08155
jechabon さん 14/01/17 17:00
 
> 現状で回避するとしたら、以下のようにして回避できました。
>
> if(leftstr(grepfilebuffer,1)=="\x01"){
>   grepdialog2 searchbuffer, "(現在の内容)", "", searchoption; }else{
>   grepdialog2 searchbuffer, grepfilebuffer, "", searchoption; }

教えて頂いた方法でマクロを修正して回避できました。
ありがとうございました。

[ ]