Skip to content

Commit b86cfe2

Browse files
committed
add missing modes
1 parent 7ede375 commit b86cfe2

5 files changed

Lines changed: 101 additions & 0 deletions

File tree

src/XTerm.NET/Common/CommandExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public static class CsiCommandExtensions
2929
{ "c", CsiCommand.DeviceAttributes },
3030
{ "d", CsiCommand.LinePositionAbsolute },
3131
{ "f", CsiCommand.CursorPosition }, // HVP - same as CUP
32+
{ "g", CsiCommand.TabClear },
3233
{ "h", CsiCommand.SetMode },
3334
{ "l", CsiCommand.ResetMode },
3435
{ "m", CsiCommand.SelectGraphicRendition },

src/XTerm.NET/Common/CsiCommand.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ public enum CsiCommand
102102
/// </summary>
103103
CursorBackwardTab,
104104

105+
/// <summary>
106+
/// Tab Clear (CSI g).
107+
/// Ps = 0: Clear current column tab stop.
108+
/// Ps = 3: Clear all tab stops.
109+
/// </summary>
110+
TabClear,
111+
105112
/// <summary>
106113
/// Device Attributes (CSI c).
107114
/// </summary>

src/XTerm.NET/Common/TerminalMode.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ public enum TerminalMode
3838
/// </summary>
3939
SmoothScroll = 4,
4040

41+
/// <summary>
42+
/// Reverse Video (DECSCNM).
43+
/// When set, the entire screen is displayed in reverse video.
44+
/// </summary>
45+
ReverseVideo = 5,
46+
4147
/// <summary>
4248
/// Origin Mode (DECOM).
4349
/// </summary>
@@ -58,6 +64,18 @@ public enum TerminalMode
5864
/// </summary>
5965
ShowCursor = 25,
6066

67+
/// <summary>
68+
/// National Replacement Character Set Mode (DECNRCM).
69+
/// When set, enables national replacement character sets.
70+
/// </summary>
71+
NationalCharset = 42,
72+
73+
/// <summary>
74+
/// Reverse Wraparound Mode.
75+
/// When set, allows backspace to wrap from column 0 to the previous line.
76+
/// </summary>
77+
ReverseWraparound = 45,
78+
6179
/// <summary>
6280
/// Application Keypad (DECNKM).
6381
/// </summary>

src/XTerm.NET/InputHandler.cs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,10 @@ public void HandleCsi(string identifier, Params parameters)
416416
CursorBackwardTab(parameters);
417417
break;
418418

419+
case CsiCommand.TabClear:
420+
TabClear(parameters);
421+
break;
422+
419423
case CsiCommand.DeviceAttributes:
420424
DeviceAttributes(parameters, isPrivate);
421425
break;
@@ -1065,6 +1069,25 @@ private void CursorBackwardTab(Params parameters)
10651069
}
10661070
}
10671071

