diff options
Diffstat (limited to 'bin/kbdlayout.c')
-rw-r--r-- | bin/kbdlayout.c | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/bin/kbdlayout.c b/bin/kbdlayout.c deleted file mode 100644 index bb030bb..0000000 --- a/bin/kbdlayout.c +++ /dev/null @@ -1,54 +0,0 @@ -#include <X11/XKBlib.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -char* getActiveLayout(char* names, unsigned char active) { - int i; - for (i = 0; names[i]; i++) { - if (names[i] == '+') { - if (active <= 0) { - int j = ++i; - for (; names[j] && names[j] != '+' && names[j] != ':'; j++); - char* ret = malloc(j - i + 1); - strncpy(ret, names + i, j - i); - ret[j - i] = '\0'; - return ret; - } else { - active--; - } - } - } - return NULL; -} - -int main(void) { - int evCode, errRet, rsnRet; - int maj = XkbMajorVersion; - int min = XkbMinorVersion; - - Display* disp = XkbOpenDisplay("", &evCode, &errRet, &maj, &min, &rsnRet); - - // State - XkbStatePtr state = calloc(1, sizeof(XkbStateRec)); - XkbGetState(disp, 0x100, state); - - // Names - XkbDescPtr desc = XkbAllocKeyboard(); - XkbGetNames(disp, XkbSymbolsNameMask, desc); - - Atom symNameAtom = desc->names->symbols; - char* layouts = XGetAtomName(disp, symNameAtom); - - printf("%s\n", getActiveLayout(layouts, state->group)); - - unsigned int mask = XkbStateNotifyMask; - XkbSelectEvents(disp, XkbUseCoreKbd, mask, mask); - - XkbEvent event; - while (1) { - XNextEvent(disp, &event.core); - if (event.state.changed & 0x90) - printf("%s\n", getActiveLayout(layouts, event.state.group)); - } -} |