7

目前,我主要使用 nrepl 与 Clojurescript 应用程序对话。我喜欢在 emacs 中使用 nrepl。我通过键入开始 nrepl M-x nrepl-jack-in

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

  1. *nrepl*
  2. *nrepl-connection*
  3. *nrepl-server*

*nrepl-server*还有一个活动进程,它问我是否要关闭它,我说是。

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

这是一种痛苦。

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

4

2 回答 2

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))
于 2012-10-23T13:29:24.483 回答
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))
于 2012-10-22T06:29:14.547 回答