* Use the attributes from the parser instead of trying to guess blindly when inserting a tab. This avoids strange things hapenning when a tab is inserted at the start of a line.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39574 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -656,21 +656,23 @@ BasicTerminalBuffer::InsertRI()
|
||||
|
||||
|
||||
void
|
||||
BasicTerminalBuffer::InsertTab()
|
||||
BasicTerminalBuffer::InsertTab(uint32 attributes)
|
||||
{
|
||||
int32 x;
|
||||
|
||||
fSoftWrappedCursor = false;
|
||||
|
||||
// Find the next tab stop
|
||||
for (x = fCursor.x + 1; x < fWidth && !fTabStops[x]; x++)
|
||||
;
|
||||
// Ensure x stayx within the line bounds
|
||||
x = restrict_value(x, 0, fWidth - 1);
|
||||
|
||||
if (x != fCursor.x) {
|
||||
TerminalLine* line = _LineAt(fCursor.y);
|
||||
for (int32 i = fCursor.x; i <= x; i++) {
|
||||
line->cells[i].character = ' ';
|
||||
line->cells[i].attributes = line->cells[fCursor.x - 1].attributes;
|
||||
line->cells[i].attributes = attributes;
|
||||
}
|
||||
fCursor.x = x;
|
||||
if (line->length < fCursor.x)
|
||||
|
||||
@@ -108,7 +108,7 @@ public:
|
||||
void InsertCR();
|
||||
void InsertLF();
|
||||
void InsertRI();
|
||||
void InsertTab();
|
||||
void InsertTab(uint32 attr);
|
||||
void SetInsertMode(int flag);
|
||||
void InsertSpace(int32 num);
|
||||
void InsertLines(int32 numLines);
|
||||
|
||||
@@ -605,7 +605,7 @@ TermParse::EscParse()
|
||||
break;
|
||||
|
||||
case CASE_TAB:
|
||||
fBuffer->InsertTab();
|
||||
fBuffer->InsertTab(fAttr);
|
||||
break;
|
||||
|
||||
case CASE_ESC:
|
||||
|
||||
Reference in New Issue
Block a user