[自定义mode]font-lock-defaults和face疑问

我有一些问题,定义自己的mode的时候,查文档,发现他说默认的操作是在mode里给font-lock-defaults赋值,

(define-derived-mode mymath-mode fundamental-mode "mymath"
  (setq font-lock-defaults '(mymath-highlights)))

那除了font-lock-defaults还有没有别的选项??


另外看文档的时候发现有这么一块

Here’s predefined faces in emacs.

  • default
  • bold
  • italic
  • bold-italic
    我看他们也是face,那我这样编辑
(setq mymath-highlights
      '(
	("Sin\\|Cos\\|Sum" . font-lock-function-name-face)
	("Pi\\|Infinity" . font-lock-constant-face)
	("Hello World" . font-lock-keyword-face)
	("bold" . bold)))

(define-derived-mode mymath-mode fundamental-mode "mymath"
  (setq font-lock-defaults '(mymath-highlights)))

eval-buffer以后,发现没什么用
2020-06-30 00-13-38 的屏幕截图
这是我理解错了吗,请教各位

文档还说你应该先参考已有的

你看看bold那一块,竟然没有显示成粗体,我感到有点奇怪

M-x customize-face font-lock-function-name-face

找找bold

应该可以的,你重新加载试试

一个鸟样


这个吗?我设置了,apply,重新加载也没什么变化
会不会是我用了dracula主题的缘故

你可以提另一个问题

如何得到光标下文字的face

你的emacs能显示吗,我想看看是不是我这出了问题

是不是因为你没加quote?

(font-lock-add-keywords nil '(("bold" . 'bold)))

这个亲测可以。


加了也没用,你能截个图吗

还能骗你不成😂

仆街,我是见鬼了吗 :joy:

你在bold上C-u C-x =看看有没有加上bold face。


有点不对,我刚才按了C-u C-x =,不知道为什么突然能显示了,但是我把模式换成elisp-byte-code-mode,再换成mymath-mode时,又不能显示了,我现在一脸懵逼

说明你的mymath-mode的设置有问题,你在里面加了quote吗?

举个例子呗 :stuck_out_tongue:,在里面加quote是怎么个加法

改成

	("bold" . 'bold)))

我看了一下文档,后面的这个是个变量,也就是说要evaluate到一个face,因为bold本身是个face,所以要加个quote。

font-lock-keyword-face ; variable
;=> font-lock-keyword-face ; symbol

'bold ; quoted symbol
;=> bold ; symbol

还有就是改完font-lock-defaults之后要重启一下font-lock-mode

终于解决了 :kissing: