Здравствуйте всем!
Народ ! Напишите пожалуста развернутый FAQ по
русификации x-emacs (MULE, отличие от GNU-emacs .e.t.c.)
длям RU.LINUX FAQ :
http://www.sensi.org/~ak/linuxfaq/rulinux.faq.html
вопр. 3.22
Да в принципе там уже большая половина написана. Могу написать следующее:
Для руссификации XEmacs стоит практически наверняка использовать MULE. Dirty
hacks, связанные с русскими шрифтами на кодировках iso8859-1 уже в прошлом
и, к счастью, применяются теперь крайне редко.
Для этого надо во-первых убедиться, что поставленная версия поддерживает
MULE - механизм для работы с многоязыковыми документами, в том числе
использование разных кодировок в одном документе. Заметить это легко, это
примечание о MULE много раз мелькает во время запуска, в конце концов просто
должно быть меню "Mule". Если MULE нет - то надо либо поставить с
дистрибутива (в случае с RPM-пакетами, например, основной пакет может
называться xemacs, а к нему надо еще поставить xemacs-mule, xemacs-i18n или
что-нибудь в этом роде), либо можно скачать xemacs самому и собрать из
исходников. Ссылки и подробные инструкции по скачиванию и сборке есть на
www.xemacs.org.
Далее, про MULE надо знать, что это такая самодостаточная система,
замахивающаяся на тотальную поддержку большинства даже очень сложных языков
(с иероглифами), требующая только наличия шрифтов у X-сервера. Русский язык
она поддерживает отлично в куче кодировок, но единственная проблема - она
считает по умолчанию, что русские _шрифты_ у пользователя стоят
_стандартные_, то есть в кодировке iso8859-5. В принципе можно конечно было
бы покопаться с пол-дня в этом самом MULE и объяснить ему, что кроме
_шрифтов_ в iso8859-5, бывают еще шрифты в koi8-r, cp1251 и т.п., но как
правило этого никто не делает (если кто сделает - прошу поделиться с
общественностью - полезная же вещь), и все просто берут и дополнительно
доставляют шрифты с iso8859-5, обычно из того же cyrrfx [здесь вставить
ссылку на cyrrfx].
Для показа русских букв этого (ну и еще в меню MULE проставить нужную
кодировку перед загрузкой файла) достаточно. Со вводом несколько
проблематичнее - тут начинается коренное отличие XEmacs от GNU emacs (за что
его не любят половина русских пользователей) - XEmacs различает сами
символы, а не коды символов, то есть для него файл - это не просто набор
двоичных кодов, а каждый из символов файла имеет свое наименование, типа
Cyrillic_IO.
В результате если попытаться через XKB вводить русские символы - то XEmaсs
будет ругаться, почему же он получает всякие Cyrillic_A, Cyrillic_B,
Cyrillic_V, а не "а", "б", "в", и т.п. Можно пойти двумя
способами:
1) Воспользоваться руссификацией ввода средствами самого MULE и XEmacs -
поставить в меню MULE раскладку ввода Cyrillic (JCUKEN) и переключаться
комбинацией C-\. В принципе удобоваримо, но неудобно.
2) Установить небольшой хак в свой файл ~/.emacs, приведенный ниже.
; KOI8 hack ======================================
(define-key global-map [(control iso-prev-group)] "")
(define-key global-map [(control iso-next-group)] "")
(define-key global-map [Cyrillic_a] [а])
(define-key global-map [Cyrillic_A] [А])
(define-key global-map [Cyrillic_be] [б])
(define-key global-map [Cyrillic_BE] [Б])
(define-key global-map [Cyrillic_ve] [в])
(define-key global-map [Cyrillic_VE] [В])
(define-key global-map [Cyrillic_ghe] [г])
(define-key global-map [Cyrillic_GHE] [Г])
(define-key global-map [Cyrillic_de] [д])
(define-key global-map [Cyrillic_DE] [Д])
(define-key global-map [Cyrillic_ie] [е])
(define-key global-map [Cyrillic_IE] [Е])
(define-key global-map [Cyrillic_io] [ё])
(define-key global-map [Cyrillic_IO] [Ё])
(define-key global-map [Cyrillic_zhe] [ж])
(define-key global-map [Cyrillic_ZHE] [Ж])
(define-key global-map [Cyrillic_ze] [з])
(define-key global-map [Cyrillic_ZE] [З])
(define-key global-map [Cyrillic_i] [и])
(define-key global-map [Cyrillic_I] [И])
(define-key global-map [Cyrillic_shorti] [й])
(define-key global-map [Cyrillic_SHORTI] [Й])
(define-key global-map [Cyrillic_ka] [к])
(define-key global-map [Cyrillic_KA] [К])
(define-key global-map [Cyrillic_el] [л])
(define-key global-map [Cyrillic_EL] [Л])
(define-key global-map [Cyrillic_em] [м])
(define-key global-map [Cyrillic_EM] [М])
(define-key global-map [Cyrillic_en] [н])
(define-key global-map [Cyrillic_EN] [H])
(define-key global-map [Cyrillic_o] [о])
(define-key global-map [Cyrillic_O] [О])
(define-key global-map [Cyrillic_pe] [п])
(define-key global-map [Cyrillic_PE] [П])
(define-key global-map [Cyrillic_er] [p])
(define-key global-map [Cyrillic_ER] [Р])
(define-key global-map [Cyrillic_es] [с])
(define-key global-map [Cyrillic_ES] [С])
(define-key global-map [Cyrillic_te] [т])
(define-key global-map [Cyrillic_TE] [Т])
(define-key global-map [Cyrillic_u] [у])
(define-key global-map [Cyrillic_U] [У])
(define-key global-map [Cyrillic_ef] [ф])
(define-key global-map [Cyrillic_EF] [Ф])
(define-key global-map [Cyrillic_ha] [х])
(define-key global-map [Cyrillic_HA] [Х])
(define-key global-map [Cyrillic_tse] [ц])
(define-key global-map [Cyrillic_TSE] [Ц])
(define-key global-map [Cyrillic_che] [ч])
(define-key global-map [Cyrillic_CHE] [Ч])
(define-key global-map [Cyrillic_sha] [ш])
(define-key global-map [Cyrillic_SHA] [Ш])
(define-key global-map [Cyrillic_shcha] [щ])
(define-key global-map [Cyrillic_SHCHA] [Щ])
(define-key global-map [Cyrillic_hardsign] [ъ])
(define-key global-map [Cyrillic_HARDSIGN] [Ъ])
(define-key global-map [Cyrillic_yeru] [ы])
(define-key global-map [Cyrillic_YERU] [Ы])
(define-key global-map [Cyrillic_softsign] [ь])
(define-key global-map [Cyrillic_SOFTSIGN] [Ь])
(define-key global-map [Cyrillic_e] [э])
(define-key global-map [Cyrillic_E] [Э])
(define-key global-map [Cyrillic_yu] [ю])
(define-key global-map [Cyrillic_YU] [Ю])
(define-key global-map [Cyrillic_ya] [я])
(define-key global-map [Cyrillic_YA] [Я])
; end of hack ====================================
Минусы второго подхода - куда удобнее и привычнее, но не работает
incremental search с русскими буквами и еще кое-что по мелочам.
WBR, Михаил Якшин AKA GreyCat
http://3d.onego.ru/
mailto:yakshin@online.ru