Русификация XEmacs


Последнюю версию этого документа можно найти по адресу: http://www.linux.zp.ua/xemacs/


Краткий индекс


Предисловие

Русификацию XEmacs можно проводить двумя способами: либо без MULE, либо с ним. Ниже рассматриваются все аспекты русификации обоими способами. Заранее считаем, что русский язык на уровне системы у вас проставлен (есть необходимые шрифты, установлена локаль, переключатель клавиатуры и т.п.) и вы обладаете некими минимальными навыками работы с системой.

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

Также следует заметить, что речь идет о XEmacs версий 21.1.xx и 21.4.xx. Использовать на текущий момент более ранние версии, по-видимому, нет смысла.

Все описания, рассуждения и "рецепты" относятся к Unix системам, поскольку у авторов нет опыта работы с XEmacs под Windows.


1. Какой XEmacs выбрать - с MULE или без?

Для тех, кто впервые столкнулся с термином "MULE", заметим, что это такая самодостаточная система, замахивающаяся на тотальную поддержку большинства даже очень сложных языков (с иероглифами), требующая только наличия шрифтов у X-сервера. Расшифровывается, как "MULti-lingual Enhancement".

Его преимущества - перед вами целый мир, полный разных языков и кодировок. И все это вы можете использовать даже в одном документе. Лишь бы шрифты были.

Его недостатки - он массивнее (базовые пакеты для поддержки MULE занимают ~5-8 Mb) и сложнее в управлении. Работает также медленнее (хотя насколько это заметно для пользователя на современных процессорах - это еще вопрос.)

Если вы еще не знаете, чего хотите, то следующий маленький вопросник позволит Вам определить "Что же Вам надо":

  • Если Вам надо работать с многобайтными кодировками (например, вы ведете переписку на китайском) - XEmacs + MULE.
     
  • Если Вам надо иметь несколько разных кодировок в пределах одного буфера (например, вы филолог и редактируете русско-немецкий словарь) - XEmacs + MULE.
     
  • Если в пределах файла кодировка одна и она однобайтная, но разные файлы имеют разные кодировки, то есть два случая:
     
    • Эти кодировки в принципе не совместимы (например, один файл на немецком в iso-8859-1, а другой - на русском в koi8-r) - тогда XEmacs + MULE.
       
    • Эти кодировки совместимы (например, часть файлов в koi8-r, а часть в cp866) - тогда это извращение. Постарайтесь перепроектировать свою сеть и систему так, чтобы основной было только одна кодировка - зверинец очень неудобен в поддержке - вы даже тривиальный find+grep толком не сможете использовать.

      Если же по какой-то причине это не возможно, а игры с "перекодировал -> отредактировал -> перекодировал" Вас не устраивают, то - XEmacs + MULE.

  • Если Вам приходится работать только с одной кодировкой (например, вы просто программист, который время от времени вставляет русские сообщения в свои программы, или редактирует .po-файл, а вся переписка с не-русскоязычным населением ведется по-английски), то самый простой и надежный для Вас способ - XEmacs без MULE. Использование XEmacs + MULE для таких задач - это стрельба из пушки по воробьям.
     

2. Настройка XEmacs без MULE

2.1. Почему?

Преимущества этого подхода - он (XEmacs) легче. И на диске, и в памяти, и в управлении. Вам не надо хранить приблизительно 5-8 Mb пакетов для MULE-поддержки. Вам не надо беспокоится, правильно ли он распознал кодировку - у него нет понятия кодировки.

Недостатки этого подхода - обратная сторона его преимуществ. Вы ограничены одним языком (русским) и одной кодировкой (koi8-r, если не приложить руки). И за ее пределы Вам не выпрыгнуть. По крайней мере без перезапуска XEmacs'а в другой конфигурации. Если Вам попадется файл в другой (не родной) для Вашей системы кодировке, то Вам придется его сначала перекодировать, что не всегда возможно, или работать "вслепую", что очень неприятно.

2.2. Теория

Теория проста - надо заставить XEmacs использовать для отображения символов вместо шрифта в кодировке iso-8859-1, как он это делает по-умолчанию, шрифт в koi8-r, или какой является "родным" для Вашей системы.1) Параллельно с этим Вам, возможно, потребуется подстроить значение переменной ctl-arrow, дабы разрешить отображать верхнюю половину кодовой таблицы "как есть".

Дабы сделать возможным ввод русских букв надо связать между собой keysym'ы и соответствующие им символы. (Cyrillic_A соответствует, "А", Cyrillic_BE - "Б" и т.д.) По-умолчанию XEmacs этого соответствия не знает.

Дабы правильно работали функции перехода по словам, преобразования верхний/нижний регистр и т.п. необходимо описать syntax-table и case-table. (Точнее, надо правильно модифицировать уже существующие.)

1) Известен случай, и он работал, когда основной кодировкой была cp866.

2.3. Практика

