如何临时性的更改和恢复face?

比如说,我写了一个 global minor mode, 当 mode enable 的时候需要更改 某个 face 的 attributes,当 mode disable 的时候恢复原状,大家都是怎么做的呢? face-remap-add-relative 好像只能更改当前 buffer 的 face local 定义,而且恢复原来的 face 该怎么处理呢?我现在想到的是保存需要更改的 attributes 原始值,然后再重新设置回来,这好像有点累赘。

我也搞不是很懂,但這是我之前問AI得出來的做法,給你參考看看。

关于恢复,face-remap-add-relative 会返回一个东西(忘了叫什么了),可以传递给 face-remap-remove-relative 以取消。

face-remap-add-relative 会返回cookie,最后remove就可以了,示例如下:

(setq cookie  (face-remap-add-relative 'doom-modeline-urgent 'error)
(face-remap-remove-relative cookie)

如果不多,也可以直接保存一份

我还是没细看 documentation,多谢多谢。

face-remap 方法好像对 一些 face 没效,比如 window-divider,仅仅修改 buffer-local 值没变化,它应该是 global 或者 frame-local 的,那我还是直接 set-face-attributes 吧