67 lines
1.5 KiB
C#
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());
|
|
}
|
|
}
|
|
} |