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;