diff --git a/Userland/Libraries/LibVT/Terminal.cpp b/Userland/Libraries/LibVT/Terminal.cpp index 4d04d34176..138ba4a3b8 100644 --- a/Userland/Libraries/LibVT/Terminal.cpp +++ b/Userland/Libraries/LibVT/Terminal.cpp @@ -907,6 +907,28 @@ void Terminal::DECBI() set_cursor(cursor_row(), cursor_column() - 1); } +void Terminal::DECIC(Parameters params) +{ + unsigned num = 1; + if (params.size() >= 1 && params[0] != 0) + num = params[0]; + + num = min(num, columns() - cursor_column()); + for (unsigned row = cursor_row(); row <= m_scroll_region_bottom; ++row) + scroll_right(row, cursor_column(), num); +} + +void Terminal::DECDC(Parameters params) +{ + unsigned num = 1; + if (params.size() >= 1 && params[0] != 0) + num = params[0]; + + num = min(num, columns() - cursor_column()); + for (unsigned row = cursor_row(); row <= m_scroll_region_bottom; ++row) + scroll_left(row, cursor_column(), num); +} + void Terminal::DSR(Parameters params) { if (params.size() == 1 && params[0] == 5) { @@ -1147,6 +1169,18 @@ void Terminal::execute_csi_sequence(Parameters parameters, Intermediates interme case 'u': SCORC(); break; + case '}': + if (intermediates.size() >= 1 && intermediates[0] == '\'') + DECIC(parameters); + else + unimplemented_csi_sequence(parameters, intermediates, last_byte); + break; + case '~': + if (intermediates.size() >= 1 && intermediates[0] == '\'') + DECDC(parameters); + else + unimplemented_csi_sequence(parameters, intermediates, last_byte); + break; default: unimplemented_csi_sequence(parameters, intermediates, last_byte); } diff --git a/Userland/Libraries/LibVT/Terminal.h b/Userland/Libraries/LibVT/Terminal.h index 160bf08e40..1f5f974041 100644 --- a/Userland/Libraries/LibVT/Terminal.h +++ b/Userland/Libraries/LibVT/Terminal.h @@ -359,6 +359,12 @@ protected: // FIXME: Find the right names for these. void XTERM_WM(Parameters); + // DECIC - Insert Column + void DECIC(Parameters); + + // DECDC - Delete Column + void DECDC(Parameters); + #ifndef KERNEL TerminalClient& m_client; #else