【要望】外部ツールの機能j強化

  1. ※やりたいこと:RubyやPerlなどの文字列操作が得意な言語でフィルタ的なことがしたい

    (1)選択範囲のテキストをテンポラリファイルに書き出す
    (2)登録したコマンドに(1)で出力されたファイルを渡して起動、コマンドからの出力を受け取るために受け取り用のテンポラリファイル名も引数で渡せるようにしておく
    (3)コマンドの出力が書き込まれたファイルの内容で選択範囲を置換する()

     |  mandara3  |  返信
  2. ●mandara3 さん

    とりあえず標準入力/出力を利用したマクロを作成しました.
    一時ファイルを扱うより楽だと思いますので,ご検討下さい.
    また,マクロならば PopupMenu を使って機能をまとめたりもできます.

    以下,選択文字列をフィルタを通した文字列に置換するマクロです.

    // フィルタ実行名
    var filter = "C:\\filter.exe";

    // 選択範囲をフィルタ結果で置換
    var sel = Document.Selection;
    if (!sel.IsEmpty) {
      var shell = new ActiveXObject("WScript.Shell");
      var exec = shell.Exec(filter);
      exec.StdIn.Write(sel.Text);
      exec.StdIn.Close();
      while (exec.Status == 0) {
        Sleep(10);
      }
      sel.Text = exec.StdOut.ReadAll();  // 標準出力の取得
    }

     |  ks  |  返信
  3. ● mandara3 さん、ks さん

    書き込みありがとうございます。
    私も考えておりましたが、ks さんのサンプルに書かれているようなマクロでの対応が柔軟性もあって一番良さそうだと思います。

    確かに一時ファイルに書き出して、そのファイル名を受け取るような口を設ければできなくはないですが、標準機能で固定の機能とするよりはマクロかプラグインで幅を広げたほうが使いやすそうですね。内部的に外部ツールはshell.Execを蹴ってるだけなので。

     |  Kuro  |  返信
  4. ● mandara3 さん

    マクロを作っておいて何ですが,Mery のマクロは Windows Script Host を利用しているので,ActivePerl や ActiveScriptRuby を導入すればそれぞれの言語でマクロが書けるはずです.
    これが一番無駄なく問題なく,動く気がします.

    マクロは自作フィルタで簡単には動作確認していましたが,Ruby や Perl の標準入出力文字コードって Unicode でしたっけ?
    もし Shift-JIS という場合には,間に nkf 的なフィルタを噛ませる必要がありますね.

    それと mandara3 さんが提示された手順,見覚えがあると思いましたが,Terapad のツール機能がこの形式でしたね.
    既にこの形式でのフィルタが作られているようでしたら,この形式に合わせたマクロも提示します.
    # ブックマーク一覧表示,という外部ツール連携で実装していました

     |  ks  |  返信
スポンサーリンク