Gre*_*ond 13 emacs elisp slime dot-emacs
当我退出Emacs时,我有一个关于如何"优雅地退出SLIME"的问题.这是我的配置文件的相关部分:
;; 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)
Run Code Online (Sandbox Code Playgroud)
据我所知,每当我退出Emacs时,这应该会自动杀死SLIME及其关联的进程.但是,每次我退出时,我仍然得到提示:
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)
Run Code Online (Sandbox Code Playgroud)
有人可以从我的配置中找到我缺少的东西吗?
提前致谢.
Ale*_*son 23
我知道这不是你要求的,但也许这对我这样的其他新手很有帮助.
您可以执行SLIME命令退出,这样您就可以获得一个漂亮,干净的emacs.
在SLIME缓冲区中,键入,(逗号).您被置于迷你缓冲区中,SLIME会询问要执行的命令.输入sayoonara并点击Enter.您应该看到SLIME退出,迷你缓冲区提到"连接已关闭".并且你被放置在*scratch*缓冲区中.
我想知道是否有一些方法可以简单地从.emacs中调用这个"sayoonara"命令,而不是手动取消所有内容.
根据此手册页,“一旦 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))
Run Code Online (Sandbox Code Playgroud)
然后将其绑定到您的退出键
(global-set-key (kbd "C-x C-c") 'kill-emacs-slime)
Run Code Online (Sandbox Code Playgroud)
(我假设您的函数正确退出 SLIME 并关闭其缓冲区,我尚未对其进行测试)。