注意
このマクロの旧バージョン(Version.1.0.2 より前)を使用していた場合、 マクロを上書きしただけでは動作しません。 このバージョンより、マクロファイル名の受け渡しに、秀丸エディタ Ver.8より追加されている機能を使用している為、マクロ起動部分が 変更になっています。 旧バージョン writeinistr "hme_include.mac", "setting","filename",currentmacrofilename; execmacro "hme_include.mac"; endmacro; 現バージョン(Version.1.1.0以降) execmacro "hme_include.mac", currentmacrofilename ; endmacro; その為、マクロ起動部分の書き換えが必要になります。
マクロを作る人向けのマクロです。 このマクロは、名前の通り、C言語のプリプロセッサの様に、外部ファイルを参照する機能("#include")を提供します。
要は、別ファイルで作成・管理しているサブルーチンを、実行時にファイルから読み込み合成して実行する、 ちょっと強引なマクロです。
Version.1.1.0 より、秀丸エディタVer.8以降が必要です。Ver.7では実行できません。
このマクロを使用する場合、編集するマクロは以下の構成になります
┌──────────────────┐ │hme_include.macの起動部分 │ │ hme_include.macを実行 │ ┣━━━━━━━━━━━━━━━━━━┫ ┃実際のマクロ ┃ ┗━━━━━━━━━━━━━━━━━━┛
実際に実行するマクロは以下の構成になります。("hme_include.macの起動部"は削除します)
┌──────────────────┐ │ヘッダ(取り込むファイル名) │ ┣━━━━━━━━━━━━━━━━━━┫ ┃実際のマクロ ┃ ┣━━━━━━━━━━━━━━━━━━┫ │#includeで指定されたファイル1 │ │#includeで指定されたファイル2 │ └──────────────────┘
取り込みたいファイルを、"#include"を使用し、指定します。 そのまま指定すると、マクロ実行時にエラーになるので、コメントの状態で記入してください。 "include"は小文字で指定すること。 指定されたファイルは、"include"の位置ではなく、マクロの最後に追加されます。
例1)複数行コメントの場合
/* #include <ファイル名1> #include <ファイル名2> */
例2)通常のコメントの場合
//#include <ファイル名1> //#include <ファイル名2>
フルパスでない場合は、囲む文字に応じて、フォルダ名を自動的に補完します。 ファイル名を囲む文字が「<>」の場合は macrodir、 「""」の場合は、実行するマクロのあるフォルダを補完します。
合成するマクロ名を指定し、"hme_include.mac"を起動します。 具体的には、マクロの先頭部分に、以下の1行を追加します。
execmacro macrodir + "\\hme_include.mac",currentmacrofilename; endmacro; =============================
変更する必要があるのは、「macrodir + "\\hme_include.mac"」の部分です。 この部分を、"hme_include.mac"を配置した、フォルダにする必要があります。
呼び出されるマクロに引数を渡す場合には、以下のようにしてください。
execmacro macrodir + "\\hme_include.mac",currentmacrofilename, str(argcount), getarg(0), getarg(1), …, getarg(29); endmacro; =================================================================== ------------------------------------============ ここまでは固定 必要な引数の最大数まで設定 固定
引数の最大は31個ですが、このマクロで2個使用している為、最大は29個になります。
getarg関数を29個すべて追加する必要はありません。呼び出されるマクロで、必要な最大数までです。
引数が一個の場合
execmacro macrodir + "\\hme_include.mac",currentmacrofilename, str(argcount), getarg(0); endmacro;
引数が最大で3個の場合
execmacro macrodir + "\\hme_include.mac",currentmacrofilename, str(argcount), getarg(0), getarg(1), getarg(2); endmacro;
簡単なマクロの例です。3個のファイルを合成します。サブルーチンなので、変数の書き換えも可能です。
メインのマクロ(_include.mac)
/* #include <_test1.mac> */ // #include "_test2.mac" //実際は下の行を実行してマクロは終了。 execmacro macrodir + "\\hme_include.mac",currentmacrofilename; endmacro; //以降、このファイルでは実行しない。 $filename = filename; //_test.macにあるサブルーチン message $filename; call testinclude1 $filename; message $$return; //_test2.macにあるサブルーチン call testinclude2 $filename; message $$return; endmacro;
呼び出すマクロその1(_test1.mac)
testinclude1: $$a = $$1; $$a = $$a + "\ntestinclude1"; $filename = "_test1.macで変更"; return $$a;
呼び出すマクロその2(_test1.mac)
testinclude2: $$a = $$1; $$a = $$a + "\ntestinclude2"; return $$a;
実際に実行するマクロ(~_include.mac)
/* hme_include.mac:3 フルパス\_include.mac フルパス\_test1.mac フルパス\_test2.mac */ /* #include <_test1.mac> */ // #include "_test2.mac" //実際は下の行を実行してマクロは終了。 //以降、このファイルでは実行しない。 $filename = filename; //_test.macにあるサブルーチン message $filename; call testinclude1 $filename; message $$return; //_test2.macにあるサブルーチン call testinclude2 $filename; message $$return; endmacro; endmacro; // include --> _test1.mac testinclude1: $$a = $$1; $$a = $$a + "\ntestinclude1"; $filename = "_test1.macで変更"; return $$a; // include --> _test2.mac testinclude2: $$a = $$1; $$a = $$a + "\ntestinclude2"; return $$a;
合成したファイルは、実行したマクロと同じ場所に、ファイル名の先頭に"~"が追加された名前で作成されます。 同名のファイルがある場合は、無条件で上書きされます。