hmJavaVMが持つ特別な関数一覧

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

  • デバッグ用途関数

    デバッグ用途として以下の関数を利用し、「秀丸デバッグモニター」などに値や文字列を表示することが出来ます。

    • Hm.debugInfo( オブジェクト, ... )

      対象のオブジェクトを文字列化し、システムデバッガへと文字列を転送します。
      「秀丸デバッグモニター」などに値や文字列を確認することが可能です。

  • 秀丸本体のバージョン

    秀丸本体のバージョンを数値として取得します。

    • Hm.getVersion()

      秀丸 8.7.3.β3 の場合は、873.03、
      秀丸 8.7.3.β10 の場合は、873.10、
      秀丸 8.7.3 正式版 の場合は、873.99、
      といったような値が返ってきます。

  • 秀丸ハンドル

    秀丸ハンドルを取得します。

    • Hm.getWindowHandle()

      マクロ上の hidemaruhandle(0) の値と同じです。

  • 編集中エディタに対する関数

    現在秀丸エディタで開いているテキストに対して、以下の関数を利用することが出来ます。

    • ファイル名

      • Hm.Edit.getFile()

        現在編集中の秀丸エディタのファイル名を基に 「new java.io.File()」オブジェクトを得る

        import java.io.File;
        import hidemaru.*;
        
        public class MyClass2 {
        
            public static void Test(String args[]) {
                File f = Hm.Edit.getFile();
                if (f != null) {
                    Hm.debugInfo(f.getAbsolutePath());
                } else {
                    Hm.debugInfo("無い");
                }
        
            }
        }
        

      テキスト全体

      • Hm.Edit.getTotalText()

        現在編集中の秀丸エディタのテキスト全体を得る

      • Hm.Edit.setTotalText( オブジェクト )

        現在編集中の秀丸エディタのテキスト全体を、対象の引数を文字列化したものへと変更する

      import hidemaru.*;
      
      public class MyClass2 {
      
          // この変数はマクロが終了しても、残る
          static int staticCounter = 0;
      
          public static void begin(String args[]) {
              // 秀丸エディタ上の編集中テキストの現在の内容すべて
              String text = Hm.Edit.getTotalText();
      
              Hm.Edit.setTotalText("編集中テキストの内容をこの文字列に変更");
          }
      }
      
    • 選択中のテキスト

      (単純選択のみが対象となります。ボックス選択や複数選択は対象にはなりません)

      • Hm.Edit.getSelectedText()

        現在編集中の秀丸エディタの「選択している」テキストを得る。

      • Hm.Edit.setSelectedText( オブジェクト )

        現在編集中の秀丸エディタの「選択している」テキストを、対象の引数を文字列化したものへと変更する

    • カーソルがある行のテキスト

      • Hm.Edit.getLineText()

        現在編集中の秀丸エディタの「カーソルがある行」のテキストを得る。

      • Hm.Edit.setLineText( オブジェクト )

        現在編集中の秀丸エディタの「カーソルがある行」のテキストを、対象の引数を文字列化したものへと変更する

    • カーソルの位置

      • Hm.Edit.getCursorPos().getLineNo()

        現在選択中の秀丸エディタのカーソル位置の行番号を得る。
        秀丸マクロのlinenoと同じ値。

      • Hm.Edit.getCursorPos().getColumn()

        現在選択中の秀丸エディタのカーソル位置のカラム値を得る。
        秀丸マクロのcolumnと同じ値。

      int lineno = Hm.Edit.getCursorPos().getLineNo();
      int column = Hm.Edit.getCursorPos().getColumn();
      
      // これらの値は、マクロシンボル経由からでも取得可能。例えば以下のような記述方法
      int lineno2 = (int)Hm.Macro.getVar("lineno");
      int column2 = (int)Hm.Macro.getVar("column");
      
    • マウスの位置のカーソルの位置 (秀丸エディタ V8.73以上)

      • Hm.Edit.getMousePos().getLineNo()

        現在選択中の秀丸エディタのマウスの位置をカーソル位置にみたてた行番号を得る。
        換算出来ない場合は-1

      • Hm.Edit.getMousePos().getColumn()

        現在選択中の秀丸エディタのマウスの位置をカーソル位置にみたてたカラム値を得る。
        換算出来ない場合は-1

      • Hm.Edit.getMousePos().getX()

        マウスのx座標。(win32 apiのGetCursurPosと同じ)

      • Hm.Edit.getMousePos().getY()

        マウスのy座標。(win32 apiのGetCursurPosと同じ)

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

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

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

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

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

      • Hm.Macro.doEval( 文字列 )

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

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

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

      • Hm.Macro.getVar( 変数名 )

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

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

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

      import hidemaru.Hm;
      
      public class MyClass2 {
      
          // この変数はマクロが終了しても、残る
          static int staticCounter = 0;
      
          public static void begin(String args[]) {
              // 秀丸マクロの「#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 );
      
          }
      }