Question

Ceci est un double exact de cette question; Cependant, le code lié dans la réponse acceptée a près de 11 ans, et ce commentaire dans le code mène à ma question en double:

La conversion Keysym -> UTF-8 sera, espérons-le, un jour fourni par XLIB via XMBLookUpString () et devrait idéalement ne pas avoir à faire dans les applications X. Mais nous n'y sommes pas encore.

Sommes-nous déjà là? Je suis conscient de XwcLookupString, mais quelque chose comme ...

wchar_t unicode = XKeySymToWideChar( keysym );

... serait beaucoup plus simple et logique, et ne nécessiterait pas de mise à jour chaque fois que les clés sont ajoutées ou modifiées.

Existe-t-il une fonction simple dans x11 / xlib qui mappera une clés à son équivalent Unicode?

Était-ce utile?

La solution 2

Existe-t-il une fonction simple dans x11 / xlib qui mappera une clés à son équivalent Unicode?

La réponse définitive est non

Parce que Unicode a été inventé des années après Xlib et que personne n'est retourné ajouter une telle chose? La majeure partie de l'API XLIB est indépendante de codet car elle a été écrite à l'époque où chaque paramètre régional a utilisé un jeu de caractères différent (ISO 8859- *, BIG5, JIS, etc.), vous obtenez donc un tampon char à charbon approprié aux paramètres locaux actuels. Il y a eu quelques ajouts spécifiques UTF-8 au cours des dernières années, mais nous avons surtout essayé de laisser Xlib reposer en paix depuis lors, poussant à la place une nouvelle conception d'API vers XCB.

Autres conseils

Essayez ce module Node.js pour générer une table C: https://github.com/substack/node-keysym . Il est basé sur cet ensemble de données: https://github.com/substack/node-keysym/blob/master/data/keysyms.txt

Cela peut aider quelqu'un ... adapté de XModmap Source et en ligne Doc (http://tronche.com/gui/x/xlib/utibles/keyboard/xkeycodetokeysym.html)

KeySym ks = XKeycodeToKeysym(dpy, keycode+min_keycode, modifier);
const char *s;
if (ks != NoSymbol)
    s = XKeysymToString (ks);
else {
    printf("Keycode has no symbol. Ignored.\n");
    return NULL;
}

printf ("0x%04x (%s)\n", (unsigned int)ks, s);
printf ("wide char:%lc\n", (wchar_t)ks);

Keysym est déjà la valeur UTF. Le problème serait de définir des clés de clés ... 'á' par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top