dfd23a44de
Add a new module "layout" that will eventually evolve into the only keyboard layout module. Right now, it uses an external binary (get-kbd-layout) to determine the layout of a keyboard device (because I did not manage to call libX11 with ctypes correctly). see #788 see #790
39 lines
749 B
C
39 lines
749 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <X11/XKBlib.h>
|
|
|
|
void err_if(int condition, const char* msg)
|
|
{
|
|
if (condition) {
|
|
fprintf(stderr, "fatal: %s\n", msg);
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
Display* display = XOpenDisplay(NULL);
|
|
err_if(!display, "unable to open display");
|
|
|
|
int kbd = argc == 1 ? XkbUseCoreKbd : atoi(argv[1]);
|
|
|
|
XkbStateRec state;
|
|
XkbGetState(display, kbd, &state);
|
|
|
|
XkbDescPtr desc = XkbGetKeyboard(display, XkbAllComponentsMask, kbd);
|
|
char* symbols = XGetAtomName(display, desc->names->symbols);
|
|
printf("%s\n", symbols);
|
|
|
|
#if 0
|
|
char *group = XGetAtomName(display, desc->names->groups[state.group]);
|
|
XFree(group);
|
|
#endif
|
|
XFree(symbols);
|
|
XFree(desc);
|
|
|
|
XCloseDisplay(display);
|
|
|
|
return 0;
|
|
}
|
|
|