如何检查Emacs下的函数(例如server-running-p)是否可用?

时间:2012-04-03 18:37:17

标签: emacs elisp

我正在尝试检查我的.emacs文件中是否有server-running-p可用。我已经有了以下内容:

(if (not (server-running-p))
    (server-start))

但在我使用Emacs的某些计算机上,调用(server-running-p)会出错,因为所述调用不可用。所以我想在调用之前检查server-running-p是否可用。我认为boundp会尝试,但即使(boundp 'server-running-p)调用成功,调用nil也会返回(server-running-p)。检查调用server-running-p不会失败的正确方法是什么...或者至少在所述调用失败时抑制错误。 (无论如何server-running-p返回boundp,但是调用它成功了?{<1}}是什么样的奇怪对象?)

这是在Emacs 23.2.1上,如果它有任何区别。


实际上找到了答案。由于某种原因,您必须使用nil代替fboundp

3 个答案:

答案 0 :(得分:23)

boundp检查是否绑定了变量。由于server-running-p功能,您需要使用fboundp。像这样:

(if (and (fboundp 'server-running-p) 
         (not (server-running-p)))
   (server-start))

答案 1 :(得分:13)

更简单的方法是使用“require”来确保加载服务器代码。这是我使用的:

(require 'server)
(unless (server-running-p)
    (server-start))

答案 2 :(得分:3)

ryuslash的建议真有帮助,但我为.emacs修改了它:

(unless (and (fboundp 'server-running-p)
             (server-running-p))
  (server-start))

即使尚未加载server.el,也会使服务器运行 - server-running-p仅在加载server.el时定义,server-start自动加载。