我可以在史莱姆(Swank Emacs)中后台运行线程吗?



我经常发现自己从 REPL 启动一些长时间运行的进程,然后希望我可以在 REPL 运行时继续使用 REPL 执行其他任务。我可以使用 sleme 为当前线程提供背景或启动新的 REPL 控制线程吗?启动额外的 REPL 缓冲区也可以。

编辑:

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

除非 Clojure 有类似的解决方案,它允许多个 REPL 在单个套接字上多路复用,否则您可能只需手动启动第二个 Swank 服务器(从*inferior-lisp*缓冲区)并通过 slime-connect 连接到它作为一种解决方法。(无法测试此 ATM,因为我不久前停止在 Clojure 中使用 Slime。


你试过slime-mrepl吗?我自己实际上并没有使用过它,但是在CCL/Win/Emacs 24下进行了快速测试。

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

请原谅我一个有点陈词滥调和非粘液的特定答案; 从好的方面来说,它将适用于任何 clojure REPL。

当我事先知道我正在从 REPL 启动一个长时间运行的任务时,我会使用 future 开始计算并在取消引用之前与future-done?进行检查。

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

最新更新