From cda036ce701e353da6e10899e55d4423cc629fc5 Mon Sep 17 00:00:00 2001 From: apio Date: Thu, 23 Mar 2023 21:22:12 +0100 Subject: [PATCH] ConsoleDevice: Use a temporary buffer for backspace handling --- kernel/src/fs/devices/ConsoleDevice.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/kernel/src/fs/devices/ConsoleDevice.cpp b/kernel/src/fs/devices/ConsoleDevice.cpp index d02f359a..734a625c 100644 --- a/kernel/src/fs/devices/ConsoleDevice.cpp +++ b/kernel/src/fs/devices/ConsoleDevice.cpp @@ -2,6 +2,7 @@ #include "video/TextConsole.h" #include #include +#include static Buffer g_console_input; @@ -34,7 +35,24 @@ bool ConsoleDevice::blocking() const return g_console_input.size() == 0; } +static Vector g_temp_input; + void ConsoleDevice::did_press_key(char key) { - *g_console_input.slice_at_end(1).value() = (u8)key; + if (key == '\b') + { + if (g_temp_input.try_pop().has_value()) TextConsole::putwchar(L'\b'); + + return; + } + + g_temp_input.try_append(key).value(); + + if (key == '\n') + { + g_console_input.append_data(g_temp_input.data(), g_temp_input.size()).value(); + g_temp_input.clear(); + } + + TextConsole::putchar(key); }