bumblebee-status/util/layout.c
tobi-wan-kenobi dfd23a44de [modules/layout] add a new - generic - layout module
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
2021-05-16 21:09:58 +02:00

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;
}