Изменения стандартной / буферной таблицы отображения в emacs (эксперимент по транслитерации) - PullRequest
2 голосов
/ 30 сентября 2011

Я адаптировал cyril-util.el для транслитерации сценария Мхедрули на грузинском языке.Очень быстрый и грязный хак, но он привел меня к попытке изучить таблицы отображения.Функция standard-display-mkhedruli-translit переворачивает (используя локальную переменную буфера) между грузинским и латинским алфавитом, изменяя таблицу buffer-display или создавая новую свежую.Я разместил это здесь: https://gist.github.com/1253614

В дополнение к этому, я изменяю стандартную таблицу отображения в .emacs, чтобы исключить перенос строки в eol char и сделать разделенные окна на tty более привлекательными (юникод)символ, например:

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

Проблема в том, что, хотя транслитерация работает нормально, я теряю настройки стандартного отображения таблицы.Любые идеи, как объединить все это без проблем?Я не хотел бы, чтобы эти корректировки были также в моей функции mkhedruli ...

(Есть, конечно, еще несколько недостатков, таких как грубый (перерисовка), который мне по какой-то причине понадобилсяделает).

1 Ответ

2 голосов
/ 06 апреля 2012

Вы можете использовать (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, чтобы получить ту же информацию.

...