FIX: Auto-Wrap sequence

ADD: DEC Line Drawing charset
This commit is contained in:
Alexander Koblov 2022-01-05 20:49:40 +03:00
commit 76eaebb4f7
3 changed files with 31 additions and 4 deletions

View file

@ -111,6 +111,7 @@ type
end;
TTermMode = record
Keys: TArrowKeys;
CharSet: Boolean;
MouseMode: Boolean;
MouseTrack: Boolean;
end;
@ -1478,7 +1479,7 @@ begin
else
FTermMode.Keys := akTerminal;
end
else if Str = '7' then
else if Str = '?7' then
FWrapLines := OnOff
else if Str = '?3' then
begin
@ -1823,7 +1824,14 @@ begin
ecDeleteLine: FBuffer.DeleteLine(FCaretPos.Y, GetParam(1, AParams));
ecSoftReset:
begin
FTermMode.CharSet:= False;
FBuffer.FScrollRange:= Default(TRect);
end;
ecCharSet:
begin
// Designate Character Set
if (AParams.Count > 0) and (Length(AParams[0]) > 0) then
FTermMode.CharSet:= (AParams[0] = '0');
end
else
Result := False;
@ -1948,7 +1956,24 @@ begin
#32..#255:
begin
TermCh := GetCharAttr;
TermCh.Ch := Ch;
if not FTermMode.CharSet then
TermCh.Ch := Ch
else begin
case Ch[1] of
'j': TermCh.Ch := '┘';
'k': TermCh.Ch := '┐';
'l': TermCh.Ch := '┌';
'm': TermCh.Ch := '└';
'n': TermCh.Ch := '┼';
'q': TermCh.Ch := '─';
't': TermCh.Ch := '├';
'u': TermCh.Ch := '┤';
'v': TermCh.Ch := '┴';
'w': TermCh.Ch := '┬';
'x': TermCh.Ch := '│';
else TermCh.Ch := Ch;
end;
end;
if FWrapLines then WrapLine;
FBuffer.SetChar(FCaretPos.X, FCaretPos.Y, TermCh);
DrawChar(FCaretPos.X - FTopLeft.X + 1,

View file

@ -364,6 +364,8 @@ begin
end
else if Str[1] = '(' then
begin
FParams.Clear;
FParams.Add(Str[2]);
Result:= ecCharSet;
end;
end;

View file

@ -366,8 +366,8 @@ begin
// Windows 11 requires auto wrap mode
if (ConsoleType = ctNative) and (Win32BuildNumber >= 22000) then
begin
StrCopy(FBuffer, #27'[7h');
FLength:= 4;
StrCopy(FBuffer, #27'[?7h');
FLength:= 5;
ReadySync;
end;
FThread:= TThread.ExecuteInThread(ReadThread);