Search code examples
unicodeinputx11xorgkeyboard-layout

How to map a X11 KeySym to a Unicode character?


This is an exact duplicate of this question; however the code linked in the accepted answer is nearly 11 years old, and this comment in the code leads to my duplicate question:

The keysym -> UTF-8 conversion will hopefully one day be provided by Xlib via XmbLookupString() and should ideally not have to be done in X applications. But we are not there yet.

Are we there yet? I'm aware of XwcLookupString, but something like...

wchar_t unicode = XKeySymToWideChar( keysym );

... would be much simpler and logical, and not require updating whenever KeySyms are added or changed.

Is there a simple function in X11/Xlib that will map a KeySym to its Unicode equivalent?


Solution

  • Is there a simple function in X11/Xlib that will map a KeySym to its Unicode equivalent?

    The definitive answer is no

    Because Unicode was invented years after Xlib and no one ever went back to add such a thing? Most of the Xlib API is codeset independent since it was written in the days when every locale used a different character set (ISO 8859-*, Big5, JIS, etc.), so you get a char buffer appropriate to the current locale. There were a few UTF-8 specific additions in later years, but mostly we've been trying to let Xlib rest in peace since then, pushing new API design towards xcb instead.