aboutsummaryrefslogtreecommitdiff
path: root/segments/xkb_layout.c
diff options
context:
space:
mode:
authorCody Hiar <chiar@hybridforge.com>2015-08-12 12:06:23 -0600
committerCody Hiar <chiar@hybridforge.com>2015-08-12 12:06:23 -0600
commit07fc2644a237187dd4c5680e88f4adadbf533603 (patch)
treebb6335e180df48c5a6f0b893312857d36ad470f7 /segments/xkb_layout.c
Initial commit of the working files
Diffstat (limited to 'segments/xkb_layout.c')
-rw-r--r--segments/xkb_layout.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/segments/xkb_layout.c b/segments/xkb_layout.c
new file mode 100644
index 0000000..7c94f96
--- /dev/null
+++ b/segments/xkb_layout.c
@@ -0,0 +1,64 @@
+/* xkb_layout
+ * Description:
+ * This program will connect to the X Server and print the id of the currently
+ * active keyboard layout.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <X11/XKBlib.h>
+
+#ifdef DEBUG
+ #define DO_DEBUG DEBUG
+#else
+ #define DO_DEBUG 0
+#endif
+#define DEBUG_PRINTF(...) do{ if (DO_DEBUG) { printf(__VA_ARGS__);} } while(0)
+
+int main() {
+ // Get X display
+ char *displayName = "";
+ int eventCode;
+ int errorReturn;
+ int major = XkbMajorVersion;
+ int minor = XkbMinorVersion;;
+ int reasonReturn;
+ Display *_display = XkbOpenDisplay(displayName, &eventCode, &errorReturn,
+ &major, &minor, &reasonReturn);
+ bool error = false;
+ switch (reasonReturn) {
+ case XkbOD_BadLibraryVersion:
+ DEBUG_PRINTF("Bad XKB library version.\n");
+ error = true;
+ break;
+ case XkbOD_ConnectionRefused:
+ DEBUG_PRINTF("Connection to X server refused.\n");
+ error = true;
+ break;
+ case XkbOD_BadServerVersion:
+ DEBUG_PRINTF("Bad X11 server version.\n");
+ error = true;
+ break;
+ case XkbOD_NonXkbServer:
+ DEBUG_PRINTF("XKB not present.\n");
+ error = true;
+ break;
+ case XkbOD_Success:
+ break;
+ }
+
+ if (error) {
+ return EXIT_FAILURE;
+ }
+
+ // Get current state of keyboard.
+ int _deviceId = XkbUseCoreKbd;
+ XkbStateRec xkbState;
+ XkbGetState(_display, _deviceId, &xkbState);
+ // print the groupnumber, may be used with setxkbmap -query to get name
+ // of current layout
+ printf("%d\n", xkbState.group);
+ return 0;
+ return EXIT_SUCCESS;
+}