Xkb:如何增加 XkbDescRec 键盘描述的客户端映射中的 KeySyms 数量?

2024-01-24

我正在尝试以编程方式修改 X11 中 xkb 键盘映射的一些属性。在里面XkbClientMapRec struct map的成员XkbDescRecstruct,我们有以下成员:

typedef struct {                        /* Client Map */
  unsigned char      size_types;    /* # occupied entries in  types */
  unsigned char      num_types;     /* # entries in types */
  XkbKeyTypePtr      types;         /* vector of key types used by this keymap */
  unsigned short     size_syms;     /* length of the syms array */
  unsigned short     num_syms;      /* # entries in syms */
  KeySym *           syms;          /* linear 2d tables of keysyms, 1 per key */
  XkbSymMapPtr       key_sym_map;   /* 1 per keycode, maps keycode to syms */
  unsigned char *    modmap;        /* 1 per keycode, real mods bound to key */
} XkbClientMapRec, *XkbClientMapPtr;

然后,我们有 XkbSymMapRec 结构,在这里:

#define XkbNumKbdGroups            4
#define XkbMaxKbdGroup            (XkbNumKbdGroups-1)
typedef struct {                      /* map to keysyms for a single keycode */
  unsigned char     kt_index[XkbNumKbdGroups]; /* key type index for each group */
  unsigned char     group_info;       /* # of groups and out of range group handling */
  unsigned char     width;            /* max # of shift levels for key */
  unsigned short    offset;           /* index to keysym table in  syms array */
} XkbSymMapRec, *XkbSymMapPtr;

The KeySym * syms数组中的XkbClientMapRec数组当然只是一个数组KeySyms(实际上是一个二维数组的数组),定义在keysymdefs.h.

不管怎样,我想知道如何添加全新的KeySym到那个syms大批。基本上,我想完全更改键盘上某个键代码的映射,并且我想要等同的 KeySym 通常不在KeySyms 数组。将键码重新分配给现有的和已定义的一组KeySyms 很简单 - 例如,如果我希望键码 45 执行与键码 63 相同的操作,我会这样做:

XkbDescPtr desc = XkbGetKeyboard( curr_display, XkbAllComponentsMask, XkbUseCoreKbd );
XkbSymMapRec * client_map = desc->map;
client_map->key_sym_map[ 45 ] = client_map->key_sym_map[ 23 ];
XkbMapChangesRec changes;
changes.changed = XkbKeySymsMask;
changes.first_key_sym = 45;
changes.num_key_syms = 1;
XkbChangeMap( curr_display, desc, &changes );

这有效,但这不是我想要的。我想创造全新的KeySym条目在client_map->sym并分配client_map->key_sym_map[ 45 ]->kt_index[ 0..n ]到那些新条目。不幸的是,这似乎不可能? XbkMapChangesRec 结构没有任何方式规定KeySym * syms数组已被重新分配给更大的东西。它拥有的最好的就是XkbKeySymsMask这仅适用于更改key_sym_map.

