hmPerl 秀丸マクロ用 スクリプト via ActivePerl

  • 概要

    秀丸マクロで「ActiverPerlの機能を秀丸マクロとしてシームレスに近い形で利用する」ためのライブラリとなります。

    ActivePerlの記述をベースとしつつ、秀丸マクロとの値のやりとりや、ActivePerlの中で秀丸マクロを実行することも簡単になっています。

  • ダウンロード

    hmPerl.zipファイル。ver 1.301
    └更新日 2017/07/12
  • 動作環境

    • 秀丸

      秀丸エディタ x86版(32bit版) ver8.66以上

    • ActivePerl x86版(32bit版)

      ActivePerl ver 5.10 ~ ver 5.24 まで。
      このバージョンの範囲のみ動作します。

    • 秀丸エディタ ストアアプリ版について

      hmPerlは秀丸ストアアプリ版でも利用することが出来ます。
      (但しデスクトップ版に比べてhmPerlの起動が少し遅くなります。)
      詳細は左メニューのストアアプリ版での利用などを参照してください。

    • 古いActivePerlの場所

      https://xray-engine.org/index.php?title=ActivePerl

    • PATH

      ActivePerlは、「インストーラー」によってインストールしていること。
      別のマシンからやzipなどを、手コピで持って来ただけ、などではないこと。
      Perlにパス等が通っていること。

      PATHを通したくはないという場合、
      別途hmPerl.xmlを用意することで、PATHの替わりとすることが可能です。

  • 意義と目的 → 秀丸エディタ v8.66の追加APIの総括サンプル

    • 秀丸エディタ v8.66で追加されたプログラム機能

      秀丸エディタ v8.66によって、
      これまでの「秀丸マクロ」と「秀丸マクロから利用するC言語などで作ったライブラリ」との関係に、
      大きく影響のある機能が多数追加
      されました。
      (当サイトの管理人がそのような機能を中心に、集中的に要望し、サイトー企画さんに実装してもらったと言えます)

      しかし、これらの追加された機能の1つ1つをバラバラに眺めているだけでは、何が可能になったのか体感しにくいものです。

    • 追加された機能の全体としての狙いを見る

      実際に「全体をトータルに組み合わせた実装例」を「動くコンポーネント」と提供して「ソース付」で提供することで、
      「何が可能となったのか全体像を理解しやすくするサンプル」としての目的が大部分です。

    • 実際の使用にも耐えるdllコンポーネント

      比較的レガシーな資産や、グルーな環境において、ActivePerlはまだまだ現役です。
      「手に馴染んだスクリプト環境はActivePerl」だ、といった人も多く、
      「秀丸マクロの処理の大部分をActivePerlで書けるコンポーネントの提供」は、
      ひとつの新たな可能性をもたらすことでしょう。

  • インストール

    • hmPerl.zipを解凍する。
    • 「hmPerl.dll」と「hmPerl.pm」を秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。

    ソース例

    • (DoString関数の中身の記述は)ActivePerlで動作するソースは原則的には動作します。
    • Perl内から秀丸マクロが実行可能です。
    • Perlと秀丸マクロとの変数のやり取りも、Perlで記述します。
    • 秀丸マクロとPerlで値をやりとりする以上、グローバル変数が比較的頻繁に出現しますので、
      「use strict」などは無理のあるオプションとなります。
      #Perl = loaddll( hidemarudir + @"\hmPerl.dll" );
      
      #_ = dllfuncw( #Perl, "DoString", R"PERL(
      use Win32;
      use Encode;
      
      # 現在秀丸編集中のテキスト内容。テキストの取得だけではなく、テキストの設定も可能。
      my $text = hm->Edit->TotalText();
      
      if ("表示" =~ /表/) {
        hm->debuginfo("表示という文字列がマッチ")
      }
      
      my $a = hm->Edit->CursorPos->{lineno};
      hm->debuginfo("現在のカーソルのlineno:".$a);
      my $b = hm->Edit->CursorPos->{column};
      
      for (1..10) {
          hm->debuginfo("現座のカーソルのcolumn:".$b);
      }
      
      # 秀丸マクロの「filename」のシンボルの内容をこのPerlに持ってくる
      my $filename = hm->Macro->Var('filename');
      hm->debuginfo($filename);
      
      my $title = '質問';
      my $decoded_title = Encode::decode('utf-8', $title);
      my $decoded_text = Encode::decode('utf-8', $text);
      
      $reply = Win32::MsgBox($decoded_text, 4, $decoded_title);
      
      hm->Macro->Var('$bbbbb', "Perlから秀丸マクロへと出す");
      hm->Macro->Var('$ccccc', "Perlの外の秀丸マクロ空間へ");
      
      hm->Macro->Eval(<<'MACRO'
          message($bbbbb); // Perlの中で秀丸マクロを実行する。
      MACRO
      );
      )PERL");
      
      message($ccccc); // 秀丸マクロへと伝達されたものは、Perlの外からも見える
      
      freedll( #Perl );
      

    ライセンス

    • hmPerl.dll、hmPerl.dllのソース、hmPerl.pmのソース

      全て Apache License 2.0となります。

      ソースの場所

      • Githubにソースがあります。
      • コンパイルするのにActivePerlの「***perl\lib\CORE\PerlEz.h」を参照するので、
        インクルードパスとして「***perl\lib\CORE」を追加してください。