Skip to content

Commit

Permalink
Decouple drivers from terminal sequence construction.
Browse files Browse the repository at this point in the history
Also, refactor some core types to make unit testing more practical, e.g. you
can now create a custom VirtualTerminal.

Fixes #22.
Fixes #19.
Fixes #32.
  • Loading branch information
alexrp committed Nov 28, 2021
1 parent aa8bf20 commit fd39193
Show file tree
Hide file tree
Showing 33 changed files with 1,095 additions and 851 deletions.
307 changes: 0 additions & 307 deletions src/core/Drivers/TerminalDriver.Sequences.cs

This file was deleted.

2 changes: 0 additions & 2 deletions src/core/Drivers/TerminalDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ public TerminalSize Size

readonly object _rawLock = new();

readonly object _sequenceLock = new();

readonly ManualResetEventSlim _event = new();

[SuppressMessage("Style", "IDE0052")]
Expand Down
57 changes: 57 additions & 0 deletions src/core/SystemVirtualTerminal.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using System.Drivers;
using System.Drivers.Unix;
using System.Drivers.Windows;

namespace System;

public sealed class SystemVirtualTerminal : VirtualTerminal
{
public override event Action<TerminalSize>? Resize
{
add => _driver.Resize += value;
remove => _driver.Resize -= value;
}

public override event Action<TerminalSignalContext>? Signal
{
add => _driver.Signal += value;
remove => _driver.Signal -= value;
}

public static SystemVirtualTerminal Instance { get; } = new();

public override TerminalReader StdIn => _driver.StdIn;

public override TerminalWriter StdOut => _driver.StdOut;

public override TerminalWriter StdError => _driver.StdError;

public override bool IsRawMode => _driver.IsRawMode;

public override TerminalSize Size => _driver.Size;

readonly TerminalDriver _driver =
OperatingSystem.IsLinux() ? LinuxTerminalDriver.Instance :
OperatingSystem.IsMacOS() ? MacOSTerminalDriver.Instance :
OperatingSystem.IsWindows() ? WindowsTerminalDriver.Instance :
throw new TerminalException("This platform is not supported.");

SystemVirtualTerminal()
{
}

public override void GenerateSignal(TerminalSignal signal)
{
_driver.GenerateSignal(signal);
}

public override void EnableRawMode()
{
_driver.EnableRawMode();
}

public override void DisableRawMode()
{
_driver.DisableRawMode();
}
}
Loading

0 comments on commit fd39193

Please sign in to comment.