Как отладить ошибку ключевых слов блокировки шрифта

Как я могу отладить ключевые слова блокировки шрифта, которые я пишу? Например

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

выдаст следующее сообщение в буфере сообщений:

Error during redisplay: (jit-lock-function 1) signaled (wrong-type-argument stringp 22)

Чтобы увидеть стек вызовов при ошибке аргумента неправильного типа, я вызываю toggle-debug-on-error и Emacs по-прежнему не входит в отладчик при ошибке блокировки шрифта.

1 ответ

Решение

Блокировка шрифта может применяться по-разному. По умолчанию он применяется с использованием режима jit-lock-mode, который применяет его "лениво" (он же "точно в срок"), что имеет тот недостаток, что применяется в то время, когда мы не можем отобразить сообщение (или ввести отладчик), потому что это сделало бы нас inf-loop. Таким образом, есть два способа обойти эту проблему:

  • использование jit-lock-debug-mode (недавно добавлено в код разработки Emacs).
  • Задавать font-lock-support-mode до нуля, затем выключите и снова включите font-lock.

Оба параметра должны изменить блокировку шрифта, чтобы она применялась в то время, когда можно использовать отладку.

Другие вопросы по тегам