在Geiser杀死球拍无限循环

时间:2013-12-30 19:33:27

标签: emacs racket geiser

当我通过使用geiser + racket评估emacs中的表单而意外地进行无限循环时,等待一分钟左右后,emacs将再次开始响应。不幸的是,之后的每个评估至少需要一分钟。通常,在第二个或第三个eval之后,emacs将完全停止响应,并且最快要做的就是重新启动Ubuntu机器。

是否有一些设置可以在geiser中阻止这种情况,或者告诉emacs杀死geiser?

3 个答案:

答案 0 :(得分:5)

根据REPL文档,您应该可以使用 C-c C-q 来终止REPL。从链接到REPL文档,转到急救部分;它接近它的底部。

答案 1 :(得分:4)

这就是我挂断电话时的所作所为。 多年来,我不记得Emacs陷入了无法恢复的状态。

使用 C-g 。如果需要,反复。它调用keyboard-quit。 这应该可以打破任何卡住的循环并让您输入命令。

现在如果geiser或任何其他进程行为不端,只需杀死缓冲区即可 对应于此过程。 C-x C-b 将为您提供所有缓冲区的列表。 如果您无法识别属于geiser的那个,只需重新启动Emacs即可 并且只打开geiser并再次查看缓冲区列表。

现在用 d 标记行为不当的缓冲区。 使用 x 执行删除。而已。您可以 现在重启geiser或其他任何东西。这种方法完全通用。

顺便说一下,重新启动Ubuntu机器太激烈了。 什么都不能用窗口停止应用程序,但X仍然有效, 使用xkill实用程序。我把它绑定到Ctrl-Alt-F12。 然后你只需点击一个你不喜欢的窗口,它就消失了。

如果xkill不起作用,请切换到虚拟终端 Ctrl-Alt-F1并使用htop来终止该应用程序。

答案 2 :(得分:0)

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提示符,所有定义都消失了。