emacs标准/缓冲区显示表更改(音译实验)
我改编了cyril-util.el,使其具有格鲁吉亚语Mkhderuli脚本的音译。这是一个非常快速和肮脏的黑客行为,但它让我尝试了解显示表。通过改变缓冲区显示表或创建新的缓冲区显示表,函数standard display mkhedruli translatit(使用缓冲区局部变量)在格鲁吉亚字母和拉丁字母之间翻转。我把它贴在这里: 除此之外,我还修改了.emacs中的标准显示表,以消除换行eol字符,并使tty上的拆分窗口使用更好的(unicode)字符,如下所示:emacs标准/缓冲区显示表更改(音译实验),emacs,elisp,georgian,Emacs,Elisp,Georgian,我改编了cyril-util.el,使其具有格鲁吉亚语Mkhderuli脚本的音译。这是一个非常快速和肮脏的黑客行为,但它让我尝试了解显示表。通过改变缓冲区显示表或创建新的缓冲区显示表,函数standard display mkhedruli translatit(使用缓冲区局部变量)在格鲁吉亚字母和拉丁字母之间翻转。我把它贴在这里: 除此之外,我还修改了.emacs中的标准显示表,以消除换行eol字符,并使tty上的拆分窗口使用更好的(unicode)字符,如下所示: (set-display
(set-display-table-slot standard-display-table 'wrap ?\ )
(set-display-table-slot standard-display-table 'vertical-border ?│)
现在的问题是,尽管音译可以正常工作,但我最终还是失败了
丢失我的标准显示表调整。有没有办法将所有这些无缝地结合在一起?我不想在我的Mkhderuli函数中也有这些调整
(当然还有一些缺陷,例如粗糙(重画显示),出于某种原因,我需要这样做)。您可以在新创建的表上使用(set char table parent standard display table)
当我在这里时:您可以通过使用define minor mode
简化代码。
其他类型的简化:
(let ( (mkhedruli-language nil) )
(if (equal mkhedruli-active nil)
(setq mkhedruli-language "Georgian")
(setq mkhedruli-language nil))
(with-current-buffer (current-buffer)
(if (equal mkhedruli-language nil)
(setq mkhedruli-active nil)
(setq mkhedruli-active t)))
变成
(let ( (mkhedruli-language nil) )
(setq mkhedruli-language
(if (equal mkhedruli-active nil)
"Georgian"
nil))
(if (equal mkhedruli-language nil)
(setq mkhedruli-active nil)
(setq mkhedruli-active t))
会变成什么
(let ((mkhedruli-language
(if mkhedruli-active nil "Georgian"))))
(setq mkhedruli-active
(if mkhedruli-language t nil))
但您可能更愿意切换这两个选项:
(setq mkhedruli-active (not mkhedruli-active))
(let ((mkhedruli-language
(if mkhedruli-active "Georgian"))))
甚至完全摆脱mkhedruli语言
,因为您只测试它是否为nil
,您可以测试mkhedruli活动
,以获得相同的信息