Обновление ключевых слов с блокировкой шрифта в emacs без перезагрузки основного режима

StackOverflow https://stackoverflow.com/questions/1431843

Вопрос

Я делаю небольшую модификацию в SLIME, чтобы я мог получить все загруженные в данный момент символы из Lisp, проанализировать их и настроить блокировку шрифтов.

Мне удалось выполнить все эти шаги, но у меня возникла небольшая проблема - при изменении списка ключевых слов в font-lock буфер не обновляется, пока вы не перезапустите основной lisp-режим.Я не хочу перезапускать lisp-mode каждый раз, когда я обновляю ключевые слова, потому что у меня есть несколько перехватов в lisp-mode, которые я хочу запускать только при первой загрузке файла.

Есть ли другой способ обновить font-lock, чтобы он считывал все новые ключевые слова и соответствующим образом заполнял буфер?Выключение блокировки шрифтов и использование font-lock-fontify-buffer не делает нужного эффекта.

UPD:Добавлена награда - вопрос все еще остается открытым.Мне нужен способ перезагрузить ключевое слово font-lock без перезагрузки основного режима.

Это было полезно?

Решение

Хорошо, как насчет этого вместо этого:

(defun my-font-lock-restart ()
  (interactive)
  (setq font-lock-mode-major-mode nil)
  (font-lock-fontify-buffer))

Другие советы

Запуск основного режима - это не то, что заставляет блокировку шрифтов делать свое дело.Я не очень хорошо знаком с внутренностями SLIME или lisp-mode, но простая установка переменной должна заставить ее работать.Переключение режима блокировки шрифта приведет к тому, что функция блокировки шрифта начнет переконфигурировать с учетом новых ключевых слов, как и должно быть font-lock-fontify-buffer.

В основном я взламываю cperl-mode, и это простой вопрос cperl-init-faces (который устанавливает внутренние переменные font-lock) и перезапуск font-lock.lisp-режим не должен сильно отличаться, за исключением того, что не требуется вызов cperl-init-faces ;)

Редактировать:некоторые эксперименты с lisp-interaction-mode показывают, что даже перезапуск режима блокировки шрифтов не является строго необходимым.Достаточно просто изменить ключевые слова с блокировкой шрифта, если вы каким-то образом повторно активируете шрифт.(Редактирование текста, блокировка шрифта, буферизация шрифтов и т.д.)

Вы могли бы временно очистить переменную mode hook и перезапустить ее:

(defun my-restart-lisp-mode ()
  (interactive)
  (let ((lisp-mode-hook nil))
    (normal-mode)))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top