pajerovaliero (pajerovaliero) wrote in ru_linux,
pajerovaliero
pajerovaliero
ru_linux

Categories:
Здрасьте.
linux / C++ / Xlib / unicode

Когда есть желание оперировать unicode-строками в программе, хочется иметь строки тупо в виде массива чисел, а не запакованные в какой-то UTF-8, который надо "парсить" при желании стереть из строки один символ. Но от xlib удалось добиться UNICODE-кода нажатой клавиши только запакованны в UTF-8 (Xutf8LookupString()). Зато это работает независимо от здоровья locale. Других способов получить значение UNICODE для нажатого символа напрямую от иксов не удаётся. Можно, например, через написанную вручную compile-time "таблицу" соответствия XKeyPress->KeyCode и взятым из википедии значениям UNICODE:
template < > struct uni < XK_Cyrillic_A >
{ enum { code = 0x410 }; };

template < > struct uni < XK_Cyrillic_BE >
{ enum { code = 0x411 }; };


В момент запуска приложения я просто создаю какую-то структуру, в которой удобно искать соответствия и потом уже по событию нажатия клавиши из этой структуры извлекаю UNICODE-значение для символа.

XmbLookupString(), XwcLookupString нули возвращают. Последняя ваще хочет xchar_t, а вдруг она 2 байтовая, тогда придётся ущемить какие-то национальности на планете? Вот такие непонятности.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments