diff options
author | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-19 03:58:32 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-19 03:58:32 +0100 |
commit | 68b40f6327efeff0437d77c487f0175a9d53110a (patch) | |
tree | 94dbe458dea5939802634460de5bcdc4278db9d5 /util/dump2cuddlekeys | |
parent | 1468a45629b8d36357a0b2f597a33adb9f4f8d17 (diff) | |
download | cuddles-68b40f6327efeff0437d77c487f0175a9d53110a.tar.xz |
implement shift key
Diffstat (limited to 'util/dump2cuddlekeys')
-rw-r--r-- | util/dump2cuddlekeys/Makefile | 2 | ||||
-rw-r--r-- | util/dump2cuddlekeys/main.c | 146 |
2 files changed, 83 insertions, 65 deletions
diff --git a/util/dump2cuddlekeys/Makefile b/util/dump2cuddlekeys/Makefile index 07b7bb2..12ad222 100644 --- a/util/dump2cuddlekeys/Makefile +++ b/util/dump2cuddlekeys/Makefile @@ -4,5 +4,5 @@ dump2cuddlekeys: main.c dumpkeys: dumpkeys -C/dev/tty1 | grep '^keycode' | less -preview: map2cuddlekeys +preview: dump2cuddlekeys dumpkeys -C/dev/tty1 | ./dump2cuddlekeys | hexdump -C diff --git a/util/dump2cuddlekeys/main.c b/util/dump2cuddlekeys/main.c index ec0039e..eafbac3 100644 --- a/util/dump2cuddlekeys/main.c +++ b/util/dump2cuddlekeys/main.c @@ -1,6 +1,76 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <ctype.h> + +struct { + char c; + const char *name; +} defs[] = { + { '\n', "Return" }, + { ' ', "space" }, + { '\b', "Delete" }, + { '!', "exclam" }, + { '&', "ampersand" }, + { '%', "percent" }, + { '$', "dollar" }, + { '\'', "apostrophe" }, + { '(', "parenleft" }, + { ')', "parenright" }, + { '*', "asterisk" }, + { '+', "plus" }, + { ',', "comma" }, + { '-', "minus" }, + { '.', "period" }, + { '/', "slash" }, + { '0', "zero" }, + { '1', "one" }, + { '2', "two" }, + { '3', "three" }, + { '4', "four" }, + { '5', "five" }, + { '6', "six" }, + { '7', "seven" }, + { '8', "eight" }, + { '9', "nine" }, + { ':', "colon" }, + { ';', "semicolon" }, + { '<', "less" }, + { '=', "equal" }, + { '>', "greater" }, + { '?', "question" }, + { '\n', "linefeed" }, + { '\\', "backslash" }, + { '\t', "Tab" }, + { '@', "at" }, + { '[', "bracketleft" }, + { ']', "bracketright" }, + { '{', "braceleft" }, + { '}', "braceright" }, + { '#', "numbersign" }, + { '^', "asciicircum" }, + { '\0', "nul" }, + { '\xe', "Shift" }, + { '_', "underscore" }, + { '"', "quotedbl" }, + { '~', "asciitilde" }, + { '`', "grave" }, +}; + +static char lookup(char *key) +{ + size_t len = strlen(key); + if (len == 1) + return key[0]; + else if (len == 2 && key[0] == '+') + return key[1]; + else for (size_t i = 0; i < sizeof defs / sizeof *defs; i++) + if (strcmp(defs[i].name, key) == 0) + return defs[i].c; + + fprintf(stderr, "unhandled: %s\n", key); + return '\0'; +} int main() { @@ -11,75 +81,23 @@ int main() ssize_t len; while ((len = getline(&line, &cap, stdin)) != -1) { int code; - char key[len+1]; + char plain[len+1]; + char shift[len+1]; - if (sscanf(line, "keycode %d = %s", &code, key) != 2) + int items = sscanf(line, "keycode %d = %s %s", &code, plain, shift); + if (items < 2 || code >= 127) continue; - char c = '\0'; - - struct { - char c; - const char *name; - } defs[] = { - { '\n', "Return" }, - { ' ', "space" }, - { '\b', "Delete" }, - { '!', "exclam" }, - { '&', "ampersand" }, - { '%', "percent" }, - { '$', "dollar" }, - { '\'', "apostrophe" }, - { '(', "parenleft" }, - { ')', "parenright" }, - { '*', "asterisk" }, - { '+', "plus" }, - { ',', "comma" }, - { '-', "minus" }, - { '.', "period" }, - { '/', "slash" }, - { '0', "zero" }, - { '1', "one" }, - { '2', "two" }, - { '3', "three" }, - { '4', "four" }, - { '5', "five" }, - { '6', "six" }, - { '7', "seven" }, - { '8', "eight" }, - { '9', "nine" }, - { ':', "colon" }, - { ';', "semicolon" }, - { '<', "less" }, - { '=', "equal" }, - { '>', "greater" }, - { '?', "question" }, - { '\n', "linefeed" }, - { '\\', "backslash" }, - { '\t', "Tab" }, - { '@', "at" }, - { '[', "bracketleft" }, - { ']', "bracketright" }, - { '(', "{" }, - { ')', "}" }, - { '#', "numbersign" }, - { '^', "asciicircum" }, - }; + char p = lookup(plain); + char s = items > 2 ? lookup(shift) : '\0'; - if (strlen(key) == 1) - c = key[0]; - else if (strlen(key) == 2 && key[0] == '+') - c = key[1]; - else for (size_t i = 0; i < sizeof defs / sizeof *defs; i++) - if (strcmp(defs[i].name, key) == 0) { - c = defs[i].c; - break; - } + if (p != '\0') { + if (s == '\0') + s = toupper(p); - if (c != '\0') - keymap[(unsigned char) code] = (char) c; - else if (strcmp(key, "nul") != 0) - {} // fprintf(stderr, "unhandled: %s\n", key); + keymap[code*2+0] = p; + keymap[code*2+1] = s; + } } if (line != NULL) |