commit 15636b64e71b881814a37509bb4e394d06e88dda
parent 6ab17c7d1ae3ac230926bdf78996ddc20f8e65ec
Author: Francisco Lopes <francisco@nosubstance.me>
Date: Mon, 28 Dec 2020 18:37:37 -0300
Add help message and options
Solves #8 and !2
Diffstat:
M | caps2esc.c | | | 56 | +++++++++++++++++++++++++++++++++++++++++++++++++++++--- |
1 file changed, 53 insertions(+), 3 deletions(-)
diff --git a/caps2esc.c b/caps2esc.c
@@ -18,6 +18,28 @@ capslock_repeat = {.type = EV_KEY, .code = KEY_CAPSLOCK, .value = 2},
syn = {.type = EV_SYN, .code = SYN_REPORT, .value = 0};
// clang-format on
+void print_usage(FILE *stream, const char *program) {
+ // clang-format off
+ fprintf(stream,
+ "caps2esc - transforming the most useless key ever in the most useful one\n"
+ "\n"
+ "usage: %s [-h] [-m mode]\n"
+ "\n"
+ "options:\n"
+ " -h show this message and exit\n"
+ " -m mode 0: default\n"
+ " - caps as esc/ctrl\n"
+ " - esc as caps\n"
+ " 1: minimal\n"
+ " - caps as esc/ctrl\n"
+ " 2: useful on 60%% layouts\n"
+ " - caps as esc/ctrl\n"
+ " - esc as grave accent\n"
+ " - grave accent as caps\n",
+ program);
+ // clang-format on
+}
+
int equal(const struct input_event *first, const struct input_event *second) {
return first->type == second->type && first->code == second->code &&
first->value == second->value;
@@ -32,7 +54,20 @@ void write_event(const struct input_event *event) {
exit(EXIT_FAILURE);
}
-int main(void) {
+int main(int argc, char *argv[]) {
+ int opt, mode = 0;
+ while ((opt = getopt(argc, argv, "hm:")) != -1) {
+ switch (opt) {
+ case 'h':
+ return print_usage(stdout, argv[0]), EXIT_SUCCESS;
+ case 'm':
+ mode = optarg[0] - '0';
+ continue;
+ }
+
+ return print_usage(stderr, argv[0]), EXIT_FAILURE;
+ }
+
int capslock_is_down = 0, esc_give_up = 0;
struct input_event input;
@@ -77,8 +112,23 @@ int main(void) {
continue;
}
- if (input.code == KEY_ESC)
- input.code = KEY_CAPSLOCK;
+ switch (mode) {
+ case 0:
+ if (input.code == KEY_ESC)
+ input.code = KEY_CAPSLOCK;
+ break;
+ case 2:
+ switch (input.code) {
+ case KEY_ESC:
+ input.code = KEY_GRAVE;
+ break;
+ case KEY_GRAVE:
+ input.code = KEY_CAPSLOCK;
+ break;
+ }
+ break;
+ }
+
write_event(&input);
}
}