更改Emacs的背景颜色

6
我有一个功能,可以将Emacs的颜色主题设置为我定义的主题。在这个功能中,我执行以下操作:
(set-face-attribute 'default cur-frame :foreground fg-color :background bg-color)

我设置了default-frame-alistinitial-frame-alistspecial-display-frame-alist的背景颜色、前景颜色和光标颜色。在我的Mac上所有都正常工作。但是,在Linux上使用时,已经打开的所有窗口看起来都很好,但是新创建的窗口看起来像这样:background color issue。如果我使用set-background-color / set-foreground-color函数而不是(set-face-attribute 'default ...),则新窗口就没有这个问题。但是,这样做需要手动为每个已经打开的窗口重置颜色。我在Mac和Ubuntu上都使用Emacs版本23.3。为了澄清,这是我使用的主题文件:my-color.el

C-l 能正确地绘制颜色吗? - vpit3833
@vpit3833 不是的。它会将窗口向下滚动,但没有任何变化。 - sudo
为什么不直接使用color-theme模式? - Bozhidar Batsov
@BozhidarBatsov 我试过所有的主题,但我都不喜欢。我只需要几个简单明了的主题,可以在不同场合下切换使用。所以我决定自己动手制作。一切都很顺利,直到最近我意识到在 Linux 平台上出现了问题,因为我大部分时间都在 Mac 上工作。 - sudo
1
还有一些与color-theme兼容的外部主题,比如-https://github.com/bbatsov/zenburn-emacs(还有许多其他主题)。emacs 24将具有内置的主题功能。 - Bozhidar Batsov
4个回答

6

set-face-attribute是用来设置face属性(即与字体相关的属性),而不是框架的属性。使用

(add-to-list 'default-frame-alist '(background-color . "lightgray"))

等类似方法来改变框架相关的属性。


这似乎很好地工作,直到我调整窗口大小后,颜色再次出现问题(emacs 24.4.1)。 - Jonas Berlin

3
(if (eq system-type 'darwin)
    ;; mac os x settings
  (if (eq system-type 'gnu/linux)
    (setq default-frame-alist '((background-color . "black")
                                (foreground-color . "gray")))))

类似这样的设置可以帮助您针对不同操作系统维护设置。


其实,我已经有了,如果你感兴趣可以试一下,这是我的emacs配置存储库在bitbucket,它在名为my-color.el的文件中。问题是,如果我使用set-face-attributes来设置“default”,新的框架会出现问题,即使我设置了default-frame-alist。如果没有它,它们就会很好,但我必须手动逐个设置每个其他打开的框架。虽然通常不会有那么多框架,但我仍然希望用一个命令进行更改。 - sudo

1

看起来最好使用

(custom-set-faces
  '(default ... )
  '(region ... )
  ....
)

使用样式来设置字体,这样就不会出现那个问题了。


0

近期的Emacs版本中使用1)(或不覆盖)Gtk3.0主题背景。使用例如set-background-colordefault-frame-alist更改背景仅适用于我调整窗口大小之前,之后Gtk主题背景会再次“透过”。

我还没有找到一种方法让emacs始终覆盖Gtk主题背景,但至少我已经找到了一种方法专门为Emacs更改Gtk主题背景颜色: https://superuser.com/questions/699501/emacs-showing-grey-background-where-there-are-no-characters/937749#937749

所以,虽然这并不能完全解决您在切换主题时更改背景颜色的问题,但是至少可以消除打开新框架时体验到的黑白对比。

1) 至少在我的电脑上 :)


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