2

我改编了 cyril-util.el 以音译格鲁吉亚语的 Mkhedruli 脚本。一个非常快速和肮脏的黑客,但它让我尝试了解显示表。函数 standard-display-mkhedruli-translit 通过更改缓冲区显示表或创建一个新的新表在格鲁吉亚和拉丁字母之间翻转(使用缓冲区局部变量)。我把它贴在这里:https ://gist.github.com/1253614

除此之外,我更改了 .emacs 中的标准显示表以消除换行 eol 字符,并使 tty 上的拆分窗口使用更好的(unicode)字符,如下所示:

(set-display-table-slot standard-display-table 'wrap ?\ )
(set-display-table-slot standard-display-table 'vertical-border ?│)

现在的问题是,虽然音译工作正常,但我最终失去了我的标准显示表调整。任何想法如何将所有这些无缝地结合在一起?我不想在我的 mkhedruli 函数中也有这些调整......

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

4

1 回答 1

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因为您只测试 if it's nil,并且您可以测试mkhedruli-active以获得相同的信息。

于 2012-04-05T20:14:07.640 回答