私がある(例えば、0x1a2用キーシンボル番号有しXK_breve
にkeysymdef.h
LATIN2文字セット内の、)。そのkeysymを発するキーが押されたときに入力される文字列を取得する方法はありますか?
を使用してみXKeysymToString
ましたbreve
が、入力する文字()ではなく、記号()のフルネームが表示され˘
ます。
XLookupString
似たようなことをするものがありますが、私が持っていないXKeyEventが必要です(私はkeysym番号しか持っていません)。
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;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加