這將做到這一點,在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)))
糾正我,如果我錯了,所以問題是:「如何在模式行中獲取不同的文本顏色?」 – PascalVKooten
@Dualinity:不同字符的不同顏色,每個描述相同的次要模式:)我已經可以將顏色分配給模式行中的一個次要模式(例如Paredit),但我不知道該怎麼做對於單個次要模式的每個字符。 –
聽起來像是一個非常具體的小事情。儘管如果我必須打賭任何程序都可以,Emacs將是您的選擇:P現在您只需要一些Emacs嚮導... – PascalVKooten