Emacs不会在启动时加载主题


21

我已经通过MELPA安装了solarized主题包。我可以通过`customize-theme选择两个日晒主题之一,然后激活它。当我保存主题设置时,它将以下内容添加到我的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。
马拉巴巴2014年

Answers:


21

添加到您的init.el

(load-theme 'solarized-dark t)

您可以忽略在那里添加的emacs东西,只需将其删除即可。


1
这可能可以解决此问题,但无法解决。如果他的自定义配置没有被加载,那是最重要的。
马拉巴巴2014年

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 2014年

@lunaryorn是什么使它成为正确的解决方案?(为我工作。)
璀璨之星

@TrevorAlexander您需要先加载软件包,然后才能使用它们。
lunaryorn 2014年

17

默认情况下,Emacs仅在处理init文件之后自动加载软件包。因此,当尝试设置主题时,不会加载主题包。

除了使所有程序包都加载到init文件中(就像您看起来正在做的事情一样),您还可以在包自动加载后通过添加一个钩子来将它们加载after-init-hook,因为包是在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'1

7

我认为重要的部分是(package-initialize)。我不确定您是否需要“启动时启用包”位。所以:

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

您还可以默认告诉emacs信任所有主题,这样您就不会每次都收到提示:

(setq custom-safe-themes t)

要记住的是,一切的顺序很重要。根据您尝试在主题中加载文件的位置,上述某些建议可能是必要的,也可能不是必需的。

我在.emacs文件的开始处初始化了软件包和MELPA库,这使我以后可以在文件中更轻松地引用MELPA加载的软件包。我还设置了自定义安全主题,因此不必担心自定义在文件末尾添加信任信息。这是我所拥有的:

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

然后其他人可以去:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.