1072+
private void TabClear(Params parameters)
1073+
{
1074+
// TBC - Tab Clear (CSI g)
1075+
// Ps = 0: Clear tab stop at current column (default)
1076+
// Ps = 3: Clear all tab stops
1077+
// Note: We use fixed tab stops, so this is acknowledged but has no effect
1078+
// A full implementation would maintain a list of custom tab stops
1079+
var mode = parameters.GetParam(0, 0);
1080+
switch (mode)
1081+
{
1082+
case 0:
1083+
// Clear current column tab stop - acknowledged but no action
1084+
break;
1085+
case 3:
1086+
// Clear all tab stops - acknowledged but no action
1087+
break;
1088+
}
1089+
}
1090+
10681091
private void DeviceAttributes(Params parameters, bool isPrivate)
10691092
{
10701093
// DA - Device Attributes (CSI c or CSI > c)
@@ -1519,19 +1542,45 @@ private void SetModeInternal(int mode, bool isPrivate)
15191542
_terminal.ApplicationCursorKeys = true;
15201543
break;
15211544

1545+
case TerminalMode.InsertMode:
1546+
// Mode 4: In DEC private mode context, this is SmoothScroll (DECSCLM)
1547+
// InsertMode and SmoothScroll share value 4 in the enum
1548+
// Smooth scroll is acknowledged but has no effect in modern terminals
1549+
break;
1550+
1551+
case TerminalMode.ReverseVideo:
1552+
_terminal.ReverseVideo = true;
1553+
break;
1554+
15221555
case TerminalMode.Origin:
15231556
_terminal.OriginMode = true;
15241557
_buffer.SetCursor(0, 0);
15251558
break;
15261559

15271560
case TerminalMode.Wraparound:
1561+
// Mode 7: Wraparound mode
1562+
// Wraparound and AutoWrapMode share value 7 in the enum
15281563
_terminal.Options.Wraparound = true;
15291564
break;
15301565

1566+
case TerminalMode.AutoRepeat:
1567+
// Auto repeat is typically always enabled in modern terminals
1568+
// This mode is acknowledged but has no effect
1569+
break;
1570+
15311571
case TerminalMode.ShowCursor:
15321572
_terminal.CursorVisible = true;
15331573
break;
15341574

1575+
case TerminalMode.NationalCharset:
1576+
// National replacement character set mode
1577+
// Acknowledged but typically no specific action needed for modern use
1578+
break;
1579+
1580+
case TerminalMode.ReverseWraparound:
1581+
_terminal.ReverseWraparound = true;
1582+
break;
1583+
15351584
case TerminalMode.AppKeypad:
15361585
_terminal.ApplicationKeypad = true;
15371586
break;
@@ -1683,19 +1732,43 @@ private void ResetModeInternal(int mode, bool isPrivate)
16831732
_terminal.ApplicationCursorKeys = false;
16841733
break;
16851734

1735+
case TerminalMode.InsertMode:
1736+
// Mode 4: In DEC private mode context, this is SmoothScroll (DECSCLM)
1737+
// Smooth scroll is acknowledged but has no effect in modern terminals
1738+
break;
1739+
1740+
case TerminalMode.ReverseVideo:
1741+
_terminal.ReverseVideo = false;
1742+
break;
1743+
16861744
case TerminalMode.Origin:
16871745
_terminal.OriginMode = false;
16881746
_buffer.SetCursor(0, 0);
16891747
break;
16901748

16911749
case TerminalMode.Wraparound:
1750+
// Mode 7: Wraparound mode
16921751
_terminal.Options.Wraparound = false;
16931752
break;
16941753

1754+
case TerminalMode.AutoRepeat:
1755+
// Auto repeat is typically always enabled in modern terminals
1756+
// This mode is acknowledged but has no effect
1757+
break;
1758+
16951759
case TerminalMode.ShowCursor:
16961760
_terminal.CursorVisible = false;
16971761
break;
16981762

1763+
case TerminalMode.NationalCharset:
1764+
// National replacement character set mode
1765+
// Acknowledged but typically no specific action needed for modern use
1766+
break;
1767+
1768+
case TerminalMode.ReverseWraparound:
1769+
_terminal.ReverseWraparound = false;
1770+
break;
1771+
16991772
case TerminalMode.AppKeypad:
17001773
_terminal.ApplicationKeypad = false;
17011774
break;

src/XTerm.NET/Terminal.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class Terminal
3838
public bool OriginMode { get; set; }
3939
public bool CursorVisible { get; set; }
4040
public bool ReverseWraparound { get; set; }
41+
public bool ReverseVideo { get; set; }
4142
public bool SendFocusEvents { get; set; }
4243
public bool Win32InputMode { get; set; }
4344

@@ -305,6 +306,7 @@ public void Reset()
305306
OriginMode = false;
306307
CursorVisible = true;
307308
ReverseWraparound = false;
309+
ReverseVideo = false;
308310
SendFocusEvents = false;
309311
EightBitInput = false;
310312
MetaSendsEscape = false; // Default is disabled

0 commit comments

Comments
 (0)