我通过
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
为任何您喜欢的。