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.