Построение на ответе vartec:
imports sys
def redirect_output(func, output=None):
if output is None:
output = sys.stderr
if isinstance(output, basestring):
output = open(output, 'w') # etc...
# everything else...
Хорошо, а как насчет этого:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))
Запуск основного режима - это не то, что заставляет font-lock делать свое дело. Я не очень хорошо знаком с внутренним устройством SLIME или lisp-mode, но просто установка переменной должна заставить его работать. Включение режима блокировки шрифта заставит блокировку шрифтов начать обновляться с учетом новых ключевых слов, как и font-lock-fontify-buffer
.
В основном я использую cperl-mode, и он это простой вопрос cperl-init-faces
(который устанавливает внутренние переменные font-lock) и перезапуска font-lock. lisp-mode не должен сильно отличаться, за исключением того, что не требуется вызов cperl-init-faces
;)
Правка: некоторые эксперименты с режимом lisp-взаимодействия показывают, что даже перезапуск font-lock- режим не является строго необходимым. Достаточно просто изменить ключевые слова font-lock, до тех пор, пока вы каким-то образом повторно активируете фонтификацию. (Редактирование текста, font-lock-fontify-buffer и т. Д.)
Вы можете временно очистить переменную обработчика режима и перезапустить ее:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))