首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优雅地退出SLIME和Emacs?

如何优雅地退出SLIME和Emacs?
EN

Stack Overflow用户
提问于 2010-02-26 04:57:59
回答 7查看 9.3K关注 0票数 13

当我退出Emacs时,我有一个关于如何“优雅地退出粘液”的问题。以下是我的配置文件的相关部分:

代码语言:javascript
复制
;; 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时,这应该会自动杀死粘液及其相关的进程。但是,每次我退出时,我仍然会得到提示:

代码语言:javascript
复制
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) 

有没有人能说出我的配置中遗漏了什么?

提前谢谢。

EN

回答 7

Stack Overflow用户

发布于 2010-11-17 01:49:41

根据manual page on this的说法,“一旦save-buffers kill-emacs完成了所有文件的保存和确认,它就会调用kill-emacs来运行这个钩子中的函数。”因此,对活动进程的检查是在调用钩子之前完成的。

一个可行的解决方案是创建您自己的kill-emacs命令,例如

代码语言:javascript
复制
(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))

然后把这个绑定到你的退出键上

代码语言:javascript
复制
(global-set-key (kbd "C-x C-c") 'kill-emacs-slime)

(我假设您的函数正确地退出了粘液并关闭了它的缓冲区,我还没有测试过它)。

票数 5
EN

Stack Overflow用户

发布于 2010-11-16 21:16:50

问题是,在kill-emacs-hooks有机会完成其工作之前,对活动进程的检查(以及对确认的查询将被终止)将被激活。

一个非常笨拙的解决方案:

代码语言:javascript
复制
(defadvice save-buffers-kill-terminal (before slime-quit activate)
  (slime-smart-quit)
  (sleep-for 1))

函数slime-quit-lisp是异步的;它需要时间在返回后完成,因此是sleep-for

票数 3
EN

Stack Overflow用户

发布于 2010-12-07 06:01:27

@Alex -我发现你的方法是最干净的退出粘液的方法。但是,需要以这种方式编辑配置文件才能使用它。

代码语言:javascript
复制
(require 'slime-autoloads)
(slime-setup '(slime-fancy)) ; load contrib packages

一旦它是这样设置的,那么:

  1. 按逗号(,)调出minibuffer
  2. type quitsayoonara干净退出。

PS:检查启动时的SLIME配置- http://common-lisp.net/project/slime/doc/html/Loading-Contribs.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2337573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档