有任何想法吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xkb:如何增加 XkbDescRec 键盘描述的客户端映射中的 KeySyms 数量? 的相关文章

  • 检测控制台应用程序中的按键?

    我需要在控制台应用程序中检测按键 而不提示用户 基本上 我的应用程序通常是一个监听特殊输入设备的守护进程 但我需要在交互模式下使用键盘在开发盒上模拟它 我怎样才能做到这一点 我在 Linux 系统上 如果您在等待输入时无法阻塞 那么您可以使
  • 显示键盘时转动设备时 iPhone 应用程序崩溃

    我有一个带有 webview 的 iPhone 应用程序 该应用程序会在某个时候重定向到论坛 我注意到当我执行以下步骤时应用程序会崩溃 1 浏览论坛 vBulletin 2 打开一个线程并尝试发布消息3 点击文本区域 键盘就会显示出来 4
  • 在java中注入击键

    我正在寻找一种将击键注入操作系统键盘输入缓冲区的方法 就像当您单击一个按钮时 程序会插入一个 或多个 键盘敲击 我想在java中执行此操作 因为我想在 win linux和osx 中运行它 我想我必须利用 JNI 有人有什么想法吗 感谢所有
  • 如果没有 sudo,则无法在 Qt 应用程序中使用键盘

    我有一个在 BeagleBone Black 上运行的交叉编译的嵌入式 Qt 应用程序 它工作正常 但有一件事 如果我不直接在 BeagleBone Black 上运行 它不接受键盘输入sudo 这是一个问题 因为 我无法远程调试应用程序并
  • 使用 .NET 4.5.2 从 C# 代码更改键盘布局

    我正在为 SDL Trados Studio 插件编写代码 插件的最后一部分需要一些 API 根本没有公开的自动化 所以我所拥有的 坚持一些东西 就是自动化默认的键盘快捷键 我的代码非常适合英语键盘布局 还有匈牙利语 但它当然不适用于希腊语
  • 为什么 Android webview 仅当 type="number" 而不是 type="text" 时才在键盘中显示“下一步”?

    我有一个带有几个输入字段的表单 因此 我想使用下一个按钮在字段之间导航 但这仅在输入字段类型为 数字 时有效 使用 type text 则不会 这是 Android 3 2 1 中的错误吗 我的输入字段是这样的
  • 如何让键盘显示返回键?

    我想我已经尝试了所有组合 但我无法让字母键盘显示返回键 它始终是一个 完成 按钮 没有什么用处 在 Nexus 7 4 1 上 情况更糟 并显示一个愚蠢的笑脸按钮和 完成 按钮 这对我的应用程序没有任何意义 只要有返回按钮 就可以有 完成
  • FLTK 1.4 小部件位置 w.r.t. X11 根窗口?

    context 我正在和其他人一起编码参考系统 http refpersys org C 17 上的 GPLv3 项目gitlab https gitlab com bstarynk refpersys适用于 GNU Linux x86 6
  • 旋转时键盘隐藏

    我正在开发 iPad 应用程序 在其中一个视图中 我有一个子视图 它在按钮点击事件时出现和消失 子视图包含一个UITextView 默认情况下 我将其设置为第一响应者 以便在视图出现时键盘立即出现 子视图也会消失UIKeyboardWill
  • 如何在 C 应用程序中将鼠标光标设置在 X11 上

    我有一个相当大且相当旧的 C 应用程序 已移植到 Linux 上 我负责让鼠标光标正常工作 但遇到一些问题 我能够将我们需要的大部分光标转换为使用提供的标准光标X字体光标 http tronche com gui x xlib append
  • 如何确定某个键是否被按下,只知道它在美国键盘上的位置?

    考虑一下 对于 Windows 视频游戏 我需要确定在美式英语键盘布局上生成 和 字符的键 通常位于 Escape 键下方并保留为 1 是否已被按下 这听起来似乎是一个微不足道的问题 但对我来说似乎不是一个问题 当Windows发送键盘消息
  • Android 软键盘先显示数字视图

    我的应用程序上有一个登录屏幕 它接受 CPF 作为登录名 CPF 是每个巴西公民都有的唯一号码标识 例如 10546819546 但它也可以接受护照号码作为登录名 并且上面可能有字母 我的问题是我希望键盘在弹出时在默认字母表之前显示数字 符
  • 如何使用 JavaScript 判断大写锁定是否已打开?

    如何使用 JavaScript 判断大写锁定是否已打开 但有一个警告 我确实用谷歌搜索了它 我能找到的最好的解决方案是附加一个onkeypress事件到每个输入 然后每次检查按下的字母是否为大写 如果是 则检查是否也按住了shift 如果不
  • 在 Swing 中使用印度语输入法输入文本时不显示英文字符

    我正在开发一个应用程序 它接受英语文本并使用自定义的第 3 方 API 将音译为印度语 受支持的几种语言之一 该应用程序针对 Windows XP 7 和 Ubuntu 我们使用自定义输入法来加载所需的印度语字体 并使用它渲染文本 此外 用
  • UITextField 中光标闪烁,但键盘不出现

    我得到了一个带有文本字段的简单详细视图 在详细的viewController中我写了这段代码 void viewDidAppear BOOL animated self textField becomeFirstResponder NSLo
  • 在python中检测按下了哪些键

    我需要知道现在按下的是哪个键 我不想捕获一些特定的按键来触发事件或类似的事情 我想知道现在按下了哪些键并显示它们的列表 我还需要捕获特殊键 如 F1 F12 shift alt home windows 等 基本上是键盘上的所有键 我如何在
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • X11 等待并获取剪贴板文本

    我必须监视 X11 剪贴板 目前 我每 5 秒请求一次剪贴板选择 然后对从剪贴板返回的文本进行哈希处理 并将其与上次检查的哈希计算结果进行比较 如果哈希值不相同 我会分析文本内容并做一些事情 我不喜欢我的方法 我来自Windows 使用wi
  • 如何在 swiftUI (macOS) 中检测按键按下和释放

    除了标题之外没什么可说的 我希望能够在按下按键和释放按键时 在 macOS 上 在 swiftUI 视图中执行操作 在 swiftUI 中是否有任何好的方法可以做到这一点 如果没有 有什么解决方法吗 不幸的是 键盘事件处理是其中一个令人痛苦
  • Android KeyBoard.Key 禁用图标 预览特殊键?

    我通过实现 KeyboardView OnKeyboardActionListener 接口来自定义自己的软键盘 按下按键时 将显示预览弹出窗口 我的问题是如何禁用 SHIFT 和 DELETE 等特殊键的预览弹出窗口 我尝试将 andro

随机推荐