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.

Foi útil?

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)))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top