如何在 Windows 中打开 Cygwin Emacs 中的文件?

如何在 Windows 中打开 Cygwin Emacs 中的文件?

我正在尝试让 Windows 在 Emacs 中打开文本文件,Emacs 是我在 Cygwin 下安装的。我已遵循这些说明:并创建一个如下的 bat 文件:

@echo off
chdir C:\LocalApp\cygwin\bin
start mintty.exe /usr/bin/emacs-X11.exe %1

当我在 Windows 资源管理器中双击文件名时,它确实启动了 Emacs,但是我遇到了两个问题:

  1. Emacs 在控制台模式下运行,而不是在窗口模式下运行(并且我正在运行 XWin)。

  2. 它显示一个空缓冲区而不是文件内容(我怀疑这是一个路径问题,但我找不到在 .bat 脚本中插入 cygpath 并使其工作的方法)。

有什么想法吗?谢谢。

答案1

1) Emacs 很可能以控制台模式启动,因为没有设置 DISPLAY 变量;设置该环境变量,其值指向能够接受客户端的 X 服务器,您应该会发现更好的结果。您还可以通过或命令行选项向--displayEmacs传递-d显示标识符,我将在下面的示例中执行此操作,因为我不知道如何在 Windows 批处理文件中设置环境变量:

@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 启动命令来生成 mintty 进程,然后要求启动 Emacs。您可以改为使用 Cygwin 运行命令,该命令会在没有控制台窗口的情况下启动给定的二进制文件,并消除多余的 mintty 进程:

@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) 中的内容几乎肯定会起作用,其余部分应该可以正常工作,除了您可能关心或不关心的多余控制台窗口。让我知道进展如何,我会看看我可以提供什么进一步的帮助。

相关内容