秀丸マクロの「(関数のような)命令文」を文字列で実行

概要

この機能を利用する場合、秀丸エディタ v8.98 (正式版 or β9以上)を強く推奨します。
そうでない場合、数値と文字列の型を間違えて実行すると秀丸が不正な状態となります。

$Hm->Macro->Eval(...)を「命令向けに特化」したものとして、「$Hm->Macro->doStatement」が用意されています。

秀丸マクロにおいて「(関数のような)文」や「(関数のような)命令文」とは

moveto X座標, Y座標

のように呼び出しに「( )」が使われず、かつ、返り値を受け取らないものです。

一方、文と類似ですが「返り値」があり、「( )」を付けて呼び出すものを「関数」としています。

秀丸マクロの(関数のような)文を実行可能です。

$Hm->Macro->doStatement->秀丸マクロの文名(...引数);
  • PHP側のソース

    コード
    list($result, $args, $error, $message) = $Hm->Macro->doStatement->moveto(10, 2); // X:10, Y:2 の位置に移動
    
    if ($error == null )
    {
        $Hm->OutputPane->Output("実行成功\r\n");
    }
    else
    {
        $Hm->OutputPane->Output("実行失敗\r\n");
    }
    

引数として「配列」を必要とする関数のような命令文

秀丸マクロの文や関数にはごく一部には「menuarray」など 引数として「配列」を必要とするものがあります。

今回は「秀丸マクロ文のmenuarray」を利用してみましょう。

  • PHP側のソース

    コード
    $menulist = [
        "1ばんめ",
        "2ばんめ",
        "3ばんめ"
    ];
    list($result, $args, $error, $message) = $Hm->Macro->doStatement->menuarray($menulist, count($menulist));
    $selectedId = $Hm->Macro->getVar("result"); // 上の$result の書き間違いではなく、秀丸マクロでmenuarrayを実行した際に、resultシンボルへと格納される値
    $Hm->OutputPane->Output($selectedId);
    

$Hm->Macro->doStatement(...) 返り値

    • result(1番目)

      実行した秀丸マクロ文が無事成功したなら「秀丸マクロのresult相当の値が」、失敗したなら「0」以下がint型で入っています。
      0とは限らないので注意してください。
      ステートメントの実行そのものが成功したのかはResultプロパティではなくErrorプロパティで判定してください。
      Resultプロパティでは実行に成功した結果、マイナスのresult値が返ってきていることもあり得ます。

    • args(2番目)

      秀丸マク関数を実行した後、秀丸マクロ関数に渡した引数が最終的にどういった値になったかを取得できます。
      リスト型で、関数に渡した最初の引数が[0], 次の引数が[1], ... といった形で格納されています。

    • error(3番目)

      何か明確な例外が発生した場合は例外(RuntimeException)が入っています。
      エラーがなければnullが入っています。

    • message(4番目)

      基本的には特になにもはいっておらず、空文字が入っています。