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

各メソッドの細かな「型情報」などは、Eclipse等で使用する際に自動的に表示されますので、
ここでは割愛します。

Javaから秀丸マクロへアクセスする関数

Java機能、文法や、巨大なライブラリ、様々なサードパーティや個人が作った膨大なライブラリを活かしつつも、
秀丸マクロの機能や各種値もほぼ全て使えるところが、
hmJavaVMの優れている所以です。

  • 「秀丸マクロ」を「Java内から」実行
  • 「秀丸マクロの変数」⇔「Javaの変数」を相互にやり取り。

の2つの手段で秀丸マクロを取り扱うことが出来ます。

  • Javaから秀丸マクロを実行

    • Hm.Macro.doEval( 文字列 )

      引数の文字列を、「秀丸マクロ」として実行する。
      Javaには「ヒアドキュメント」がないため、
      エスケープシーケンス処理等を自前でマニュアルでする必要があるのが苦しいところです。

    import hidemaru.Hm;
    
    public class MyClass2 {
    
        // この変数はマクロが終了しても、残る
        static int staticCounter = 0;
    
        public static long begin() {
            // Java側から秀丸マクロの文を実行する。
            Hm.Macro.doEval(
                "menu \"細い線\", \"太い線\", \"*マーク\";"
            );
    
            // 秀丸マクロのmenu文の説明を参照。
            // 秀丸マクロのmenu文は選択結果が「result」というシンボル変数に入るため、この値をJava側へと取得
            int nMenuResult = (int)Hm.Macro.getVar("result");
    
            Hm.debugInfo(nMenuResult);
    
            return 1;
        }
    }

    PICTURE

  • Javaから秀丸マクロの変数の「読み」「書き」

    • Hm.Macro.getVar( 変数名 )

      対象の「秀丸マクロ」としてのシンボル名に対応する値を取得する。
      「文字列型」か、もしくは、数値型の場合「int型」が返ってきます。
      秀丸エディタ64bit版では、数値型の場合は、「long型」が返ってきます。

    • hm.Macro.setVar( 変数名, オブジェクト )

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

    import hidemaru.Hm;
    
    public class MyClass2 {
    
        // この変数はマクロが終了しても、残る
        static int staticCounter = 0;
    
        public static long begin() {
            // 秀丸マクロの「#aaa」という変数に「3」という数値を設定
            Hm.Macro.setVar("#aaa",  3);
    
            // 秀丸マクロの「$bbb」という変数に「あいうえお」という文字列を設定
            Hm.Macro.setVar("$bbb", "あいうえお");
    
            // 秀丸マクロとして一覧の文字列を実行
            /*
             * message($bbb);
             * $ccc = $bbb + str(#aaa);
             * message($ccc);
             * 
             * 秀丸の「アウトプット枠」へと文字列を書き込む
             * #OP = loaddll("HmOutputPane.dll");
             * #ret = dllfunc(#OP, "Output", hidemaruhandle(0), $ccc);
             * freedll(#OP)
             *
             * という文字列を実行する
             */
            Hm.Macro.doEval(
                String.join("\n",
                "message($bbb);",
                "$ccc = $bbb + str(#aaa);",
                "message($ccc);",
                "#OP = loaddll(\"HmOutputPane.dll\");",
                "#ret = dllfunc(#OP, \"Output\", hidemaruhandle(0), $ccc);",
                "freedll(#OP);"
                )
            );
    
            // 上で秀丸マクロ変数として値を代入したものを取得
            Hm.debugInfo( Hm.Macro.getVar("$bbb") );
    
            // 秀丸がもともと提供している秀丸にて開いているファイル名を取得
            Hm.debugInfo( Hm.Macro.getVar("filename2") );
    
            // 秀丸が元々提供しているマクロシンボルとなるdate(日付曜日)
            String hmdate = (String)Hm.Macro.getVar("date");
            Hm.debugInfo( hmdate );
    
            // 秀丸が元々提供しているマクロシンボルとなるcodepage(編集中テキストの文字コード番号)
            int hmcp = (int)Hm.Macro.getVar("codepage");
            Hm.debugInfo( hmcp );
    
            return 1;
        }
    }
            

    PICTURE PICTURE