【发布时间】:2012-08-06 04:37:36
【问题描述】:
我经常发现自己从 REPL 开始了一些长时间运行的进程,然后希望我可以在 REPL 运行时继续使用它来执行其他任务。 我可以使用 slime 来后台当前线程或启动一个新的 REPL 控制线程吗? 启动一个额外的 REPL 缓冲区也可以。
【问题讨论】:
标签: emacs clojure lisp slime swank
我经常发现自己从 REPL 开始了一些长时间运行的进程,然后希望我可以在 REPL 运行时继续使用它来执行其他任务。 我可以使用 slime 来后台当前线程或启动一个新的 REPL 控制线程吗? 启动一个额外的 REPL 缓冲区也可以。
【问题讨论】:
标签: emacs clojure lisp slime swank
编辑:
嗯,我不知何故错过了你问题上的 Clojure 标签。如果下面的解决方案适用于 Clojure,我会感到非常惊讶,因为您可能知道,不幸的是,Clojure 社区(至少对于我们这些使用 Clojure 和 CL 的人来说)维护着自己的 Slime 版本。我不会删除答案,因为它可能对搜索此功能的 CL 程序员有所帮助。
除非 Clojure 有类似的解决方案,它允许多个 REPL 在单个套接字上多路复用,否则您可以手动启动第二个 Swank 服务器(从 *inferior-lisp* 缓冲区)并通过 slime-connect 连接到它一种解决方法。 (无法测试这台 ATM,因为我不久前就停止在 Clojure 中使用 Slime。)
您尝试过slime-mrepl 贡献吗?我自己并没有真正使用过它,但是在 CCL/Win/Emacs 24 下对我进行了快速测试。
我是这样测试的:M-x slime,在 REPL 中输入(sleep 10),切换缓冲区,M-x slime-new-mrepl。
【讨论】:
请原谅我有些陈词滥调和非粘液的具体答案;从好的方面来说,它适用于任何 clojure REPL。
当我提前知道我正在从 REPL 开始一个长时间运行的任务时,我会使用 future 开始计算,并在取消引用之前检查 future-done?。
【讨论】:
这可能无法回答您的问题,但意识到只要(slime-communication-style) 是:spawn,使用C-x C-e 完成的评估总是会产生自己的线程并且可以与发生的任何事情并行运行REPL 线程。输出(来自println 等)将出现在 REPL 缓冲区中。
【讨论】: