http://blogs.wankuma.com/mutaguchi/archive/2007/11/08/106978.aspx
当たり前ですけど、やっぱり同じようなこと考えてる人っているんですね。
私が自作して使っているマクロです。
1 /*
2 * 現在開いているソースファイルを実行します。
3 */
4 var APP_PATH_CSC = "C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe";
5 var APP_PATH_JAVAC = "C:\\Java\\SDK\\1.6.0\\bin\\javac.exe";
6 var APP_PATH_JAVA = "C:\\Java\\SDK\\1.6.0\\bin\\java.exe";
7 var APP_PATH_BROWSER = "C:\\Program Files\\Browser\\Firefox\\firefox.exe"
8
9 var shell = new ActiveXObject("WScript.Shell");
10 var fso = new ActiveXObject("Scripting.FileSystemObject");
11
12 // 実行前に保存する
13 var activeDoc = editor.activeDocument;
14 if (! activeDoc.saved) {
15 activeDoc.save();
16 }
17
18 shell.currentDirectory = activeDoc.path;
19 var activeConfigName = activeDoc.configName;
20 var srcFilePath = editor.activeDocument.fullName;
21
22 var exec = null;
23
24 // コンパイル
25 var result = "########## Compile begin ##########\r\n";
26 if (activeConfigName == "C#") {
27 exec = shell.exec(APP_PATH_CSC + " \"" + srcFilePath + "\"");
28 result += exec.stdOut.readAll();
29 } else if (activeConfigName == "Java") {
30 var encodingOption = "";
31 // とりあえず使用するとしたら Shift_JIS と UTF-8 だろう
32 if (activeDoc.Encoding == eeEncodingUTF8) {
33 encodingOption = " -encoding utf-8";
34 }
35 exec = shell.exec(APP_PATH_JAVAC + encodingOption + " -d .\\ \"" + srcFilePath + "\"");
36 result += exec.stdErr.readAll();
37 } else {
38 result += "Compile is not necessary";
39 }
40 result += "########## Compile end ##########\r\n";
41
42 result += "\r\n";
43
44 // 実行結果取得
45 result += "########## Execute begin ##########\r\n";
46 var execFileName = null;
47 if (activeConfigName == "C#") {
48 execFileName = fso.getBaseName(srcFilePath) + ".exe";
49 if (fso.fileExists(".\\" + execFileName)) {
50 exec = shell.exec(".\\" + execFileName);
51 result += exec.stdOut.readAll();
52 }
53 } else if (activeConfigName == "Java") {
54 execFileName = fso.getBaseName(srcFilePath) + ".class";
55 if (fso.fileExists(".\\" + execFileName)) {
56 exec = shell.exec(APP_PATH_JAVA + " \"" + fso.getBaseName(srcFilePath) + "\"");
57 result += exec.stdOut.readAll();
58 result += "---------- error ----------\r\n";
59 result += exec.stdErr.readAll();
60 }
61 } else if ((activeConfigName == "Bat")) {
62 shell.run(srcFilePath);
63 } else if (activeConfigName == "JavaScript for EmEditor") {
64 // 無限ループ対策
65 if (srcFilePath != scriptFullName) {
66 var stream = fso.openTextFile(srcFilePath, 1, false, -1);
67 fileContent = stream.readAll();
68 eval(fileContent);
69 }
70 }
71 result += "########## Execute end ##########\r\n";
72
73 // 結果表示
74 if ((activeConfigName == "C#") || (activeConfigName == "Java")) {
75 // C#・Javaの場合は実行結果を取得し、別タブに表示
76 editor.newFile();
77 var resultDoc = editor.documents.item(editor.documents.count);
78 resultDoc.write(result);
79 } else if ((activeConfigName == "XML") || (activeConfigName == "HTML")) {
80 // HTML・XMLはブラウザで表示
81 shell.exec(APP_PATH_BROWSER + " \"" + srcFilePath + "\"");
82 } else if ((activeConfigName == "Bat") || (activeConfigName == "JavaScript for EmEditor")) {
83 // 実行済みのため、何も表示しない
84 } else {
85 alert("対応していないファイル形式です。");
86 }
87
88 // コンパイルで作成されたファイルを削除
89 if ((execFileName != null) && fso.fileExists(".\\" + execFileName)) {
90 fso.deleteFile(".\\" + execFileName);
91 }
私の場合は、C# と Java がコンパイル対象でその他いくつかの種類のファイルを実行します。
んで、実行結果を新規ドキュメントとしてエディタに表示する部分がちょっと異なりますかね。
ほかにも XML 整形するマクロや、重複行を削除するマクロ、ポップアップで実行したいマクロを選んで実行するマクロ、簡単なファイラの機能を果たすマクロなんかをよく使います。