hmJSが持つ特別な関数一覧

  • デバッグ用途関数

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

    • hm.debuginfo( オブジェクト, ... )

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

    • console.log( オブジェクト, ... )

      hm.debuginfo( ... ) とほぼ同じですが、第1引数がsprintf系の「書式化指定子」を解釈できます。

      console.log("これは%dです", 10);
      
    • console.assert( 真偽値, オブジェクト, ... )

      第1引数が「偽」の時だけ、全ての引数をhm.debuginfo(...)へと渡します。

  • 秀丸本体のバージョン

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

    • hm.version

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

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

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

    • テキスト全体

      • hm.Edit.TotalText

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

      • hm.Edit.TotalText = "文字列"

        現在編集中の秀丸エディタのテキスト全体を、文字列へと変更する

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      var totaltext = hm.Edit.TotalText;
      hm.debuginfo(totaltext);
      
      hm.Edit.TotalText = "あいうえお";
      )JS");
      
      freedll( #JS );
      
    • 選択中のテキスト

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

      • hm.Edit.SelectedText

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

      • hm.Edit.SelectedText = "文字列"

        現在編集中の秀丸エディタの「選択している」テキストを、"文字列"へと置き換える。

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      // 何かを単純選択していたら、テキストが得られる
      var selectedtext = hm.Edit.SelectedText;
      hm.debuginfo(selectedtext);
      
      hm.Edit.SelectedText = "選択しているテキストをこの文字列に置き換えた";
      
      )JS");
      
      freedll( #JS );
      
    • カーソルがある行のテキスト

      • hm.Edit.LineText

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

      • hm.Edit.LineText = "文字列"

        現在編集中の秀丸エディタの「カーソルがある行」のテキストを、文字列へと置き換える。

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      var linetext = hm.Edit.LineText;
      hm.debuginfo(linetext);
      
      // 行のテキストを入れ替える感じにするなら、最後に「\n」を付けること。
      hm.Edit.LineText = "カーソル行のテキストをこれに変更\n";
      )JS");
      
      freedll( #JS );
      
    • カーソルの位置

      • hm.Edit.CursorPos.lineno

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

      • hm.Edit.CursorPos.column

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

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      var lineno = hm.Edit.CursorPos.lineno;
      var column = hm.Edit.CursorPos.column;
      hm.debuginfo( lineno + "," + column );
      )JS");
      
      freedll( #JS );
      
    • マウスの位置に対応するカーソルの位置(秀丸エディタ v8.73以上)

      • hm.Edit.MousePos.lineno

        現在選択中の秀丸エディタの「マウスの位置に対応するカーソル位置」の行番号を得る。

      • hm.Edit.MousePos.column

        現在選択中の秀丸エディタの「マウスの位置に対応するカーソル位置」のカラム値を得る。

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      var lineno = hm.Edit.MousePos.lineno;
      var column = hm.Edit.MousePos.column;
      var x = hm.Edit.MousePos.x; // マウスのスクリーン座標
      var y = hm.Edit.MousePos.y; // マウスのスクリーン座標
      hm.debuginfo( lineno, column );
      )JS");
      
      freedll( #JS );
      
  • ヒアドキュメント用の関数「R」

    「R」という関数に、「以下のように、コメントを内側に書いた関数そのものを渡す」ことで、
    ヒアドキュメント化された文字列が返るようになっています。
    JavaScriptそのものには、ヒアドキュメントが存在しないため、このように「R」という関数を設けています。

    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"JS(
    
    var str = R( function() {
    /*
        あいうえお
        かきくけこ
        \n\n
    */ } ); // /*~*/が「書いたままの文字列である」ヒアドキュメント化される。
    
    
    hm.debuginfo(str)
    hm.Macro.Var('$str', str); // 秀丸マクロの方に伝達
    
    )JS"
    );
    
    message($str);
    
    freedll( #JS );
        
  • JSから秀丸マクロへアクセスする関数

    JavaScriptの機能をフルに生かしつつ、秀丸マクロの機能や各種値もほぼ全て使えるところが、
    hmJSが優れている所以です。

    • 秀丸マクロをそのまま実行
    • 「秀丸マクロの変数」⇔「JSの変数」を相互にやり取り。

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

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

      • hm.Macro.Eval( ヒアドキュメント or 文字列)

        引数の文字列を、「秀丸マクロ」として実行する。

        「Eval関数」には「R関数」の機能が内包されています。

    • JSから秀丸マクロの変数の読み書き

      • hm.Macro.Var( 変数名 )

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

      • hm.Macro.Var( 変数名 , 新たな値 )

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

      #JS = loaddll( hidemarudir + @"\hmJS.dll" );
      
      #_ = dllfuncw( #JS, "DoString", R"JS(
      
          // 秀丸マクロの「#aaa」という変数に3を設定。
          hm.Macro.Var('#aaa', 3 );
      
          // 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。
          hm.Macro.Var('$bbb', "あいうえお。" );
      
          // 秀丸マクロとして一連の文字列を実行
          hm.Macro.Eval( function() {
          /*
              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') );
      
          var hmdate = hm.Macro.Var('date');
          hm.debuginfo( hmdate );
      
      )JS"
      );
      
      
      freedll( #JS );
              
  • DestroyScope関数

    JavaScript内に「DestroyScope」という名前の関数を用意しておくと、
    マクロ終了時に自動的にその関数が実行されます。

    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"JS(
    
    function DestroyScope() {
      hm.debuginfo("マクロ終了する直前に自動的にこの関数が呼び出される。");
    }
    
    )JS"
    );
    
    freedll( #JS );