マクロの自動起動の移動後タイマーについNo.10130
western さん 23/04/16 22:00
 
9.22β11 を使用していますが

編集後タイマー と 移動後タイマー の両方をセットしている時に


移動後タイマーを 0ms にしている場合 (編集後タイマー も 0ms)

・移動後タイマー ⇒ 編集後タイマー の順で呼ばれるのは仕様か?

・単純な1文字だけをバックスペースした編集後において
 ・移動後タイマーのマクロ内で、カーソル座標は移動後で、テキストは *編集前*
の状態であるのは仕様か?
 ・移動後タイマーが実行される前と後で2回 updatecount が増加しているのは仕
様か?
・範囲選択から編集の場合は、移動後タイマーのマクロ内は、テキストは *編集後*
となっている
 ・範囲選択している時は updatecount の増加は実行前のみ


移動後タイマーを 0ms *以外* にセットした場合 (編集後タイマー は任意)

・編集時(IMEオフでの文字の追加や削除、文字の貼り付け)に
 ・編集後タイマー は実行されるが
 ・移動後タイマー が実行されない のは想定外のトラブルか?

・編集を伴わないカーソル移動や範囲選択操作、IME入力であれば移動後タイマー
は実行される

[ ]
RE:10130 マクロの自動起動の移動後タイマNo.10133
秀丸担当 さん 23/04/17 17:40
 
それぞれ仕様というか、そういう動作ということでお願いします。
updatecountは一回の操作でも数カウント上がったりします。
編集後タイマーが実行されると、移動後タイマー0ms以外のものは動作させないよう
に意図的にしてありました。ヘルプに追記しておきます。
仕様といっても今の動作を厳密に保持し続けるということではなくて、もしかしたら
微妙な呼ばれ方など、不都合があったら変わることもあるかもしれないです。
既にされているかもしれないですが、updatecountやカーソル位置、呼ばれ方はgetev
entparamで取得できたりして、それらで判断します。
もしgeteventparamで不足があったら追加するかもしれません。

別件でも書きましたが、マクロ終了とともにコマンド値を指定できるようにするか、
キー割り当てを一時的にオーバーライド(?)するような方法などできたら、比較的安
全かつ使いやすいようなものになる気がします。

例えば
endmacro_postcommand 14;
でカーソル上とか。
コマンド値の一覧はヘルプにはないですが、現状でツールバーデザインのダイアログ
から、定義ファイルのサンプル1を出すことで一覧を知る方法があります。

あるいは
#idCallback=registercallback("xx.mac");//あるいはgetFunctionId
#idHook=keyhook( #keycode, #idCallback);
でモード配下にして、
clearkeyhook #idHook;
でモード解除とか。
(何も手を付けていないですが)

[ ]
RE:10133 マクロの自動起動の移動後タイマNo.10134
western さん 23/04/17 19:16
 
調査ありがとうございました

Windows OS にも言えますが挙動を変更することの副作用
の懸念から、そういう動作 という解釈に問題はありません
※最近のMSはそれをガンガン壊してきますが(笑)
 仕様や意図した実装という認識ではなく、そう思うようにします


今回は、いくつかのステップの流れ作業となる各処理のフックポイントを
どこに置けば、漏れなく確実に行えるか?、を試行錯誤してみたところ
思いのほか意図した通りに呼んでくれないパターンが出てきてしまった
ことでの確認となりました


今回は、編集が反映された状態が保証/想定外のカーソル移動が行われていない
ことが保証されている状態で、カーソル移動が発生した後に、確実に指定のマクロを
実行させるトリガ(ハンドラ)の仕掛け方を探してみたが、ままらなかったというお話
でした


レンダ枠との通信は特にタイミング読めない流れになるので Promise/Resolve ロジ
ック欲しくなります

[ ]
RE:10133 マクロの自動起動の移動後タイマNo.10135
western さん 23/04/17 21:36
 
コマンド値と挙動を確認してみましたが

■ ESC キー

シチュエーションで実行される機能が変化してくれる ESC そのもの
のコマンド値 は用意されていない?

■ TAB キー

コマンド値としては

if (selecting) { // 標準の動作では改行含む選択か否かですが
 endmacro_postcommand 116; // 116:インデント

 // indent; // selecting してれば改行含まずとも字下げされる
} else {
 endmacro_postcommand 80; // タブ

 // tab;
 // このマクロ命令(コマンド値)は改行含む範囲選択状態で Tab [\x09] 挿入とイン
デント処理
 // で機能が分岐してるそのまま tab キーそのものなってるので selecting の分岐
いらないですね
 // 同じように ESC を代替してくれるコマンド値が用意されれば解決するのですが
}

■ PageDown

[動作環境]>[表示/操作]>[PageUp/PageDownでスクロールする量]
の[1ページ](25:次ページ)と[1/2ページ](197:半次ページ)に相当するコマンド値
はありましたが、[n行残し]な動作はコマンド値を追加するか、マクロで条件分岐い
りそうです

なめらかスクロールはしてくれるので、その点だけ解決ですが


横取りするキーに応じて相当する標準の動作ロジック記述が増えていくのが悩ましい

[ ]
RE:10135 マクロの自動起動の移動後タイマNo.10136
秀丸担当 さん 23/04/18 12:32
 
Escキー相当のコマンドは追加するつもりでしたが、PageDown/PageUp相当のコマンド
もあったほうがよさそうです。
これらも追加しようと思います。

[ ]