2.3.1. Начнем с переопределения шрифта по-умолчанию

  • Если Ваш XEmacs сконфигурирован с X11 (а не GTK) в качестве выходного устройства (для не-патченного 21.1.xx это единственный вариант, а для 21.4.xx это поведение по-умолчанию), то вы можете этого достичь добавив следующую строку (или подобную ей) в файл X-ресурсов (обычно это ~/.Xresources или ~/.Xdefaults):
    Emacs.default.attributeFont: -*-*-medium-r-*-*-*-120-*-*-m-*-koi8-r
    
  • Если вы используете XEmacs 21.1.12 "GTK" (http://www.cs.indiana.edu/elisp/gui-xemacs), то шрифт по-умолчанию можно переопределить через gtkrc:
    style "XEmacsText"
    {
            font = "-*-*-medium-r-*-*-*-120-*-*-m-*-koi8-r"
    }
    
    widget_class "*GtkXEmacs"       style "XEmacsText"
    
  • Использовать 21.4.xx в GTK-варианте (вплоть до 21.4.3 включительно), не рекомендуется - сырой. Однако, если очень хочется с ним поиграться - вам надо загрузить и применить patch к gtk-faces.el. Он раскомментирует участок, отвечающий за инициализацию шрифта по-умолчанию из gtkrc, и далее все, как в предыдущем пункте.
     
  • Можно переопределить шрифт по-умолчанию, модифицировав default face. Для этого надо добавить в init-файл (обычно это ~/.emacs или ~/.xemacs/init.el) следующие строки:
    (set-face-font 'default
            "-*-*-medium-r-*-*-*-120-*-*-m-*-koi8-r")
    

    Этот способ работает на всех версиях XEmacs'а, но при этом его старт может и, скорее всего, будет выглядеть, мягко говоря, по-уродскому и способен довести своими визуальными эффектами до белого каления.

    Это связано с тем, что сперва инициализируются значениями по-умолчанию шрифты, затем открывается окно XEmacs'а (в терминах самого XEmacs - frame), а уже после этого интерпретируется init-файл.

    Второй его недостаток есть следствие все того-же порядка инициализации - переопределение default face происходит после того, как будут вычислены italic face, bold face и bold-italic face. Соответственно по-умолчанию в них прописаны шрифты для iso-8859-1. Попытка сказать что-нибудь, вроде

    (set-face-font 'italic
        "-*-*-medium-o-normal-*-*-120-*-*-m-*-koi8-r")
    (set-face-font 'bold
        "-*-*-bold-r-normal-*-*-120-*-*-*-m-koi8-r")
    (set-face-font 'bold-italic
        "-*-*-bold-o-normal-*-*-120-*-*-m-*-koi8-r")
    

    по-крайней мере у меня (awn@bcs.zp.ua) на 21.4.3 ни к чему путному не привела.

2.3.2. Теперь позволим отображать все символы с кодом >= 128 "как есть"

По умолчанию, XEmacs отображает символы, в "печатности" которых не уверен, либо как "управляющие символы со значком ^", либо как "обратный слэш + восьмеричный код символа". Поэтому, если вместо русского слова "Привет" вы видите "\360\322\311\327\305\324", то Вам надо подстроить значение переменной ctl-arrow.

Присвоение переменной ctl-arrow значения 128 позволит отображать все символы из верхней половины таблицы "как есть".

Этого можно добиться либо

  • через Custom; либо
  • поместив в свой init-файл (обычно это ~/.emacs или ~/.xemacs/init.el) следующую строку:
    (setq ctl-arrow 128)
    

2.3.3. Настройка клавиатуры, syntax-table и case-table

Эти проблемы решает ru-keys.

Надо просто скачать его и положить в директорию, где XEmacs сможет его найти (например, для XEmacs 21.1.xx - это ~/.xemacs/lisp, а для XEmacs 21.4.xx - это ~/.xemacs/xemacs-packages/lisp) и добавить следующую строчку в init-файл (обычно это ~/.emacs или ~/.xemacs/init.el):

(require 'ru-keys)

подробные инструкции по установке - см. внутри файла ru-keys.el.

Замечание: В XEmacs 21.1.xx преобразования верхний/нижний регистр, регистро-независимый isearch, и т.п. работать не будут. 21.1.xx просто игнорирует case-table для символов с кодом >= 128. В 21.4.xx это уже исправлено.


3. Настройка XEmacs с MULE

3.1. Почему?

Этот способ хорош тем, что обеспечивает большую общность, и вообще говоря, он более идеологически правильный, так как оставляет вам возможность работать в XEmacs не только с русскими текстами в кодировке koi8-r, а еще и непосредственно с некоторыми другими кодировками русского текста и иностранными алфавитами, например, кодировки iso-8859-1 (западноевропейский) - что крайне полезно людям, работающим, например, с немецкими текстами.

3.2. Теория

Для работы с MULE (механизмом для использования многоязыковых документов, в том числе разных языков в одном документе) нужен XEmacs, собранный с его поддержкой. Как правило, в дистрибутивах Linux'а есть необходимый пакет или можно собрать XEmacs самому из исходников.

Про MULE надо знать, что это такая самодостаточная система, замахивающаяся на тотальную поддержку большинства даже очень сложных языков (с иероглифами), требующая только наличия шрифтов у X-сервера. Русский язык она поддерживает отлично в куче кодировок, но единственная проблема - она считает по умолчанию, что русские шрифты у пользователя стоят стандартные, то есть в кодировке iso-8859-5. Их можно найти в пакете cyrrfx.

Для показа русских букв шрифтов (и установки кодировки, как показано ниже) в принципе будет достаточно, но для набора возможно понадобится еще маленькое ухищрение: дело в том, что тут начинается коренное отличие XEmacs от GNU emacs (за что его не любят половина русских пользователей) - XEmacs различает сами символы, а не коды символов, то есть для него файл - это не просто набор двоичных кодов, а каждый из символов файла имеет свое наименование, типа Cyrillic_IO.

В результате если попытаться через XKB вводить русские символы, то XEmaсs будет ругаться, почему же он получает всякие Cyrillic_A, Cyrillic_BE, Cyrillic_VE, а не "А", "Б", "В", и т.п. Тут можно действовать двумя способами:

  1. Отказаться от русификации ввода средствами системы и положиться в этом целостно на XEmacs и MULE, а вернее на подсистему Quail в MULE. В этом случае придется переключаться комбинацией Quail (по умолчанию это C-\), что несколько непривычно, и еще один минус - раскладки достаточно фиксированные и определяются в XEmacs (по умолчанию там есть 2 раскладки: ЙЦУКЕН и ЯВЕРТИ).
     
  2. Установить маленький пакет - ru-keys, который достаточно корректно обучит XEmacs распознавать вещи типа Cyrillic_A и преобразовывать их в символы типа "А". Минусы этого подхода - в старых XEmacs (21.1.xx) не будут работать преобразования верхнего-нижнего регистра букв, особенно при isearch.

3.3. Практика

3.3.1. Убедиться, что поставленная версия поддерживает MULE

Заметить это легко, это примечание о MULE много раз мелькает во время запуска, в конце концов просто должно быть меню MULE. Если MULE нет - то надо либо поставить с дистрибутива (в случае с RPM-пакетами, например, основной пакет может называться xemacs, а к нему надо еще поставить xemacs-mule, xemacs-i18n или что-нибудь в этом роде), либо можно скачать XEmacs самому и собрать из исходников. Ссылки и подробные инструкции по скачиванию и сборке есть на www.xemacs.org.

3.3.2. Установить русские шрифты iso-8859-5

По умолчанию XEmacs работает с русскими шрифтами только в кодировке iso8859-5, поэтому для него придется скачать и установить шрифты iso-8859-5 от cyrrfx. Все инструкции по установке этих шрифтов есть в их архиве, поэтому подробно на этом останавливаться тут нет смысла.

3.3.3. Установить необходимую языковую среду

Это можно сделать или в меню MULE непосредственно перед загрузкой (или открытием нового) файла. Через меню Mule/Set language environment выберите нужную языковую среду (обычно Cyrillic-KOI8, хотя никто не запрещает выбрать любую другую поддерживаемую MULE кодировку), либо это можно сделать введя команду M-x set-language-environment и выбрав среду там. После этого можно загружать необходимый файл - для показа русских букв этого должно быть достаточно.

Если языковая среда Cyrillic-KOI8 станет для вас более или менее постоянной, то стоит добавить следующую строчку в ваш конфигурационный файл (~/.emacs или ~/.xemacs/init.el):

(setup-cyrillic-koi8-environment)

Эта строчка должна быть одной из первых, чтобы избежать возможных конфликтов кодировок при загрузке дополнительных файлов дальше по ходу инициализации.

3.3.4. Выбрать один из двух вариантов ввода русских букв

  1. Воспользоваться русификацией ввода средствами Quail. Это можно сделать либо через меню Mule/Select input method, либо через команду M-x select-input-method, либо просто нажав в первый раз C-\ и выбрав во всех случаях раскладку ввода Cyrillic (JCUKEN) и переключаться комбинацией C-\. В принципе удобоваримо, но неудобно.
  2. Скачать и установить ru-keys - надо просто положить этот файл в директорию, где XEmacs сможет его найти (например, для XEmacs 21.1.xx - это ~/.xemacs/lisp, а для XEmacs 21.4.x - это ~/.xemacs/xemacs-packages/lisp) и добавить следующую строчку в файл конфигурации XEmacs (обычно это ~/.emacs или ~/.xemacs/init.el):
    (require 'ru-keys)
    
    Более подробные инструкции по установке - см. внутри файла ru-keys.el.


Last modified: Thu Jul 5 21:17:01 EEST 2001



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости