From 1291c38c181ac85064fb8e30ac533c03b45eb7d9 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 19 Jun 2008 21:10:21 +0000 Subject: [PATCH] Implemented \ESC[?47h and \ESC[?47l (use alternative/normal screen buffer). These are the sequences our /etc/termcap uses (local less and vim use the alternative screen buffer now). The ones already implemented are used e.g. by the termcap of my Linux installation. A bit weird all those different termcap files, some even with the same version number. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26031 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/terminal/TermParse.cpp | 14 +++++++++++--- src/apps/terminal/TerminalBuffer.cpp | 7 +++++-- src/apps/terminal/TerminalBuffer.h | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) 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: