aboutsummaryrefslogtreecommitdiff
path: root/src/reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/reader.cpp')
-rw-r--r--src/reader.cpp46
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;
+ }
+ }
+}