Files
FileTime2/src/Library/TerminalUI/ConsoleDrivers/XTermDriver.cs
2023-08-16 19:21:50 +02:00

67 lines
1.5 KiB
C#

using TerminalUI.Color;
using TerminalUI.Models;
using ConsoleColor = TerminalUI.Color.ConsoleColor;
namespace TerminalUI.ConsoleDrivers;
public sealed class XTermDriver : DotnetDriver
{
private Position _initialCursorPosition;
public XTermDriver()
{
SupportsAnsiEscapeSequence = true;
}
public override bool Init()
{
_initialCursorPosition = GetCursorPosition();
Write("\x1b[?1047h");
var isInitSuccessful = _initialCursorPosition == GetCursorPosition();
if (isInitSuccessful)
{
Clear();
}
return isInitSuccessful;
}
public override void Dispose()
{
Write("\x1b[?1047l");
SetCursorPosition(_initialCursorPosition);
}
public override void ResetStyle()
{
Write("\x1b[0m");
}
public override void SetBackgroundColor(IColor background)
{
if (background == SpecialColor.None) return;
if (background is ConsoleColor consoleColor)
{
Console.BackgroundColor = consoleColor.Color;
}
else
{
Write(background.ToConsoleColor());
}
}
public override void SetForegroundColor(IColor foreground)
{
if (foreground == SpecialColor.None) return;
if (foreground is ConsoleColor consoleColor)
{
Console.ForegroundColor = consoleColor.Color;
}
else
{
Write(foreground.ToConsoleColor());
}
}
}