是否可以设置特定 emacs 窗口的背景颜色?
我正在使用“专用窗口”功能将 emacs 缓冲区固定到帧上。但是,我也希望该窗口能够被识别为专用窗口。
目前我正在使用buffer-face-mode
设置一个特定于缓冲区的默认字体,其背景颜色稍暗。但是,这种格式也适用于查看相同缓冲区的窗口,但不是专用于缓冲区。能够在每个窗口的基础上设置字体将消除该问题。
为一个特定的窗口做这件事不是 Emacs 现在支持的功能。OTOH,您可以为特定框架执行此操作,因此,如果您的窗口位于具有单个窗口的框架内(专用窗口通常是这种情况),您绝对可以设置背景颜色框架参数(并且应该能够直接从display-buffer-alist
或设置它special-display-regexps
。
您想要的是将缓冲区指定为“特殊显示”。这正是你想要的。
您可以自定义以下选项(变量)中的一个或两个:
special-display-regexps
special-display-buffer-names
这是最简单的方法。Emacs 喜欢认为这些选项自 24.3 版以来已过时,它建议您改用极其复杂的选项display-buffer-alist
。
这就是我所做的一切,让所有名称以开头和结尾的缓冲区*
显示在它们自己的专用框架中:
(setq special-display-regexps '("[ ]?[*][^*]+[*]"))
要使特殊显示框架具有不同的属性(即框架参数),例如不同的颜色背景,请自定义选项special-display-frame-alist
。
这基本上是我使用的定义:
(setq special-display-alist
'((font . "-*-Lucida Console-normal-r-*-*-14-*-*-*-c-*-iso8859-1")
(width . 80)
(height . 14)
(mouse-color . "Yellow")
(cursor-color . "Yellow")
(menu-bar-lines . 1)
(foreground-color . "Black")
(background-color . "LightSteelBlue")
(top . 0)
(left . 0)
(unsplittable . t)
(user-position . t)
(vertical-scroll-bars . right)))
但我建议您使用自定义来设置所有此类选项的值。
在 Emacs 25.1.1 中对我有用的方法是使用face-remapping-alist
变量。初始化缓冲区时,:background
将人脸的属性修改为default
你想要的颜色。例如,我通过在我的文件中添加类似这样的内容,使我的 Treemacs 缓冲区的背景颜色与其他所有内容不同.emacs
:
(defun treemacs-mode-handler()
(set (make-local-variable 'face-remapping-alist)
'((default :background "#303030"))))
(add-hook 'treemacs-mode-hook 'treemacs-mode-handler)