2009-09-16 6 views
8

Estoy haciendo una pequeña modificación en SLIME, de modo que pueda obtener todos los símbolos cargados actualmente de Lisp, analizarlos y hacer font-lock para crearlos.Actualización de palabras clave de font-lock en emacs sin mayor recarga de modo

Logré hacer todos estos pasos, pero tengo un pequeño problema: cuando la lista de palabras clave cambia en font-lock, el búfer no se actualiza a menos que reinicie el modo lisp principal. No quiero reiniciar lisp-mode cada vez que actualizo palabras clave, porque tengo varios ganchos en lisp-mode que quiero ejecutar solo cuando cargo el archivo por primera vez.

¿Hay alguna otra manera de actualizar font-lock para que lea todas las palabras clave entonces nuevas y tipifique el buffer en consecuencia? Desactivar el bloqueo de fuentes y usar font-lock-fontify-buffer no funciona.

UPD: Bounty añadida: la pregunta sigue en pie. Necesito una forma de volver a cargar la palabra clave font-lock sin volver a cargar el modo principal.

Respuesta

5

Ok, ¿qué hay de esto en su lugar:

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

¡Increíble, parece que funciona! – freiksenet

1

Disparar el modo principal no es lo que hace que font-lock haga su trabajo. No estoy íntimamente familiarizado con los aspectos internos de SLIME o lisp-mode, pero solo establecer la variable debería hacer que funcione. Alternar font-lock-mode hará que font-lock comience la refontación con las nuevas palabras clave en mente, al igual que font-lock-fontify-buffer.

Hack en modo cperl, en su mayoría, y es una cuestión simple de cperl-init-faces (que establece las variables internas de bloqueo de fuente) y un reinicio de font-lock. lisp-mode no debe ser muy diferente, excepto para no necesitar una llamada a cperl-init-faces;)

Editar: algunos experimentos con lisp-interaction-mode revelan que incluso reiniciar font-lock-mode no es estrictamente necesario. Solo basta cambiar las palabras clave font-lock-keywords, siempre y cuando usted vuelva a activar la fuente de alguna manera. (Edición de texto, font-lock-fontify-buffer, etc.)

+0

Eso es muy extraño. ¿Qué usas para modificar palabras clave? Yo uso "font-lock-add-keywords". – freiksenet

+0

El reinicio Font-lock tampoco ayuda con el modo python, por ejemplo. Tal vez es mi versión de Emacs? ¿Qué versión tienes? Tengo GNU Emacs 23.1.50.1 en Ubuntu x86-64. – freiksenet

1

Se puede borrar temporalmente la variable modo de gancho y reiniciarlo:

(defun my-restart-lisp-mode() 
    (interactive) 
    (let ((lisp-mode-hook nil)) 
    (normal-mode))) 
+0

Genial, intentaré esto. Me pregunto por qué no funciona como jrockway descrito por defecto :) – freiksenet

+0

Bien, esto es mejor, pero esto deshabilita todos los enlaces, incluido el gancho de baba, por ejemplo, que no es bueno :(Realmente me pregunto si es posible hacerlo sin reiniciar el modo. – freiksenet

Cuestiones relacionadas