2

グルジア語のムヘドルリ文字を音訳するために、cyril-util.el を適応させました。非常に簡単で汚いハックですが、ディスプレイテーブルについて学ぼうとしました。関数 standard-display-mkhedruli-translit は、buffer-display-table を変更するか、新しい新しいテーブルを作成することにより、グルジア語とラテン アルファベットの間で (バッファー ローカル変数を使用して) 反転します。ここに投稿しました: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-function にもこれらの調整を加えたくありません...

(確かに、ラフ(再描画表示)など、何らかの理由で行う必要があったいくつかの欠陥があります)。

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))

2つを切り替えるだけのほうがいいかもしれません:

(setq mkhedruli-active (not mkhedruli-active))
(let ((mkhedruli-language
       (if mkhedruli-active "Georgian"))))

であるかどうかのみをテストし、代わりにテストして同じ情報を取得できるため、mkhedruli-language完全に取り除くことさえできます。nilmkhedruli-active

于 2012-04-05T20:14:07.640 に答える