hmLNから秀丸マクロへアクセスする関数
hmLNの機能をフルに生かしつつ、秀丸マクロの機能や各種値もほぼ全て使えるところが、
hmLNが優れている所以です。
- 秀丸マクロをそのまま実行
- 「秀丸マクロの変数」⇔「hmLNの変数」を相互にやり取り。
の2つの手段で秀丸マクロを取り扱うことが出来ます。
-
hmLNから秀丸マクロを実行
秀丸エディタ 8.66以降では、Hidemaru_EvalMacroという関数が秀丸本体からエキスポートされたため、
マクロ実行中であれば、秀丸マクロ以外の場所からでもマクロを記述し、実行することが可能となりました。
-
hm.Macro.Eval( ヒアドキュメント文字列)
引数の文字列を、「秀丸マクロ」として実行する。
#MNG = loaddll( hidemarudir + @"\hmLN.dll" );
if ( !#MNG ) {
message("hmLN.dllが導入されていません");
endmacro;
}
#_ = dllfuncw(#MNG, "DoString", R"MNG(
py_x = 100
-- hmLN(Lua)の中で、hm.Macro.Eval関数を使って、秀丸のマクロを書くことが出来る
hm.Macro.Eval([[
#a = 3;
debuginfo 1;
showvars;
message("あいうえお");
showvars;
]])
)MNG"
);
freedll( #MNG );
-
hmLNから秀丸マクロの変数の読み書き
#MNG = loaddll( hidemarudir + @"\hmLN.dll" );
#_ = dllfuncw( #MNG, "DoString", R"MNG(
-- 秀丸マクロの「#aaa」という変数に3を設定。
hm.Macro.Var['#aaa'] = 3;
-- 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。
hm.Macro.Var['$bbb'] = "あいうえお。"
-- 秀丸マクロとして一連の文字列を実行
hm.Macro.Eval( [[
message($bbb);
$$message = $bbb + $bbb;
message($$message);
// アウトプット枠へ出力
#OP = loaddll("HmOutputPane.dll");
#ret = dllfunc(#OP, "Output",hidemaruhandle(0), $$message);
freedll(#OP);
]]
);
hm.debuginfo( hm.Macro.Var['$bbb'] );
hm.debuginfo( hm.Macro.Var['filename'] );
hmdate = hm.Macro.Var['date'];
hm.debuginfo( hmdate );
)MNG"
);
freedll( #MNG );
上記の例はさほど意味がある例題ではありませんが、 実践では「フォーム系」を使ったhmLN層で、
「フォームを閉じることなく、イベントハンドラに呼応する形で(フォームを閉じることなく)秀丸を制御したい場合」などに威力を発揮することでしょう。
又、ループを伴った値の伝達なども、秀丸マクロ層でやるよりも、hmLN層でやった方が記述が簡潔に済みます。