start method

Future<void> start({
  1. String? shell,
  2. List<String> arguments = const <String>[],
  3. Map<String, String>? environment,
})

Starts a terminal subprocess.

Implementation

Future<void> start({
  String? shell,
  List<String> arguments = const <String>[],
  Map<String, String>? environment,
}) async {
  if (_running) {
    return;
  }

  _ensureTerminal();

  final resolvedShell = shell ?? defaultShell ?? _defaultShell();
  _activeShellLaunch = _freezeLaunch(
    GhosttyTerminalShellLaunch(
      label: _shellLabel(resolvedShell),
      shell: resolvedShell,
      arguments: arguments,
      environment: environment,
    ),
  );

  if (_canUsePtyBackend()) {
    final session = GhosttyTerminalPtySession(
      config: GhosttyTerminalPtySessionConfig(rows: _rows, cols: _cols),
    );
    _ptySession = session;
    _ptySessionSub = session.events.listen(_onPtyEvent);
    session.spawn(resolvedShell, args: arguments, environment: environment);
    _running = true;
    _markDirty();
    return;
  }

  final process = await _spawnProcess(
    resolvedShell,
    arguments,
    environment: environment,
  );
  _process = process;
  _running = true;
  _markDirty();

  _stdoutSub = process.stdout.listen(_onProcessBytes);
  _stderrSub = process.stderr.listen(_onProcessBytes);
  _exitSub = process.exitCode.asStream().listen((exitCode) {
    _running = false;
    appendDebugOutput('\n[process exited: $exitCode]\n');
    _markDirty();
  });
}