如何调试字体锁定关键字错误

Jis*_*Yoo 5 debugging emacs elisp syntax-highlighting font-lock

如何调试我写的字体锁定关键字?例如

(progn
  (font-lock-add-keywords
   nil
   '(
     ;; ("hi1" . 'success)
     ("hi2" . (intern (concat "warn" "ing")))
     ))
  (font-lock-fontify-buffer))
Run Code Online (Sandbox Code Playgroud)

将在Messages缓冲区中生成以下消息:

Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp 22)
Run Code Online (Sandbox Code Playgroud)

为了在错误的类型参数错误时看到调用堆栈,我调用toggle-debug-on-error并且在字体锁定错误时Emacs仍然没有进入调试器.

Ste*_*fan 6

font-lock可以以不同的方式应用.默认情况下,它是使用jit-lock-mode应用的,它将"lazily"(又称"just-in-time")应用于它,其缺点是它在我们无法显示消息时应用(或输入调试器),因为这将使我们inf循环.因此有两种方法可以解决这个问题:

  • 使用jit-lock-debug-mode(最近添加到Emacs的开发代码中).
  • 设置font-lock-support-mode为nil,然后关闭字体锁定然后重新打开.

这两个选项都应该更改font-lock,以便在可以使用调试时应用它.