2015-07-25 4 views
0

Я использую 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".

+0

Не работает. Это потому, что моя тема находится в каталоге 'elpa'? – nha

+1

Да. Просто добавьте этот каталог в 'custom-theme-load-path', как описано в [этом ответе] (http://stackoverflow.com/a/15381087/409228). –

+0

Я немного удивлен, хотя могу загрузить его с помощью 'M-x load-theme', но это не в моем пути загрузки? Но спасибо, я попробую. – nha

Смежные вопросы