English help on website



execmacro文(Ver9.24対応版)
目次− execmacro文
execmacro文は、マクロの中から、さらに別のマクロを実行します。
execmacro "sub.mac";
パラメータ1(文字列型)
マクロのファイル名を指定します。

パラメータ2以降(文字列型、省略可能)
文字列の場合、getargで取得できる値を指定します。
パラメータ3以降も続けて文字列を指定できます。

パラメータ2(文字列型の配列の変数名、省略可能)
文字列型の配列の変数名の場合、getargで取得できるパラメータを配列で指定します。

パラメータ3(数値型)
パラメータ2で配列を指定している場合、要素数を指定します。

結果コード
resultは使用しません。

JavaScript
JavaScriptで使うことはできません。


起動された側のマクロが終了すると現在のマクロの実行を続行します。
execmacroされたマクロからさらにexecmacroを実行する場合、execmacroのネストがあまり深くならないように注意してください。

第2パラメータ以降を指定して、マクロに文字列を渡すこともできます。(V8.00以降)
渡したパラメータは、呼ばれたマクロ側でgetarg関数で取得できます。
指定できるパラメータは31個までです。
execmacro "test.mac", "param1", "param2";
execmacroで呼んだマクロの中でさらにexecmacroする場合、getargは元の状態を覚えていません。
openfileで秀丸エディタが新しく起動する場合は、hidemaru.exeを起動したのと同じ扱いで、getargは元の状態を覚えていません。
execmacroを呼ぶ前に、一度別の変数に退避しておく必要があります。
/aやexecmacroで渡す引数の上限は31個です。

execmacroで呼ばれたマクロは、endmacroにパラメータを指定して、戻り値(文字列)を設定することができます。
戻り値はexecmacroから復帰した後getresultexで取得できます。(V8.00以降)

第2パラメータに文字列の配列変数、第3パラメータに配列の個数を指定して渡すこともできます。(V8.66以降)
$a[0] = "param1";
$a[1] = "param2";
$a[2] = "param3";
#c=3;
execmacro "test.mac", $a, #c;

相対パス
フルパスではないファイル名だけの記述の場合は、マクロファイル用のフォルダにあるファイルを使います。
相対パスで書かれている場合は、現在のフォルダからの相対パスになります。
これは互換性のためにそうなっていて、例えばマクロファイルからの相対パスにする場合は、currentmacrodirectoryを、マクロファイル用のフォルダからの相対パスにする場合は、macrodirをを使ってください。
execmacro currentmacrodirectory + @"\subfolder\testsub.mac";
execmacro macrodir + @"\subfolder\testsub.mac";
影響の及ぶ範囲(execmacro)
execmacroされる前と後で引き継がれる情報と、引き継がれない情報があります。

以下の状態は、execmacroしたマクロ内では元のマクロの状態を引き継がずリセットされます。
execmacro内で変化したものは元のマクロで変化前の状態に戻ります。

変数(#aや$bといった値)
setcompatiblemode(0x20000は例外)

以下の状態は、execmacroしたマクロ内でも元のマクロの状態を引き継ぎます。
execmacro内で状態が変化して、元のマクロに戻っても変更されたままです。
disabledraw, enabledraw
disablebreak, enablebreak
disableinvert, enableinvert
disableerrormsg, enableerrormsg
disablehistory
seterrormode
setbackgroundmode
setfloatmode
debuginfoの出力モード
beginclipboardread, getclipboard
JavaScriptの保持されたオブジェクト(ファイルごと)

参考:
 影響の及ぶ範囲(execmacro)
 影響の及ぶ範囲(アクティブ切り替え)
 影響の及ぶ範囲(JavaScript)

キャッシュ
マクロの拡張子を".mac.cache"にすると、キャッシュファイルを自動生成し利用します。(V8.92β12以降)
例えば、execmacro "test.mac.cache";の場合、実行する対象のファイルは"test.mac"です。コンパイル済みのキャッシュファイル"test.mac.cache"が無いか、"test.mac"が更新されている場合は、"test.mac.cache"を生成します。
"test.mac.cache"が利用可能な場合は、利用します。
キャッシュファイルは、.mac.cacheファイル内に元の.macの更新日時やサイズなどが記憶されていて、.mac.cacheが確かに.macを元にしたものであると判断した場合に使います。
失敗した場合はエラーにならず、普通に.macのほうを使います。
キャッシュ作成の成否や元々の有無に関わらず、一致しているものでないと判断されれば単純に使わないだけになります。

実行対象マクロの中身が大きい場合は効果がありますが、小さい場合は"test.mac"と"test.mac.cache"の2つのファイルを比べるため逆に遅くなる場合があります。
対応していないバージョンでは"test.mac.cache"をマクロファイルそのものとして読み込もうとしてエラーになるので注意が必要です。
setcompatiblemode 0x04000000;でキャッシュファイルは使わずメモリ上のキャッシュを使う方法もあります。


 参照:getarg関数 argcountキーワード
 参照:getresultex関数
 参照:endmacro文