hmPerlが持つ特別な関数一覧

  • hmPerl.pm

    各自が手軽にカスタム可能な形で、hmPerl.pmにて定義されています。

    hmPerl.dllとhmPerl.pmを繋げるものは「$::hm_Edit_***」や「$::hm_Macro_***」などのグローバル変数だけであり、
    その他はすべて自由に編集可能です。

    又、提供しているhmPerl.pmはルーズに組まれており、
    「hm->Edit->TotalText」ではなく、「hm->TotalText」といった記述でも動作します。

  • デバッグ用途関数

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

    • 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( 文字列 )

        現在編集中の秀丸エディタのテキスト全体を、引数の文字列にする。

      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      my $totaltext = hm->TotalText;
      hm->debuginfo($totaltext);
      
      hm->TotalText("あいうえお");
      )PERL");
      
      freedll( #Perl );
      
    • 選択中のテキスト

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

      • hm->Edit->SelectedText

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

      • hm->Edit->SelectedText( 文字列 )

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

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

      • hm->Edit->LineText

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

      • hm->Edit->LineText( 文字列 )

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

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

      • hm->Edit->CursorPos->{lineno}

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

      • hm->Edit->CursorPos->{column}

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

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

      • hm->Edit->MousePos->{lineno}

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

      • hm->Edit->MousePos->{column}

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

      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      my $lineno = hm->Edit->MousePos->{lineno};
      my $column = hm->Edit->MousePos->{column};
      my $x = hm->Edit->MousePos->{x}; // マウスのスクリーン座標
      my $y = hm->Edit->MousePos->{y}; // マウスのスクリーン座標
      hm->debuginfo( "($lineno, $column)" );
      )PERL");
      
      freedll( #Perl );
      
    • 関数で扱うのがまどろっこしいということであれば…

      hmPerl.pmを見ればわかるように、値は「$::hm_Edit_TotalText」等に対して行っているわけですから、
      それを直接取り扱っても良いでしょう。(むしろその方が記述が単純です)

      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      
      
      # テキストを選択中だったら
      if ( hm->Macro->Var('selecting') ) {
        # 選択範囲の「テキスト」という文字を「トスキテ」に置き換え
        $::hm_Edit_SelectedText =~ s/テキスト/トスキテ/g;
      
      } else {
        # テキスト全体の「テキスト」という文字を「トスキテ」に置き換え
        $::hm_Edit_TotalText =~ s/テキスト/トスキテ/g;
      }
      
      )PERL");
      
      freedll( #Perl );
      
  • Perlから秀丸マクロへアクセスする関数

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

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

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

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

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

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

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

      変数名は原則的には「シングルクォーテーション」で囲みましょう。

      • hm->Macro->Var( 変数名 )

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

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

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

      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      
      # 秀丸マクロの「#aaa」という変数に3を設定。変数名はシングルクォーテーションで囲む
      hm->Macro->Var('#aaa', 3 );
      
      # 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。変数名はシングルクォーテーションで囲む
      hm->Macro->Var('$bbb', "あいうえお。" );
      
      # 秀丸マクロとして一連の文字列を実行
      hm->Macro->Eval(<<'MACRO'
          message($bbb);
          $ccc = $bbb + $bbb;
          message($ccc);
      MACRO
      );
      
      hm->debuginfo( hm->Macro->Var('$ccc') );
      hm->debuginfo( hm->Macro->Var('filename') );
      
      my $hmdate = hm->Macro->Var('date');
      hm->debuginfo( $hmdate );
      
      )PERL");
      
      freedll( #Perl );
              
    • 関数で扱うのがまどろっこしいということであれば…

      hmPerl.pmを見ればわかるように、値は「$::hm_Macro_Eval」等に対して行っているわけですから、
      それを直接取り扱った方が、ヒアドキュメント付近の括弧の対応が明瞭になることでしょう。

      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      
      $::hm_Macro_Eval =<< 'MACRO';
      
          $$message = "テスト1\r\nテスト2\r\n";
          message($$message);
      
          // アウトプット枠へ出力
          #OP = loaddll("HmOutputPane.dll");
          #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $$message);
          freedll(#OP);
      
      MACRO
      
      # マクロ内で設定した文字列をPerl層で取得。
      hm->debuginfo( hm->Macro->Var( '$$message' ) );
      
      )PERL");
      
      freedll( #Perl );