当nrepl-jack-in被叫时,杀死以前的nrepl会话?

时间:2012-10-21 22:08:34

标签: emacs clojurescript

此时此刻,我主要使用nrepl与Clojurescript应用程序交谈。我喜欢在emacs中使用nrepl。我输入M-x nrepl-jack-in启动nrepl。

不幸的是,我的nrepl会话经常被完全挂起。当发生这种情况时,我尽职尽责地杀死与nrepl相关的3个缓冲区。这些缓冲区是:

  1. *nrepl*
  2. *nrepl-connection*
  3. *nrepl-server*
  4. *nrepl-server*也有一个活跃的过程,它问我是否要关闭它,我说是。

    然后我再次输入M-x nrepl-jack-in

    这是一种痛苦。

    我想重载nrepl-jack-in,以便它自动检查是否存在这3个缓冲区中的任何一个。如果它们中的任何一个确实存在,它将终止这些缓冲区以及与这些缓冲区相关的任何活动进程。执行此操作后,重载的nrepl-jack-in将照常进行。我想这样,因为那时,每当我发现nrepl已经决定再次挂起时,我就可以输入M-X nrepl-jack-in并重新启动我正在做的事情。

2 个答案:

答案 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))