如何知道emacs服务器是否正在运行

时间:2010-09-13 22:43:21

标签: emacs

我只想在emacs服务器运行时在我的init文件中执行一些代码(特别是如果emacs是以--daemon标志启动的话)。似乎没有任何钩子在调用server-start时运行,并且没有变量我可以查看服务器是否正在运行。

hack是使用(featurep 'server),因为除非启动服务器,否则不会加载服务器功能,这似乎对我的目的有用,但我想知道正确的做法是什么这是。感谢。

2 个答案:

答案 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)))