start method
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();
});
}