cygwinのemacsのラッパーをwshを使って書いてみました。

cygwinemacsのラッパーをwshを使って書いてみました。

emacs-w32.exeを直接使うと、dos窓が出てしまったり、
ドラッグ&ドロップでwindowsのパスが渡されてきて読めなかったりするので
wshでそのあたりを解決してみました。

このスクリプトのファイル名は、emacs.wsfとしています。
ダブルクリックやドラッグ&ドロップで起動することを考えると
.jsよりも、多少ゴミがついても.wsfの方がよさそうです。

<job id="main">
<script language="JavaScript">

var ws = WScript.CreateObject("Wscript.Shell");

var cmd = "C:/cygwin64/bin/emacs-w32.exe";
run(cmd, args2Cygpath());

function args2Cygpath() {
    var files = [];
    for(var i = 0, n = WScript.Arguments.Count(); i < n; i++) {
        files.push(cygpath(WScript.Arguments(i)));
    }
    return files;
}

function cygpath(winpath) {
    return execute("C:/cygwin64/bin/cygpath.exe " + winpath);
}

function run(cmd, args) {
    var cmdLine = cmd + " " + args.join(" ");
    ws.Run(cmdLine, 0);
}

function execute(cmdLine) {
    var proc = ws.Exec(cmdLine);
    var result = "";
    
    while(!proc.StdOut.AtEndOfStream) {
        result += proc.StdOut.Read(1);
    }

    while(proc.Status === 0) {
        WScript.Sleep(100);
    }
    
    if(proc.ExitCode !== 0) {
        throw new Error("fail: " + cmdLine);
    }

    return result;
}

</script>
</job>