40 lines
749 B
C
40 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;
|
||
|
}
|
||
|
|