EmEditorのマクロを様々なActiveScriptで書いてみる

EmEditor FAN ! / EmEditorのマクロを様々なActiveScriptで書いてみる

2006/06/17

この記事はFioさんの記事を参考に書かれました。

ActiveScriptとは?

MicrosoftがWindowsのスクリプティングのために用意している環境で、EmEditorのVBScript, JScriptマクロはこの機構を利用して実装されています。ActiveScriptとしてPerl, Ruby, Python, PHPが利用できるので、これらの言語をEmEditorのマクロに組み込んでみます。

各種スクリプトエンジンをインストールする

Perlのインストール

Perlには様々なバイナリがありますが、ActivePerlをインストールします。ActiveStateからActivePerlをダウンロードしてください。名前の入力などを求められますが、スキップすることができます。最新版で特に問題ありません。インストーラの指示に従ってインストールしてください。

Rubyのインストール

Rubyには様々なバイナリがありますが、ActiveScriptRubyをインストールします。最新版で特に問題ありません。インストーラの指示に従ってインストールしてください。

Pythonのインストール

ActivePythonをインストールします。ActiveStateからActivePythonをダウンロードしてください。名前の入力などを求められますが、スキップすることができます。最新版で特に問題ありません。インストーラの指示に従ってインストールしてください。

PHPのインストール

ActiveScript化されたPHPについてはこちらに説明があります。PHPのダウンロードサイトからPHP5の最新版(リンク先は5.0.3)でWindows Binariesでインストーラ付きの物をダウンロードしてインストーラの指示に従ってインストールしてください。その後DLLをダウンロードして、PHPをインストールしたディレクトリにコピーし、コマンドラインで

regsvr32 c:\php5\php5activescript.dll

と入力し(c:\php5はPHPをインストールしたディレクトリ)DLLを登録してください。

インストールされたスクリプトエンジンのテスト

以上すべてをインストールした場合、下のWindows Scriptが動作します。

<?xml version="1.0"?>
<job>
  <script language="JScript">
    <![CDATA[
      WScript.Echo("Hello, JScript!");
    ]]>
  </script>
  <script language="VBScript">
    <![CDATA[
      WScript.Echo("Hello, VBScript!")
    ]]>
  </script>
  <script language="PerlScript">
    <![CDATA[
      &WScript->Echo("Hello, PerlScript !");
    ]]>
  </script>
  <script language="RubyScript">
    <![CDATA[
    	WScript.Echo("Hello, RubyScript !");
    ]]>
  </script>
  <script language="Python">
    <![CDATA[
WScript.Echo("Hello, Python !")
    ]]>
  </script>
  <script language="PHPScript">
    <![CDATA[
    	$WScript->Echo("Hello, PHPScript !");
    ]]>
  </script>
</job>

この内容のテキストファイルをtest.wsfという名前で保存し、ダブルクリックしてください。各言語の動作が確認できます。

EmEditor Professional V6.00 以降の場合

V6.00 よりEmEditorに#language指示子を用いて、これらActiveScriptをマクロ直接実行する機能が付きました。詳しくは、EmEditor ヘルプ - EmEditor マクロ リファレンス - スクリプト指示子をご覧ください。すべてのグローバルオブジェクトは変数Windowに収められているようです。
以下の記事はV6.00未満のために書かれました。

各言語を利用するEmEditorマクロ

以上の準備が出来たところで、以下のようなjseeマクロを作成し、保存して実行してみてください。

perlcode   = "sub main\n {\n return \"Perl ! \";\n }";
rubycode   = "def main; return \"Ruby ! \"; end";
pythoncode = "def main():\n\treturn \"Python ! \"";
phpcode    = "function main () { return \"PHP ! \"; } ";
result = "";

perl = new ActiveXObject("ScriptControl");
perl.Language = "PerlScript";
perl.AddCode(perlcode);
result += perl.Run("main");

ruby = new ActiveXObject("ScriptControl");
ruby.Language = "RubyScript";
ruby.AddCode(rubycode);
result += ruby.Run("main");

python = new ActiveXObject("ScriptControl");
python.Language = "Python";
python.AddCode(pythoncode);
result += python.Run("main");

php = new ActiveXObject("ScriptControl");
php.Language = "PHPScript";
php.AddCode(phpcode);
result += php.Run("main");

this.alert(result);

変数perlcode, rubycode, pythoncode, phpcodeに格納された各言語のプログラムが動作しているのが確認できたと思います。

各言語を利用するEmEditorマクロ2

(上を書いた)後にExecuteStatementというメソッドがあることを知ったので、これを利用して宣言→呼び出し、ではなく直接実行してみます。

perlcode   = "$window->alert('Perl ! ');";
rubycode   = "Window.alert(\"Ruby !\");";//Rubyのグローバルオブジェクトは大文字で始まる
pythoncode = "window.alert('Python ! ');";
phpcode    = "$window->alert('PHP ! ');";

perl = new ActiveXObject("ScriptControl");
perl.Language = "PerlScript";
perl.AddObject("window", this);
perl.ExecuteStatement(perlcode);

ruby = new ActiveXObject("ScriptControl");
ruby.Language = "RubyScript";
ruby.AddObject("window", this);
ruby.ExecuteStatement(rubycode);

python = new ActiveXObject("ScriptControl");
python.Language = "Python";
python.AddObject("window", this);
python.ExecuteStatement(pythoncode);

php = new ActiveXObject("ScriptControl");
php.Language = "PHPScript";
php.AddObject("window", this);
php.ExecuteStatement(phpcode);

変数perlcode, rubycode, pythoncode, phpcodeに格納された各言語のプログラムを直接動作させることができました。

最後に

TCLScriptというTCLのActiveScriptもあるのですが、EmEditorのマクロ内での呼び出しに失敗するので(原因不明)今回紹介しませんでした。


EmEditor FAN ! / EmEditorのマクロを様々なActiveScriptで書いてみる


おすすめのマクロ(Windows Scripting Host)の参考書籍です。

inserted by FC2 system