7

現時点では、私は主にClojurescriptアプリと通信するためにnreplを使用しています。私は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これらの3つのバッファーのいずれかが存在するかどうかを自動的にチェックするように、オーバーロードしたいと思います。それらのいずれかが存在する場合、これらのバッファーおよびこれらのバッファーに関連付けられているアクティブなプロセスを強制終了します。これを行った後、オーバーロード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 に答える