diff options
| author | 2021-06-25 20:24:35 +0200 | |
|---|---|---|
| committer | 2021-06-25 20:28:54 +0200 | |
| commit | 349c3c4658084cb09cda64e0a604fec75d3d80f2 (patch) | |
| tree | 7cc45cd7a40874c4c4b4a7681d5f57bf7f47d247 | |
| parent | 7250b16c9e3e40c51f43aee38de8e480c2aa8d27 (diff) | |
| download | xkbcat-349c3c4658084cb09cda64e0a604fec75d3d80f2.tar.gz xkbcat-349c3c4658084cb09cda64e0a604fec75d3d80f2.zip | |
Tidy: Better comments, scope tempvars, better errs
Maintenance. No functionality changes.
| -rw-r--r-- | xkbcat.c | 61 |
1 files changed, 32 insertions, 29 deletions
@@ -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); |
