Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Terminal.Gui/Drivers/EscSeqUtils/EscSeqUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1461,7 +1461,7 @@ internal static KeyCode MapKey (ConsoleKeyInfo keyInfo)
// Handle control keys whose VK codes match the related ASCII value (those below ASCII 33) like ESC
if (keyInfo.Key != ConsoleKey.None && Enum.IsDefined (typeof (KeyCode), (uint)keyInfo.Key))
{
if (keyInfo.Modifiers.HasFlag (ConsoleModifiers.Control) && keyInfo.Key == ConsoleKey.I)
if (keyInfo is { Modifiers: ConsoleModifiers.Control, Key: ConsoleKey.I })
{
return KeyCode.Tab;
}
Expand Down
16 changes: 16 additions & 0 deletions Terminal.Gui/Drivers/V2/NetInput.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,23 @@ protected override IEnumerable<ConsoleKeyInfo> Read ()
}
}

private void FlushConsoleInput ()
{
if (!ConsoleDriver.RunningUnitTests)
{
while (Console.KeyAvailable)
{
Console.ReadKey (intercept: true);
}
}
}

/// <inheritdoc/>
public override void Dispose ()
{
base.Dispose ();

// Disable mouse events first
Console.Out.Write (EscSeqUtils.CSI_DisableMouseEvents);

//Disable alternative screen buffer.
Expand All @@ -83,5 +96,8 @@ public override void Dispose ()
Console.Out.Write (EscSeqUtils.CSI_ShowCursor);

_adjustConsole?.Cleanup ();

// Flush any pending input so no stray events appear
FlushConsoleInput ();
}
}
53 changes: 38 additions & 15 deletions Terminal.Gui/Drivers/V2/NetOutput.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,24 +54,31 @@ public Size GetWindowSize ()
/// <inheritdoc/>
protected override void AppendOrWriteAttribute (StringBuilder output, Attribute attr, TextStyle redrawTextStyle)
{
EscSeqUtils.CSI_AppendForegroundColorRGB (
output,
attr.Foreground.R,
attr.Foreground.G,
attr.Foreground.B
);

EscSeqUtils.CSI_AppendBackgroundColorRGB (
output,
attr.Background.R,
attr.Background.G,
attr.Background.B
);
if (Application.Force16Colors)
{
output.Append (EscSeqUtils.CSI_SetForegroundColor (attr.Foreground.GetAnsiColorCode ()));
output.Append (EscSeqUtils.CSI_SetBackgroundColor (attr.Background.GetAnsiColorCode ()));
}
else
{
EscSeqUtils.CSI_AppendForegroundColorRGB (
output,
attr.Foreground.R,
attr.Foreground.G,
attr.Foreground.B
);

EscSeqUtils.CSI_AppendBackgroundColorRGB (
output,
attr.Background.R,
attr.Background.G,
attr.Background.B
);
}

EscSeqUtils.CSI_AppendTextStyleChange (output, redrawTextStyle, attr.Style);
}


/// <inheritdoc />
protected override void Write (StringBuilder output)
{
Expand Down Expand Up @@ -116,9 +123,25 @@ public void Dispose ()
}


private EscSeqUtils.DECSCUSR_Style? _currentDecscusrStyle;

/// <inheritdoc cref="IConsoleOutput.SetCursorVisibility"/>
public override void SetCursorVisibility (CursorVisibility visibility)
{
Console.Out.Write (visibility == CursorVisibility.Default ? EscSeqUtils.CSI_ShowCursor : EscSeqUtils.CSI_HideCursor);
if (visibility != CursorVisibility.Invisible)
{
if (_currentDecscusrStyle is null || _currentDecscusrStyle != (EscSeqUtils.DECSCUSR_Style)(((int)visibility >> 24) & 0xFF))
{
_currentDecscusrStyle = (EscSeqUtils.DECSCUSR_Style)(((int)visibility >> 24) & 0xFF);

Write (EscSeqUtils.CSI_SetCursorStyle ((EscSeqUtils.DECSCUSR_Style)_currentDecscusrStyle));
}

Write (EscSeqUtils.CSI_ShowCursor);
}
else
{
Write (EscSeqUtils.CSI_HideCursor);
}
}
}
Loading