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
This commit is contained in:
@@ -1093,9 +1093,13 @@ TermParse::_DecPrivateModeSet(int value)
|
|||||||
// Not supported yet.
|
// Not supported yet.
|
||||||
break;
|
break;
|
||||||
case 25:
|
case 25:
|
||||||
// Show Cursor
|
// Show Cursor.
|
||||||
// Not supported yet.
|
// Not supported yet.
|
||||||
break;
|
break;
|
||||||
|
case 47:
|
||||||
|
// Use Alternate Screen Buffer.
|
||||||
|
fBuffer->UseAlternateScreenBuffer(false);
|
||||||
|
break;
|
||||||
case 1034:
|
case 1034:
|
||||||
// Interpret "meta" key, sets eighth bit.
|
// Interpret "meta" key, sets eighth bit.
|
||||||
// Not supported yet.
|
// Not supported yet.
|
||||||
@@ -1104,7 +1108,7 @@ TermParse::_DecPrivateModeSet(int value)
|
|||||||
// Save cursor as in DECSC and use Alternate Screen Buffer, clearing
|
// Save cursor as in DECSC and use Alternate Screen Buffer, clearing
|
||||||
// it first.
|
// it first.
|
||||||
fBuffer->SaveCursor();
|
fBuffer->SaveCursor();
|
||||||
fBuffer->UseAlternateScreenBuffer();
|
fBuffer->UseAlternateScreenBuffer(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1138,14 +1142,18 @@ TermParse::_DecPrivateModeReset(int value)
|
|||||||
// Hide Cursor
|
// Hide Cursor
|
||||||
// Not supported yet.
|
// Not supported yet.
|
||||||
break;
|
break;
|
||||||
|
case 47:
|
||||||
|
// Use Normal Screen Buffer.
|
||||||
|
fBuffer->UseNormalScreenBuffer();
|
||||||
|
break;
|
||||||
case 1034:
|
case 1034:
|
||||||
// Don’t interpret "meta" key.
|
// Don’t interpret "meta" key.
|
||||||
// Not supported yet.
|
// Not supported yet.
|
||||||
break;
|
break;
|
||||||
case 1049:
|
case 1049:
|
||||||
// Use Normal Screen Buffer and restore cursor as in DECRC.
|
// Use Normal Screen Buffer and restore cursor as in DECRC.
|
||||||
fBuffer->RestoreCursor();
|
|
||||||
fBuffer->UseNormalScreenBuffer();
|
fBuffer->UseNormalScreenBuffer();
|
||||||
|
fBuffer->RestoreCursor();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,13 +176,16 @@ TerminalBuffer::ResizeTo(int32 width, int32 height, int32 historyCapacity)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TerminalBuffer::UseAlternateScreenBuffer()
|
TerminalBuffer::UseAlternateScreenBuffer(bool clear)
|
||||||
{
|
{
|
||||||
if (fAlternateScreenActive || fAlternateScreen == NULL)
|
if (fAlternateScreenActive || fAlternateScreen == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_SwitchScreenBuffer();
|
_SwitchScreenBuffer();
|
||||||
Clear(false);
|
|
||||||
|
if (clear)
|
||||||
|
Clear(false);
|
||||||
|
|
||||||
_InvalidateAll();
|
_InvalidateAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public:
|
|||||||
virtual status_t ResizeTo(int32 width, int32 height,
|
virtual status_t ResizeTo(int32 width, int32 height,
|
||||||
int32 historyCapacity);
|
int32 historyCapacity);
|
||||||
|
|
||||||
void UseAlternateScreenBuffer();
|
void UseAlternateScreenBuffer(bool clear);
|
||||||
void UseNormalScreenBuffer();
|
void UseNormalScreenBuffer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user