Skip to content

Wire up platform console and deprecate ConsoleInputSource #83

@Aaronontheweb

Description

@Aaronontheweb

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

  1. Add [Obsolete] attribute to ConsoleInputSource
  2. Update demos to use new system
  3. Ensure all tests pass
  4. Remove in next major version (or keep as internal fallback)

Acceptance Criteria

  • TerminaApplication uses IPlatformConsole
  • PlatformInputSource replaces ConsoleInputSource
  • All existing demos work
  • All tests pass
  • ConsoleInputSource marked obsolete
  • No breaking API changes for external consumers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions