有时,我会手动设置与默认字体不同的字体系列和大小,并且我buffer-face-mode
会这样做。(确切地说,我使用鼠标并从对话框中选择一个。)一旦我设置它,我希望它保持为该缓冲区设置,即使我改变模式,所以我尝试了自定义。这个想法是change-major-mode-hook
在稍后调用的函数中添加一个(它在缓冲区本地人被杀死之前运行),如果它被设置,它将保存缓冲区面 - 这似乎很有效。但是那个函数似乎被调用得太快了,当模式改变结束时,buffer-face-mode
它是不活动的。
这是我到目前为止的定制
(defun my-preserve-bufface-cmmh ()
"Keep the state of buffer-face-mode between major-mode changes"
(if (and (local-variable-p 'buffer-face-mode) buffer-face-mode)
(delay-mode-hooks
(message "face is %s" buffer-face-mode-face) ; Just to show me it has the right face
(let ((my-inner-face buffer-face-mode-face))
(run-mode-hooks
(message "inner %s" my-inner-face) ; it still has the right face here
(setq buffer-face-mode-face my-inner-face)
(buffer-face-mode))))))
(add-hook 'change-major-mode-hook
'my-preserve-bufface-cmmh)
当我在buffer-face-mode
设置了次要模式的缓冲区中更改主要模式时,这些消息都会运行并显示自定义面孔,正如它们应该的那样。我原以为 ... 的组合delay-mode-hooks
会使run-mode-hooks
...setq buffer-face-mode-face
在(buffer-face-mode)
新模式设置后运行,但显然不是。
这种定制是否“关闭”/可以满足我的需求?有没有更清洁的方法?