如何将 X11 键符号转换为将要键入的字符串?

如何将 X11 键符号转换为将要键入的字符串?

我有一个键符号编号(例如 0x1a2,位于XK_brevelatin2keysymdef.h字符集中)。有没有办法获取在按下发出该键符号的键时将键入的字符串?

我尝试使用XKeysymToString,但这给了我符号 ( breve) 的全名,而不是要键入的字符 ( ˘)。

XLookupString做类似的事情,但它需要我没有的 XKeyEvent (我只有一个键符号号)。

答案1

您应该使用 Xutf8LookupString(3),它还将考虑有效的输入法和 xkb 规则。

并非所有按键都会直接生成字符串。

例子:

#include <X11/Xlib.h>
#include <stdio.h>

int main(int argc, char** argv) {

  KeySym keysym = 0x1a2;

  Display* display = XOpenDisplay(":0");

  XIM xim = XOpenIM(display, 0, 0, 0);
  XIC xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, NULL);

  XKeyPressedEvent event;
  event.type = KeyPress;
  event.display = display;
  event.state = 0;
  event.keycode = XKeysymToKeycode(display, keysym);

  char buffer[32];
  KeySym ignore;
  Status return_status;
  Xutf8LookupString(xic, &event, buffer, 32, &ignore, &return_status);
  printf("%s\n", buffer);

  XCloseDisplay(display);
  return 0;
}

相关内容