在GNU Emacs中,如何通过模式设置背景颜色?

时间:2014-04-17 20:20:13

标签: emacs

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

(custom-set-faces
 '(message-header-to ((t (:foreground "LightGoldenrod1" :weight bold)))))

如何按模式设置帧的背景颜色?这样,例如,组织模式背景将采用颜色主题定义的任何颜色,但消息模式背景将是黑色的?

像这样的东西,除了以下不起作用:

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

2 个答案:

答案 0 :(得分:2)

这是一个快速示例,按框架进行 - 即它将影响帧中的每个缓冲区:

  
(add-hook 'post-command-hook 'change-my-background-color)

(add-hook 'change-major-mode-hook 'change-my-background-color)

(add-hook 'window-configuration-change-hook 'change-my-background-color)

(defun change-my-background-color ()
  (cond
    ((eq major-mode 'org-mode)
      (set-background-color "honeydew"))
    ((eq major-mode 'text-mode)
      (set-background-color "blue"))
    (t
      (set-background-color "red"))))

并且,这是更改缓冲区颜色示例:

  
(defun buffer-background-red ()
(interactive)
  (setq buffer-face-mode-face `(:background "red"))
  (buffer-face-mode 1))

目前无法以窗口为基础进行此操作;但是,这里有一个链接,用于更改活动窗口的模式行颜色。

https://stackoverflow.com/a/20936397/2112489

答案 1 :(得分:0)

  

"整个框架,即消息模式的整个背景"

这句话让我觉得作者在Emacs中混淆了 frame and window 。每个框架可以包含几个窗口。虽然* -mode可以引用each buffer,即窗口。 因此,如果您想为每个缓冲区设置背景颜色按模式(但不适用于帧),那么最好使用模式挂钩like here