Emacs не будет загружать тему при запуске


21

Я установил пакет соляризованной темы через MELPA. Я могу выбрать одну из двух соляризованных тем через `customize-theme, и она активирует ее. Когда я сохраняю настройки темы, он добавляет следующее в мой файл init.el:

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-enabled-themes (quote (solarized-dark)))
 '(custom-safe-themes
   (quote
    ("8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Когда я запускаю Emacs, он не загружает тему, но я также не получаю сообщение об ошибке. Фактически, запуск eval-bufferв файле init.el загружает тему.


1
У вас также есть .emacsфайл в вашем домашнем каталоге? Если это так, init-el игнорируется.
Малабарба

Ответы:


21

добавить в свой init.el

(load-theme 'solarized-dark t)

Вы можете игнорировать вещи, добавленные в Emacs, просто удалите их.


1
Это может помочь обойти проблему, но не решит ее. Если его пользовательские конфиги не загружаются, это кое-что, чтобы добраться до сути.
Малабарба

21

Я добавил следующее в мой init.elфайл (у меня нет .emacsфайла в ~).

(setq package-enable-at-startup nil) (package-initialize)

а затем в конце

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-enabled-themes (quote (solarized-dark)))
 '(custom-safe-themes
   (quote
    ("8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Это похоже на работу. Я не очень знаком с Emacs, поэтому я не знаю, является ли это плохим решением проблемы ...


Это на самом деле правильное решение.
lunaryorn

@lunaryorn Что делает это правильным решением? (Работал на меня.)
яркая звезда

@TrevorAlexander Вам необходимо загрузить пакеты, прежде чем вы сможете их использовать.
lunaryorn

17

По умолчанию Emacs автоматически загружает пакеты только после обработки файла инициализации. Поэтому, когда он пытался установить тему, пакет темы не был загружен.

Вместо того, чтобы загружать все пакеты в ваш файл инициализации (как, по-видимому, вы делаете), вы также можете загрузить их после автозагрузки пакетов, добавив хук after-init-hook, так как пакеты автоматически загружаются сразу после файла инициализации и до after-init-hook. Обратите внимание, что это не будет работать, если вы попытаетесь load-themeнапрямую в файле инициализации, потому что пакет не был загружен в этот момент.

В качестве альтернативы, добавьте это в ваш файл инициализации:

(add-hook 'after-init-hook (lambda () (load-theme 'solarized-light)))

Я думаю, что это правильное решение, и оно работает в различных сценариях (например, я использую github.com/bbatsov/prelude, и оно тоже работает как шарм)
Amol Gawai

Это правильное решение, и должен быть принят ответ
Доджи

7

Я думаю, что важная часть (package-initialize). Я не уверен, что вам нужен бит пакета enable-at-startup. Так:

(package-initialize)
(load-theme 'ample t)

Вы также можете указать emacs доверять всем темам по умолчанию, чтобы вы не получали подсказки каждый раз:

(setq custom-safe-themes t)

Имейте в виду, что порядок для всего важен. В зависимости от того, где в файле вы пытаетесь загрузить тему, некоторые из приведенных выше предложений могут быть или не быть необходимыми.

Я инициализирую пакеты и репозиторий MELPA в самом начале моего файла .emacs, что позволяет мне легче ссылаться на загруженные пакеты MELPA позже в этом файле. Я также установил custom-safe-themes, поэтому мне не нужно беспокоиться о том, что Custom добавляет информацию о доверии в конце файла. Вот что у меня есть:

(when (>= emacs-major-version 24)
  (require 'package)
  (package-initialize)
  (add-to-list 'package-archives
           '("melpa" . "http://melpa.milkbox.net/packages/") t)
  )
(setq custom-safe-themes t)

.. последний в файле ..

;; Load a nice theme if in GUI
(when (display-graphic-p)
  (load-theme 'ample t)
  )

-1

Первая строка должна знать, где искать:

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")

тогда остальные могут пойти :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.