feat: add terminal session lifecycle

- add replaceable terminal session abstraction

- manage terminal modes on start and stop

- route runtime and example through terminal session
This commit is contained in:
chuan
2026-06-04 01:39:45 +08:00
parent 31766b2a78
commit e7b659fb8f
5 changed files with 605 additions and 128 deletions
+6 -10
View File
@@ -4,16 +4,14 @@ using TinyTUI.Input;
using TinyTUI.Overlay;
using TinyTUI.Rendering;
using TinyTUI.Runtime;
using TinyTUI.Stdio;
using TinyTUI.Stdout;
using TinyTUI.Terminal;
using TinyTUI.Text;
using var terminalInput = new ConsoleTerminalInput();
var terminalOutput = new ConsoleTerminalOutput();
using var terminal = new ConsoleTerminalSession();
var parser = new DefaultInputParser();
var textMeasurer = new TerminalTextMeasurer();
var renderer = new DifferentialRenderer(terminalOutput, textMeasurer);
using var runtime = new TuiRuntime(terminalInput, parser, renderer);
var renderer = new DifferentialRenderer(terminal, textMeasurer);
using var runtime = new TuiRuntime(terminal, parser, renderer);
var done = new ManualResetEventSlim();
var eventsText = new Text("最近事件:\n- 无");
@@ -109,7 +107,6 @@ AddAll(
runtime.Add(page);
runtime.SetFocus(input);
terminalOutput.ShowCursor();
var loaderTask = RunLoaderAsync(loader, runtime, loaderCancellation.Token);
@@ -122,9 +119,8 @@ finally
{
StopLoader(loaderCancellation, loaderTask);
runtime.Stop();
terminalOutput.ShowCursor();
terminalOutput.Write("\r\n");
terminalOutput.Flush();
terminal.Write("\r\n");
terminal.Flush();
}
static async Task RunLoaderAsync(Loader loader, ITuiRuntime runtime, CancellationToken cancellationToken)