此时此刻,我主要使用nrepl与Clojurescript应用程序交谈。我喜欢在emacs中使用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
并重新启动我正在做的事情。
答案 0 :(得分:4)
这应该完成工作:
(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))
答案 1 :(得分:4)
所选择的答案对我来说并不适用... 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))