从 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_symhttps://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;
}