纯粹出于眼睛糖果的原因,我希望在模式行中显示一个次要模式'((()))'(不带单引号)。
适用于rainbow-delimiters-mode
。到目前为止,我在我的 .emacs 中得到了以下内容,它可以正常工作:
(setq minor-mode-alist (cons '(rainbow-delimiters-mode " ((()))") minor-mode-alist))
但是现在我想在模式线中使用三种不同的颜色,以便我的模式中的括号“反映”彩虹分隔符模式的作用。
我应该怎么做? (我不关心匹配实际颜色rainbow-delimiters-mode
正在使用的颜色)
答案 0 :(得分:1)
这将在Emacs 24.2.1中进行测试:
(setq minor-mode-alist
`((rainbow-delimiters-mode " ")
(rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-1-face)))
(rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-2-face)))
(rainbow-delimiters-mode #("(" 0 1 (face rainbow-delimiters-depth-3-face)))
(rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-3-face)))
(rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-2-face)))
(rainbow-delimiters-mode #(")" 0 1 (face rainbow-delimiters-depth-1-face)))
,@(assq-delete-all 'rainbow-delimiters-mode minor-mode-alist)))
它使用字符串属性为次要模式指示符添加颜色 - #("(" 0 1 (face foo-face))"
语法指定一个单字符字符串,face
属性设置为foo-face
范围[ 0,1)。
由于字符串可以具有许多属性,因此可以预期能够为每个字符指定具有不同面的单个minor-mode-alist
条目。但是,由于可能是Emacs错误,在显示模式行时只会考虑次模式指示符的第一个字符的属性。为了解决这个问题,代码利用了Emacs为同一模式合并多个minor-mode-alist
指标的事实。它为rainbow-delimiters-mode
指定了几个字符串,每个字符串都有自己的颜色,并使用assq-delete-all
从minor-mode-alist
中删除旧的彩虹分隔符条目。
为了完整性,这里是单入口代码,在Emacs 24.2.1中显示为无色,因为它的第一个字符没有指定面:
(setq minor-mode-alist
`((rainbow-delimiters-mode #(" ((()))"
1 2 (face rainbow-delimiters-depth-1-face)
2 3 (face rainbow-delimiters-depth-2-face)
3 4 (face rainbow-delimiters-depth-3-face)
4 5 (face rainbow-delimiters-depth-3-face)
5 6 (face rainbow-delimiters-depth-2-face)
6 7 (face rainbow-delimiters-depth-1-face)))
,@(assq-delete-all 'rainbow-delimiters-mode minor-mode-alist)))