Parent: #77
Summary
Final integration: wire up the new IPlatformConsole abstraction into TerminaApplication and deprecate/remove the old ConsoleInputSource.
Files to Modify
src/Termina/TerminaApplication.cs
src/Termina/Terminal/AnsiTerminal.cs
src/Termina/Input/ConsoleInputSource.cs (deprecate or remove)
Files to Create
src/Termina/Input/PlatformInputSource.cs
Changes
TerminaApplication
public class TerminaApplication
{
private readonly IPlatformConsole _console;
public TerminaApplication()
{
_console = PlatformConsoleFactory.Create();
_console.Initialize();
}
// Use _console.Resized observable instead of polling
// Use new PlatformInputSource instead of ConsoleInputSource
}
PlatformInputSource
public sealed class PlatformInputSource : IInputSource
{
private readonly IPlatformConsole _console;
public async Task RunAsync(ChannelWriter<object> writer, CancellationToken ct)
{
_console.Resized.Subscribe(size =>
writer.TryWrite(new ResizeEvent(size.Width, size.Height)));
while (!ct.IsCancellationRequested)
{
var input = await _console.ReadInputAsync(ct);
if (input is KeyEvent ke)
await writer.WriteAsync(new KeyPressed(ke.KeyInfo), ct);
}
}
}
AnsiTerminal
Consider delegating output to IPlatformConsole.Write()/Flush() for consistency.
Migration Path
- Add
[Obsolete] attribute to ConsoleInputSource
- Update demos to use new system
- Ensure all tests pass
- Remove in next major version (or keep as internal fallback)
Acceptance Criteria
Parent: #77
Summary
Final integration: wire up the new
IPlatformConsoleabstraction intoTerminaApplicationand deprecate/remove the oldConsoleInputSource.Files to Modify
src/Termina/TerminaApplication.cssrc/Termina/Terminal/AnsiTerminal.cssrc/Termina/Input/ConsoleInputSource.cs(deprecate or remove)Files to Create
src/Termina/Input/PlatformInputSource.csChanges
TerminaApplication
PlatformInputSource
AnsiTerminal
Consider delegating output to
IPlatformConsole.Write()/Flush()for consistency.Migration Path
[Obsolete]attribute toConsoleInputSourceAcceptance Criteria