Библиотека сайта rus-linux.net
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