summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorGravatar Antti Korpimäki2021-06-25 20:24:35 +0200
committerGravatar Antti Korpimäki2021-06-25 20:28:54 +0200
commit349c3c4658084cb09cda64e0a604fec75d3d80f2 (patch)
tree7cc45cd7a40874c4c4b4a7681d5f57bf7f47d247
parent7250b16c9e3e40c51f43aee38de8e480c2aa8d27 (diff)
downloadxkbcat-349c3c4658084cb09cda64e0a604fec75d3d80f2.tar.gz
xkbcat-349c3c4658084cb09cda64e0a604fec75d3d80f2.zip
Tidy: Better comments, scope tempvars, better errs
Maintenance. No functionality changes.
-rw-r--r--xkbcat.c61
1 files changed, 32 insertions, 29 deletions
diff --git a/xkbcat.c b/xkbcat.c
index 0092317..1512307 100644
--- a/xkbcat.c
+++ b/xkbcat.c
@@ -22,54 +22,56 @@ USAGE: xkbcat [-display <display>] [-up]\n\
int main(int argc, char * argv[]) {
- const char * hostname = DEFAULT_DISPLAY;
- bool printKeyUps = DEFAULT_PRINT_UP;
+ const char * xDisplayName = DEFAULT_DISPLAY;
+ bool printKeyUps = DEFAULT_PRINT_UP;
// Get arguments
for (int i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-help")) printUsage();
- else if (!strcmp(argv[i], "-display")) hostname = argv[++i];
+ else if (!strcmp(argv[i], "-display")) xDisplayName = argv[++i];
else if (!strcmp(argv[i], "-up")) printKeyUps = true;
else { printf("Unexpected argument `%s`\n", argv[i]); printUsage(); }
}
- // Set up X
- Display * disp = XOpenDisplay(hostname);
+ // Connect to X display
+ Display * disp = XOpenDisplay(xDisplayName);
if (NULL == disp) {
- fprintf(stderr, "Cannot open X display: %s\n", hostname);
+ fprintf(stderr, "Cannot open X display: %s\n", xDisplayName);
exit(1);
}
- // Test for XInput 2 extension
- int xiOpcode, queryEvent, queryError;
- if (! XQueryExtension(disp, "XInputExtension", &xiOpcode,
- &queryEvent, &queryError)) {
- fprintf(stderr, "X Input extension not available\n");
- exit(2);
+ int xiOpcode;
+ { // Test for XInput 2 extension
+ int queryEvent, queryError;
+ if (! XQueryExtension(disp, "XInputExtension", &xiOpcode,
+ &queryEvent, &queryError)) {
+ fprintf(stderr, "X Input extension not available\n");
+ exit(2);
+ }
}
- { // Request XInput 2.0, guarding against changes in future versions
+ { // Request XInput 2.0, to guard against changes in future versions
int major = 2, minor = 0;
int queryResult = XIQueryVersion(disp, &major, &minor);
if (queryResult == BadRequest) {
fprintf(stderr, "Need XI 2.0 support (got %d.%d)\n", major, minor);
exit(3);
} else if (queryResult != Success) {
- fprintf(stderr, "Internal error\n");
+ fprintf(stderr, "XIQueryVersion failed!\n");
exit(4);
}
}
-
- // Register events
- Window root = DefaultRootWindow(disp);
- XIEventMask m;
- m.deviceid = XIAllMasterDevices;
- m.mask_len = XIMaskLen(XI_LASTEVENT);
- m.mask = calloc(m.mask_len, sizeof(char));
- XISetMask(m.mask, XI_RawKeyPress);
- if (printKeyUps) XISetMask(m.mask, XI_RawKeyRelease);
- XISelectEvents(disp, root, &m, 1);
- XSync(disp, false);
- free(m.mask);
+ { // Register to receive XInput events
+ Window root = DefaultRootWindow(disp);
+ XIEventMask m;
+ m.deviceid = XIAllMasterDevices;
+ m.mask_len = XIMaskLen(XI_LASTEVENT);
+ m.mask = calloc(m.mask_len, sizeof(char));
+ XISetMask(m.mask, XI_RawKeyPress);
+ if (printKeyUps) XISetMask(m.mask, XI_RawKeyRelease);
+ XISelectEvents(disp, root, &m, 1 /*number of masks*/);
+ XSync(disp, false);
+ free(m.mask);
+ }
while ("forever") {
XEvent event;
@@ -84,13 +86,14 @@ int main(int argc, char * argv[]) {
case XI_RawKeyPress: {
XIRawEvent *ev = cookie->data;
- // Ask X what it calls that key
- KeySym s = XkbKeycodeToKeysym(disp, ev->detail, 0, 0);
+ // Ask X what it calls that key; skip if it doesn't know
+ KeySym s = XkbKeycodeToKeysym(disp, ev->detail,
+ 0 /*group*/, 0 /*shift level*/);
if (NoSymbol == s) continue;
char *str = XKeysymToString(s);
if (NULL == str) continue;
-
+ // Output line
if (printKeyUps) printf("%s",
cookie->evtype == XI_RawKeyPress ? "+" : "-");
printf("%s\n", str);