Emacs:设置特定窗口的背景颜色

问题描述 投票:4回答:3

是否可以设置特定emacs窗口的背景颜色?

我正在使用“专用窗口”功能将emacs缓冲区固定到帧。但是,我也希望该窗口可以被识别为专用窗口。

目前我正在使用buffer-face-mode设置缓冲区特定的默认字体,背景颜色稍深。但是,此格式也适用于查看相同缓冲区的窗口,这些窗口不专用于缓冲区。能够在每个窗口的基础上设置字体将消除该问题。

emacs elisp highlight emacs24 pinning
3个回答
3
投票

为一个特定窗口执行此操作不是Emacs现在支持的功能。 OTOH你可以为特定的框架做到这一点,所以如果你的窗口在一个带有单个窗口的框架内(通常是专用窗口的情况),你绝对可以设置背景颜色框架参数(并且应该能够直接从display-buffer-alistspecial-display-regexps设置它。


0
投票

你想要的是将缓冲区指定为“特殊显示”。这就是你想要的。

您可以自定义其中一个或两个选项(变量):

  • 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)))

但我建议您使用Customize设置所有此类选项的值。


0
投票

在Emacs 25.1.1中为我工作的方法是使用face-remapping-alist变量。初始化缓冲区时,将:background面的default属性修改为所需的颜色。例如,我通过在我的.emacs文件中添加类似这样的东西,使我的Treemacs缓冲区的背景颜色与其他所有颜色不同:

(defun treemacs-mode-handler()
  (set (make-local-variable 'face-remapping-alist)
       '((default :background "#303030"))))

(add-hook 'treemacs-mode-hook 'treemacs-mode-handler)
© www.soinside.com 2019 - 2024. All rights reserved.