Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 在调用nrepl插口时终止以前的nrepl会话?_Emacs_Clojurescript - Fatal编程技术网

Emacs 在调用nrepl插口时终止以前的nrepl会话?

Emacs 在调用nrepl插口时终止以前的nrepl会话?,emacs,clojurescript,Emacs,Clojurescript,此时此刻,我使用nrepl主要是与Clojurescript应用程序对话。我喜欢在emacs中使用nrepl。我通过键入M-x nrepl jack in来启动nrepl 不幸的是,我的nrepl会话经常被完全挂起。发生这种情况时,我会尽职尽责地杀死与nrepl相关的3个缓冲区。这些缓冲区是: *nrepl* *nrepl连接* *nrepl服务器* *nrepl服务器*也有一个活动进程,它问我是否要关闭它,我说是的 然后我再次输入M-x nrepl插孔 这是一种痛苦。 我想重载nrepl插孔,

此时此刻,我使用nrepl主要是与Clojurescript应用程序对话。我喜欢在emacs中使用nrepl。我通过键入
M-x nrepl jack in
来启动nrepl

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

  • *nrepl*
  • *nrepl连接*
  • *nrepl服务器*
  • *nrepl服务器*
    也有一个活动进程,它问我是否要关闭它,我说是的

    然后我再次输入
    M-x nrepl插孔

    这是一种痛苦。


    我想重载
    nrepl插孔
    ,以便它自动检查这3个缓冲区是否存在。如果它们中的任何一个确实存在,它将杀死这些缓冲区以及与这些缓冲区关联的任何活动进程。执行此操作后,过载的
    nrepl插孔将正常工作。我想这样做是因为,每当我检测到nrepl决定再次挂起时,我可以键入
    M-X nrepl jack in
    ,然后重新开始我正在做的事情。

    这应该可以完成工作:

    (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))
    

    选择的答案对我来说不太合适。。。nrepl进程sentinel抛出错误,阻止其重新启动。我对它进行了一些研究,得出了以下结论(它还提供了一个单独的
    kill-nrepl
    函数)


    当我键入
    M-x我的nrepl jack in
    时,我在*Messages*中得到以下错误:我的nrepl jack in:参数数目错误:#[(提示项目)“ÄÆÆ#ÈÊÌÌÍÎÐ#Ò”*“[prompt project nrepl server command cmd process format”cd%s&%s“ido read directory name”项目:“启动进程shell命令”nrepl server”…]4 nil“P”],0 sentinel通常只会要求您确认是否终止底层缓冲区进程。当我尝试重新启动时,它对我起了作用,但显然我不会像上游那样提交代码;-)
    ;; 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))