2009-09-16 11 views
8

Sto eseguendo piccole modifiche a SLIME, in modo da ottenere tutti i simboli attualmente caricati da Lisp, analizzarli e renderli font-lock.Aggiornamento parole chiave blocco-carattere in emacs senza la modalità principale ricarica

Sono riuscito a fare tutti questi passaggi, ma ho un piccolo problema - quando l'elenco delle parole chiave cambia in font-lock il buffer non viene aggiornato a meno che non si riavvii la modalità Lisp principale. Non voglio riavviare la modalità lisp ogni volta che aggiorno le parole chiave, perché ho diversi hook su lisp-mode che voglio eseguire solo quando carico il file per la prima volta.

C'è un altro modo per aggiornare il blocco dei caratteri in modo che legga tutte le nuove parole chiave e finga quindi il buffer di conseguenza? Spegnere il blocco font e usare font-lock-fontify-buffer non fa il trucco.

UPD: Aggiunta la taglia - la domanda è ancora attiva. Ho bisogno di un modo per ricaricare la parola chiave font-lock senza ricaricare la modalità principale.

risposta

5

Ok, che ne dici di questo, invece:

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

Impressionante, sembra funzionare! – freiksenet

1

Attivare la modalità principale non è ciò che rende font-lock fare le sue cose. Non ho familiarità con gli interni di SLIME o di Lisp-mode, ma semplicemente impostando la variabile dovrei farlo funzionare. L'attivazione della modalità di blocco dei font renderà il blocco dei font pronto per la riconfigurazione con le nuove parole chiave, come dovrebbe essere font-lock-fontify-buffer.

Mi trucco in modo cperl, per lo più, ed è una semplice questione di cperl-init-faces (che imposta le variabili interne di tipo font-lock) e un riavvio di font-lock. lisp-mode non dovrebbe essere molto diverso, tranne per non aver bisogno di una chiamata a cperl-init-faces;)

Modifica: alcuni esperimenti con modalità lisp-interazione rivelano che anche il riavvio della modalità di blocco dei caratteri non è strettamente necessario. Basta cambiare le parole chiave per il blocco dei caratteri, basta che tu possa riattivare la fontificazione in qualche modo. (Modifica del testo, font-lock-fontify-buffer, ecc)

+0

Questo è molto strano. Cosa usi per modificare le parole chiave? Io uso "font-lock-add-keywords". – freiksenet

+0

Il riavvio font-lock non aiuta anche per la modalità python, ad esempio. Forse è la mia versione di Emacs? Quale versione hai? Ho GNU Emacs 23.1.50.1 su x86-64 di Ubuntu. – freiksenet

1

Si potrebbe temporaneamente cancellare la variabile gancio modalità e riavviarlo:

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

Fantastico, ci proverò. Mi chiedo perché non funziona come jrockway descritto di default :) – freiksenet

+0

Ok, questo è meglio, ma questo disabilita tutti gli hook, incluso il hook di melma, ad esempio, che non è buono :(Mi chiedo davvero se sia possibile fare senza riavviare la modalità – freiksenet