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