Emacs按模式自定义背景色

Emacs按模式自定义背景色,emacs,elisp,Emacs,Elisp,我使用emacs编辑许多文件类型,并希望有一个简单的可视队列来区分.c文件和.vhd或.py文件。如何将自定义背景色添加到该语言的主模式中?您可以通过挂钩来完成此操作。当一个新的主模式开始的时候,你可以钩住它。在.emacs文件中放入类似的内容,每次进入Python模式时,emacs都会将背景颜色设置为紫色 (add-hook 'python-mode-hook (lambda () (set-background-color "purpl

我使用emacs编辑许多文件类型,并希望有一个简单的可视队列来区分.c文件和.vhd或.py文件。如何将自定义背景色添加到该语言的主模式中?

您可以通过挂钩来完成此操作。当一个新的主模式开始的时候,你可以钩住它。在.emacs文件中放入类似的内容,每次进入Python模式时,emacs都会将背景颜色设置为紫色

  (add-hook 'python-mode-hook
            (lambda ()
              (set-background-color "purple")))
如果切换回没有显式设置背景挂钩的模式,则将背景颜色重置为默认颜色将留给读者作为练习


您也可以使用M-x set background color手动设置背景色

您不能逐个缓冲区设置背景色。参见SU问题


这里的第一个答案显示了如何更改单个Emacs帧的背景,如果每个文件(或每个模式)有一个帧,这可能对您有用。

对于后代来说,由于此线程已有4年历史,现在在Emacs 24.4+中可以在缓冲区局部级别更改面。只需定义一个面,然后使用
(面重新映射添加相对)
将您想要的任何面替换掉

定义一个
defface

(defface my-special-face '((t :background "aqua")))
然后在您选择的模式中添加一个钩子:

(add-hook 'python-mode-hook
          (lambda ()
            (face-remap-add-relative 'default 'my-special-face)))

谢谢,这正是我想要的。请注意,您不能更改每个缓冲区或每个窗口的背景色,只能更改每帧的背景色(请参见下面Trey Jackson的答案)。