sakura-editor / sakura

SAKURA Editor (Japanese text editor for MS Windows)
https://sakura-editor.github.io/
Other
1.23k stars 162 forks source link

マクロ終了時に自動的に SetDrawSwitch()→ReDraw() を実行したい #292

Open yoshinrt opened 6 years ago

yoshinrt commented 6 years ago

提案内容

マクロ終了時に,SetDrawSwitch() が 0 → 1に戻されるときに,自動的に ReDraw() も実行したい.

背景

ヘルプの SetDrawSwitch() の項に次のような記述があります.

マクロ・プラグインの実行が完了すると、自動的に実行する直前の値に再設定されます。

自分はこれを,SetDrawSwitch( 0 ) しっぱなしでマクロ終了した場合でも,自動的に表示が再開・更新されると捉えました.が実際はそうならず,

SetDrawSwitch( 0 );
InsText( "hoge\n" );

のようなマクロだと,表示を更新する別の動作をしない限り hoge は表示されません.

https://github.com/sakura-editor/sakura/blob/27a45249539aa749c56051042cff3ba21b5a6e93/sakura_core/macro/CMacroManagerBase.cpp#L49-L66

で SetDrawSwitch() が元に戻されているのでヘルプの記述はウソではないのですが,結局 SetDrawSwitch() の後に ReDraw() が必要なので

SetDrawSwitch( 0 );
InsText( "hoge\n" );
SetDrawSwitch( 1 );
ReDraw();

と後ろ 2行が必須になり,ヘルプ中の「マクロ・プラグインの実行が完了すると、自動的に実行する直前の値に再設定されます。」が事実上意味を成していないと思います. (ソースを直さない場合でも,少なくともヘルプの記述は見直したほうが良い気がしました)

berryzplus commented 6 years ago

ソースを直すのが良さげだと思っています。

ちゃんと調べてないですが ReDraw() には副作用があるはずです。 (いくつかの状態変数を更新し、描画完了待ちの待機が入ったりする)

現状のフラグ戻し処理に「再描画」が入ってないのは、 副作用を恐れてのものだと思いますので、 そのあたりを調査して「大丈夫、たぶん問題ない」と言えることがマージ条件かな、と思ってます。