diff --git a/src/apps/terminal/TermParse.cpp b/src/apps/terminal/TermParse.cpp index 8495085168..e7830f0987 100644 --- a/src/apps/terminal/TermParse.cpp +++ b/src/apps/terminal/TermParse.cpp @@ -1093,9 +1093,13 @@ TermParse::_DecPrivateModeSet(int value) // Not supported yet. break; case 25: - // Show Cursor + // Show Cursor. // Not supported yet. break; + case 47: + // Use Alternate Screen Buffer. + fBuffer->UseAlternateScreenBuffer(false); + break; case 1034: // Interpret "meta" key, sets eighth bit. // Not supported yet. @@ -1104,7 +1108,7 @@ TermParse::_DecPrivateModeSet(int value) // Save cursor as in DECSC and use Alternate Screen Buffer, clearing // it first. fBuffer->SaveCursor(); - fBuffer->UseAlternateScreenBuffer(); + fBuffer->UseAlternateScreenBuffer(true); break; } } @@ -1138,14 +1142,18 @@ TermParse::_DecPrivateModeReset(int value) // Hide Cursor // Not supported yet. break; + case 47: + // Use Normal Screen Buffer. + fBuffer->UseNormalScreenBuffer(); + break; case 1034: // Don’t interpret "meta" key. // Not supported yet. break; case 1049: // Use Normal Screen Buffer and restore cursor as in DECRC. - fBuffer->RestoreCursor(); fBuffer->UseNormalScreenBuffer(); + fBuffer->RestoreCursor(); break; } } diff --git a/src/apps/terminal/TerminalBuffer.cpp b/src/apps/terminal/TerminalBuffer.cpp index 7a074bf04e..d243018817 100644 --- a/src/apps/terminal/TerminalBuffer.cpp +++ b/src/apps/terminal/TerminalBuffer.cpp @@ -176,13 +176,16 @@ TerminalBuffer::ResizeTo(int32 width, int32 height, int32 historyCapacity) void -TerminalBuffer::UseAlternateScreenBuffer() +TerminalBuffer::UseAlternateScreenBuffer(bool clear) { if (fAlternateScreenActive || fAlternateScreen == NULL) return; _SwitchScreenBuffer(); - Clear(false); + + if (clear) + Clear(false); + _InvalidateAll(); } diff --git a/src/apps/terminal/TerminalBuffer.h b/src/apps/terminal/TerminalBuffer.h index 9785603e08..05fc1e2ece 100644 --- a/src/apps/terminal/TerminalBuffer.h +++ b/src/apps/terminal/TerminalBuffer.h @@ -32,7 +32,7 @@ public: virtual status_t ResizeTo(int32 width, int32 height, int32 historyCapacity); - void UseAlternateScreenBuffer(); + void UseAlternateScreenBuffer(bool clear); void UseNormalScreenBuffer(); protected: