Emacs non caricherà il tema all'avvio


21

Ho installato il pacchetto tematico solarizzato tramite MELPA. Posso selezionare uno dei due temi solarizzati tramite `personalizza-tema e lo attiva. Quando salvo le impostazioni del tema, aggiunge quanto segue al mio file 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 lancio Emacs non carica il tema ma non ricevo neanche un messaggio di errore. Infatti, l'esecuzione eval-buffernel file init.el carica il tema.


1
Hai anche un .emacsfile nella tua home directory? In tal caso, init-el viene ignorato.
Malabarba,

Risposte:


21

aggiungi al tuo init.el

(load-theme 'solarized-dark t)

puoi ignorare le cose emacs aggiunte lì, semplicemente eliminarle.


1
Questo potrebbe funzionare per aggirare il problema, ma non lo risolverà. Se le sue configurazioni personalizzate non vengono caricate, questo è qualcosa in fondo.
Malabarba,

21

Ho aggiunto quanto segue al mio init.elfile (non ho un .emacsfile in ~).

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

e poi alla fine

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

Sembra funzionare. Non ho molta familiarità con Emacs, quindi non ho idea se questa è una brutta soluzione ...


Questa è in realtà la soluzione corretta.
lunaryorn,

@lunaryorn Cosa rende questa la soluzione corretta? (Ha funzionato per me.)
stella luminosa il

@TrevorAlexander È necessario caricare i pacchetti prima di poterli utilizzare.
lunaryorn,

17

Per impostazione predefinita, Emacs carica automaticamente i pacchetti solo dopo aver elaborato il file init. Quindi, quando stava cercando di impostare il tema, il pacchetto del tema non era caricato.

Invece di caricare tutti i pacchetti nel tuo file init (come quello che sembra stia facendo), puoi anche caricarli dopo il caricamento automatico del pacchetto aggiungendo un hook a after-init-hook, poiché i pacchetti vengono caricati automaticamente dopo il file init e prima after-init-hook. Si noti che non funzionerà se si tenta di load-themeaccedere direttamente al file init perché il pacchetto non è stato caricato a quel punto.

Quindi, in alternativa, aggiungi questo al tuo file init:

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

Penso che questa sia la soluzione corretta e funzioni in vari scenari (come per me sto usando github.com/bbatsov/prelude e funziona anche come un fascino lì)
Amol Gawai

Questa è la soluzione corretta e dovrebbe essere la risposta accettata
Dodgie

7

Penso che la parte importante sia (inizializzazione del pacchetto). Non sono così sicuro che tu abbia bisogno del bit pacchetto-enable-at-startup. Così:

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

Puoi anche dire a emacs di fidarsi di tutti i temi per impostazione predefinita in modo da non essere richiesto ogni volta:

(setq custom-safe-themes t)

La cosa da tenere a mente è che l'ordine di tutto è importante. A seconda di dove nel file si sta tentando di caricare un tema, alcuni dei suggerimenti sopra riportati potrebbero non essere necessari.

Inizializzo i pacchetti e il repository MELPA all'inizio del mio file .emacs che mi consente di fare più facilmente riferimento ai pacchetti caricati MELPA più avanti nel file. Ho anche impostato temi personalizzati sicuri, quindi non devo preoccuparmi del fatto che Custom stia aggiungendo le informazioni sulla fiducia alla fine del file. Ecco cosa ho:

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

..later nel file ..

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

-1

La prima riga dovrebbe essere sapere dove cercare:

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

allora gli altri possono andare :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.