1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 03:27:44 +00:00

Make /bin/clear work again.

After I made stdio buffered, we were dropping anything unflushed on exit.
Since /bin/clear just prints out some escape sequences without a newline,
the entire buffer was being discarded.

Also add VirtualConsole::clear() that handles clearing of background VC's.
This commit is contained in:
Andreas Kling 2018-11-10 00:56:10 +01:00
parent 3e3de67f02
commit 8605711f4b
4 changed files with 19 additions and 3 deletions

View file

@ -39,6 +39,16 @@ VirtualConsole::~VirtualConsole()
{
}
void VirtualConsole::clear()
{
word* linemem = m_active ? (word*)s_vga_buffer : (word*)m_buffer;
for (word i = 0; i < 80 * 25; ++i)
linemem[i] = 0x0720;
if (m_active)
set_vga_start_row(0);
set_cursor(0, 0);
}
void VirtualConsole::switch_to(unsigned index)
{
if ((int)index == s_active_console)
@ -248,11 +258,11 @@ void VirtualConsole::escape$J(const Vector<unsigned>& params)
notImplemented();
break;
case 2:
vga_clear();
clear();
break;
case 3:
// FIXME: <esc>[3J should also clear the scrollback buffer.
vga_clear();
clear();
break;
}
}