54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <X11/XKBlib.h>
|
|
#include <X11/extensions/XKBrules.h>
|
|
|
|
int main(int argc, char **argv) {
|
|
Display *dpy = XOpenDisplay(NULL);
|
|
|
|
if (dpy == NULL) {
|
|
fprintf(stderr, "Cannot open display\n");
|
|
exit(-1);
|
|
}
|
|
|
|
XkbStateRec state;
|
|
XkbGetState(dpy, XkbUseCoreKbd, &state);
|
|
|
|
XkbDescPtr desc = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd);
|
|
char *group = XGetAtomName(dpy, desc->names->groups[state.group]);
|
|
//printf("Full name: %s\n", group);
|
|
|
|
XkbRF_VarDefsRec vd;
|
|
XkbRF_GetNamesProp(dpy, NULL, &vd);
|
|
|
|
char *layout = strtok(vd.layout, ",");
|
|
|
|
for (int i = 0; i < state.group; i++) {
|
|
layout = strtok(NULL, ",");
|
|
if (layout == NULL) {
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
//printf("Layout name: %s\n", tok);
|
|
if (strcmp(layout, "fr"))
|
|
return 1;
|
|
|
|
char *variant = strtok(vd.variant, ",");
|
|
|
|
for (int i = 0; i < state.group; i++) {
|
|
variant = strtok(NULL, ",");
|
|
if (variant == NULL) {
|
|
return -1;
|
|
}
|
|
}
|
|
//printf("Variant name: %s\n", variant);
|
|
if (strcmp(variant, "bepo"))
|
|
return 1;
|
|
|
|
printf("Bépo détecté\n");
|
|
return 0;
|
|
}
|