我正在尝试检查我的.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
。
答案 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)
(unless (and (fboundp 'server-running-p)
(server-running-p))
(server-start))
即使尚未加载server.el,也会使服务器运行 - server-running-p
仅在加载server.el时定义,server-start
自动加载。