Emacs nie ładuje motywu podczas uruchamiania

21

Zainstalowałem pakiet motywów słonecznych za pośrednictwem MELPA. Mogę wybrać jeden z dwóch słonecznych motywów za pomocą `customize-theme i to go aktywuje. Kiedy zapisuję ustawienia motywu, dodaje on do mojego pliku 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.
 )

Po uruchomieniu Emacsa motyw nie jest ładowany, ale nie pojawia się również komunikat o błędzie. W rzeczywistości uruchomienie eval-bufferpliku init.el powoduje załadowanie motywu.

użytkownik2249626
źródło
1
Czy masz także .emacsplik w swoim katalogu domowym? Jeśli tak, init-el jest ignorowany.
Malabarba

Odpowiedzi:

21

dodaj do swojego init.el

(load-theme 'solarized-dark t)

możesz zignorować dodane tam emacsy, po prostu je usuń.

Łukasz Gruner
źródło
1
Może to działać w celu obejścia problemu, ale nie rozwiąże go. Jeśli jego niestandardowe konfiguracje nie są ładowane, jest to coś, co można znaleźć na samym dole.
Malabarba
21

Do mojego init.elpliku dodałem następujące elementy (nie mam .emacspliku ~).

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

a potem na końcu

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

To wydaje się działać. Nie znam się dobrze na emacsach, więc nie mam pojęcia, czy to złe obejście ...

użytkownik2249626
źródło
To jest właściwie prawidłowe rozwiązanie.
lunaryorn
@lunaryorn Co sprawia, że ​​jest to właściwe rozwiązanie? (Pracował dla mnie.)
jasna gwiazda
@TrevorAlexander Musisz załadować paczki, zanim będziesz mógł z nich korzystać.
lunaryorn
17

Domyślnie Emacs automatycznie ładuje pakiety dopiero po przetworzeniu pliku init. Kiedy więc próbowano ustawić motyw, pakiet motywów nie został załadowany.

Zamiast sprawiać, że wszystkie pakiety ładują się do pliku init (jak to, co wydaje się, że robisz), możesz również załadować je po autoloadowaniu pakietów, dodając hak do after-init-hook, ponieważ pakiety są ładowane automatycznie tuż po pliku init i wcześniej after-init-hook. Zauważ, że to nie zadziała, jeśli spróbujesz load-themebezpośrednio w pliku init, ponieważ pakiet nie został załadowany w tym momencie.

Alternatywnie dodaj to do pliku init:

(add-hook 'after-init-hook (lambda () (load-theme 'solarized-light)))
Xinan
źródło
Myślę, że to jest właściwe rozwiązanie i działa w różnych scenariuszach (jak dla mnie używam github.com/bbatsov/prelude i to też działa jak urok)
Amol Gawai
To prawidłowe rozwiązanie i powinna być zaakceptowaną odpowiedzią
Dodgie
7

Myślę, że ważną częścią jest (inicjalizacja pakietu). Nie jestem pewien, czy potrzebujesz bitu włączania pakietu podczas uruchamiania. Więc:

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

Możesz także powiedzieć emacsowi, aby domyślnie ufał wszystkim twoim motywom, aby nie pojawiał się monit za każdym razem:

(setq custom-safe-themes t)

Należy pamiętać, że kolejność do wszystkiego jest ważna. W zależności od tego, gdzie w pliku próbujesz załadować motyw, niektóre z powyższych sugestii mogą być lub nie być konieczne.

Inicjuję pakiety i repozytorium MELPA na samym początku mojego pliku .emacs, co pozwala mi łatwiej odnosić się do pakietów załadowanych MELPA w dalszej części pliku. Ustawiam też niestandardowe bezpieczne motywy, więc nie muszę się martwić faktem, że Custom dodaje informacje zaufania na końcu pliku. Oto co mam:

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

.. później w pliku ..

;; Load a nice theme if in GUI
(when (display-graphic-p)
  (load-theme 'ample t)
  )
foobrew
źródło
-1

Pierwszą linią powinno być wiedzieć, gdzie szukać:

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

wtedy inni mogą iść :)

Gibzo
źródło