Next Previous Contents

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

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

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

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

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

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

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

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

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

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

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

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

6.2 Emacs и XEmacs

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

Для настройки старых версий Emacs следует посмотреть изначальный "Cyrillic HOWTO"  от Беликова -- дословный перевод можно найти на моей страничке: www.inp.nsk.su/~baldin в разделе Cyrillic HOWTO (old rus).

Существует масса способов кириллизации Emacs -- в основном эти способы требуют некоего низкоуровневого (в духе Emacs Лиспа) "хака". Более "идеологически"  правильным способом является настройка с использованием MULE (MULtilanguage Emacs support) -- раздел MULE.

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

MULE

MULE -- "MULtilanguage Emacs support" -- это подсистема Emacs, которая создана для возможности использования в этом редакторе различных языков. Основным толчком для развития MULE послужило желание использовать китайские/японские и тому подобные языки -- с этим, говорят, проблем нет, а вот по поводу использования кириллицы мало что известно -- попробуем разобраться.

Для правильной работы с емаксом надо всего-то

  1. Пакет emacs-leim. Этот пакет, по идее, должен присутствовать в подавляющем большинстве известных дистрибутивов. .
  2. Русские шрифты, желательно в koi8-r или iso5

Далее:

  1. Идем в меню Mule,Set Font/Fontset, Fontset и выбираем standard. Зачем? Fontset -- это набор шрифтов, который емакс себе при загрузке подбирает. Причем startup подбирается с тем расчетом чтобы для каждого шрифта из Fontset'а имелись italic и bold варианты, а standard подбирается так, чтобы в Fontset'е имелось как можно больше различных кодировок. Естественно весь этот процесс кастомизируется в ~/.emacs.
    (describe-input-method "cyrillic-jcuken")
    (set-language-environment "cyrillic-koi8")
    (set-default-font "-*-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard")
    
  2. Идем в Mule,Set Language Environment, Cyrillic и устанавливаем один из 3-ёх вариантов. Какой -- по большому счету без разницы. Это будет влиять только на общение емакс'а с внешним миром -- если поставим Cyrillic-ISO, то текст будет сохраняться в ISO и в буфер обмена будет копироваться текст в кодировке ISO. То же самое с KOI8.
  3. Самое главное -- не тянуться к системным переключателям раскладки клавиатуры -- емакс все делает сам. По умолчанию переключатель раскладки клавиатуры повешен на C-\. Для изменения переключателя, вероятно, надо покопаться в районе функций global-set-key или set-keyboard-coding-system (не проверялось).

По умолчанию обычно выбираются совершенно неюзабельные шрифты. Например, в дистрибутиве Mandrake 7.0 после, описанных выше, телодвижений при вводе текста получается нечто непотребное.

Если у вас уже установлены Cyr-RFX (См. раздел Cyr-RFX):

  1. Наберите что-то вроде
                              
      (create-fontset-from-fontset-spec
         "-b&h-*-medium-r-*-*-14-*-*-*-*-*-fontset-vasja,
      latin-iso8859-1:-b&h-*-medium-r-*-*-14-*-*-*-*-*-iso8859-1,
      latin-iso8859-15:-b&h-*-medium-r-*-*-14-*-*-*-*-*-iso8859-15,
      cyrillic-iso8859-5:-b&h-*-medium-r-*-*-14-*-*-*-*-*-iso8859-5" t)
    

  2. Поместите курсор за закрывающей скобкой и нажмите C-x C-e выполнив введенный ранее куск кода.
  3. Затем наберите
      (set-default-font "-b&h-*-medium-r-*-*-14-*-*-*-*-*-fontset-vasja")
    
    и опять-таки выполните этот код, нажав комбинацию клавиш C-x C-e (не забудьте, что курсор должен находиться за последней закрывающей скобкой)
  4. Добавьте эти команды в ~/.emacs, чтобы они выполнялись при каждом запуске emacs'а.
  5. Да, ещё туда же можно добавить
      (set-language-environment "Cyrillic-KOI8")
    

Добавление: Мой ~/.emacs выглядит следующим образом (у меня установлен пакет Cyr-RFX -- раздел Cyr-RFX):


;;русификация через mule - переключалка "Ctrl+\" 
;; Переключение в русский регистр в самом начале
;;(set-input-method "cyrillic-jcuken")
;;(describe-input-method "cyrillic-jcuken")
(set-language-environment "cyrillic-koi8")

;; размер 18 -- у меня относительно большой монитор 17' -- можно поставить 14
(create-fontset-from-fontset-spec
     "-b&h-LucidaTypewriter-medium-r-*-*-18-*-*-*-*-*-koi8-1,
  latin-iso8859-1:-b&h-*-medium-r-*-*-18-*-*-*-*-*-iso8859-1,
  latin-iso8859-15:-b&h-*-medium-r-*-*-18-*-*-*-*-*-iso8859-15,
  cyrillic-iso8859-5:-b&h-*-medium-r-*-*-18-*-*-*-*-*-iso8859-5" t)
(set-default-font "-b&h-LucidaTypewriter-medium-r-*-*-18-*-*-*-*-*-koi8-1")

В консоле при загрузке Emacs выдаётся ошибка -- кусок со шрифтами надо как-то научиться пропускать при работе в консоле и загружать в X-Window. Не понятно как переделать расскладку клавиатуры.

Минимальная поддержка кириллицы

Поддержка кириллицы без MULE -- совместимость между версиями не гарантируется.

Вариант 1

Минимальная поддержка кириллицы в 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 таблицы.

Вариант 2

Андрей Ёлкин ( Andrei Elkin) предлагается простой вариант `русификации' emacs c использованием однобайтового представления символов в буферах редактора. Причем флаг --unibyte при вызове редактора указывать не обязательно.

Чтобы вводимая кириллица отображалась и нам всё ещё не нужен unicode (standard-display-european t), не хватает в emacs важной малости -- syntax table для unibyte mode

Собранный пакет можно найти на linux-ink.ru/pub/) -- следует взять файл emacs-unibyte-cyr-*.rpm.

Иначе можно просто взять этот файл отсюда: http://www.inp.nsk.su/~baldin/misc/koi8-r.el и положить его куда-нибудь в /usr/share/emacs/site-lisp)

И прописать ~/.emacs


;; minimal cyrillic - unibyte & koi8r
(  ; но-икс в икс-тэрм 
  (let (this-input-mode (current-input-mode))
     (set-input-mode 
      (elt this-input-mode 0) (elt this-input-mode 1) 0 (elt this-input-mode 3))))
(standard-display-european t)  ; roughly equal to --unibyte flag
(set-language-info "Cyrillic-KOI8" 'unibyte-syntax  "koi8-r") 
(setup-cyrillic-koi8-environment) ; по умолчанию

Вариант 3

От Владимира Дмитриева ( Vladimir Dmitriev):

Это для консоли, для X в принципе то же самое.


 (require 'oc-unicode)
 (require 'cyril-util)
 (set-language-environment 'cyrillic-koi8)
 (set-terminal-coding-system 'utf-8)

Если не нужен unicode, то в принципе можно обойтись следующим (HЕ проверено):


 (require 'cyril-util)
 (set-language-environment 'cyrillic-koi8)
 (set-terminal-coding-system 'koi8-r)

6.3 Работа с vi

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

Насколько я понимаю, vim использует locale для преобразования букв из строчных в заглавные и обратно, т.е. на всех встреченных мной unix-like системах vim правильно работал с русским языком после настройки locale (Как настроить локаль смотрите раздел Настройка локали).

Для того, чтобы постоянно не переключаться в командном режиме между английскими и русскими буквами, необходимо выполнить мапирование русских букв в английские -- либо (в старых версиях vim или vi) через команду map для каждой буквы, либо (в новых версиях vim) через опцию langmap. Последнее делается добавлением в ваш ~/.vimrc, или в общесистемный vimrc, двух строк:


set langmap=ж;;
set langmap=ё`,йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,х[,ъ],фa,ыs,вd,аf,пg,рh,оj,лk,дl,э',яz,чx,сc,мv,иb,тn,ьm,б\,,ю.,Ё~,ЙQ,ЦW,УE,КR,ЕT,HY,ГU,ШI,ЩO,ЗP,Х{,Ъ},ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK,ДL,Ж:,Э\",ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,Б<,Ю>

Подробности -- в :help langmap.

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

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

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

joe, который входит в более-менее современные дистрибутивы (BCL 6.2, RH 5.2-6.1; FreeBSD) правильно распознаёт границы русских слов. А для преобразования регистра man joe советует ^K / -- фильтровать блок через tr, т.е. все сводится к работе tr.


Next Previous Contents
Используются технологии uCoz