Next Previous Contents

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

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

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

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

Словарь Константина Книжника

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

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

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

Если вы используете Emacs (подробнее в разделе Emacs), то, вероятно, вы не против добавить пункт в меню для проверки с русским словарем.

Константин Книжник советует выполнить следующие действия:

Чтобы иметь возможность переключить запускаемый EMACS'ом ISPELL на использование русского словаря, можно попробовать добавить в .emacs следующие строки


(setq ispell-dictionary-alist (cons
 '("russian"                          ; make russian selectable
   "[\xc0-\xdf\xe0-\xff]" "[^\xc0-\xdf\xe0-\xff]" "[']"
   nil ("-B" "-d" "russian") nil) ispell-dictionary-alist))
(setq  ispell-menu-map-needed t)
(setq  ispell-menu-map nil)
(load "ispell")  ; reload ISPELL

Необходимые действия уже содержатся в cyrconf.el в директории emacs, поэтому в случае использование нижеследующего включать их в .emacs не нужно.

Словарь Александра Лебедева

Более правильным (с точки зрения способа создания) чем словарь Книжника является "Словарь русского языка для ispell" Александра Лебедева

Словарь постоянно совершенствуется, дополняется и корректируется. Последнюю версию словаря можно найти на сервере: mch5.chem.msu.su

Я использую именно этот словарь.

6.2 Emacs и XEmacs

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

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


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

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

Совет:При работе с X-window для Emacs, вероятно, лучше всего подойдут шрифты lucidatypewriter из коллекции шрифтов Болховитянова (См. раздел Cyr-RFX).

6.3 Работа с vi

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

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

Все проблемы joe можно решить правильно настроив locale (См. раздел Настройка локали (если он правильным образом "пропатчен"). Если у вас ничего не получилось, то попробуйте рецепт описанный ниже.

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

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


Next Previous Contents