我使用 Emacs 的 Cygwin 版本。除了使用 Emacs shell(M-x shell)时的一些怪癖外,一切都很好。 Emacs shell 使用 Cygwin 的 bash。现在最大的问题是无法向 shell 发送 SIGINT 来中断当前正在运行的命令。例如,我经常使用 ssh 登录到远程主机,然后“tail -f”一个文件。我无法摆脱 tail 命令。在 Unix/Linux 下使用 Emacs shell 时,按 C-c C-c (comint-interrupt-subjob) 会将 SIGINT 发送到 shell (bash),并且 tail 命令(或其他命令)将按预期中断。
举个简单快捷的例子,运行“M-x shell”,然后“sleep 30”,尝试中断 sleep 命令。您可以退出 (C-g) 并在 Emacs 中执行其他操作,但 Emacs shell 会在 sleep 命令期间挂起。
我感觉这与 Cygwin 中信号发送/处理的差异有关,与 Unix 中的信号不同。由于 Cygwin bash shell 对信号作出适当的响应,我不得不假设有一些方法可以让 Emacs 以它理解的方式向 bash shell 发送 SIGINT。有什么想法吗?
顺便说一句,我使用过 Emacs eshell、term 和 ansi-term,但出于多种原因我更喜欢 shell。我也使用 mintty 和 GNU Screen,并且没有任何提示,但是使用 Emacs shell 并将我的终端 session 视为文本文件是一件很棒的事情。
最佳答案
我认为这更多是命令提示符作为 tty 的问题。通常,我在向 Cygwin 和 Cygwin 中的 emacs shell 发送正确信号时遇到问题,所以我找到了这个名为 puttycyg 的程序。 Putty 有一个很好的 shell ,我想要 Cygwin 的类似东西,所以我使用这个:http://code.google.com/p/puttycyg/ .
我在桌面上创建了一个快捷方式,以便于访问。您可以创建一个 session 并从那里将其称为“cygwin”,然后创建可执行文件的快捷方式并使用 -load "cygwin"
。
关于bash - 在 Emacs shell 和 Cygwin 下处理信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083806/