我使用的是Cygwin版本的Emacs,一切都很好,只有在使用Emacs shell(M-x shell)时存在一些怪癖。Emacs shell正在使用Cygwin的bash。目前最大的问题是不能发送SIGINT到shell以中断当前正在运行的命令。例如,我经常使用ssh登录到远程主机,然后“tail -f”一个文件。我无法中断tail命令。在Unix / Linux下使用Emacs shell时,按下C-c C-c(comint-interrupt-subjob)将向shell(bash)发送SIGINT,并且tail命令(或其他命令)将如预期中断。
为了快速简便,运行“M-x shell”,然后运行“sleep 30”,并尝试中断sleep命令。你可以在Emacs内退出(C-g)并做其他事情,但是Emacs shell会在sleep命令的持续时间内挂起。
我感觉这与Cygwin中信号发送/处理的差异有关,与Unix中的信号不同。由于Cygwin bash shell对信号作出了适当的响应,因此我必须假设有某种方式能够让Emacs以bash shell理解的方式发送SIGINT。你有什么想法吗?
顺便说一句,我曾经使用过Emacs eshell,term和ansi-term,但出于许多原因,我更喜欢shell。我还使用mintty和GNU Screen,在那里没有任何抱怨,但是使用Emacs shell并将终端会话视为文本文件是一件美妙的事情。
为了快速简便,运行“M-x shell”,然后运行“sleep 30”,并尝试中断sleep命令。你可以在Emacs内退出(C-g)并做其他事情,但是Emacs shell会在sleep命令的持续时间内挂起。
我感觉这与Cygwin中信号发送/处理的差异有关,与Unix中的信号不同。由于Cygwin bash shell对信号作出了适当的响应,因此我必须假设有某种方式能够让Emacs以bash shell理解的方式发送SIGINT。你有什么想法吗?
顺便说一句,我曾经使用过Emacs eshell,term和ansi-term,但出于许多原因,我更喜欢shell。我还使用mintty和GNU Screen,在那里没有任何抱怨,但是使用Emacs shell并将终端会话视为文本文件是一件美妙的事情。