FIX: Virtual terminal - AutoFollow off-by-one and clear resets viewport (#2876)

(cherry picked from commit 3e601a1940)
This commit is contained in:
EH 2026-05-28 11:41:25 -06:00 committed by Alexander Koblov
commit 9ef01acba4

View file

@ -785,7 +785,9 @@ end;
procedure TCustomComTerminal.ClearScreen;
begin
FBuffer.Init(0, 0);
FTopLeft := Classes.Point(1, 1);
MoveCaret(1, 1);
UpdateScrollRange;
Invalidate;
end;
@ -1361,7 +1363,7 @@ begin
end;
if FAutoFollow then
begin
if (FCaretPos.Y - FTopLeft.Y) > FVisibleRows then
if (FCaretPos.Y - FTopLeft.Y) >= FVisibleRows then
begin
I:= FCaretPos.Y - FVisibleRows + 1;
ModifyScrollBar(SB_Vert, SB_THUMBPOSITION, I);
@ -1773,7 +1775,9 @@ begin
ecEraseScreen:
begin
FBuffer.EraseScreenRight(1, 1);
MoveCaret(1, 1)
FTopLeft := Classes.Point(1, 1);
MoveCaret(1, 1);
UpdateScrollRange;
end;
ecEraseChar: FBuffer.EraseChar(FCaretPos.X, FCaretPos.Y, GetParam(1, AParams));
ecDeleteChar: FBuffer.DeleteChar(FCaretPos.X, FCaretPos.Y, GetParam(1, AParams));