1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 19:57:45 +00:00

LibVT: Implement DECIC/DECDC

This commit adds support for these escape sequences that are used for
scrolling multiple lines at once. In the current, unoptimized
implementation, these just call the `scroll_left` and `scroll_right`
APIs multiple times.

It's a VT420 feature.
This commit is contained in:
Daniel Bertalan 2021-06-09 21:50:44 +02:00 committed by Andreas Kling
parent a3c4397432
commit 3752775a1e
2 changed files with 40 additions and 0 deletions

View file

@ -907,6 +907,28 @@ void Terminal::DECBI()
set_cursor(cursor_row(), cursor_column() - 1); 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<unsigned>(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<unsigned>(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) void Terminal::DSR(Parameters params)
{ {
if (params.size() == 1 && params[0] == 5) { if (params.size() == 1 && params[0] == 5) {
@ -1147,6 +1169,18 @@ void Terminal::execute_csi_sequence(Parameters parameters, Intermediates interme
case 'u': case 'u':
SCORC(); SCORC();
break; 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: default:
unimplemented_csi_sequence(parameters, intermediates, last_byte); unimplemented_csi_sequence(parameters, intermediates, last_byte);
} }

View file

@ -359,6 +359,12 @@ protected:
// FIXME: Find the right names for these. // FIXME: Find the right names for these.
void XTERM_WM(Parameters); void XTERM_WM(Parameters);
// DECIC - Insert Column
void DECIC(Parameters);
// DECDC - Delete Column
void DECDC(Parameters);
#ifndef KERNEL #ifndef KERNEL
TerminalClient& m_client; TerminalClient& m_client;
#else #else