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

Chr*_*don 16 emacs elisp

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

(if (not (server-running-p))
    (server-start))
Run Code Online (Sandbox Code Playgroud)

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

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


实际上找到了答案.出于某种原因,你必须使用fboundp它来代替它boundp.

ryu*_*ash 23

boundp检查变量是否绑定.既然server-running-p是你想要使用的功能fboundp.像这样:

(if (and (fboundp 'server-running-p) 
         (not (server-running-p)))
   (server-start))
Run Code Online (Sandbox Code Playgroud)


小智 14

一种更简单的方法是使用"require"来确保加载服务器代码.这是我使用的:

(require 'server)
(unless (server-running-p)
    (server-start))
Run Code Online (Sandbox Code Playgroud)

  • 我也试图让我的.emacs兼容Emacs和XEmacs.在那种情况下,使用`fbounpd`对我来说似乎更安全,不是吗? (2认同)