仅当存在时才加载emacs elisp库

3

我有一个标准的 .emacs 文件,想要在多台计算机上使用。但有些计算机上我无法加载所有的elisp库。

例如,在没有安装的计算机上,我现在会得到以下错误信息:

Cannot open load file: wc-mode-0.2.el

我可以通过以下方式之一使 .emacs 文件在此处不出错吗?

  1. 在尝试加载库之前检查其是否存在。
  2. 捕获错误条件。

请注意,上述内容中的 HTML 标签已被保留。
2个回答

6

loadrequire都有一种方式,如果找不到文件,则不会发出错误信号。

(load FILE &optional NOERROR NOMESSAGE NOSUFFIX MUST-SUFFIX)
(require FEATURE &optional FILENAME NOERROR)

所以你可以这样做:
;; using load
(when (load "myfile.el" t)
       (do-my-thing))
;;using require
(when (require "myfeature" nil t)
       (do-my-thing))

2
你的示例中缺少 NOERROR 参数。例如:(require 'feature nil 'noerror) - jpkotta
非常好。谢谢! - vy32

0

虽然 @yorodm 的回答可能更正确(已受赞同!),但我多年来一直在使用的一个表单是:

;; load & configure myfeature if it's available
(cond ((locate-library "myfeature")
       (require 'myfeature)
       (setq myfeature-variable "stuff")
       (do-my-thing))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接