Как сопоставить X11 KeySym с символом Unicode? - PullRequest
5 голосов
/ 23 января 2012

Это точная копия этого вопроса ; однако коду, указанному в принятом ответе, почти 11 лет, и этот комментарий в коде приводит к моему двойному вопросу:

KeySym-> UTF-8 конвертация, надеюсь, однажды будет обеспечена Xlib через XmbLookupString () и в идеале не должно быть сделано в X Приложения. Но мы еще не там.

Мы уже там? Я знаю о XwcLookupString, но что-то вроде ...

wchar_t unicode = XKeySymToWideChar( keysym );

... было бы намного проще и логичнее и не требовало бы обновления при добавлении или изменении KeySyms.

Есть ли в X11 / Xlib простая функция, которая отображает KeySym в его Unicode-эквивалент?

Ответы [ 3 ]

5 голосов
/ 24 января 2012

Попробуйте этот модуль node.js для создания таблицы C: https://github.com/substack/node-keysym. Он основан на этом наборе данных: https://github.com/substack/node-keysym/blob/master/data/keysyms.txt

1 голос
/ 26 января 2012

Есть ли в X11 / Xlib простая функция, которая сопоставит KeySym с его Unicode эквивалент?

Окончательный ответ: нет

Потому что Юникод был изобретен спустя годы после Xlib, и никто никогда не ходил вернуться, чтобы добавить такую ​​вещь? Большая часть API Xlib является кодовым набором независимый, так как он был написан в те дни, когда каждый язык другой набор символов (ISO 8859- *, Big5, JIS и т. д.), так что вы получите символьный буфер, соответствующий текущей локали. Там было несколько UTF-8 конкретные дополнения в последующие годы, но в основном мы пытались Xlib покоится с миром с тех пор, продвигая новый дизайн API в направлении xcb вместо этого.

0 голосов
/ 17 сентября 2013

Это может помочь кому-то ... адаптировано из исходного кода xmodmap и онлайн-документа (http://tronche.com/gui/x/xlib/utilities/keyboard/XKeycodeToKeysym.html)

KeySym ks = XKeycodeToKeysym(dpy, keycode+min_keycode, modifier);
const char *s;
if (ks != NoSymbol)
    s = XKeysymToString (ks);
else {
    printf("Keycode has no symbol. Ignored.\n");
    return NULL;
}

printf ("0x%04x (%s)\n", (unsigned int)ks, s);
printf ("wide char:%lc\n", (wchar_t)ks);

Keysym уже является значением UTF. Проблема состоит в том, чтобы установить сочетания клавиш ... '& aacute;' например.

...