mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:17:35 +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:
parent
a3c4397432
commit
3752775a1e
2 changed files with 40 additions and 0 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue