处理Emacs shell和Cygwin下的信号

时间:2011-02-22 20:49:45

标签: bash shell emacs cygwin

我使用的是Cygwin版本的Emacs。除了使用Emacs shell(M-x shell)时的一些怪癖之外,情况还算不错。 Emacs shell正在使用Cygwin的bash。目前最大的问题是无法向shell发送SIGINT来中断当前运行的命令。例如,我经常使用ssh登录到远程主机,然后“tail -f”文件。我无法突破尾巴命令。在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以一种它理解的方式将一个SIGINT发送到bash shell。有什么想法吗?

顺便说一句,我使用了Emacs eshell,term和ansi-term,但出于多种原因我更喜欢shell。我也使用mintty和GNU Screen,并且没有任何抱怨,但是使用Emacs shell并像处理文本文件这样的终端会话是一件很棒的事情。

1 个答案:

答案 0 :(得分:0)

我认为这更像是命令提示符作为tty的问题。我在向Cygwin和Cygwin中的emacs shell发送正确的信号时遇到了问题,所以我发现这个程序名为puttycyg。 Putty有一个很棒的shell,我想要Cygwin这样的东西,所以我使用它:http://code.google.com/p/puttycyg/

我在桌面上创建了一个快捷方式,以便更轻松地访问。您可以创建一个会话并从那里将其命名为“cygwin”,然后创建可执行文件的快捷方式并使用-load "cygwin"