Как отладить ошибку ключевых слов блокировки шрифта
Как я могу отладить ключевые слова блокировки шрифта, которые я пишу? Например
(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.
Оба параметра должны изменить блокировку шрифта, чтобы она применялась в то время, когда можно использовать отладку.