Emacs sẽ không tải chủ đề khi khởi động


21

Tôi đã cài đặt gói chủ đề năng lượng mặt trời thông qua MELPA. Tôi có thể chọn một trong hai chủ đề được năng lượng hóa thông qua `tùy chỉnh chủ đề và nó kích hoạt nó. Khi tôi lưu cài đặt chủ đề, nó sẽ thêm phần sau vào tệp init.el của tôi:

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

Khi tôi khởi chạy Emacs, nó không tải chủ đề nhưng tôi cũng không nhận được thông báo lỗi. Trong thực tế chạy eval-buffertrong tệp init.el tải chủ đề.


1
Bạn cũng có một .emacstập tin trong thư mục nhà của bạn? Nếu vậy, init-el bị bỏ qua.
Malabarba

Câu trả lời:


21

thêm vào init.el của bạn

(load-theme 'solarized-dark t)

bạn có thể bỏ qua những thứ emacs được thêm vào đó, chỉ cần xóa nó.


1
Điều này có thể làm việc để giải quyết vấn đề, nhưng nó sẽ không giải quyết được. Nếu cấu hình tùy chỉnh của anh ta không được tải, đó là một cái gì đó để đi đến tận cùng.
Malabarba

21

Tôi đã thêm các mục sau vào init.eltệp của mình (Tôi không có .emacstệp trong ~).

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

và cuối cùng

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

Điều đó dường như làm việc. Tôi không quen thuộc lắm với emacs nên tôi không biết liệu đây có phải là một cách giải quyết tồi tệ không ...


Đó thực sự là giải pháp chính xác.
lunaryorn

@lunaryorn Điều gì làm cho điều này là giải pháp chính xác? (Làm việc cho tôi.)
ngôi sao sáng

@TrevorAlexander Bạn cần tải các gói trước khi bạn có thể sử dụng chúng.
lunaryorn

17

Theo mặc định, Emacs chỉ tự động tải các gói sau khi xử lý tệp init. Vì vậy, khi nó cố gắng thiết lập chủ đề, gói chủ đề đã không được tải.

Thay vì làm cho tất cả các gói được tải trong tệp init của bạn (như những gì bạn dường như đang làm), bạn cũng có thể tải chúng sau khi tự động tải gói bằng cách thêm một hook vào after-init-hook, vì các gói được tự động tải ngay sau tệp init và trước đó after-init-hook. Lưu ý rằng nó sẽ không hoạt động nếu bạn cố gắng load-themetrực tiếp trong tệp init vì gói đó chưa được tải tại thời điểm đó.

Vì vậy, thay thế, thêm điều này vào tập tin init của bạn:

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

Tôi nghĩ rằng đây là giải pháp chính xác và hoạt động trong nhiều tình huống khác nhau (như đối với tôi, tôi đang sử dụng github.com/bbatsov/prelude và nó cũng hoạt động như một bùa mê ở đó)
Amol Gawai

Đây là giải pháp chính xác và phải là câu trả lời được chấp nhận
Dodgie

7

Tôi nghĩ phần quan trọng là (khởi tạo gói). Tôi không chắc chắn bạn cần bit kích hoạt gói khi khởi động. Vì thế:

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

Bạn cũng có thể yêu cầu các emacs tin tưởng tất cả các chủ đề của bạn theo mặc định để bạn không bị nhắc mỗi lần:

(setq custom-safe-themes t)

Điều cần lưu ý là thứ tự cho mọi thứ đều quan trọng. Tùy thuộc vào vị trí trong tệp bạn đang cố tải một chủ đề, một số đề xuất ở trên có thể hoặc không cần thiết.

Tôi khởi tạo các gói và repo MELPA ngay từ đầu tệp .emacs của tôi, cho phép tôi dễ dàng tham khảo các gói được tải MELPA sau này trong tệp. Tôi cũng đặt các chủ đề an toàn tùy chỉnh để tôi không phải lo lắng về việc Custom đang thêm thông tin tin cậy vào cuối tệp. Đây là những gì tôi có:

(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 trong tập tin ..

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

-1

Dòng đầu tiên nên biết nơi để tìm:

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

sau đó những người khác có thể đi :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.