マクロキーワードreplayの値が不安定?No.05449
ヒラメ さん 19/08/09 11:16
 
編集後タイマー、遅延0msで以下の1行マクロを登録して様子を見ています。
    message str(replay);

何か編集する度にメッセージが表示されることになりますが、内容が「0」だったり
「1」だったりします。

・本文の中でEnter押下の場合は期待通りに「0」か「1」が表示されるように見える。
・ただし、ヘッダーの中でEnterを押下し本文にカーソルが移動した直後のEnterでは
「1」となる。
・Enter以外の入力では常に「1」。

カーソルを移動すれば「replay」は「0」になると理解しています。何か複雑な仕様
になっているのでしょうか。。。

秀丸メール Version 6.92 (32bit)
Windows 7 Professional, Version 6.1, Build 7601 (32bit)

[ ]
RE:05449 マクロキーワードreplayの値が不No.05452
秀まるお2 さん 19/08/09 16:07
 
 調べてみたんですが、replayの値が0になるか1になるかは、直前に実行したコマン
ドと今実行してるコマンドの値が同じかどうかで決まります。で、そのコマンドの値
ですが、そもそも的に、自動起動されマクロについてはコマンドの値が存在せず、そ
れは「現在実行中のコマンドの値」にも「直前のコマンドの値」にも影響しないよう
でした。

 なので、自動起動マクロからreplayを見ても、マクロが連続実行してるのかどうか
を判断することは、すみませんが不可になります。

 replayの値は、自動起動マクロの中では全然当てにならないと思っていただくしか
無さそうな気がします。

 それと、もう1点の、1回の編集操作でマクロが2回起動するのは、調べてみたら
秀丸エディタでも同じでした。今ちょっと秀丸エディタの担当に仕様かどうか確認し
てますが、仕様でないにしても、直すためにはわずかでもタイマーで遅延させて実行
せざるを得ないと思います。

 とりあえず、50msを指定していただく作戦ではダメでしょうか。

 それか、「1ms」って指定を追加して、それを使ってもらうか。

[ ]
RE:05452 マクロキーワードreplayの値が不No.05453
ヒラメ さん 19/08/09 16:58
 
replayの仕様について了解しました。マクロの処理でうまく回避できるか考えてみま
す。

また複数回実行についてもマクロ側で対処してみようと思います。

[ ]
RE:05453 マクロキーワードreplayの値が不No.05454
ヒラメ さん 19/08/09 17:01
 
連投すみません。

遅延を設定した場合、Enter押下による編集なのかを判別したいため、geteventparam
(1)の値がうまく取れるのかが気になります。。。

[ ]
RE:05453 マクロキーワードreplayの値が不No.05455
秀まるお2 さん 19/08/09 17:10
 
 とりあえず、Enterキー1回でマクロが1回か2回か不安定に実行されるは、秀丸
エディタ側のバグということで、修正させていただきます。

 ただし、範囲選択を削除した場合とか、マクロが複数回実行されることはありえて
しまうようです。基本的に、1回の操作でアンドゥバッファに2回分の記録が入るパ
ターンの場合は複数回実行されてしまうのは仕様とのことです。

 あと、今日か明日中にまたβ版アップロードしようと思うので、そのバージョンに、
遅延時間「1ms」を入れてみます。

[ ]
RE:05454 マクロキーワードreplayの値が不No.05456
秀まるお2 さん 19/08/10 09:01
 
> 遅延を設定した場合、Enter押下による編集なのかを判別したいため、geteventpar
>am(1)の値がうまく取れるのかが気になります。。。

 一応、1msの設定を追加してみましたが、1ms以上を指定すると、geteventparam(1)
の値はうまく取れなくなります。

 遅延無しにするしか無さそうです。

 先ほどアップロードしたV6.93β3でテストしたら、範囲選択してからEnterキーを
押した場合は、範囲選択されたタイミングでマクロが1回実行され、その後改行コー
ドが入力されてもう一度マクロが実行されるようです。geteventparam(1)の値はうま
く取れてると思います。

[ ]
RE:05452 マクロキーワードreplayの値が不No.05459
ヒラメ さん 19/08/13 10:55
 
replayについて、ヘッダー内でEnterを押下すると、編集後タイマーのマクロは実行
されないけども直前に実行されたコマンド値としてはEnterが記録され、その直後に
再度Enterを押下するとコマンド値が一致するためにreplayが1になるというストー
リーですね。

今回の私のマクロの場合、カーソル位置が1行1桁であるかどうかで条件分岐できそう
です。それで逃げたいと思います。

[ ]