我改编了cyril-util.el,用于翻译格鲁吉亚语的Mkhedruli剧本。一个非常快速和肮脏的黑客,但它导致我试图了解显示表。函数standard-display-mkhedruli-translit通过更改缓冲区显示表或创建新的缓冲区显示表,在格鲁吉亚语和拉丁字母之间翻转(使用缓冲区局部变量)。我在这里发布了它:https://gist.github.com/1253614
除此之外,我改变.emacs中的standard-display-table以消除换行eol char,并在tty上创建拆分窗口使用更好的(unicode)字符,如下所示:
(set-display-table-slot standard-display-table 'wrap ?\ )
(set-display-table-slot standard-display-table 'vertical-border ?│)
现在的问题是,尽管音译工作正常,但最终还是结束了 失去我的标准显示表调整。有什么想法如何将所有这些无缝地结合在一起?我不想在我的mkhedruli函数中进行这些调整......
(当然还有一些缺陷,例如粗略(重绘显示),我出于某种原因需要这样做。)
答案 0 :(得分:2)
您可以在新创建的表格上使用(set-char-table-parent <newtable> 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-language
,因为您只测试它是nil
,而您可以测试mkhedruli-active
来获取相同的信息。