从 XCB 中的键名获取键码?
Get keycode from key name in XCB?
我目前正在开发一个小型 XCB 应用程序,但我很难找到以下例程的替代方案:
XKeysymToKeycode(display, XStringToKeysym("Tab"))
我设法通过 xmodmap -pke
获得了键码并硬编码到应用程序中,但我很确定这会给我带来问题(不同的硬件?不同的发行版?)。
有没有办法从 XCB 中的名称中获取键码?
我确定您要查找的库是 libxkbcommon:https://xkbcommon.org/
我相信您正在寻找的功能可能是xkb_state_key_get_one_sym
:https://xkbcommon.org/doc/current/group__state.html#ga47311e7268935dd2fe3e6ef057a82cb0
此函数获取键盘状态和键码并提供键符。
编辑:糟糕,抱歉。我把它弄反了。 xkb_state_key_get_one_sym
将键码变成键符,而不是相反。另外,我找不到任何功能来执行您想要的方向,而且 "the question" 对我来说似乎不明智。
例如:要输入=,我需要按多个键,那么这里你要哪个键码?
Xlib 中用于 XKeysymToKeycode
的代码只是遍历所有键符并尝试找到一些匹配项(忽略找到此匹配项的级别)。这也可以通过 xkb_keymap_key_get_syms_by_level
:
来完成
KeyCode
XKeysymToKeycode(
Display *dpy,
KeySym ks)
{
register int i, j;
if ((! dpy->keysyms) && (! _XKeyInitialize(dpy)))
return (KeyCode) 0;
for (j = 0; j < dpy->keysyms_per_keycode; j++) {
for (i = dpy->min_keycode; i <= dpy->max_keycode; i++) {
if (KeyCodetoKeySym(dpy, (KeyCode) i, j) == ks)
return i;
}
}
return 0;
}
我目前正在开发一个小型 XCB 应用程序,但我很难找到以下例程的替代方案:
XKeysymToKeycode(display, XStringToKeysym("Tab"))
我设法通过 xmodmap -pke
获得了键码并硬编码到应用程序中,但我很确定这会给我带来问题(不同的硬件?不同的发行版?)。
有没有办法从 XCB 中的名称中获取键码?
我确定您要查找的库是 libxkbcommon:https://xkbcommon.org/
我相信您正在寻找的功能可能是xkb_state_key_get_one_sym
:https://xkbcommon.org/doc/current/group__state.html#ga47311e7268935dd2fe3e6ef057a82cb0
此函数获取键盘状态和键码并提供键符。
编辑:糟糕,抱歉。我把它弄反了。 xkb_state_key_get_one_sym
将键码变成键符,而不是相反。另外,我找不到任何功能来执行您想要的方向,而且 "the question" 对我来说似乎不明智。
例如:要输入=,我需要按多个键,那么这里你要哪个键码?
Xlib 中用于 XKeysymToKeycode
的代码只是遍历所有键符并尝试找到一些匹配项(忽略找到此匹配项的级别)。这也可以通过 xkb_keymap_key_get_syms_by_level
:
KeyCode
XKeysymToKeycode(
Display *dpy,
KeySym ks)
{
register int i, j;
if ((! dpy->keysyms) && (! _XKeyInitialize(dpy)))
return (KeyCode) 0;
for (j = 0; j < dpy->keysyms_per_keycode; j++) {
for (i = dpy->min_keycode; i <= dpy->max_keycode; i++) {
if (KeyCodetoKeySym(dpy, (KeyCode) i, j) == ks)
return i;
}
}
return 0;
}