我可以在Slime中使用正在运行的线程(Swank Emacs)

时间:2012-08-09 00:30:40

标签: emacs clojure lisp slime swank

我经常发现自己从REPL开始一个长时间运行的过程,然后希望我可以在运行时继续使用REPL执行其他任务。 我可以使用slime来设置当前线程或启动一个新的REPL控制线程吗?启动一个额外的REPL缓冲区也没问题。

3 个答案:

答案 0 :(得分:2)

编辑:

嗯,我在某种程度上设法错过了你问题上的Clojure标签。如果下面的解决方案适用于Clojure,我会非常惊讶,因为您可能知道,不幸的是,Clojure社区(至少对于我们这些使用Clojure CL的人来说)维护着自己的Slime版本。我不会删除答案,因为它可能有助于CL程序员搜索此功能。

除非Clojure有类似的解决方案,允许在单个套接字上多路复用多个REPL,否则你可以手动启动第二个Swank服务器(来自*inferior-lisp*缓冲区)并通过{{连接到它1}}作为解决方法。 (不能测试这台ATM,因为我不久前停止使用Slime和Clojure。)


你试过slime-connect contrib吗?我自己并没有真正使用它,但在CCL / Win / Emacs 24下我可以使用快速测试。

我测试了这样:slime-mrepl,在REPL中输入M-x slime,切换缓冲区,(sleep 10)

答案 1 :(得分:2)

请原谅我有点陈腐和非粘性的具体答案;在好的方面,它适用于任何clojure REPL。

当我提前知道我从REPL开始一个长时间运行的任务然后我使用future开始计算并在解除它之前检查future-done?

答案 2 :(得分:1)

这可能无法解答您的问题,但只要(slime-communication-style):spawn,使用C-x C-e进行的评估总是会产生自己的线程并且可以在与REPL线程中发生的任何事情并行。输出(来自println等)将出现在REPL缓冲区中。