[ 新規に投稿する ]

自動実行マクロが実行されないことがある件No.09222
yamashita さん 20/05/23 00:29 [ コメントを投稿する ]
  お世話になっております、山下です。

自動実行マクロに関連して、期待と異なる動作がありました。
秀丸 の version は 8.91 です。

以下の要領で自動実行マクロを登録しています。
[マクロ] メニュー [マクロ登録]
 対象: [自動起動]
において、
  [ファイルを開いた直後]
  [新規作成直後]
  [アクティブ切り替え後]
の3つに、秀丸の表示位置を調整するマクロ(仮に auto.mac とします)
を登録しています。

あるマクロの中で、run コマンドを実行しています。
run コマンドを実行すると、「実行中」の秀丸が開くのですが、
この「実行中」の秀丸が開いた際に、auto.mac が実行されていない
のでは思います。
(run コマンドの実行が終わり、その後に activate された時には
auto.mac が実行されます。)

私としては、この事例においても実行してもらいたいのですが、
どうでしょうか。
ご検討頂ければと思います。


なお、他の run 系のコマンド、runsync, runsync2, runex については
調べていませんが、同様の問題が発生している可能性があると思います。

よろしくお願いします。
[ ]
RE:09222 自動実行マクロが実行されないことがある件No.09223
秀丸担当 さん 20/05/25 09:39 [ コメントを投稿する ]
 
まず、自動起動マクロは、run文に限ったことではないですが、任意の手動操作のマクロ実行の後は実行されないようになっています。
例えば、
newfile;
endmacro;
というマクロでは新規作成直後のマクロは実行されないです。
openfile @"c:\folder\test.txt";
endmacro:
というマクロではファイルを開いた直後のマクロは実行されないです。

これをやるとしたら、例えばマクロの最後にexecmacroをするしかないです。
newfile;
execmacro "新規作成直後のマクロ.mac";
endmacro;

マクロをいじらずに、設定するだけでいかなる場合も必ず実行するようにするということができたらいいですが、仕組み的に難しいところです。


次にrun文についてですが、これは基本的に非同期で実行されるようになっています。
非同期だとマクロ本体とは別でいつ終わるかわからないので、終わった後にexecmacroで制御することはできないことになります。
確実にするには、runex文を使って、同期するようにするといいです。

マクロの例:
runex @"cmd.exe /c dir"
   ,1 //同期
   ,0,""//標準入力
   ,4,""//標準出力 4=新規作成
   ;
execmacro "新規作成直後のマクロ.mac";
[ ]
RE:09223 自動実行マクロが実行されないことがある件No.09224
yamashita さん 20/05/25 21:01 [ コメントを投稿する ]
  > 自動起動マクロは、run文に限ったことではないですが、
> 任意の手動操作のマクロ実行の後は実行されないように

なるほど。
手元の事例の場合は「run で開く秀丸の位置を macro で調節したい」
なので、終了を待つのはちょっと物足りないです。

いずれにせよ、状況は分かりましたのでまた何かあれば出てきます。
ありがとうございました。
[ ]

[ 新規に投稿する ]