hmLNが持つ特別な関数一覧 その③

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から秀丸マクロの変数の読み書き

    • hm.Macro.Var["変数名"]

      対象の「秀丸マクロ」としてのシンボル名に対応する値を取得する。

    • hm.Macro.Var["変数名"] = 新たな値

      対象の「秀丸マクロ」としてのシンボル名に、新たな値を設定する。
      (読み取り専用の値には設定出来ません)

    #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層でやった方が記述が簡潔に済みます。