[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.