mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-06-19 13:28:16 +08:00
56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using System;
|
|
using Spectre.Console.Rendering;
|
|
|
|
namespace Spectre.Console.Internal
|
|
{
|
|
internal sealed class AnsiCursor : IAnsiConsoleCursor
|
|
{
|
|
private readonly AnsiBackend _renderer;
|
|
|
|
public AnsiCursor(AnsiBackend renderer)
|
|
{
|
|
_renderer = renderer ?? throw new ArgumentNullException(nameof(renderer));
|
|
}
|
|
|
|
public void Show(bool show)
|
|
{
|
|
if (show)
|
|
{
|
|
_renderer.Write(Segment.Control("\u001b[?25h"));
|
|
}
|
|
else
|
|
{
|
|
_renderer.Write(Segment.Control("\u001b[?25l"));
|
|
}
|
|
}
|
|
|
|
public void Move(CursorDirection direction, int steps)
|
|
{
|
|
if (steps == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (direction)
|
|
{
|
|
case CursorDirection.Up:
|
|
_renderer.Write(Segment.Control($"\u001b[{steps}A"));
|
|
break;
|
|
case CursorDirection.Down:
|
|
_renderer.Write(Segment.Control($"\u001b[{steps}B"));
|
|
break;
|
|
case CursorDirection.Right:
|
|
_renderer.Write(Segment.Control($"\u001b[{steps}C"));
|
|
break;
|
|
case CursorDirection.Left:
|
|
_renderer.Write(Segment.Control($"\u001b[{steps}D"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void SetPosition(int column, int line)
|
|
{
|
|
_renderer.Write(Segment.Control($"\u001b[{line};{column}H"));
|
|
}
|
|
}
|
|
} |