LINUX.ORG.RU

Непонятки с Xlib'ом ... нажатые клавиши


0

0

Сообщение об нажатии клавиши обрабатываю XLookupString, она возврашает KeySym нажатой клавиши и строку с которой эта клавиша асациируется .. дальше речь пойдет именно о строке.

Нажимаю я клавишу а, XLookupString возвращает строку "a".

Нажимаю Ctrl, XLookupString строки не возвращает.

Нажимаю Ctrl-a, приходят два события первое такоеже как и просто Ctrl а во втором XLookupString возврашает строку с 1 символом равным 0x01, и при этом KeySym равен XK_a.

Вопрос: как при нажатом Ctrl привести возвращаюмую XLookupString строку к нормальному виду, чтобы было понятно какая клавиша нажата??


> Нажимаю Ctrl-a, приходят два события первое такоеже как и просто Ctrl а во втором XLookupString возврашает строку с 1 символом равным 0x01, и при этом KeySym равен XK_a.

хм, по идее ctrl - суть маска, посему при нажатии ctrl+a, эту маску можно отделить от реального кейкода, если вы конечно этого добиваетесь.

на самом деле я вас не совсем понял, но посоветовал бы посмотреть сорцы такого мелкого проекта, как dwm, конкретно - event.c, там всё это заимплеменчено.

asgard
()
Ответ на: комментарий от asgard

>хм, по идее ctrl - суть маска, посему при нажатии ctrl+a, эту маску можно отделить от реального кейкода, если вы конечно этого добиваетесь.

Кейкод это одно из полей в структуре события .. верно? но про них вроде было сказано что они могут менятся между разными серверами.

Я же спросил можно ли востоновить именно строку возвращаюмую XLookupString после того как она была преобразована из-за зажатого Ctrl.

>на самом деле я вас не совсем понял, но посоветовал бы посмотреть >сорцы такого мелкого проекта, как dwm, конкретно - event.c, там всё >это заимплеменчено.

Я посмотрю, но наверное ratpoison, это тоже wm.

Kage
() автор топика
Ответ на: комментарий от Kage

> Кейкод это одно из полей в структуре события .. верно?

да, верно.

> но про них вроде было сказано что они могут менятся между разными серверами.

хм, странно, в мане такого не написано. можно узнать источник из которого вы это подчерпнули?

> Я же спросил можно ли востоновить именно строку возвращаюмую XLookupString после того как она была преобразована из-за зажатого Ctrl.

"XLookupString() depends on the cached keyboard information mentioned in the previous section, so it is necessary to use XRefreshKeyboardMapping() to keep this information up-to-date." м?

asgard
()
Ответ на: комментарий от asgard

>хм, странно, в мане такого не написано. можно узнать источник из >которого вы это подчерпнули?

Подчерпнул отсюда ..

Volume One: Xlib Programming Manual ... Chapter 9. The Keyboard and Pointer ... The keycode member of XKeyEvent is a number between 8 and 255. The keycode is the same regardless of whether a key is pressed or released. The keycode for each physical key never changes on a particular server, but the key with the same symbol on it on different brands of equipment may generate different keycodes. For portability reasons and because the keycode by itself without the state of the modifier keys does not provide enough information to interpret an event, clients cannot use keycodes by themselves to determine the meaning of key events.

Kage
() автор топика
Ответ на: комментарий от Kage

ну это понятно, бо ключевая связка здесь "different brands of equipment".

т.о. если на обоих серверах классический x86 с классической клавиаторой, всё будет нормально, а если какой-нибудь мак, то нет.

asgard
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.