Я часто замечаю, что сам запускаю какой-то длительный процесс из REPL, а затем жалею, что не могу продолжать использовать REPL для других задач, пока он работает. Могу ли я использовать слизь для фона текущего потока или запуска нового потока управления REPL? Также можно запустить дополнительный буфер REPL.
Могу ли я фонить запущенный поток в Slime (Swank Emacs)
Ответы (3)
Редактировать:
Хм, мне как-то удалось пропустить тег Clojure в вашем вопросе. Я был бы очень удивлен, если бы приведенное ниже решение работало для Clojure, поскольку, как вы, вероятно, знаете, сообщество Clojure, к сожалению (по крайней мере, для тех из нас, кто использует Clojure и CL), поддерживает свою собственную версию Slime. Я не буду удалять ответ, потому что он может быть полезен программистам на CL, которые ищут эту функцию.
Если для Clojure не существует аналогичного решения, которое позволяет мультиплексировать несколько REPL через один сокет, вы могли бы просто запустить второй сервер Swank вручную (из буфера *inferior-lisp*
) и подключиться к нему через slime-connect
в качестве обходного пути. (Не могу протестировать этот банкомат, поскольку некоторое время назад перестал использовать Slime с Clojure.)
Вы пробовали slime-mrepl
contrib? На самом деле я сам не использовал его, но быстрый тест под CCL / Win / Emacs 24 у меня сработал.
Я тестировал это так: M-x slime
, введите (sleep 10)
в REPL, переключите буфер, M-x slime-new-mrepl
.
Пожалуйста, простите меня за несколько банальный и не связанный с слизью ответ; с другой стороны, он будет работать с любым закрытием REPL.
Когда я заранее знаю, что запускаю длительную задачу из REPL, я запускаю вычисление с помощью future
и проверяю с помощью future-done?
перед его отменой.
Это может не ответить на ваш вопрос, но может быть полезно понять, что, пока (slime-communication-style)
равно :spawn
, оценки, выполненные с использованием C-x C-e
, всегда порождают свой собственный поток и могут выполняться параллельно с тем, что происходит в потоке REPL. Вывод (из println
и т. Д.) Появится в буфере REPL.