Как позволить 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)