我只想在emacs服务器运行时在我的init文件中执行一些代码(特别是如果emacs是以--daemon
标志启动的话)。似乎没有任何钩子在调用server-start
时运行,并且没有变量我可以查看服务器是否正在运行。
hack是使用(featurep 'server)
,因为除非启动服务器,否则不会加载服务器功能,这似乎对我的目的有用,但我想知道正确的做法是什么这是。感谢。
答案 0 :(得分:16)
如果服务器进程正在运行,则关联的进程对象为server-process
。测试server-process
是否为非零,告诉您服务器是否应该运行;你可以测试它的状态,检查它是否处于可接受的状态。
(and (boundp 'server-process)
(memq (process-status server-process) '(connect listen open run)))
您可以测试Emacs是否作为具有(daemonp)
的守护程序调用。
答案 1 :(得分:1)
更新:如果缓冲区没有进程,Gilles发布的代码会抛出,例如“Buffer scratch 没有进程”。当此代码用于〜/ .emacs.el 时,我们冒险Emacs无法启动。要抓住错误:
(defun --running-as-server ()
"Returns true if `server-start' has been called."
(condition-case nil
(and (boundp 'server-process)
(memq (process-status server-process)
'(connect listen open run)))
(error)))