Настройка и работа в Linux

         

Мультиязыковые программы


Это программы, которые пытаются обеспечить ввод на нескольких языках и, соответственно, ввод символов из нескольких "несовместимых" алфавитов (западноевропейского, русского, греческого и т.п.). Обычно, это - разнообразные редакторы и "текстпроцессоры" (Lyx, emacs и т.п.)

Как я уже говорил, процедуры Xlib, ответственные за перевод кодов клавиш в однобайтные символы (XLookupString, XmbLookupString), "на выходе" дают только те символы, которые являются "допустимыми" в текущей locale. То есть, если текущая locale - русская, то будут преобразовываться в байтовые коды только русские буквы, а, например, греческие или "западноевропейские" - будут подавляться. И наоборот, при греческой locale, эти процедуры будут подавлять ввод руссих букв.

Поэтому, многоязыковые программы просто игнорируют однобайтные коды, которые им возвращают процедуры X*LookupString, а используют двубайтные коды клавиш (symbols в терминах XKB) и интерпретируют непосредственно их в меру своего понимания.

К сожалению, далеко не все из этих программ правильно понимаю - что делать с кодами типа Cyrillic_*.

Естественно, "лечить" эти программы с помощью setlocale()

бесполезно. Во-первых, большинство из них и так уже используют этот вызов. А во-вторых, установка locale повлияет только на то - какие символы будут подавляться при преобразовании, а какие - нет. Как я уже сказал, многоязыковые программы это как-раз и не интересует.

К сожалению, общих рецептов и в этом случае нет. Но, с другой стороны, некоторые из таких и программ и не надо "патчить". Им можно объяснить, что "Cyrillic коды" - это обычные "буквенные" коды, с помощью их же файлов конфигурации.

Некоторые решения можно найти ...

  • "Лечение" xemacs можно найти на сайте Алексея Выскубова - emacs.zip .
  • То же самое для Lyx (и некоторых других программ) на сайте "Пингвин при галстуке" .

Кстати, исправления для популярного "тулкита" Tcl/Tk можно найти на сайте Виктора Вагнера -

http://www.ice.ru/~vitus/tcl/locale-tcl.html.



Содержание раздела