Могу ли я фонить запущенный поток в Slime (Swank Emacs)

Я часто замечаю, что сам запускаю какой-то длительный процесс из REPL, а затем жалею, что не могу продолжать использовать REPL для других задач, пока он работает. Могу ли я использовать слизь для фона текущего потока или запуска нового потока управления REPL? Также можно запустить дополнительный буфер REPL.


person Arthur Ulfeldt    schedule 09.08.2012    source источник


Ответы (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.

person danlei    schedule 09.08.2012

Пожалуйста, простите меня за несколько банальный и не связанный с слизью ответ; с другой стороны, он будет работать с любым закрытием REPL.

Когда я заранее знаю, что запускаю длительную задачу из REPL, я запускаю вычисление с помощью future и проверяю с помощью future-done? перед его отменой.

person Alex Stoddard    schedule 09.08.2012

Это может не ответить на ваш вопрос, но может быть полезно понять, что, пока (slime-communication-style) равно :spawn, оценки, выполненные с использованием C-x C-e, всегда порождают свой собственный поток и могут выполняться параллельно с тем, что происходит в потоке REPL. Вывод (из println и т. Д.) Появится в буфере REPL.

person Matthias Benkard    schedule 13.08.2012