NTEmacs23起動バッチ | とんじるのブログ
2010-02-27 16:36:42

NTEmacs23起動バッチ

テーマ:Emacs
環境変数のALTERNATE_EDITORを指定しておけば、別にこんなもんがなくても、
emacsclientw.exeを直接起動でそこそこ使えるはず。
直接起動と比較した時のメリットは、

  • 引数なしで起動したときにもエラーメッセージが出ない。
  • 引数なしで起動したときに、すでにEmacsが起動している場合はアクティブにする。
    (ただし最小化状態だと...)

そんなところ。


以下emacs.cmdの内容


@if(0)==(0) echo off
CScript.exe //NoLogo //E:JScript "%~f0" %*
goto :EOF
@end
var WshShell = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");

// パスの追加
var procEnv = WshShell.Environment("Process");
procEnv.Item("PATH") = "Emacsをインストールしたディレクトリ\\bin;" + WshShell.ExpandEnvironmentStrings("%PATH%");

// Emacsが走っているか確認
var strComputer = ".";
var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\cimv2");
var colItems = objWMIService.ExecQuery("Select * From Win32_Process");
var objItem;
var pID = null;
var e = new Enumerator(colItems);
for(;!e.atEnd();e.moveNext()) {
objItem = e.item();
if((objItem.CommandLine != null)&&
(objItem.CommandLine.match("emacs\.exe"))) {
pID = objItem.ProcessId;
break;
}
}

if(pID == null) {
// Emacsが走ってない
var cmdLine = "runemacs.exe";
var i;
for(i=0; i<WScript.Arguments.length; i++) {
cmdLine += " \"" + WScript.Arguments(i) + "\"";
}
WshShell.Run(cmdLine);
} else {
// Emacsが走ってる
if(WScript.Arguments.length == 0) {
// 引数なしはアクティブにするだけ
WshShell.AppActivate(pID);
} else {
var cmdLine = "emacsclientw.exe -n";
var i;
for(i=0; i<WScript.Arguments.length; i++) {
cmdLine += " \"" + WScript.Arguments(i) + "\"";
}
WshShell.Run(cmdLine);
}
}