1)Emacs最有可能在控制台模式下启动,因为没有设置DISPLAY变量; 设置该环境变量,其值指向能够接受客户端的X服务器,您应该找到更好的结果。您还可以通过--display
或-d
命令行选项将显示标识符传递给Emacs,我将在以下示例中执行此操作,因为我不知道如何在Windows批处理文件中设置env vars:
@echo off
chdir c:\LocalApp\cygwin\bin
start mintty.exe /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1
如果需要,可能不是,请将--display
此处给出的值替换为更适合您的X服务器配置的值。
这可能仍会显示一个控制台窗口,因为您正在使用Windows启动命令生成一个简短的进程,然后您要求启动Emacs。你可以做的是使用Cygwin run命令,该命令在没有控制台窗口的情况下启动给定的二进制文件,并消除多余的mutyty进程:
@echo off
chdir c:\LocalApp\cygwin\bin
run /usr/bin/emacs-X11.exe --display 127.0.0.1:0 %1
2)最后,您需要找到一种方法,以一种可以理解的形式将文件路径传递给Emacs。不幸的是,我非常确定在Windows批处理语言中不可能进行命令插值,所以你不能做相当于例如Bash的操作$(cygpath -au %1)
。也许你最好的选择可能是让Windows批处理文件运行Cygwin Bash,将filename参数传递给翻译它的脚本并启动Emacs。例如,您的批处理文件可能是
@echo off
chdir C:\LocalApp\cygwin\bin
run sh /path/to/launch-emacs.sh %1
然后,在launch-emacs.sh中,您可能会遇到以下情况:
#!/bin/sh
cd /cygdrive/c/LocalApp/cygwin/bin
/usr/bin/emacs-X11 --display 127.0.0.1:0 `cygpath -au $1`
它将路径转换为通过cygpath
,然后将其移交给Emacs,以及如上所述的显示标识符。
我唯一的Windows盒子在家里,所以我没有机会测试这些确切的脚本,但我在那台机器上用Emacs做了一些非常相似的事情; 假设您的X服务器配置正确,1)中的内容几乎肯定会起作用,其余的应该是OK模块化一个多余的控制台窗口,您可能会或可能不关心它。让我知道它是怎么回事,我会看到我能提供什么进一步的帮助。