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

概要

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

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

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

moveto X座標, Y座標

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

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

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

$hm.Macro.Statement("秀丸マクロの文名", ...引数);
  • Ruby側のソース

    コード
    ret = $hm.Macro.Statement("moveto", 10, 2); # X:10, Y:2 の位置に移動
    if (ret.Error == nil ) then # ret.Result > 0 という判定でも同一の意味
        $hm.OutputPane.Output("実行成功\r\n");
    else
        $hm.OutputPane.Output("実行失敗\r\n");
    end
    

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

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

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

  • Ruby側のソース

    コード
    menulist = [
        "1ばんめ",
        "2ばんめ",
        "3ばんめ"
    ];
    ret = $hm.Macro.Statement("menuarray", menulist, menulist.length );
    selectedId = $hm.Macro.Var["result"];
    $hm.OutputPane.Output(selectedId);
    

$hm.Macro.Statement(...) 返り値

  • Resultプロパティ

    実行した秀丸マクロ文が無事成功したなら「1」失敗したなら「0」以下がint型で入っています。
    0とは限らないので注意してください。

  • Argsプロパティ

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

  • Errorプロパティ

    何か明確な例外が発生した場合はErrorプロパティにException型の例外インスタンスが入っています。
    エラーがなければnullが入っています。

  • Messageプロパティ

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