Atualizando palavras-chave font-bloqueio no emacs sem grandes recarga modo
-
07-07-2019 - |
Pergunta
Estou fazendo pequenas modificações para SLIME, para que eu possa obter todos os símbolos carregados de Lisp, analisá-los e torná-font-bloqueio fontify-los.
Eu consegui fazer todas essas etapas, mas eu tenho um pequeno problema - quando a lista de palavras-chave muda em font-travar o tampão não é atualizado, a menos que você reiniciar o principal modo de lisp. Eu não quero para reiniciar em modo lisp cada tempo de atualização I palavras-chave, porque eu tenho vários ganchos de modo lisp que eu quero correr só quando eu carregar o arquivo pela primeira vez.
Existe uma outra maneira de atualização font-bloqueio para que ele lê todos, em seguida, novas palavras-chave e fontifies o tampão em conformidade? Desligar font-bloqueio e usando font-lock-fontify-buffer
não fazer o truque.
UPD: recompensa Adicionado - a questão ainda é para cima. Eu preciso de uma maneira de recarregar chave font-bloqueio sem recarregar modo maior.
Solução
Ok, e quanto a isso em vez disso:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))
Outras dicas
Disparando o major-modo não é o que faz font-bloqueio de fazer a sua coisa. Eu não sou muito familiarizado com o funcionamento interno de lodo ou em modo lisp, mas apenas definindo a variável deve torná-lo trabalho. Alternando-lock-mode fonte fará font-bloqueio começam refontifying com as novas palavras-chave em mente, como deve font-lock-fontify-buffer
.
Eu corto on-modo cperl, em sua maioria, e é uma simples questão de cperl-init-faces
(que define as variáveis ??font-bloqueio interno) e um reinício do font-bloqueio. lisp-mode não deve ser muito diferente, exceto para não precisar de uma chamada para cperl-init-faces
;)
Editar: algumas experiências com modo de lisp-interação revela que font-lock-modo, mesmo reiniciando não é estritamente necessário. Apenas mudando font-lock-palavras-chave é o suficiente, contanto que você re-trigger fontification de alguma forma. (Edição de texto, font-lock-fontify-tampão, etc.)
Você poderia limpar temporariamente a variável modo de gancho e reiniciá-lo:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))