2012-11-28 4 views
8

Ich möchte dynamischen Text ersetzen (nur die Anzeige ersetzt, die tatsächlich gespeicherte Datei wird nicht ersetzt) ​​für Emacs, mit Elisp.Wie lässt Emacs ein anderes Zeichen als das tatsächlich gespeicherte Zeichen anzeigen?

Zum Beispiel, in LaTeX-Dokumente, möchte ich \alpha eingeben, und lassen Emacs es nur als α anzeigen, so dass es einfacher zu lesen ist. Aber im Ergebnis .tex Datei, ich möchte immer noch \alpha, anstatt α gespeichert werden. (Anmerkung: Ich könnte XeTeX oder LuaTeX selbst verwenden, um UTF-8 direkt zu unterstützen. Aber aus Gründen der Zusammenarbeit und Journalanforderungen möchte ich nicht, dass die UTF-8-Zeichen direkt in den Dateien .tex gespeichert werden. Alternativ könnte ich verwenden Vorschau in AUCTeX. Aber das hilft nicht, wenn ich die Formel bin die Bearbeitung)

Ein existierendes Beispiel ist in org-Modus, wenn wir [[link][name]] geben, direkt nach den letzten ] eingeben, wird der angezeigte Text nur ersetzt die Name, mit Hyperlink. Auf der anderen Seite, beim Speichern dieser Datei, ist der gespeicherte Inhalt das Original [[link][name]], das sich von dem angezeigten unterscheidet.

Irgendwelche Ideen, wie dies umgesetzt werden könnte?

PS: Die Display Specs That Replace The Text Abschnitt von Emacs Handbuch geht in die Nähe. Allerdings muss ich die Start- und Endpunkte anstelle der gewünschten Zeichenfolge für die Ersetzungen angeben. Das bedeutet, dass ich nach jeder Benutzereingabe suchen muss, um die Start- und Endpunkte zu bestimmen. Dies erscheint aufgrund der Leistungsfähigkeit und Komplexität des Algorithmus unrealistisch.

Antwort

6

Eine Möglichkeit, dies zu tun ist, Schriftsperre Schlüsselwörter für die entsprechenden Modi hinzuzufügen, und compose-region zu verwenden, um die neue Glyphe anstelle der alten Zeichenfolge anzuzeigen:

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

Bitte beachten Sie auch, dass org-mode hat ein Feature dieser Art bereits eingebaut, nicht nur für Links wie Sie erwähnt, sondern auch für LaTeX-ähnliche Einheiten:

(setq org-pretty-entities t)