Как позволить Emacs отображать символы, отличные от тех, которые действительно хранятся?

Я хочу реализовать динамическую замену текста (заменяется только отображение, фактический сохраненный файл не заменяется) для Emacs, используя Elisp.

Например, в документах LaTeX я хочу набрать \alphaи пусть Emacs отобразит это так же, как αтак легче читать. Но в результате .tex файл, я все еще хочу \alpha, вместо α быть спасенным. (Примечание: я мог бы сам использовать XeTeX или LuaTeX для прямой поддержки UTF-8. Но из-за требований к сотрудничеству и журналам я не хочу, чтобы символы UTF-8 были непосредственно сохранены в .tex файлы. В качестве альтернативы я мог бы использовать предварительный просмотр в AUCTeX. Но это не помогает, когда я редактирую формулу)

Существующий пример находится в режиме org, когда мы набираем [[link][name]]сразу после ввода последнего ]отображаемый текст заменяется только именем с гиперссылкой. С другой стороны, при сохранении этого файла, сохраненный контент является оригинальным [[link][name]]отличается от отображаемого.

Есть идеи, как это можно реализовать?

PS: спецификация дисплея, заменяющая текстовый раздел руководства Emacs, близка. Однако мне нужно указать начальную и конечную точки вместо желаемой строки для замен. Это означает, что мне нужно выполнять поиск после каждого пользовательского ввода, чтобы определить начальную и конечную точки. Это выглядит нереально из-за производительности и сложности алгоритма.

1 ответ

Решение

Один из способов сделать это - добавить ключевые слова блокировки шрифта для соответствующих режимов и использовать compose-region чтобы отобразить новый глиф вместо старой строки:

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

Пожалуйста, обратите внимание, что org-mode имеет функцию такого рода, уже встроенную, не только для ссылок, как вы упомянули, но и для LaTeX-подобных объектов:

(setq org-pretty-entities t)
Другие вопросы по тегам