2012-11-28 6 views
8

Elisp kullanarak, Emacs için dinamik metin değiştirme (yalnızca ekran değiştirilir, kaydedilen gerçek dosya değiştirilmez) uygulamak istiyorum.Emacs'in gerçekte depolanandan farklı bir karakter göstermesine nasıl izin verilir?

Örneğin, LaTeX belgelerinde, \alpha yazıp, Emacs'nin α numarasını görüntülemesine izin vermek istiyorum, böylece daha kolay okunur. Ama sonuçta .tex dosyasında, yerine kaydedilmek üzere \alpha'u istiyorum. (Not: UTF-8'i doğrudan desteklemek için XeTeX veya LuaTeX'i kullanabilirim. Ancak işbirliği ve dergi gereksinimleri nedeniyle, UTF-8 karakterlerinin doğrudan .tex dosyalarına kaydedilmesini istemiyorum. Ben formülü düzenlerken am zaman. Ama bu doğru son ] yazdıktan sonra, görüntülenen metin sadece değiştirilir, [[link][name]] yazdığınızda

varolan örneği, org-modundadır) yardımcı olmuyor AUCTeX önizleme Köprü ile ad. Öte yandan, bu dosyayı kaydederken, kaydedilen içerik, görüntülenenlerden farklı olarak orijinal [[link][name]]'dur.

Bunun nasıl uygulanabileceği hakkında bir fikrin var mı?

PS: Emacs el kitabının Display Specs That Replace The Text bölümü kapanır. Bununla birlikte, değiştirmeler için istenen dize yerine başlangıç ​​ve bitiş noktalarını belirtmem gerekiyor. Bu, başlangıç ​​ve bitiş noktalarına karar vermek için her kullanıcı girdisinden sonra arama yapmam gerektiği anlamına gelir. Bu, performans ve karmaşıklık algoritması nedeniyle gerçekçi görünmüyor.

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

da lütfen unutmayın: Bunu yapmak için

cevap

6

bir yolu, ilgili modlar için yazı tipi kilit anahtar kelimeler eklemek için, ve eski dize yerine yeni glif görüntülemek için compose-region kullanmaktır org-mode, bu tür bir özelliğe sahiptir, yalnızca belirtmiş olduğunuz bağlantılar için değil, aynı zamanda LaTeX benzeri nesneler için de geçerlidir:

(setq org-pretty-entities t)