diff options
| author | Aakarsh Kashyap <[email protected]> | 2026-06-29 22:27:45 +0530 |
|---|---|---|
| committer | Aakarsh Kashyap <[email protected]> | 2026-06-29 22:27:45 +0530 |
| commit | 36db9ebac493aa07a08c8a92a1380d253e05718e (patch) | |
| tree | 70b528aa4ca444f2251d01787307225c551f8d91 /src/reader.cpp | |
| parent | 53a8f41171179663cebdb9afbee5de88f8b6bbd4 (diff) | |
input handling using SCSP ring buffer
Diffstat (limited to 'src/reader.cpp')
| -rw-r--r-- | src/reader.cpp | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/reader.cpp b/src/reader.cpp index 4bc88a6..eec7478 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -144,7 +144,7 @@ window_size_callback(EditorCfg *cfg) if (get_window_size(&rows, &cols) < 0) { fprintf(stderr, - "[err]: window_size_callback: get_window_size\n"); + "[err]: window_size_callback: get_window_size\n"); return; } if (cfg->screenrows != rows || cfg->screencols != cols) { @@ -188,7 +188,7 @@ editor_refresh_scrn(EditorCfg *cfg) ab_append(&ab, "\x1b[2J", 4); memset(buff, 0, sizeof(buff)); snprintf(buff, sizeof(buff), "\x1b[%d;%dH", - cfg->screenrows / 2, cfg->screencols / 2); + cfg->screenrows / 2, cfg->screencols / 2); ab_append(&ab, buff, strlen(buff)); ab_write(&ab); ab_free(&ab); @@ -227,3 +227,45 @@ split(const std::string &txt, } return strings.size(); } + +static void +editor_process_key_process(char c, EditorCfg *cfg) +{ + + switch (c) + { + case CTRL_KEY('q'): + write(STDOUT_FILENO, "\x1b[2J", 4); + write(STDOUT_FILENO, "\x1b[H", 3); + exit(0); + break; + case CTRL_KEY('j'): + cfg->speed += 10000; + break; + case CTRL_KEY('k'): + cfg->speed -= 10000; + break; + } +} + +void +producer(SCPCQueue<char> &queue) +{ + for (;;) { + char value = editor_readkey(); + queue.push(value); + } +} + +void +consumer(SCPCQueue<char> &queue, EditorCfg *cfg) +{ + for (;;) { + char value{}; + if (queue.pop(value)) { + editor_process_key_process(value, cfg); + } else { + break; + } + } +} |
