外部アプリケーションから秀丸のアウトプット枠への出力

  • 概要

    外部のアプリケーション(=秀丸から起動していないアプリケーション)」から、
    「今開いている秀丸」の「アウトプット枠」へと直接出力するためのプラグインです。

    もしも、アウトプット枠を閉じている場合でも、「外部アプリケーションからのメッセージ転送を検知すると」
    自動的にアウトプット枠を表示します。

    • 一気に数十・数百といったメッセージ行をアウトプット枠に送信
    • ウィンドウアプリなどのボタンを押す度に秀丸へとメッセージ送信
    • 複数のアプリから並列でごちゃまぜに秀丸へとメッセージ送信

    いずれも問題なく処理されます。

  • ダウンロード

    DOWNLOAD ⇒ HmSharedOutputPane.zipファイル。ver 1.15
    └更新日 2017/04/04

    動作環境

    • 秀丸エディタ 32ビット版 ver8.01以降
      Windowsのbit数ではなく、秀丸のビット数 Windows OSが64bit版か32bit版かは関係ありません。秀丸エディタが32bit版か64bit版かが問題です。
      通常ですと、32bit版です。

      64bit版の人はHmSharedOutputPane_x64.zipを利用してください。
      (この場合は、呼び出し元プログラムも64bitである必要があります)

    インストール

    • HmSharedOutputPane.zipを解凍する。
    • HmSharedOutputPane.dllを、秀丸本体(hidemaru.exe)と同じ場所にコピー。
      (場所は変更してもOKです。その場合は、HmSharedOutputPane.macで読み込む場所を変更してください。)
    • HmSharedOutputPane.macを下記のように設定する。
  • HmSharedOutputPane.macの設定

    • 秀丸のメニューより「マクロ」->「マクロ登録」
    • 自動起動の設定を選び、「アクティブ切り替え」の項目として、「HmSharedOutputPane.mac」としてください。
      (HmSharedOutputPane.macの配置場所は自由ですので、「参照」して読み込んでください)
    • もしもすでに「アクティブ切り替え」用のマクロがあるなら、「HmSharedOutputPane.mac」の中身は単純ですので、
      適当にコピペして使ってください。
  • HmSharedOutputPane.macの内容解説

    #dllsop = loaddll( hidemarudir + "\\HmSharedOutputPane.dll"); // HmSharedOutputPane.dllの読み込み。フォルダを変更する場合には指定変更のこと。
    
    if(#dllsop) {
        #_ = dllfunc( #dllsop, "SetHidemaruHandle", hidemaruhandle(0) ); // 現在の秀丸ウィンドウハンドルの伝達
        #_ = dllfunc( #dllsop, "SetWithClearTime", -1 );                 // 新しいOutput枠を出す際に、前回のOutputから何ミリ秒経過するとクリアするか
    } else {
        message("HmSharedOutputPane.dllが導入されていません。");
    }
    
    // ★ #dllsopをマクロ内で手動でfreedllしてはならない!! 秀丸が閉じられるとfreedllされます。
    
  • SetWithClearTime(int iMilliSecond)

    「SetWithClearTime」が微妙に説明がわかりにくいですが、こういうことです。

    • Output枠に文字列を表示し続けていると、そのうち、文字列が何千行にもなってしまいます
    • よって、「何かを契機として1回全部クリア」した方が便利な場合が多い。
    • そこで、HmSharedOutputPaneでは、「最後のOutput枠への出力からの経過時間」をクリアの契機としています。
    • 例えば、SetWithClearTime(10000); などとすると、
      「最後のOutput枠への出力から、10000ミリ秒(=10秒)以上の経過時間があった際は、
      次回Output枠への出力の際は、Output枠を一旦クリアしてから文字列を出力する」となります。
      又、SetWithClearTime(-1); とすると、「クリアはしない」という意味となります。
      デフォルトでは「クリアはしない」設定、つまり、SetWithClearTime(-1) と同じことになっています。
  • 注意点

    • 一行あたりの文字数の制限

      一行は1024バイトまでです。
      厳密には文字列として使用可能なのは1023バイトです。

    • 行の制限

      行のバッファは5000行です。
      このバッファーとは、文字列を受信しているが、まだアウトプット枠に表示していない行数となります。
      よって、あまりにも送信速度が速すぎる場合には、破たんしてしまうこととなります。(過去のバッファーは無かったことになる)

      ものすごい大量の文字列と行数を、秀丸へと継続的に「送信し続ける場合」には、
      秀丸のアウトプットへの掃きが付いていけるように、送信側で「Sleep」を入れなど、送信速度をコントロールしてください。

  • 備考

    普通のマクロでは決して実現不可能な独自の仕組みを採用しているため、
    アウトプット枠へのデータ受信中であっても

    • 秀丸で「ファイルの編集」
    • 「マクロの実行」
    • 平行してマクロや検索側から「アウトプット枠への出力」

    など普段の操作の全ては受付可能です。

    • 外部アプリの起動が先で、秀丸の起動が後でも問題ありません。
      秀丸が出遅れた分のデータ文字列は蓄積され(500行に収まる分に限ります)、秀丸起動後からデータの受信を開始します。
    • 一旦秀丸を閉じたり再起動したりしても問題ありません。
      閉じていた間のデータ文字列は蓄積され(500行に収まる分に限ります)、起動後の分からバッファーの分も含めてデータ受信を再開します。
  • ライセンス等

    • HmSharedOutputPane.mac

      HmSharedOutputPane.macは自由に利用してください。特にライセンスはありません。

    • HmSharedOutputPane.dll

      HmSharedOutputPane.dll、及び、そのソースはMITライセンスです。
      ソースはGithubに上がっています。