2012-11-28 1 views
8

Voglio implementare la sostituzione del testo dinamico (solo il display è sostituito, il file memorizzato effettivo non viene sostituito) per Emacs, usando Elisp.Come consentire ad Emacs di visualizzare un carattere diverso da quello effettivamente memorizzato?

Per esempio, in documenti LaTeX, devo digitare \alpha, e lasciare Emacs visualizzarlo altrettanto α, così è più facile da leggere. Ma nel file .tex risultato, voglio ancora \alpha, anziché α da salvare. (Nota: potrei usare direttamente XeTeX o LuaTeX per supportare direttamente UTF-8, ma per ragioni di collaborazione e requisiti del journal, non voglio che i caratteri UTF-8 vengano salvati direttamente nei file .tex. In alternativa, potrei usare anteprima in AUCTeX. Ma questo non aiuta quando io sono l'editing la formula)

Un esempio attuale è in org-mode, quando si digita [[link][name]], proprio dopo aver digitato l'ultima ], il testo visualizzato viene sostituito da solo il nome, con collegamento ipertestuale. D'altra parte, quando si salva questo file, il contenuto salvato è l'originale [[link][name]], diverso da quello visualizzato.

Qualche idea su come questo potrebbe essere implementato?

PS: la sezione Display Specs That Replace The Text del manuale di Emacs si chiude. Tuttavia, ho bisogno di specificare i punti iniziale e finale, invece della stringa desiderata per le sostituzioni. Ciò significa che devo cercare dopo ogni input dell'utente per decidere i punti di inizio e di fine. Questo sembra irrealistico a causa delle prestazioni e della complessità dell'algoritmo.

risposta

6

Un modo per farlo è quello di aggiungere dei font parole chiave di blocco per i modi rilevanti, e di utilizzare compose-region per visualizzare il nuovo glifo al posto della vecchia stringa:

(font-lock-add-keywords 
'latex-mode `(("\\(\\\\alpha\\)" 
       (0 (progn (compose-region (match-beginning 1) 
              (match-end 1) "α") 
          nil))))) 

Si prega di notare, inoltre, che org-mode ha una caratteristica di questo tipo già built-in, non solo per i collegamenti come lei ha ricordato, ma anche per le entità LaTeX simile:

(setq org-pretty-entities t)