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

관련 정보