1

我将 W32 GNU Emacs 24.1.50.1 与 Cygwin bash 3.2.51 一起使用。我知道这种组合很麻烦(参见EmacsWikiCygwin 列表)。但是,我现在要解决的问题不仅限于 Cygwin。我也遇到了 MinGW 的问题。所以,问题是:

在 Emacs 中,M-x shell如果您已经设置了变量shell-file-nameexplicit-bash-args适当地设置了一个 shell(参见例如这里)。然后发出一个需要标准输入的命令,例如cat. 要取消,cat通常可以键入 Ctrl-D一次,然后返回到 shell 提示符。在 W32 emacs 中,当您执行此操作时(甚至当您显式发出M-x comint-send-eof)时,cat 命令将退出并且bash shell 也会退出。

我试图通过将环境变量设置为 5 来增加 bash 的“弹性” IGNOREEOF,但随后单个 Ctrl-D 会导致以下输出

$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ Use "exit" to leave the shell.
$ exit

Process shell finished

当然,bash 又退出了。仅当 shell 在 W32 emacs 中运行时才会出现此问题 - Cygwin bash 通过 Cygwin tty 窗口和 MinGW bash 通过其自己的 MinTTY 工作正常。

为什么在 W32 Emacs 中会发生这种情况,我如何cat在使用 W32 Emacs 时退出正在运行的子命令(例如)而不退出 bash shell?

4

3 回答 3

0

W32 世界中并不真正存在像您期望的那样的 tty 概念。如果您想看到这种 Unixy 行为,您不仅需要运行 Cygwin 程序,而且该 Cygwin 程序还需要与另一个 Cygwin 程序(Emacs,终端,你的名字)对话。IOW 你只能使用 Cygwin 版本的 Emacs 来获得它。

于 2012-10-20T15:45:30.793 回答
0

通常您可以使用 Ctrl-Z 和 Ctrl-D。看看这个注释:

http://ignaciopp.wordpress.com/2009/07/02/emacs-shell-workaround-for-killing-input-in-windows-version/

于 2012-12-31T18:01:42.590 回答
0

MS Windows的GNU Emacs 常见问题解答指出,shell 缓冲区中的任何子进程都存在此问题。所以它也会影响 DOS 命令行(当然你通常不会在 DOS 中使用 Ctrl-D,所以它并不那么明显)。常见问题解答中没有建议解决方法,所以我猜测没有简单的解决方法。

于 2012-10-25T17:49:24.970 回答