当我不小心用 geiser + racket 评估 emacs 中的表单时,经过一分钟左右的等待,最终 emacs 将再次开始响应。不幸的是,之后的每个评估至少需要一分钟。通常,在第二次或第三次评估之后,emacs 将完全停止响应,此时最快的做法是重新启动 Ubuntu 机器。
是否有一些设置可以防止 geiser 中出现这种情况,或者有一种方法可以告诉 emacs 杀死 geiser?
这是我在挂断电话时所做的。 多年来,我不记得Emacs陷入了无法恢复的状态。
使用C-g。如果需要,请反复使用。它调用keyboard-quit
. 这应该会打破任何卡住的循环,并使您能够输入命令。
现在,如果盖泽或任何其他进程行为异常,只需杀死缓冲区 对应于此过程。C-x C-b将为您提供所有缓冲区的列表。 如果你不认识属于 geiser 的那个,只需重新启动 Emacs 并仅打开盖泽并再次查看缓冲区列表。
现在用d标记行为异常的缓冲区。 使用x执行删除。就是这样。您可以 现在重新启动盖泽或其他任何东西。这种方法是完全通用的。
顺便说一句,重新启动 Ubuntu 机器太激烈了。 当没有任何工作可以停止带有窗口的应用程序,但 X 仍然有效时, 使用xkill
实用程序。例如,我已经将其绑定到Ctrl-Alt-F12
。 然后你只需点击一个你不喜欢的窗口,它就消失了。
如果xkill
不起作用,请使用Ctrl-Alt-F1
并使用htop
来终止应用程序。
根据 REPL 文档,您应该能够使用C-c C-q来终止 REPL。 从指向 REPL 文档的链接,转到急救部分;它接近它的底部。
Geiser 在这里也挂在循环上。 在两天前更新的 Debian 7 上运行的 emacs 24.3.1 中;M-x 运行盖泽;然后得到一个带有 REPL 提示符的窗口。 一切都很好,但然后说>(定义 f (* f (- n 1))),然后> (f 3),缓冲区中的进程被锁定。 C-c C-c 和 C-c C-q 什么都不做。 终止缓冲区,对终止子进程的查询回答"是",然后重新启动确实会得到一个 REPL 提示符,所有定义都消失了。