From eb2564e27e40711c74ff4927ac23569303fa0bcf Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Sat, 27 May 2023 11:54:26 +0800 Subject: [PATCH 1/3] add an option to disable layout toggle --- dvorak.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/dvorak.c b/dvorak.c index 505ee3f..e87db81 100644 --- a/dvorak.c +++ b/dvorak.c @@ -212,7 +212,9 @@ void usage(const char *path) { "Specifies which device should be captured.\n"); fprintf(stderr, " -m STRING\t\t" "Match only the STRING with the USB device name. \n" - "\t\t\tSTRING can contain multiple words, separated by space.\n\n"); + "\t\t\tSTRING can contain multiple words, separated by space.\n"); + fprintf(stderr, " -t\t\t\t" + "Disable layout toggle feature (press Left-Alt 3 times to switch layout).\n\n"); fprintf(stderr, "example: %s -u -d /dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-kbd -m \"k750 k350\"\n", basename); } @@ -222,12 +224,12 @@ int main(int argc, char *argv[]) { struct uinput_setup usetup; ssize_t n; int fdi, fdo, i, mod_current, code, name_ret, mod_state = 0, array_qwerty_counter = 0, array_umlaut_counter = 0, lAlt = 0, opt; - bool alt_gr = false, isDvorak = false, isUmlaut = false, lshift = false, rshift = false; + bool alt_gr = false, isDvorak = false, isUmlaut = false, lshift = false, rshift = false, noToggle = false; int array_qwerty[MAX_LENGTH] = {0}, array_umlaut[MAX_LENGTH] = {0}; char keyboard_name[UINPUT_MAX_NAME_SIZE] = "Unknown"; char *device = NULL, *match = NULL; - while ((opt = getopt(argc, argv, "ud:m:")) != -1) { + while ((opt = getopt(argc, argv, "ud:m:a")) != -1) { switch (opt) { case 'u': isUmlaut = true; @@ -238,6 +240,9 @@ int main(int argc, char *argv[]) { case 'm': match = optarg; break; + case 'a': + noToggle = true; + break; case '?': usage(argv[0]); return EXIT_FAILURE; @@ -410,9 +415,9 @@ int main(int argc, char *argv[]) { break; } - //if l-alt is pressed 3 times, the dvorak mapping is disabled, if it is - //again pressed 3 times, it will be enabled again - if (ev.code == 56) { + //when not disabled by the -t option, if l-alt is pressed 3 times, the dvorak mapping is disabled, + //if it is again pressed 3 times, it will be enabled again + if (!noToggle && ev.code == 56) { if (ev.value == 1 && ++lAlt >= 3) { isDvorak = !isDvorak; lAlt = 0; From b2e042b85b4ac267a2cdadb735feae3625890e8d Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Sat, 27 May 2023 12:08:18 +0800 Subject: [PATCH 2/3] forgot to change the option list in getopt --- dvorak.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dvorak.c b/dvorak.c index e87db81..680c21d 100644 --- a/dvorak.c +++ b/dvorak.c @@ -229,7 +229,7 @@ int main(int argc, char *argv[]) { char keyboard_name[UINPUT_MAX_NAME_SIZE] = "Unknown"; char *device = NULL, *match = NULL; - while ((opt = getopt(argc, argv, "ud:m:a")) != -1) { + while ((opt = getopt(argc, argv, "ud:m:t")) != -1) { switch (opt) { case 'u': isUmlaut = true; From e5ec4f708900174a988df6b9557ac741225da1bc Mon Sep 17 00:00:00 2001 From: briskt <3172830+briskt@users.noreply.github.com> Date: Sat, 27 May 2023 12:11:24 +0800 Subject: [PATCH 3/3] also need to change the flag in the switch statement --- dvorak.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dvorak.c b/dvorak.c index 680c21d..040f937 100644 --- a/dvorak.c +++ b/dvorak.c @@ -240,7 +240,7 @@ int main(int argc, char *argv[]) { case 'm': match = optarg; break; - case 'a': + case 't': noToggle = true; break; case '?':