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

4

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

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

目前,我正在使用buffer-face-mode来设置具有稍微较暗背景颜色的缓冲区特定默认字体。但是,这种格式也适用于查看同一缓冲区但不专用于该缓冲区的窗口。能够按窗口设置字体将消除这个问题。

3个回答

4

目前Emacs不支持仅为一个特定窗口设置背景颜色的功能。但是,您可以为特定框架执行此操作,因此如果您的窗口位于具有单个窗口的框架中(通常适用于专用窗口),则绝对可以设置background-color帧参数(并且应该能够直接从display-buffer-alist或special-display-regexps进行设置)。


谢谢,这很有帮助。但我能否防止该框架显示任何其他窗口? - kdb
您还可以将其设置为不可分割的(在手册中搜索“splittable”)。 - Stefan
我的猜测是,你并不真的关心如何防止它显示任何其他窗口,即使是使其无法分割。我的猜测是,你只是不想让它显示任何其他缓冲区,这也意味着新窗口不会在框架中弹出(例如,分割它)。这已经通过声明它为“special-display”来处理了 - 换句话说,这不是问题。如果你真的想防止自己使用C-x 2或其他命令,那么可以将其设置为无法分割。 - Drew

1
在Emacs 25.1.1中适用于我的方法是使用face-remapping-alist变量。当缓冲区被初始化时,修改default面的: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)

如果您在同一框架的多个窗口或不同框架中显示此缓冲区,您会发现受影响的是缓冲区,而不一定是窗口。此外,Emacs手册建议使用内置函数 face-remap-add-relative 来管理变量 face-remapping-alist。[然而,我也喜欢直接管理 face-remapping-alist 而不使用 face-remap-add-relative。但是,由于其他人将阅读这些帖子,因此通常习惯于除了任何所选的变体之外,始终尝试提及Emacs的操作方式。] - lawlist

0

你想要的是将缓冲区指定为“special-display”。这正是你想要的。

你可以自定义以下一个或两个选项(变量):

  • special-display-regexps
  • special-display-buffer-names

这是简单的方法。自从24.3版本发布以来,Emacs 喜欢将这些选项视为过时,并建议你使用极其复杂的选项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)))

但我建议您使用自定义来设置所有这些选项的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接