midstr(〜,N,-1)とpoppasteでの挙動No.03872
たけとり さん 09/09/15 20:09
 
開発お疲れ様です。

標記の関数・文を使ったマクロを実行した際、ちょっと挙動が不審になることを確認
しましたので、ご報告します。
# 秀丸8beta16、Windows XP Pro SP2, IE8

debuginfo 1;
message midstr($a, #i, -1);  // $aの文字長は#iに比べて大きい。
poppaste;  // poppaste2でも。
endmacro;

というマクロによって確認したのは、以下の事象です。
これらが個別に起きているのか、関連しているのか、あるいは時系列はどうなのかと
か調べ切れていませんが、少なくとも以下は確認できました。

・midstrの第3引数が正の数の時に比べて、messageが出てくるのか明らかに遅い(場
合がある)。
・貼り付けは正常に行われる。履歴の1つめもなくなって(2番目だったものが1番目
になって)いる。
・1回目のコピーが反映されない。(履歴に登録されない)
・2回目のは反映される。
・反映されないうちにマクロを再度実行したら、反映されるまでの回数がマクロの実
行回数に比例する。
 3回連続して実行したら4回目のコピーで初めて反映される...とかいう感じです。
・もしpoppaste系 文がなかったら、クリップボードについては問題が起きてない
(ように見える)。
 ひょっとすると、別の関数などを実行するとその挙動がおかしくなるのかもしれま
せんが、試していません。

再現できますでしょうか。

それと、動作確認ですが、
midstr($a, #i, -1) == midstr($a, #i, 0)
が成り立つ(midstrの第3引数でマイナスは0と同義)でしょうか。

よろしくお願いします。

[ ]
RE:03872 midstr(〜,N,-1)とpoppasteでのNo.03874
たけとり さん 09/09/15 22:00
 
追記です。

>・1回目のコピーが反映されない。(履歴に登録されない)

これは、先のマクロ実行直後に、「コピー」した場合に、という意味です。

>・もしpoppaste系 文がなかったら、クリップボードについては問題が起きてない
>(ように見える)。

クリップボード系の他の関数でも、なんか怪しいような気がします。

>それと、動作確認ですが、
>midstr($a, #i, -1) == midstr($a, #i, 0)
>が成り立つ(midstrの第3引数でマイナスは0と同義)でしょうか。

もし違うようならor意図してそうなっているわけではないのなら、-1を指定したとき
は「残り全て」(第3引数を省略したときと同様)という動作になってくれればうれ
しいです。

よろしくお願いします。

[ ]
RE:03874 midstr(〜,N,-1)とpoppasteでのNo.03881
秀丸担当 さん 09/09/16 10:14
 

>・midstrの第3引数が正の数の時に比べて、messageが出てくるのか明らかに遅い(場
>合がある)。

試してみましたが、遅くなることは再現させることができませんでした。
$aや#iの内容が関係していそうな場合、もし差し支えなければ内容を教えていた
だけるとこちらでも確認できるかもしれません。
もしメッセージボックスの内容が空でないような場合、表示されている内容も教
えていただけると何かわかるかもしれないです。

>・1回目のコピーが反映されない。(履歴に登録されない)

poppasteだけで再現させることができました。
β14でpoppaste中はクリップボード履歴が動作しないようにという対策で余計な
ことをしてしまったためそうなってしまっていました。
報告ありがとうございます。
β版出してばかりですが、早いうちにβ17で修正させていただきます。

>それと、動作確認ですが、
>midstr($a, #i, -1) == midstr($a, #i, 0)
>が成り立つ(midstrの第3引数でマイナスは0と同義)でしょうか。

マイナスの場合は、0と同じです。
-1にすると省略と同じようにできたらということですが、以前からそのような動
作になっていたので、また下手にいじると別の問題を生みかねないので慎重に考
えたいと思います。

[ ]
RE:03881 midstr(〜,N,-1)とpoppasteでのNo.03903
たけとり さん 09/09/17 15:31
 
>$aや#iの内容が関係していそうな場合、もし差し支えなければ内容を教えていた
>だけるとこちらでも確認できるかもしれません。

 試したときのコードは、

debuginfo 1;
message midstr("kakikukeko", 3, -1);
poppaste;
endmacro;

でした(第3引数をいろいろと変えていました)。
 メッセージボックスの中身は、空白でした。
 また、遅い(ダイアログが表示されるまでに1〜2秒かかる)時もあれば、そうでな
い(瞬時に表示される)ときもありました。
# 同じマクロを何度か実行していて遅くなるときもあった...という感じです。
 beta17で同じように試しているのですが、今のところ特に発生は確認していません。

 また、「midstrにマイナスの引数を渡しさらにpoppasteを連続して実行した」のが
原因と思っていた(poppasteだけでそうなるとは思ってなかった)ので、ひょっとす
るとなにか誤解していたかもしれません。
 もうちょっと確認してから、またご報告します。
 お手数を煩わせてしまってすみません。

>β版出してばかりですが、早いうちにβ17で修正させていただきます。

 17で修正を確認しました。
 素早い対応、ありがとうございます。

>-1にすると省略と同じようにできたらということですが、以前からそのような動
>作になっていたので、また下手にいじると別の問題を生みかねないので

 了解しました。
 上述のように、midstrにマイナスの引数を渡した(マイナスを想定されていなかっ
た)のも端緒と考えていました。
 以前から意図しての動作なら、取り下げます。

[ ]