Emacs加载新主题后如何禁用旧主题(主题冲突)

4
在Emacs 24.3.1中,如果我使用“M-X load-theme”加载另一个主题,它经常会干扰当前主题而不是替换它,导致颜色方面非常丑陋。这里有一个例子,solarized-light和wombat主题发生了冲突: solarized-light and wombad conflict 我通过禁用旧主题的“M-X disable-theme”来解决这个问题,是否有更简洁的方法来解决这个问题?

可能是重复的问题:Emacs:如何获取默认主题? - abo-abo
abo-abo似乎与此相关(谢谢!),但它不是重复的。此外,该问题没有被接受的答案。看看您对该问题的回答确实很有启发性 - 令人惊讶的是,考虑到该程序的年龄和基本颜色支持,Emacs的颜色支持非常差。 - Mike Vella
简短回答,你无法做到这一点。当一个主题被加载时,它会改变所有支持的面的属性,但它不会重置面的属性。你可以做的是在加载任何主题之前记录所有标准面的属性,然后在切换到新主题之前使用它们来恢复默认主题。然而,许多软件包指定了自己的面,如果一个自定义主题支持该软件包,那些颜色就不会被还原。颜色主题很混乱。 - Jordon Biondo
@JordonBiondo 哎呀!我猜自定义有时候有严重的缺点。 - Mike Vella
@JordonBiondo:我赞同你的说法,但有一个例外:你所描述的是关于自定义主题,而不是颜色主题,因此我会更正你的最后一句话为“自定义主题很混乱。”请参阅维基页面了解两种主题之间的区别。 - Drew
1个回答

8

首先禁用当前的主题肯定会有所帮助。

如果您将以下内容添加到init.el文件中:

(defun disable-all-themes ()
  "disable all active themes."
  (dolist (i custom-enabled-themes)
    (disable-theme i)))

(defadvice load-theme (before disable-themes-first activate)
  (disable-all-themes))

load-theme函数在加载新主题之前会先禁用活动主题。


3
这个建议不太好。主题应该是可以叠加的,一些包可能会依赖于这个设计。最好定义一个新命令来完成相同的任务。 - Malabarba

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