From 11fc6c5d86e9956ce2d8d12d9aceeeef6fa68092 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 9 Jun 2022 19:20:32 +0200 Subject: [PATCH] handle backspace & ^u --- console.cpp | 19 +++++++++++++++---- console.h | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/console.cpp b/console.cpp index fa54d1f..72b7fd2 100644 --- a/console.cpp +++ b/console.cpp @@ -88,6 +88,13 @@ void console::flush_input() input_buffer.clear(); } +void console::emit_backspace() +{ + put_char(8); + put_char(' '); + put_char(8); +} + std::string console::read_line(const std::string & prompt) { put_string(prompt); @@ -107,15 +114,19 @@ std::string console::read_line(const std::string & prompt) if (c == 13 || c == 10) break; - if (c == 8) { + if (c == 8 || c == 127) { // backspace if (!str.empty()) { str = str.substr(0, str.size() - 1); - put_char(8); - put_char(' '); - put_char(8); + emit_backspace(); } } + else if (c == 21) { // ^u + for(size_t i=0; i= 32 && c < 127) { str += c; diff --git a/console.h b/console.h index 7bdac7b..d030a66 100644 --- a/console.h +++ b/console.h @@ -51,6 +51,7 @@ public: std::string read_line(const std::string & prompt); void flush_input(); + void emit_backspace(); void put_char(const char c); void put_string(const std::string & what); virtual void put_string_lf(const std::string & what) = 0;