在emacs服务器中重新加载.emacs而不关闭当前的emacs客户端

时间:2014-01-04 16:21:00

标签: emacs emacs24

背景: 使用Emacs 24.2.1。

我用这个别名启动Emacs客户端和服务器:

emacsclient -nw -a="" -c "$@"

我想在更新之后重新加载我的.emacs文件而不让Emacs服务器终止当前客户端。基本上,现在,我会使用.emacs编辑emacsclient文件。然后,我做M-x load-file。然后它问

The current server still has clients; delete them? (yes or no)

说是会重新加载.emacs文件,但也会终止所有当前客户端,这会强制我的客户端关闭,因为它刚刚终止。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

我在Emacs源代码中找到此消息的唯一地方是函数server-start

(defun server-start (&optional leave-dead inhibit-prompt)
 ...
  (when (or (not server-clients)
            ;; Ask the user before deleting existing clients---except
            ;; when we can't get user input, which may happen when
            ;; doing emacsclient --eval "(kill-emacs)" in daemon mode.
            (cond
             ((and (daemonp)
                   (null (cdr (frame-list)))
                   (eq (selected-frame) terminal-frame))
              leave-dead)
             (inhibit-prompt t)
             (t (yes-or-no-p
                 "The current server still has clients; delete them? ")))) ...

我会假设您在.emacs中的某个地方执行server-start,这导致了问题。如果是这种情况,您将删除表达式并重新加载.emacs应该按预期工作。

PS:我会发表评论但我不允许这样做,所以我正在写答案:)