此时此刻,我主要是使用nrepl与Clojurescript应用程序对话。我喜欢从内部使用nrepl。我从输入M-x nrepl-jack-in开始nrepl。
不幸的是,我的nrepl会话经常被完全挂起。当这种情况发生时,我会尽职尽责地杀死与nrepl相关的3个缓冲区。这些缓冲区是:
*nrepl**nrepl-connection**nrepl-server**nrepl-server*也有一个活动的过程,它问我是否想关闭它,我说是的。
然后再次输入M-x nrepl-jack-in。
,这太痛苦了,
我想让nrepl-jack-in过载,这样它就可以自动检查这3种缓冲区是否存在。如果它们中的任何一个确实存在,它将杀死这些缓冲区和与这些蜂巢相关的任何活动进程。完成此操作后,重载的nrepl-jack-in将照常进行。我希望这样做,因为每当我发现nrepl决定再次挂起它自己时,我就可以输入M-X nrepl-jack-in并重新启动我正在做的事情。
发布于 2012-10-22 06:29:14
这应该能完成任务:
(defun my-nrepl-jack-in ()
(interactive)
(dolist (buffer (buffer-list))
(when (string-prefix-p "*nrepl" (buffer-name buffer))
(kill-buffer buffer)))
(nrepl-jack-in nil))发布于 2012-10-23 13:29:24
选择的答案对我不太管用..。nrepl进程哨兵抛出一个错误,阻止它重新启动。我玩了它一点,并提出了以下(这也提供了一个单独的kill-nrepl函数)
;; Disable prompt on killing buffer with a process
(setq kill-buffer-query-functions
(remq 'process-kill-buffer-query-function
kill-buffer-query-functions))
(defun nrepl-kill ()
"Kill all nrepl buffers and processes"
(interactive)
(when (get-process "nrepl-server")
(set-process-sentinel (get-process "nrepl-server")
(lambda (proc evt) t)))
(dolist (buffer (buffer-list))
(when (string-prefix-p "*nrepl" (buffer-name buffer))
(kill-buffer buffer))))
(defun nrepl-me ()
(interactive)
(nrepl-kill)
(nrepl-jack-in nil))https://stackoverflow.com/questions/13002685
复制相似问题