detectTerminal function

String? detectTerminal()

Detect the terminal / editor hosting the CLI.

Implementation

String? detectTerminal() {
  final env = Platform.environment;

  if (env['CURSOR_TRACE_ID'] != null) return 'cursor';
  final askpass = env['VSCODE_GIT_ASKPASS_MAIN'];
  if (askpass != null) {
    if (askpass.contains('cursor')) return 'cursor';
    if (askpass.contains('windsurf')) return 'windsurf';
    if (askpass.contains('antigravity')) return 'antigravity';
  }

  final bundleId = env['__CFBundleIdentifier']?.toLowerCase();
  if (bundleId != null) {
    if (bundleId.contains('vscodium')) return 'codium';
    if (bundleId.contains('windsurf')) return 'windsurf';
    if (bundleId.contains('com.google.android.studio')) return 'androidstudio';
    for (final ide in jetbrainsIdes) {
      if (bundleId.contains(ide)) return ide;
    }
  }

  if (env['VisualStudioVersion'] != null) return 'visualstudio';

  if (env['TERMINAL_EMULATOR'] == 'JetBrains-JediTerm') {
    return 'pycharm';
  }

  if (env['TERM'] == 'xterm-ghostty') return 'ghostty';
  if (env['TERM'] != null && env['TERM']!.contains('kitty')) return 'kitty';

  if (env['TERM_PROGRAM'] != null) return env['TERM_PROGRAM'];

  if (env['TMUX'] != null) return 'tmux';
  if (env['STY'] != null) return 'screen';

  if (env['KONSOLE_VERSION'] != null) return 'konsole';
  if (env['GNOME_TERMINAL_SERVICE'] != null) return 'gnome-terminal';
  if (env['XTERM_VERSION'] != null) return 'xterm';
  if (env['VTE_VERSION'] != null) return 'vte-based';
  if (env['TERMINATOR_UUID'] != null) return 'terminator';
  if (env['KITTY_WINDOW_ID'] != null) return 'kitty';
  if (env['ALACRITTY_LOG'] != null) return 'alacritty';
  if (env['TILIX_ID'] != null) return 'tilix';

  if (env['WT_SESSION'] != null) return 'windows-terminal';
  if (env['SESSIONNAME'] != null && env['TERM'] == 'cygwin') return 'cygwin';
  if (env['MSYSTEM'] != null) return env['MSYSTEM']!.toLowerCase();
  if (env['ConEmuANSI'] != null ||
      env['ConEmuPID'] != null ||
      env['ConEmuTask'] != null) {
    return 'conemu';
  }

  if (env['WSL_DISTRO_NAME'] != null) return 'wsl-${env["WSL_DISTRO_NAME"]}';

  if (_isSSHSession()) return 'ssh-session';

  if (env['TERM'] != null) {
    final term = env['TERM']!;
    if (term.contains('alacritty')) return 'alacritty';
    if (term.contains('rxvt')) return 'rxvt';
    if (term.contains('termite')) return 'termite';
    return term;
  }

  if (!stdout.hasTerminal) return 'non-interactive';

  return null;
}