Emacs จะไม่โหลดธีมเมื่อเริ่มต้น


21

ฉันติดตั้งแพคเกจชุดพลังงานแสงอาทิตย์ผ่าน MELPA ฉันสามารถเลือกหนึ่งในสองธีมโซลาร์เซลล์ผ่าน `ปรับแต่งธีมและเปิดใช้งานมัน เมื่อฉันบันทึกการตั้งค่าธีมมันเพิ่มสิ่งต่อไปนี้ในไฟล์ 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.
 )

เมื่อฉันเปิดใช้งาน Emacs ไม่ได้โหลดธีม แต่ฉันไม่ได้รับข้อความแสดงข้อผิดพลาด ในความเป็นจริงการทำงานeval-bufferในไฟล์ init.el จะโหลดธีม


1
คุณมี.emacsไฟล์ในโฮมไดเร็กตอรี่ของคุณด้วยหรือไม่? ถ้าเป็นเช่นนั้น init-el จะถูกละเว้น
Malabarba

คำตอบ:


21

เพิ่มใน init.el ของคุณ

(load-theme 'solarized-dark t)

คุณสามารถเพิกเฉยสิ่งที่เพิ่ม emacs เพียงแค่ลบมัน


1
วิธีนี้อาจช่วยแก้ไขปัญหาได้ แต่จะไม่สามารถแก้ไขได้ หากการกำหนดค่าแบบกำหนดเองของเขาไม่ได้รับการโหลดนั่นเป็นสิ่งที่ต้องทำที่ด้านล่างของ
Malabarba

21

ฉันได้เพิ่มสิ่งต่อไปนี้ในinit.elไฟล์ของฉัน(ฉันไม่มี.emacsไฟล์~)

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

แล้วในตอนท้าย

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

ดูเหมือนว่าจะทำงาน ฉันไม่คุ้นเคยกับ emacs มากนักดังนั้นฉันจึงไม่รู้เลยว่านี่เป็นวิธีแก้ปัญหาที่ไม่ดี ...


นั่นคือทางออกที่ถูกต้องจริง ๆ
Lunaryorn

@lunaryorn อะไรทำให้โซลูชั่นนี้ถูกต้อง? (ทำงานให้ฉัน)
ดาวสว่างไสว

@TrevorAlexander คุณต้องโหลดแพ็กเกจก่อนจึงจะสามารถใช้งานได้
Lunaryorn

17

โดยค่าเริ่มต้น Emacs จะโหลดแพ็คเกจโดยอัตโนมัติหลังจากประมวลผลไฟล์ init เท่านั้น ดังนั้นเมื่อพยายามตั้งค่าธีมแพ็คเกจจึงไม่โหลด

แทนที่จะทำให้ทุกโหลดแพคเกจในแฟ้ม init ของคุณ (เช่นสิ่งที่คุณดูเหมือนจะทำ) คุณยังสามารถโหลดพวกเขาหลังจากที่แพคเกจ autoloading โดยการเพิ่มเบ็ดไปafter-init-hookตั้งแต่แพคเกจ autoloaded เพียงหลังจากที่ไฟล์ init after-init-hookและก่อน โปรดทราบว่ามันจะไม่ทำงานหากคุณพยายามที่จะload-themeโดยตรงในไฟล์ init เพราะแพคเกจยังไม่ได้โหลดที่จุดนั้น

ดังนั้นมิฉะนั้นให้เพิ่มสิ่งนี้ลงในไฟล์ init ของคุณ:

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

ฉันคิดว่านี่เป็นทางออกที่ถูกต้องและทำงานได้หลากหลายสถานการณ์ (เช่นสำหรับฉันฉันใช้github.com/bbatsov/preludeและใช้งานได้อย่างมีเสน่ห์เหมือนกัน)
Amol Gawai

นี่คือทางออกที่ถูกต้องและควรเป็นคำตอบที่ยอมรับ
Dodgie

7

ฉันคิดว่าส่วนที่สำคัญคือ (แพ็คเกจเริ่มต้น) ฉันไม่แน่ใจว่าคุณต้องใช้บิตแพคเกจเปิดใช้งานเมื่อเริ่มต้น ดังนั้น:

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

คุณยังสามารถบอกให้ emacs เชื่อถือชุดรูปแบบทั้งหมดของคุณตามค่าเริ่มต้นดังนั้นคุณจะไม่ได้รับแจ้งในแต่ละครั้ง:

(setq custom-safe-themes t)

สิ่งที่ต้องจำไว้ก็คือการสั่งซื้อทุกอย่างมีความสำคัญ คำแนะนำข้างต้นบางข้ออาจขึ้นอยู่กับว่าอยู่ที่ไหนในไฟล์ที่คุณพยายามโหลดธีม

ฉันเริ่มต้นแพ็คเกจและ MELPA repo ที่จุดเริ่มต้นของไฟล์. emacs ของฉันซึ่งช่วยให้ฉันอ้างอิงแพคเกจที่โหลดของ MELPA ได้ง่ายขึ้นในภายหลังในไฟล์ ฉันยังตั้งค่าชุดรูปแบบที่ปลอดภัยเองดังนั้นฉันไม่ต้องกังวลเกี่ยวกับความจริงที่ว่า Custom กำลังเพิ่มข้อมูลความน่าเชื่อถือที่ท้ายไฟล์ นี่คือสิ่งที่ฉันมี:

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

.. ต่อไปในไฟล์ ..

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

-1

บรรทัดแรกควรรู้ว่าต้องดูที่:

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

จากนั้นคนอื่นสามารถไป :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.