Emacs:为特定窗口设置背景色

Emacs:为特定窗口设置背景色,emacs,elisp,highlight,emacs24,pinning,Emacs,Elisp,Highlight,Emacs24,Pinning,是否可以设置特定emacs窗口的背景色 我正在使用“专用窗口”功能将emacs缓冲区固定到帧上。但是,我也希望该窗口能够被识别为专用窗口 目前,我正在使用缓冲区面部模式设置缓冲区特定的默认字体,背景颜色略深。但是,此格式也适用于查看同一缓冲区的窗口,该缓冲区不是专用于该缓冲区的。能够在每个窗口的基础上设置字体将消除该问题 为一个特定窗口执行此操作不是Emacs目前支持的功能。o您可以为特定的帧执行此操作,因此,如果您的窗口位于具有单个窗口的帧内(对于专用窗口通常如此),则您可以明确地设置背景色帧

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

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


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

为一个特定窗口执行此操作不是Emacs目前支持的功能。o您可以为特定的帧执行此操作,因此,如果您的窗口位于具有单个窗口的帧内(对于专用窗口通常如此),则您可以明确地设置背景色帧参数(并且应该能够直接从
显示缓冲区列表
特殊显示正则表达式
设置它。您需要的是将缓冲区指定为“特殊显示”。这正是您想要的

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

  • 特殊显示正则表达式
  • 特殊显示缓冲区名称
<>这是一个简单的方法。Emacs从发布24.3开始就认为这些选项过时了,它建议你使用非常复杂的选项<代码>显示缓冲区> <代码> >

这就是我要做的,让所有以
*
开头和结尾的缓冲区都显示在它们自己的专用帧中:

(setq special-display-regexps '("[ ]?[*][^*]+[*]"))
要获得具有不同属性(即帧参数)的特殊显示帧,如不同颜色背景,请自定义选项
特殊显示帧列表

这基本上就是我使用的定义:

(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来设置所有这些选项的值。

在Emacs 25.1.1中对我有效的方法是使用
face remapping alist
变量。当缓冲区初始化时,将
default
face的
:background
属性修改为您想要的颜色。例如,我制作背景通过在我的
.emacs
文件中添加类似的内容,可以使我的Treemacs缓冲区的颜色与其他缓冲区的颜色不同:

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

(add-hook 'treemacs-mode-hook 'treemacs-mode-handler)

谢谢,这很有帮助。但是我可以阻止该框架显示任何其他窗口吗?您还可以使其不可拆分(在手册中搜索
splittable
)。我的猜测是,您并不真正关心阻止它显示任何其他窗口,例如,使其不可丢弃。我的猜测是,您只是不希望它显示任何其他缓冲区,这也意味着新窗口不会在帧中弹出(例如,拆分)。声明它已经解决了这一问题“特别展示"---注意,这不是问题。如果你真的想阻止自己使用
C-x 2
或任何东西,那么,是的,让它不可丢弃。如果你在同一帧或不同帧的多个窗口中显示此缓冲区,你会看到受影响的是缓冲区,而不一定是窗口。此外,Emacs manual建议使用内置函数
face remap add relative
来管理变量
face remap
。[然而,我也更喜欢直接管理
面重映射列表
,而不使用
面重映射添加相对的
。但是,由于其他人将阅读这些线程,因此除了任何选择的变体之外,习惯上总是尝试提及Emacs的做事方式。]