aboutsummaryrefslogtreecommitdiff
path: root/bin/kbdlayout.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/kbdlayout.c')
-rw-r--r--bin/kbdlayout.c54
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));
- }
-}