emacs标准 - /缓冲 - 显示 - 表格更改(音译实验)

时间:2011-09-30 12:43:45

标签: emacs elisp georgian

我改编了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函数中进行这些调整......

(当然还有一些缺陷,例如粗略(重绘显示),我出于某种原因需要这样做。)

1 个答案:

答案 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来获取相同的信息。