Meadow で emacsclient

以前にも書いたけど、現在、CVS HEAD の emacsclient は TCP socket のサポートを追加して、Windows でも動作も考慮に入っている。で、この間 setup.exe で Meadow 3.00 の更新をしたらこの emacsclient もインストールされた。いい機会なので gnuserv を捨てて emacsclient にしてみる。
で、とりあえず現状の設定はこんな感じ。

SET RUNEMACS=d:\tools\meadow\bin\RunMW32.exe
SET GNUCLIENTW=-F
SET EMACS=MEADOW

ファイルを開きたい場合は gnuclientw.exe を使っている。主にあふ+CraftLaunchEx経由。
で、パラメータなしで起動で単に Meadow を起動、すでに起動している場合はウィンドウをフォアグラウンドに持ってくるようにしたかったのだが、emacsclient 自体では無理っぽかったので適当に PythonWSH スクリプト (要 Python Win32 拡張) をでって上げてみた。Win 環境に依存しまくりなスクリプトだが、まぁ気にしない。

import os
import subprocess

EMACSDIR = r'd:\tools\meadow'
EMACS = os.path.join(EMACSDIR, r'bin\RunMW32.exe')
EMACSCLIENT = os.path.join(EMACSDIR, r'bin\emacsclientw.exe')
EMACS_CLASSNAME = 'MEADOW'

def focus_emacs():
    import win32gui
    try:
        hWnd = win32gui.FindWindow(EMACS_CLASSNAME, None)
        win32gui.SetForegroundWindow(hWnd)
    except:
        pass
    
def main():
    if 'WScript' in globals():
        args = list(WScript.Arguments)
        echo = WScript.Echo
    else:
        import sys
        args = sys.argv[1:]
        def echo(s): print (s)

    if len(args) > 0:
        os.execv(EMACSCLIENT, [EMACSCLIENT, '-n', '-a', EMACS] + args)
    else:
        retcode = subprocess.call([EMACSCLIENT, '-e', 'nil'])
        if retcode:
            os.execl(EMACS, EMACS)
        else:
            focus_emacs()

if __name__ in ('__main__', '__ax_main__'):
    main()

で、これを emacs.pys として保存して使う。コマンドプロンプトなら PATH さえ通しておけばそのまま emacs.pys で起動できる。関連付けて使う場合は

C:\Windows\system32\wscript.exe d:\tools\meadow\bin\emacs.pys %1

とかそんな感じで。