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 自体では無理っぽかったので適当に Python で WSH スクリプト (要 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
とかそんな感じで。