[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

про X-овую клавиатуру



Прочитал я дискуссию по поводу XKB vs. xmodmap, и решил внести свою
лепту :)  Все изложенное ниже есть теоретические измышления.

Вопрос: что именно (минимум) требуется от X сервера для
локализации клавиатуры? Нужны ли вообще XKB и modmap?

Вот моя версия: от сервера не нужно почти ничего. На сервере должна
храниться информация о том, в каком режиме находится клавиатура. В
режим входит CapsLock, текущий язык и т.п. Все остальное может быть
сделано на клиенте (в Xlib'е), в том числе изменение режима клавиатуры
(и CapsLock'a тоже). Нажатие отдельных клавиш уже хранится на сервере
и может быть получено клиентами (XQueryKeymap), автоповтор также уже
контролируется core-протоколом (XChangeFeedbackControl), лампочки
клавиатуры тоже могут меняться клиентами (XChangeKeyboardControl).

modmap или прочие таблицы могут храниться и у клиента, хотя они будут
зависимы от конкретных keycode'ов и могут различаться у разных
клиентов.

Состояние клавиатуры может храниться на уровне Properties root'ового
окна. В принципе туда же можно запихнуть таблицы KeySym'ов, если нужно.

Почему состояние должно храниться на сервере: оно должно быть
одинаково для всех клиентов (хотя это спорно, некоторые хотят, чтобы в
каждом приложении был свой режим клавиатуры - это тоже может быть
легко решено на клиентской стороне).

Что есть сейчас: режим клавиатуры меняется на сервере, таблицы
хранятся на сервере, Lock-клавиши обрабатываются на сервере. Состояние
и таблицы скачиваются Xlib'ом для трансляции keycode'ов.

Таким образом, имеющееся _серверное_ решение не минимально.


Второй вопрос - как лучше реализовать трансляцию keycode'ов в текст
и команды внутри Xlib'a. Но это уже никак не относится к X серверу.

На мой взгляд, loadable module вполне подходит на роль транслятора
keycode'ов, язык C богаче всяких скриптов :)


Третий вопрос - обратная совместимость. Самый трудный, по моему.


Заключение: теоретически можно обойтись без XKB и без modmap, нужно
только выкинуть все лишнее из X сервера и подправить Xlib. :)

Кстати, что-то в этом роде сделал Sun для русификации cde, только
на уровне Motif'а (наверное VendorShell).

--
   Alexander.