Мне нужно знать, как внедрить KeySym
в X-сервер, используя xcb
, xtest
или xlib
. Я могу вводить коды клавиш, также получать сопоставление клавиатуры, искать там keysym и нажимать соответствующий код клавиши, но я не могу вводить KeySym (например, XKB_KEY_Arabic_0
), если он не сопоставлен с текущей раскладкой.
Есть ли способ сделать это?
Я подумал о том, чтобы найти пустой код клавиши и переназначить его на нужный ключевой символ. Проблема: Мой код не находит пустой ключ. Это мой код:
uint32_t find_empty_key_for_remapping()
{
int keycode_low;
int keycode_high;
KeySym * keysyms = 0;
int empty_key = 0;
int num_keysym;
XDisplayKeycodes(display_, &keycode_low, &keycode_high);
keysyms = XGetKeyboardMapping(display_, keycode_low, keycode_high - keycode_low, &num_keysym);
for (int i = keycode_low; i <= keycode_high && !empty_key; ++i)
{
bool key_is_empty = true;
for (int j = 0; j < num_keysym; ++j)
{
int symindex = ((i - keycode_low) * num_keysym) + j;
if (keysyms[symindex] != 0)
{
key_is_empty = false;
}
}
if (key_is_empty)
{
return i;
}
}
return 0;
}
Любая помощь будет оценена!
uint8_t
, а их существует 256 (0–255), я не думаю, что создание кода ключа 256 будет успешным. Сначала я попытался найти неустановленный код клавиши, но я не понимаю сопоставление в X, когда установлено несколько раскладок клавиатуры (тогда один код клавиши имеет до 15 полей, все они доступны через раскладку + модификатор) - person Nidhoegger   schedule 04.03.2016