www.linux.org.ru
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