O Emacs não carrega o tema na inicialização

21

Instalei o pacote de temas solarizados via MELPA. Eu posso selecionar um dos dois temas solarizados via `customize-theme e ele o ativa. Quando salvo as configurações do tema, ele adiciona o seguinte ao meu arquivo 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.
 )

Quando inicio o Emacs, ele não carrega o tema, mas também não recebo uma mensagem de erro. De fato, a execução eval-bufferno arquivo init.el carrega o tema.

user2249626
fonte
1
Você também tem um .emacsarquivo em seu diretório pessoal? Nesse caso, o init-el é ignorado.
Malabarba 29/10

Respostas:

21

adicione ao seu init.el

(load-theme 'solarized-dark t)

você pode ignorar as coisas que o emacs adicionou lá, basta excluí-lo.

Łukasz Gruner
fonte
1
Isso pode funcionar para solucionar o problema, mas não o solucionará. Se as configurações personalizadas dele não estiverem sendo carregadas, é algo que você deve entender.
Malabarba
21

Adicionei o seguinte ao meu init.elarquivo (não tenho um .emacsarquivo ~).

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

e depois no final

(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.
 )

Isso parece funcionar. Eu não estou muito familiarizado com o emacs, então não tenho idéia se essa é uma solução alternativa ruim ...

user2249626
fonte
Essa é realmente a solução correta.
lunaryorn
@lunaryorn O que torna essa a solução correta? (Trabalhou para mim.)
star-star brilhante
@TrevorAlexander Você precisa carregar pacotes antes de poder usá-los.
lunaryorn
17

Por padrão, o Emacs apenas carrega automaticamente os pacotes após o processamento do arquivo init. Portanto, ao tentar definir o tema, o pacote de temas não foi carregado.

Em vez de carregar todos os pacotes no seu arquivo init (como o que você parece estar fazendo), você também pode carregá-los após o carregamento automático do pacote, adicionando um gancho a after-init-hook, já que os pacotes são carregados automaticamente logo após o arquivo init e antes after-init-hook. Observe que isso não funcionará se você tentar load-themediretamente no arquivo init porque o pacote não foi carregado naquele momento.

Então, como alternativa, adicione isso ao seu arquivo init:

(add-hook 'after-init-hook (lambda () (load-theme 'solarized-light)))
Xinan
fonte
Eu acho que esta é a solução correta e obras em uma variedade de cenários (como para mim eu estou usando github.com/bbatsov/prelude e funciona como um encanto lá também)
Amol Gawai
Esta é a solução correta, e deve ser a resposta aceita
Dodgie
7

Eu acho que a parte importante é (inicializar pacote). Não tenho tanta certeza de que você precisa do bit de ativação do pacote na inicialização. Tão:

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

Você também pode dizer ao emacs para confiar em todos os seus temas por padrão, para que você não seja solicitado sempre:

(setq custom-safe-themes t)

O ponto a ser lembrado é que a ordem de tudo é importante. Dependendo de onde no arquivo você está tentando carregar um tema, algumas das sugestões acima podem ou não ser necessárias.

Inicializo os pacotes e o repositório MELPA no início do meu arquivo .emacs, o que me permite referenciar com mais facilidade os pacotes carregados com MELPA posteriormente no arquivo. Também defino temas personalizados de segurança, para que eu não precise me preocupar com o fato de o Custom estar adicionando as informações de confiança no final do arquivo. Aqui está o que eu tenho:

(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)

..mais tarde no arquivo ..

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

A primeira linha deve ser para saber onde procurar:

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

então os outros podem ir :)

Gibzo
fonte