Windows下使用Emacs出现加载颜色主题错误

5
我正在Windows 8上使用emacs 24.3。我已经从marmalade存储库安装了solarized颜色主题,并能够使用M + x load-theme设置它。当我使用自定义时,它也为当前会话设置了该主题,但在我再次打开emacs时不会加载。
我可以打开自定义菜单并选择主题,但保存更改没有任何作用,而且在下一次会话中也没有任何变化。我查看了这里关于颜色主题的几个问题,但大多数都不适用于Emacs 24,因为我不需要使用color-theme来完成它。
以下是我的.emacs文件的摘录。
(custom-set-variables
  '(custom-enabled-themes (quote (solarized-dark)))
  '(custom-safe-themes (quote ("fc5fcb6f1f1c1bc01305694c59a1a861b008c534cae8d0e48e4d5e81ad718bc6" default)))
...

当我尝试将(load-theme 'solarized-dark t)放入我的.emacs中时,会出现错误:
error: Unable to find theme file for `solarized-dark'

我在打开emacs后检查了custom-theme-load-path的值,它包括elpa用于存储solarized主题的目录。如上所述,我可以手动加载主题,但在初始化期间加载它会导致某些问题。

2个回答

13

只需在您的 .emacs 文件顶部添加

(package-initialize)

即可轻松使用。


这不会将主题添加到 custom-theme-load-path - ocodo
@Slomojo 通常作为包分发的颜色主题在加载时会更新 custom-theme-load-path。所涉及的主题也是如此 - user355252
问题通常与 package.el 没有任何关系,完全取决于主题作者。 - ocodo

0

注意:如果主题作者已经处理好了,主题将会自动添加到custom-theme-load-path中,但这不是deftheme的一部分,而是由各个主题作者实现这种行为。

为了解决这个问题,我编写了一个快速的emacslisp代码片段,它将查找名称中包含theme的包,然后在启动时将它们添加到custom-theme-load-path中。

只需将其添加到您的~/.emacs~/.emacs.d/init.el顶部(即在load-theme之前)即可。

它依赖于s.eldash.el(均可在elpa上获得)。

(require 'dash)
(require 's)

(-each
 (-map
  (lambda (item)
    (format "~/.emacs.d/elpa/%s" item))
  (-filter
   (lambda (item) (s-contains? "theme" item))
   (directory-files "~/.emacs.d/elpa/")))
 (lambda (item)
   (add-to-list 'custom-theme-load-path item)))

这段代码实际上是多余的:主题包应该通过自己的autoload更新custom-theme-load-path,以便在(package-initialize)之后立即可用。 - user355252
应该和实际做到是两回事,它们并不一样,这很麻烦,因此需要脚本。 - ocodo
如果一个主题没有这个功能,应该将其报告给作者作为一个错误。 - user355252
没有理由删除这个答案。对于一些人来说,这可能是解决问题的方法。 - Ryan
我只是建议删除,因为它解决了不同的问题。@Ryan - ocodo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接