From 0f988424cfe7f8e010c71485d712759d32392cf8 Mon Sep 17 00:00:00 2001 From: Tyler Lanphear Date: Fri, 8 Jan 2021 01:33:17 -0500 Subject: [PATCH] LibVT: Implement ICH sequence. --- Libraries/LibVT/Terminal.cpp | 25 +++++++++++++++++++++++++ Libraries/LibVT/Terminal.h | 1 + 2 files changed, 26 insertions(+) diff --git a/Libraries/LibVT/Terminal.cpp b/Libraries/LibVT/Terminal.cpp index 8eafd88d44..75263f26b6 100644 --- a/Libraries/LibVT/Terminal.cpp +++ b/Libraries/LibVT/Terminal.cpp @@ -704,6 +704,9 @@ void Terminal::execute_escape_sequence(u8 final) case 'n': DSR(params); break; + case '@': + ICH(params); + break; default: dbgprintf("Terminal::execute_escape_sequence: Unhandled final '%c'\n", final); break; @@ -821,6 +824,28 @@ void Terminal::DSR(const ParamVector& params) } } +void Terminal::ICH(const ParamVector& params) +{ + int num = 0; + if (params.size() >= 1) { + num = params[0]; + } + if (num == 0) + num = 1; + + auto& line = m_lines[m_cursor_row]; + + // Move characters after cursor to the right + for (int i = line.length() - num; i >= m_cursor_column; --i) + line.set_code_point(i + num, line.code_point(i)); + + // Fill n characters after cursor with blanks + for (int i = 0; i < num; i++) + line.set_code_point(m_cursor_column + i, ' '); + + line.set_dirty(true); +} + void Terminal::on_input(u8 ch) { #ifdef TERMINAL_DEBUG diff --git a/Libraries/LibVT/Terminal.h b/Libraries/LibVT/Terminal.h index f74459806e..65e276f71d 100644 --- a/Libraries/LibVT/Terminal.h +++ b/Libraries/LibVT/Terminal.h @@ -173,6 +173,7 @@ private: void IND(); void RI(); void DSR(const ParamVector&); + void ICH(const ParamVector&); TerminalClient& m_client;