Проверьте, доступна ли тема перед загрузкой

Я использую emacs с prelude конфигурации. Я изменил тему, и она отлично работает, и я добавил ее в 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))

Но в этом случае я получаю тему по умолчанию, а не 'my-theme.

1 ответ

Решение

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",

Другие вопросы по тегам