Emacs ne chargera pas le thème au démarrage

21

J'ai installé le package de thème solarisé via MELPA. Je peux sélectionner l'un des deux thèmes solarisés via `custom-theme et il l'active. Lorsque j'enregistre les paramètres du thème, il ajoute les éléments suivants à mon fichier 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.
 )

Lorsque je lance Emacs, il ne charge pas le thème mais je ne reçois pas de message d'erreur non plus. En fait, l'exécution eval-bufferdans le fichier init.el charge le thème.

user2249626
la source
1
Avez-vous également un .emacsfichier dans votre répertoire personnel? Si c'est le cas, init-el est ignoré.
Malabarba

Réponses:

21

ajouter à votre init.el

(load-theme 'solarized-dark t)

vous pouvez ignorer les éléments emacs qui y sont ajoutés, supprimez-les simplement.

Łukasz Gruner
la source
1
Cela peut fonctionner pour contourner le problème, mais cela ne le résoudra pas. Si ses configurations personnalisées ne sont pas chargées, c'est quelque chose à comprendre.
Malabarba
21

J'ai ajouté ce qui suit à mon init.elfichier (je n'ai pas de .emacsfichier ~).

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

puis à la fin

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

Cela semble fonctionner. Je ne connais pas très bien emacs, donc je ne sais pas si c'est une mauvaise solution ...

user2249626
la source
C'est en fait la bonne solution.
lunaryorn
@lunaryorn Qu'est-ce qui en fait la bonne solution? (A travaillé pour moi.)
étoile brillante
@TrevorAlexander Vous devez charger des packages avant de pouvoir les utiliser.
lunaryorn
17

Par défaut, Emacs ne charge automatiquement les packages qu'après avoir traité le fichier init. Donc, quand il essayait de définir le thème, le package de thème n'était pas chargé.

Plutôt que de charger tous les packages dans votre fichier init (comme ce que vous semblez faire), vous pouvez également les charger après le chargement automatique des packages en ajoutant un hook à after-init-hook, car les packages sont chargés automatiquement juste après le fichier init et avant after-init-hook. Notez que cela ne fonctionnera pas si vous essayez de le faire load-themedirectement dans le fichier init car le package n'a pas été chargé à ce stade.

Donc, alternativement, ajoutez ceci à votre fichier init:

(add-hook 'after-init-hook (lambda () (load-theme 'solarized-light)))
Xinan
la source
Je pense que c'est la bonne solution et fonctionne dans une variété de scénarios (comme pour moi j'utilise github.com/bbatsov/prelude et cela fonctionne comme un charme là aussi)
Amol Gawai
Ceci est la bonne solution, et devrait être la réponse acceptée
Dodgie
7

Je pense que la partie importante est (initialisation du package). Je ne suis pas sûr que vous ayez besoin du bit package-enable-at-startup. Alors:

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

Vous pouvez également demander à emacs de faire confiance à tous vos thèmes par défaut afin de ne pas être invité à chaque fois:

(setq custom-safe-themes t)

La chose à garder à l'esprit est que l'ordre de tout est important. Selon l'endroit où vous essayez de charger un thème dans le fichier, certaines des suggestions ci-dessus peuvent être nécessaires ou non.

J'initialise les packages et le dépôt MELPA au tout début de mon fichier .emacs, ce qui me permet de référencer plus facilement les packages chargés MELPA plus tard dans le fichier. J'ai également défini des thèmes de sécurité personnalisés, donc je n'ai pas à me soucier du fait que Custom ajoute les informations de confiance à la fin du fichier. Voici ce que j'ai:

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

..plus tard dans le fichier ..

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

La première ligne devrait être de savoir où chercher:

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

alors les autres peuvent partir :)

Gibzo
la source