在GNU Emacs中,如何按模式设置背景色?

在GNU Emacs中,如何按模式设置背景色?,emacs,Emacs,在GNU Emacs中,我可以在不同模式下为前景类型设置不同的面,例如: (custom-set-faces '(message-header-to ((t (:foreground "LightGoldenrod1" :weight bold))))) 如何按模式设置帧的背景色?例如,组织模式背景将采用主题定义的任何颜色,但消息模式背景将为黑色 类似于这样的情况,除了以下情况不起作用: (custom-set-faces '(message-mode-frame ((t (:backgr

在GNU Emacs中,我可以在不同模式下为前景类型设置不同的面,例如:

(custom-set-faces
 '(message-header-to ((t (:foreground "LightGoldenrod1" :weight bold)))))
如何按模式设置帧的背景色?例如,组织模式背景将采用主题定义的任何颜色,但消息模式背景将为黑色

类似于这样的情况,除了以下情况不起作用:

(custom-set-faces
 '(message-mode-frame ((t (:background "black")))))

下面是一个按帧执行的快速示例,即它将影响帧中的每个缓冲区:

(添加钩子'post command hook'更改我的背景色)
(添加挂钩“更改主模式挂钩”更改我的背景色)
(添加挂钩“窗口配置更改挂钩”更改我的背景色)
(取消取消更改我的背景色()
(续)
((eq专业模式“组织模式”)
(设置背景色“蜜露”))
((情商专业模式“文本模式”)
(将背景颜色设置为“蓝色”))
(t
(设置背景颜色为“红色”))

下面是更改缓冲区颜色的示例:

(解除缓冲区背景红色()
(互动)
(setq缓冲区面模式面`(:背景“红色”))
(缓冲面模式1))

在窗口的基础上做这件事目前是不可能的;但是,这里有一个链接,用于更改活动窗口的模型线颜色


“整个帧,即消息模式的整个背景”

这句话让我觉得作者和Emacs混在一起了。每个框架可以包含几个窗口。而*-模式可参考,即窗口。
因此,如果您想通过模式为每个缓冲区设置背景色(但不针对帧),那么最好使用模式挂钩来澄清:您是在尝试更改文本的背景还是整个帧的背景?如果是前者,您可能只需在第一个示例中添加一个
:background
关键字。如果是后者,据我所知,您必须设置帧的背景,这与设置窗口的背景不同。整个帧,即消息模式的整个背景。使用
buffer face mode
,可以使缓冲区与其他缓冲区不同。设置帧背景时,它会影响帧中的所有缓冲区。非常酷。实际上,请查看以下问题的线索,它似乎有一些适合您的答案: