В этом разделе я опишу настройку различных программ для работы с кириллическими текстами. Этот раздел не охватывает текстовые процессоры, настройка которых описывается позже (смотри раздел Текстовые процессоры)
Для проверки правописания я использую программу GNU ispell
.
Она имеет очень гибкие настройки и возможности для расширения.
Её можно использовать при проверке правописания текстов,
написанных на языках, отличных от английского, путём добавления
новых словарей.
В идеальном случае, когда ваш ispell
установлен правильно, вам
надо только создать словарь, используя команды, обеспечиваемые
файлом Makefile
из дистрибутива соответствующего
словаря. Однако с некой долей вероятности
у вас возникнут проблемы с ispell
, который откажется понимать
8-ми битные данные. Это означает, что в вашей системе ispell
скомпилирован без поддержки 8-ми битных символов. В этом случае вам
не удастся избежать перекомпиляции пакета ispell
.
Если у вас все нормально, то можете инициировать проверку
правописания для русских текстов путём вызова программы ispell
с опцией '-d russian'
Последняя версия ispell
имеет номер 3.1.20.
При желании пакет можно взять здесь
ftp.cs.ucla.edu
или найти на любом крупном ftp-сервере. При самостоятельной компиляции
ispell
надо скопировать файл local.h.samp
в
local.h,
закомментировать в
нем NO8BIT (#undef NO8BIT
) и установить правильные
пути для BINDIR
, LIBDIR
и других рабочих директорий.
Этот словарь построен на основе словаря русского языка для ispell
,
первоначально составленного Нилом Далтоном (Neal Dalton) в 1992 г.
После тщательной проверки и исправления примерно 4000 ошибок в словаре
Нила Далтона (в этой части работы использовался орфографический словарь
русского языка, выпущенный Институтом русского языка АН СССР), в словарь
были добавлены отсутствовавшие в нем правила образования форм
существительных, прилагательных, причастий, наречий, изменены правила
формирования окончаний глаголов, так что affix-файл можно считать
переписанным заново. Одновременно в словарь было добавлено большое число
слов.
Словарь постоянно совершенствуется, дополняется и корректируется. Последнюю версию словаря можно найти на сервере: mch5.chem.msu.su
Как можно понять из названия раздела, автором этого словаря является Александр Лебедев.
На основе этого словаря Serge Winitzki создал словарь для проверки правописания в текстах, набранных в дореформенной русской орфографии. Предложенное им расширение кодировки koi8 и сами словари можно найти по адресу: sawsoft.newmail.ru/LS/koi8-extended.html.
Отличительной чертой данного словаря является то, что начиная с версии 0.99c0 в него включена полноценная поддержка буквы ё (другие словари просто заменяют букву ё на букву е).
Константин Книжник создал хороший русский словарь для
ispell
. Вы можете найти его на
домашней страничке К.Книжника.
В поставку словаря включён полезный скрипт, обеспечивающий
инкрементный режим проверки правописания слов для emacs
.
Есть две версии редактора Emacs -- GNU Emacs
и XEmacs
.
Они обеспечивают более или менее сходный набор функций
и возможностей, но при этом реализация некоторых деталей расходится
довольно сильно.
Для настройки старых версий Emacs следует посмотреть
изначальный "Cyrillic HOWTO" от Беликова -- дословный перевод
можно найти на моей страничке:
www.inp.nsk.su/~baldin
в разделе Cyrillic HOWTO (old rus)
.
Существует масса способов кириллизации Emacs -- в основном
эти способы требуют некоего низкоуровневого (в духе Emacs Лиспа)
"хака". Более "идеологически" правильным способом кириллизации
emacs'а
является настройка с использованием MULE
(MULtilanguage Emacs support) --
раздел
MULE.
Совет: При работе с X-window для Emacs, вероятно, лучше
всего подойдут шрифты lucidatypewriter
из коллекции шрифтов
Болховитянова Cyr-RFX
(См. раздел
Cyr-RFX).
MULE -- "MULtilanguage Emacs support" -- это подсистема emacs, которая создана для возможности использования в этом редакторе различных языков. Основным толчком для развития MULE послужило желание использовать китайские/японские и тому подобные языки -- с этим, говорят, проблем нет, а вот по поводу использования кириллицы мало что известно -- попробуем разобраться.
Для правильной работы с Mule надо всего-то
Далее:
Mule, Set Font/Fontset, Fontset
и выбираем standard
. Зачем? Fontset
-- это набор
шрифтов, который емакс подбирает себе при загрузке.
Причём startup подбирается с тем расчётом чтобы
для каждого шрифта из Fontset'а
имелись italic и
bold варианты, а standard подбирается так, чтобы
в Fontset'е
имелось как можно больше различных
кодировок. Чтобы сделать изменение постоянным, запишите
следующую строчку в ~/.emacs
.
(set-default-font "fontset-standard")
Mule, Set Language Environment, Cyrillic
и
устанавливаем один из 3-х вариантов. Какой -- по большому счету без
разницы. Это будет влиять только на общение емакс'а с внешним миром --
если захотим Cyrillic-ISO
, то текст будет сохраняться в
ISO и в буфер обмена будет копироваться текст в кодировке
ISO. То же самое с KOI8. Чтобы сделать изменение постоянным,
запишите в ~/.emacs
.
(set-language-environment "cyrillic-koi8")
Всё. Теперь самое главное - отучиться пользоваться системным
переключателем раскладки клавиатуры -- emacs все делает сам. По
умолчанию переключатель раскладки клавиатуры повешен на C-\
.
Будьте готовы к тому, что могут выбраться совершенно неюзабельные шрифты. Чтобы кастомизировать выбор шрифтов, нужно создать свой собственный набор шрифтов (на сленге emacs -- fontset). Если у вас уже установлены Cyr-RFX (См. раздел Cyr-RFX):
(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)
C-x C-e
выполнив введённый ранее кусок кода.
(set-default-font "fontset-vasja")
C-x C-e
(не забудьте, что курсор должен находиться за последней
закрывающей скобкой). Результат должен быть виден сразу же.
~/.emacs
, чтобы они выполнялись
при каждом
запуске emacs'а.
(set-language-environment "Cyrillic-KOI8")
Чтобы emacs не плевался в консоли что не может найти иксовых шрифтов, хорошо бы обрамить вышеприведённый кусок кода следующим условием:
(defmacro Xlaunch (&rest x) (list 'if (eq window-system 'x)(cons 'progn x))) (Xlaunch ... ... ... )
Сторонникам теории множественности кодировок (чем больше кодировок -- тем лучше): для того, чтобы включить поддержку 1251, вставьте
(codepage-setup 1251)
~/.emacs
. 866-ю кодовую страницу можно добавить туда же
следующим образом:
(defvar cp866-decode-table [ 255 240 nil nil 242 nil nil 244 nil nil nil nil nil nil 246 nil 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 252 241 nil nil 243 nil nil 245 nil nil nil nil nil nil 247 nil] "Table for converting ISO-8859-5 characters into codepage 866 glyphs.") (setplist 'cp866-decode-table '(charset cyrillic-iso8859-5 language "Cyrillic-ISO" offset 160)) (codepage-setup 866)
Чтобы открыть файл в какой-то кодировке, отличной от дефолтной, идём в Mule, SetCodingSystem, NextCommand, выбираем кодировку и выполняем свою команду (например, C-x-f, открыть файл) То же самое чтобы сохранить - Mule, SetCodingSystem, NextCommand, выбираем кодировку и сохраняем в данной кодировке(C-x-s).
Вот пример готового ~/.emacs
для шрифтов Cyr-RFX
-- раздел
Cyr-RFX:
;; только в иксах (defmacro Xlaunch (&rest x) (list 'if (eq window-system 'x)(cons 'progn x))) ;; проверить на наличие иксов (Xlaunch ;; зарегистрировать набор шрифтов (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) ;; установить набор шрифтов (set-default-font "fontset-vasja") ) ;; делать всё в кодировке KOI8-R (set-language-environment 'Cyrillic-KOI8) ;; вспомни виндозную кодировку... (codepage-setup 1251) ;; ..и научись досовской (defvar cp866-decode-table [ 255 240 nil nil 242 nil nil 244 nil nil nil nil nil nil 246 nil 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 252 241 nil nil 243 nil nil 245 nil nil nil nil nil nil 247 nil] "Table for converting ISO-8859-5 characters into codepage 866 glyphs.") (setplist 'cp866-decode-table '(charset cyrillic-iso8859-5 language "Cyrillic-ISO" offset 160)) (codepage-setup 866) ;;Ctrl-c, Ctrl-v,Ctrl-x и другие многим привычные комбинации клавиш (pc-bindings-mode) (pc-selection-mode)
Если вдруг кому-то придёт в голову работать в emacs из консоли, просто запустите его с опцией --unibyte. В таком случае работа с emacs не будет отличаться от работы в других консольных редакторах.
Добавление: Кусок моего ~/.emacs
, отвечающего за
кириллизацию,
выглядит следующим образом
(у меня установлен пакет Cyr-RFX -- раздел
Cyr-RFX):
;; -*- emacs-lisp -*- ;; ;; Запускать как: emacs --unibyte --debug-init ;; ;; ;; шрифты для X-window ;; ;;Шрифт по умолчанию (cond (window-system (setq default-frame-alist (append '((font . "-b&h-lucidatypewriter-medium-r-normal-*-18-*-*-*-*-*-koi8-r")) default-frame-alist));; поставить этот шрифт первым в списке ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Кириллизация;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;русификация через mule - переключалка "Ctrl+\" - требуется liem ;; ;;(set-language-environment "Cyrillic-KOI8");так (set-language-environment "Cyrillic-koi8-r");или сяк ;; Дать возможность печатать не только ASCII ;; То же можно делать с помощью ключика --unibyte (standard-display-european t) ;; Для любителей транслита ;(standard-display-cyrillic-trans t) ;; ;; Чтобы раскладка соответствовала раскладке русских букв на виндовых (а теперь ;; таких большинство) клавиатурах, можно добавить еще следующие строки: ;; ;; redefine some orginal keybindings под MS - можно ли попроще? ;; (quail-define-package "cyrillic-jcuken" "Cyrillic" "RU" nil "ЙЦУКЕH keyboard layout widely used in Russia (ISO 8859-5 encoding)" nil t t t t nil nil nil nil nil t) (quail-define-rules ("1" ?1) ("2" ?2) ("3" ?3) ("4" ?4) ("5" ?5) ("6" ?6) ("7" ?7) ("8" ?8) ("9" ?9) ("0" ?0) ("-" ?-) ("=" ?=) ("`" ?ё) ("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" ?Е) ("Y" ?H) ("U" ?Г) ("I" ?Ш) ("O" ?Щ) ("P" ?З) ("{" ?Х) ("}" ?Ъ) ("A" ?Ф) ("S" ?Ы) ("D" ?В) ("F" ?А) ("G" ?П) ("H" ?Р) ("J" ?О) ("K" ?Л) ("L" ?Д) (":" ?Ж) ("\"" ?Э) ("|" ?|) ("Z" ?Я) ("X" ?Ч) ("C" ?С) ("V" ?М) ("B" ?И) ("N" ?Т) ("M" ?Ь) ("<" ?Б) (">" ?Ю) ("?" ?,))
Поддержка кириллицы без MULE -- совместимость между версиями не гарантируется.
Минимальная поддержка кириллицы в 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 таблицы.
Андрей Ёлкин (
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 & koi8-r ( ; но-икс в икс-тэрм (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) ; по умолчанию
Редактор 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
.
Все проблемы joe можно решить, правильно настроив locale (См. раздел Настройка локали), если он правильным образом "пропатчен". Если у вас ничего не получилось, то попробуйте рецепт, описанный ниже.
Для того, чтобы распознавать 8-ми битные символы, joe
требует
специальную опцию -asis
. Вы можете указать её в командной
строке или вставить в файл ~/.joerc
для личного пользования,
или в /usr/lib/joerc
для настройки всей системы.
joe, который входит в более-менее современные дистрибутивы
(BCL 6.2, RH 5.2-6.1; FreeBSD) правильно распознаёт границы
русских слов. А для
преобразования регистра man joe
советует ^K /
-- фильтровать
блок через tr, т.е. все сводится к работе tr.