在加载之前检查主题是否可用

check if the theme is available before loading it

我正在使用 emacsprelude 配置。 我更改了主题并且它工作正常,我将它添加到 preload directory 中,如下所示:

;; preload color theme
(setq prelude-theme 'my-theme)

我通过 prelude-require-packages 安装了主题,但不在 preload 文件夹中(不确定它是否很快可用)。有没有办法以编程方式检查主题是否可用,用更安全的东西替换上一行,比如:

;; just to get the idea
(when (is-available 'my-theme)
      (setq prelude-theme 'my-theme))

编辑 我试过了:

;; preload color theme
(when (featurep 'my-theme)
  (setq prelude-theme 'my-theme))

但在这种情况下,我得到的是默认主题,而不是“我的主题”。

load-theme函数使用locate-file查找主题文件。这种方法基于代码:

(if (locate-file (concat (symbol-name 'my-theme) "-theme.el")
                 custom-theme-load-path '("" "c"))
    (setq prelude-theme 'my-theme))

您可以用主题文件名字符串替换整个 (concat ...) 结构,在本例中为 "my-theme-theme.el".