検索のおかしな挙動No.08138
K'zawa さん 13/12/15 20:10
 
こんにちは、K'zawaです。

下記の再現マクロを実行して、何度か「はい」を押しますと、
resultの値が、1, 0, 1…と交互に現れます。

newfile;
insertfix "abc\n";
setsearch "(?<=abc).*", 0x20002152;
while (1) {
    finddown2;
    question "result = " + str(result) + "\n続行しますか?";
    if (result == false) break;
}

[ ]
RE:08138 検索のおかしな挙動No.08139
秀丸担当 さん 13/12/16 09:58
 

バグ情報ありがとうございます。
マクロの通りにして確認することができました。

調べてみたところ、searchdown2相当のカーソル位置を含めた検索をするとき、
カーソル位置にヒットした場合は移動量がゼロになるので、連続した
searchdown2では移動するような処理が、もともとありました。

例えば、

  searchdown2 ".",regular;

を連続して実行する場合、カーソル位置に留まることなく次の文字へ進んでいき、
ファイルの最後にある1文字がヒットした後、最後にはresultはfalseになりま
す。
ただ最後にfalseになった後は連続した検索状態ではなくなり、次にもう一度
searchdown2するとヒットしてしまい、trueとfalseが交互に出ることになってい
ました。

これはV8.33より前からも起きていたことですが、今回V8.33でHmJre.dllがV4.00
となったことで、前方一致もカーソル位置前を判断するようになり、この場合も
同じことが起きるようになっていました。

searchdown2して最後でヒットしなかった場合でも連続した検索状態であること
は維持するように検討してみます。
互換性が心配なこともあり、慎重に考えたいと思います。

[ ]