当我退出Emacs时,我有一个关于如何“优雅地退出粘液”的问题。以下是我的配置文件的相关部分:
;; SLIME configuration
(setq inferior-lisp-program "/usr/local/bin/sbcl")
(add-to-list 'load-path "~/Scripts/slime/")
(require 'slime)
(slime-setup)
;; configure SLIME to gracefully quit when emacs
;; terminates
(defun slime-smart-quit ()
(interactive)
(when (slime-connected-p)
(if (equal (slime-machine-instance) "Gregory-Gelfonds-MacBook-Pro.local")
(slime-quit-lisp)
(slime-disconnect)))
(slime-kill-all-buffers))
(add-hook 'kill-emacs-hook 'slime-smart-quit)据我所知,每当我退出Emacs时,这应该会自动杀死粘液及其相关的进程。但是,每次我退出时,我仍然会得到提示:
Proc Status Buffer Command
---- ------ ------ -------
SLIME Lisp open *cl-connection* (network stream connection to 127.0.0.1)
inferior-lisp run *inferior-lisp* /usr/local/bin/sbcl
Active processes exist; kill them and exit anyway? (yes or no) 有没有人能说出我的配置中遗漏了什么?
提前谢谢。
发布于 2010-11-17 01:49:41
根据manual page on this的说法,“一旦save-buffers kill-emacs完成了所有文件的保存和确认,它就会调用kill-emacs来运行这个钩子中的函数。”因此,对活动进程的检查是在调用钩子之前完成的。
一个可行的解决方案是创建您自己的kill-emacs命令,例如
(defun kill-emacs-slime ()
(interactive)
(when (slime-connected-p)
(if (equal (slime-machine-instance) "Gregory-Gelfonds-MacBook-Pro.local")
(slime-quit-lisp)
(slime-disconnect)))
(slime-kill-all-buffers)
(save-buffers-kill-emacs))然后把这个绑定到你的退出键上
(global-set-key (kbd "C-x C-c") 'kill-emacs-slime)(我假设您的函数正确地退出了粘液并关闭了它的缓冲区,我还没有测试过它)。
发布于 2010-11-16 21:16:50
问题是,在kill-emacs-hooks有机会完成其工作之前,对活动进程的检查(以及对确认的查询将被终止)将被激活。
一个非常笨拙的解决方案:
(defadvice save-buffers-kill-terminal (before slime-quit activate)
(slime-smart-quit)
(sleep-for 1))函数slime-quit-lisp是异步的;它需要时间在返回后完成,因此是sleep-for。
发布于 2010-12-07 06:01:27
@Alex -我发现你的方法是最干净的退出粘液的方法。但是,需要以这种方式编辑配置文件才能使用它。
(require 'slime-autoloads)
(slime-setup '(slime-fancy)) ; load contrib packages一旦它是这样设置的,那么:
PS:检查启动时的SLIME配置- http://common-lisp.net/project/slime/doc/html/Loading-Contribs.html
https://stackoverflow.com/questions/2337573
复制相似问题