emacs - 如何让 Emacs 显示与实际存储的字符不同的字符?

标签 emacs elisp

我想为Emacs实现动态文本替换(只替换显示,不替换实际存储的文件),使用Elisp。

例如,在 LaTeX 文档中,我想输入 \alpha , 并让 Emacs 将其显示为 α ,所以更容易阅读。但在结果 .tex文件,我还想要\alpha , 而不是 α被拯救。 (备注:我可以自己用XeTeX或者LuaTeX直接支持UTF-8。但是出于协作和期刊要求的原因,我不希望UTF-8字符直接保存在.tex文件中。或者我可以在 AUCTeX 中使用预览。但这在我编辑公式时无济于事)

一个现有的例子是在组织模式下,当我们输入 [[link][name]] 时, 在输入最后一个 ] 之后,显示的文本将仅替换为带有超链接的名称。另一方面,保存这个文件时,保存的内容是原来的[[link][name]] ,与显示的不同。

任何想法如何实现?

PS:Display Specs That Replace The Text Emacs 手册的部分关闭。但是,我需要指定起点和终点,而不是替换所需的字符串。这意味着我需要在每次用户输入后进行搜索以决定起点和终点。由于算法的性能和复杂性,这看起来不切实际。

最佳答案

一种方法是为相关模式添加字体锁定关键字,并使用 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)

关于emacs - 如何让 Emacs 显示与实际存储的字符不同的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13600160/

相关文章:

emacs - 更改 Emacs 中的默认文件夹

emacs - 设置 emacs shell

Emacs、命名空间和定义

url - 如何在 Emacs Lisp 中 "URL decode"字符串?

emacs - C-x 在 CUA 模式下的标准行为

windows - Emacs 初始化文件不会在启动时加载

macos - Emacs 无法启动

emacs - 在缓冲区顶部显示信息面板

linux - .emacs 文件中的颜色主题设置不正确

Emacs Lisp 数字运算(实际上,简单的加法)