マクロ内でカーソル移動した後の自動起動No.10129
western さん 23/04/16 17:47
 
キー割り当てしたマクロ内で down; right; など
のカーソル移動を行った場合 (そのマクロ完了後) に

自動起動マクロ > カーソル移動後タイマー

が実行されないのは自動起動の仕様でしょうか?

先の #10126 .. #10128 と絡む内容なのかもしれませんが
endmacro "", 0x1B; への引数などで

(標準の動作) あるいは (指定のキーコード) が
押されたと仮定した、本来の動作(自動起動マクロ含む)に
フローが続くようなロジックは可能でしょうか?

よろしくお願いします

[ ]
RE:10129 マクロ内でカーソル移動した後のNo.10131
秀丸担当 さん 23/04/17 10:52
 
キー割り当てしたマクロ内でカーソル移動した後、自動起動マクロが自動で起動され
ないのは仕様になります。

>(標準の動作) あるいは (指定のキーコード) が
>押されたと仮定した、本来の動作(自動起動マクロ含む)に
>フローが続くようなロジックは可能でしょうか?

そういうことができたらいいですが、難しいと思います。
できるようにしたとしても、どこかに不都合や非互換ができたりする可能性がありそ
うです。
キーではなくコマンド値の指定してすぐマクロ終了だったら比較的安全かもしれない
です。
それか、一時的にキー割り当てをオーバーライドして、すぐ解除、あるいは有効期間
はレンダリング枠やjsのように同一ファイルを開いているときのみ、とかだったらあ
りかもしれないです。

[ ]
RE:10131 マクロ内でカーソル移動した後のNo.10132
western さん 23/04/17 11:53
 
レンダリング枠を使った補完処理のような時に、選択の操作などを横取りしたいわけ
ですが、
以下のようなマクロを [Down] [PageDown] [ESC] [Enter] にキー割り当てたとして

なめらか、各種解除(ESC) など挙動がまるで変ってしまってしまうのを防止したい、
カーソル移動後タイマー、編集後タイマー、のシチュエーション側に設定したロジッ
クに自然に流したい、
というフローを何とか解決したいのです

```
#notHintMode = (getstaticvariable("hintmode", 0) == ""); // 特殊なモード判定
if (#notHintMode) { // 特殊なモードではない
 if (iskeydown(0x28)) { // <Down>
  down; // 標準動作の down; を実行して終わる (移動後タイマーに、移動時のロジ
ックを委託したい)
  endmacro;
 }
 else if (iskeydown(0x21)) { // <33:PageUp>
  prevpage; // なめらかスクロールさせたい (動作環境に設定された「1ページ/
半ページ/n行残し」にも対応して)
  endmacro;
 }
 else if (iskeydown(0x1B)) { // <27:ESC>
  escape;
  clearcolormarkerallfound;
  deletecolormarkerall findmarker;
  deletecolormarkerall diff;
  // ... ESC の代替処理を可能な限り列挙 (状況で分岐も必要?)
  endmacro;
 }
 else if (iskeydown(0x0D)) { // <13:Enter>
  insertreturn; // 改行する (編集後タイマーに、編集時のロジックを委託したい)
  endmacro;
 }
 endmacro; // 設定されてないキーの処理は出来ない
}

// 以下 hintmode 有効時の時の処理が続く
...
...

```

マクロにキー割り当てした処理で、標準の動作に流したいマクロは上記のような

分岐に必要な状態取得の getstaticvariable updatecount iskeydown を使って
そのまま if 分岐して endmacro; するだけのパターンとなるので、
それくらい制限ガチガチで可能性があるなら、それでも充分です。

[ ]