在 Emacs(< v.24)中切换颜色主题

7

更新:

请注意,本文不适用于最新版本的Emacs(24+)。Emacs现在配备了自己强大的颜色主题系统(例如,请参见此处的评论),无需加载外部包color-theme


我在我的.emacs文件中有以下代码片段,其中我定义了一些别名,使我可以使用简短的扩展命令方便地在几个颜色主题之间切换:

(require 'color-theme)            
(eval-after-load "color-theme"   
  '(progn                        
     (color-theme-initialize)    
     (color-theme-aalto-light))) 
                                                                                                                                      
;; Aliases to color-themes, e.g. 'M-x a' switches to color-theme-hober

(defalias 'a 'color-theme-hober)
(defalias 'b 'color-theme-aalto-light)

现在,当Emacs加载时,它可以正确显示color-theme-aalto-light主题,当我使用M-x a切换到color-theme-hober时,也能正常工作。
问题是当我尝试再次将颜色主题更改回color-theme-aalto-light时。有些颜色面仍然保留在旧的颜色主题中,而其他颜色面则更改为新的颜色主题。我已经尝试了不同的颜色主题组合,但没有成功(无论我切换到哪个颜色主题,这些颜色面都不会完全更新)。有什么想法吗?

有时一个主题会定义一种颜色,而另一个却不会。当切换它们时,则保持不变,无论选择哪个颜色主题。您能否检查这两个主题是否都定义了那些不会被更改的颜色? - nominolo
循环使用颜色主题。完整选择颜色主题... http://www.emacswiki.org/emacs/ColorTheme#toc4 - Drew
2个回答

9

这是“color-theme”软件包中已知的一个漏洞。如果该功能对您很重要,请考虑升级到主干版本(未来的emacs-24.1),它原生支持更改主题(M-x customize-themes)。


1
实际上,Emacs自定义主题比颜色主题更容易受到影响。或者说,它们受到的影响不同。您可以完全相对于另一个“禁用”一个自定义主题,但是您无法撤消自定义主题,因此无法恢复之前的非主题外观。在很大程度上,您可以撤消颜色主题。自定义主题切换的另一个缺点是它非常慢,特别是如果您有几个框架。颜色主题切换非常快。 - Drew

2
色彩主题基本上只是函数,它们将新的颜色分配给某些面。 它们并没有什么特别之处,尤其是在切换颜色主题之前不会重置面。 如果一个颜色主题A为某个面设置了一种颜色,而另一个B没有,则B将简单地接管由A为此面定义的颜色。
这更多或少是按设计的,您无法做任何事情,除非修改颜色主题以覆盖所有已定义的面(这相当繁琐,并且也几乎不可能,因为任何elisp库都可以定义自己的面)。

而且这种轻量级设计也可以成为一个优势,特别是在与其他非主题定制交互和在不同主题之间切换方面。 - Drew

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