start method
Starts the terminal session.
This enters raw mode, initializes the renderer, starts listening for input and resize events, and queries terminal capabilities.
Implementation
Future<void> start() async {
if (_running) return;
_running = true;
// Enter raw mode.
if (_input == stdin) {
try {
if (stdin.hasTerminal) {
stdin.echoMode = false;
stdin.lineMode = false;
}
} catch (_) {}
}
// Handle SIGINT to ensure terminal state is restored.
_sigintSubscription = ProcessSignal.sigint.watch().listen((_) {
stop();
exit(0);
});
_reader.start();
_readerSubscription = _reader.events.listen((event) {
if (event is WindowSizeEvent) {
resize(event.width, event.height);
}
capabilities.updateFromEvent(event);
_eventController.add(event);
});
_winch.start();
_winchSubscription = _winch.stream.listen((_) async {
final size = _winch.getWindowSize();
_eventController.add(
WindowSizeEvent(
width: size.cells.width,
height: size.cells.height,
widthPx: size.pixels.width,
heightPx: size.pixels.height,
),
);
});
// Initial size.
final size = _winch.getWindowSize();
_buf.resize(size.cells.width, size.cells.height);
_renderer.resize(size.cells.width, size.cells.height);
_eventController.add(
WindowSizeEvent(
width: size.cells.width,
height: size.cells.height,
widthPx: size.pixels.width,
heightPx: size.pixels.height,
),
);
// Query capabilities.
queryCapabilities();
}