The Linux Cyrillic HOWTO: Редактирование текста

Next Previous Contents

## 4. Редактирование текста

В этом разделе я опишу настройку различных текстовых редакторов для работы с кириллическими текстами. Этот раздел на охватывает текстовые процессоры, настройка которых описывается позже (смотри раздел Текстовые процессоры)

## 4.1 Emacs и XEmacs

Есть две версии редактора Emacs - `GNU Emacs` и `XEmacs`. Они обеспечивают более или менее сходный набор функций и возможностей. Реализация некоторых деталей расходится довольно сильно. Настройка кириллицы требует некого низко-уровневого (в духе Emacs Лиспа) "хака" и немного отличается для этих двух реализаций.

ВНИМАНИЕ:Помимо настройки, описанной здесь, существует альтернативный путь обучения обоих версий emacs кириллице. Для этого используется `MULE` (MULtilanguage Emacs support). Этот путь несколько сложен и (на сколько я знаю) редко используется, поэтому я его здесь не описываю.

Минимальная поддержка кириллицы в `GNU emacs` (вам не нужно этого делать при настройке `XEmacs`) обеспечивается при выполнении следующих вызовов, добавленных в `.emacs` (при условии, что поддержка символов кириллицы установлена для консоли или для X Windows соответственно):

    (standard-display-european t)

    (let ((m (current-input-mode)))
      (set-input-mode (car m) (nth 1 m) 1))

Это позволит вам видеть и вводить символы, находящиеся в верхней части ASCII таблицы.

Однако, этого не достаточно. Emacs обрабатывает кириллические символы как специальные, и как следствие не распознает границы русских слов и не делает различия между строчными и заглавными буквами. Чтобы обойти это, вам следует несколько модифицировать таблицы синтаксиса и регистра emacs:

    (require 'case-table)

    (let* ((ruc "\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361")
           (rlc "\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321")
           (i 0)
           (len (length ruc)))
      (while (< i len)
        (modify-syntax-entry (elt ruc i) "w  ")
        (modify-syntax-entry (elt rlc i) "w  ")
        (set-case-syntax-pair (elt ruc i) (elt rlc i) (standard-case-table))
        (setq i (+ i 1))))

Для этого я создал файл `rusup.el`, который содержит эти команды, также как и пару других удобные функции. Вы должны вызвать его в вашем `~/.emacs`.

Ну и в заключении: пакет russian.el, созданный Валерием Алексеевым (`valery@math.uga.edu`), позволяющий пользователю переключаться между кириллическим и стандартным модами ввода и преобразовывать текстовый буфер из одной русской кодировки в другую (это очень полезно, для чтения текстов импортированных из MS-DOS или Windows).

## 4.2 Работа с vi

Редактор `vi` (по крайней мере его клон `vim`, присутствующий в большинстве дистрибутивов Linux) знает о существовании 8ми битных символов. Это дает вам возможность вводить кириллические буквы. Редактор правильно распознает границы слов. Я ничего не знаю по поводу правил преобразования из строчных в заглавные и обратно, так как я не часто работаю в `vi`. Если вы знаете что-либо об этом, то пожалуйста сообщите мне

## 4.3 Редактирование текста в joe

Для того чтобы распознавать 8ми битные символы `joe` требует специальную опцию `-asis`. Вы можете указать ее в командной строке или вставить в файл `~/.joerc` для личного пользования или в `/usr/lib/joerc` для настройки всей системы.

Если ваша программа не воспринимает `-asis`, то вам следует обновить ее версию.

Однако, `joe` не распознает границы русских слов. Я предполагаю, что тоже самое происходит и с перекодировкой из верхнего регистра в нижний и обратно.

## 4.4 Проверка правописания на русском языке

Для проверки правописания я использую программу `GNU ispell`. Она имеет очень гибкие настройки и возможности для расширения. Ее можно использовать при проверки правописания текстов написанных на языках отличных от английского путем добавления новых словарей.

Константин Книжник создал очень хороший русский словарь для `ispell`. Вы можете найти его на Домашней страничке К.Книжника. В поставку словаря включен полезный скрипт, обеспечивающий инкрементальный режим проверки правописания слов для `emacs`;

В идеальном случае ваш `ispell` установлен правильно, и вам надо только создать словарь, используя команды, обеспечиваемые файлом `Makefile` из дистрибутива. Однако с довольно большой вероятностью у вас возникнут проблемы с `ispell`, который откажется понимать 8ми битные данные. Это может произойти по той причине, что в большинстве дистрибутивов Linux `ispell` скомпилирован без поддержки 8ми битных символов. В этом случае вам не удастся избежать перекомпиляции пакета `ispell`.

К счастью пользователей RedHat я скомпилировал пакет `ispell` вместе с русским и немецким словарями. Как обычно, вы можете утянуть его с RedHat FTP site.

Если вы все сделали правильно, то можете инициировать проверку правописания для русских текстов, путем вызова программы `ispell` с опцией `'-d russian'`

Теперь, если вы используете `Emacs`, то вероятно вы не против добавить пункт в меню для проверки с русским словарем. Я послал соответствующие изменения к человеку, поддерживающему `ispell.el`, и он согласился включить его в файл при следующем официальном релизе. Кроме того, вы можете сделать это же путем добавления следующего кода в ваш `~/.emacs` (или в `/usr/share/emacs/site-lisp/site-start.el` для настройке всей системы)

    (setq ispell-dictionary-alist
      (append ispell-dictionary-alist
              '(("russian"
                 "[\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]"
                 "[^\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]"
                 "[']" t ("-C" "-d" "russian") "~latin1"))))

    (define-key-after ispell-menu-map [ispell-select-russian]
      '("Select Russian (KOI-8)" . (lambda ()
                                     (interactive)
                                     (ispell-change-dictionary "russian")))
      'british)

К сожалению, это не работает в `XEmacs`. Я попытаюсь разрешить эту проблему позже.

Next Previous Contents