start method

Future<void> start({
  1. bool handleSignals = true,
})

Starts the terminal session.

This enters raw mode, initializes the renderer, starts listening for input and resize events, and queries terminal capabilities.

If handleSignals is true (default), installs a SIGINT handler that restores terminal state and exits the process.

Implementation

Future<void> start({bool handleSignals = true}) 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.
  if (handleSignals) {
    _sigintSubscription = ProcessSignal.sigint.watch().listen((_) async {
      await 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();
}