Comment cartographier une clé X11 à un caractère Unicode?
-
12-11-2019 - |
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?
La solution 2
Existe-t-il une fonction simple dans x11 / xlib qui mappera une clés à son équivalent Unicode?
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.