Emacs 守护进程不删除套接字

Emacs 守护进程不删除套接字

我通过

emacs --daemon

命令,它设置了一个套接字文件,/tmp/emacs100/server供 emacsclient 进行通信。当我终止服务器时:

emacsclient --eval "(kill-emacs)"

套接字文件仍然存在,阻止我再次运行。当我从 Emacs 内部emacs --daemon尝试时,也会发生同样的事情。或者,当我尝试:M-x kill-emacs

M-x server-force-delete

在 Emacs 中,我收到一条消息:

No connection file "/tmp/emacs1000/server

知道哪里出错了吗?如何顺利启动和关闭 emacs 服务器?

答案1

我显然遇到了同样的问题

(setq delete-by-moving-to-trash nil)

解决这个问题...

答案2

我正在运行 emacs 23.1.1,我的 .emacs 中只有这一行

;; Start Emacs server
(server-start)

而且我从来没有遇到过粘性套接字文件的问题。

emacsclient 运行良好。

答案3

您不必全局禁用垃圾。只需在每个可能删除服务器文件的命令中禁用它即可。首先定义一个宏作为在函数内禁用垃圾的快捷方式:

(defmacro bypass-trash-in-function (fun)
  "Set FUN to always use normal deletion, and never trash.

Specifically, the value of `delete-by-moving-to-trash' will be
set to nil inside FUN, so any deletions that happen inside FUN or
any functions called by it will bypass the trash."
  `(defadvice ,fun (around no-trash activate)
     "Ignore `delete-by-moving-to-trash' inside this function.

See `bypass-trash-in-function' for more information."
     (let (delete-by-moving-to-trash)
       ad-do-it)))

delete-file然后将该宏应用于其主体中任意位置的三个服务器函数:

;; Any server function that may delete the server file should never
;; move it to trash instead.
(mapc (lambda (fun) (eval `(bypass-trash-in-function ,fun)))
      '(server-start server-sentinel server-force-delete))

现在您可以将其设置delete-by-moving-to-trash为任何您喜欢的。

相关内容