X11キー記号を入力する文字列にどのように変換しますか?

X11キー記号を入力する文字列にどのように変換しますか?

XK_breveキー記号番号(例:latin2文字セット内の0x1a2 keysymdef.h)があります。そのキーシンボルをエクスポートするキーを押したときに入力される文字列を取得する方法はありますか?

を試しましたが、入力する文字()の代わりに記号()のフルネームがXKeysymToString表示されました。breve˘

実行できる同様の操作がありますが、XLookupStringここには私が持っていないXKeyEventが必要です(キーシム記号のみがあります)。

ベストアンサー1

有効な入力方法と xkb ルールも考慮する Xutf8LookupString(3) を使用する必要があります。

すべてのキーストロークが文字列を直接生成するわけではありません。

例:

#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;
}

おすすめ記事