detect method

  1. @override
Future<void> detect()
override

Performs the capability detection process

Implementation

@override
Future<void> detect() async {
  if (!Platform.isWindows) return;

  final isWin10OrNewer = _isWindows10OrNewer();
  final isWindowsTerminal = Platform.environment.containsKey('WT_SESSION');
  final isConEmu = Platform.environment.containsKey('ConEmuANSI');

  // -------------------------
  // Colors
  // -------------------------
  supportedCaps.add(Capability.standardColors);

  if (isWin10OrNewer || isConEmu) {
    supportedCaps.add(Capability.extendedColors);
  } else {
    assumedCaps.add(Capability.extendedColors);
    unsupportedCaps.add(Capability.trueColors);
  }

  // -------------------------
  // Mouse support
  // -------------------------

  if (isWindowsTerminal || isConEmu) {
    supportedCaps.add(Capability.mouse);
  } else if (isWin10OrNewer) {
    assumedCaps.add(Capability.mouse);
  } else {
    unsupportedCaps.add(Capability.mouse);
  }

  // -------------------------
  // Cursor blinking
  // -------------------------

  unsupportedCaps.add(Capability.cursorBlinkingDisable);

  // -------------------------
  // Text decorations
  // -------------------------

  supportedCaps.add(Capability.intenseTextDecoration);

  if (isConEmu || isWindowsTerminal) {
    supportedCaps.add(Capability.italicTextDecoration);
    supportedCaps.add(Capability.underlineTextDecoration);
  } else if (isWin10OrNewer) {
    assumedCaps.add(Capability.italicTextDecoration);
    assumedCaps.add(Capability.underlineTextDecoration);
  } else {
    unsupportedCaps.add(Capability.italicTextDecoration);
    unsupportedCaps.add(Capability.underlineTextDecoration);
  }

  // Double underline is not supported
  unsupportedCaps.add(Capability.doubleUnderlineTextDecoration);

  if (isConEmu || isWindowsTerminal) {
    supportedCaps.add(Capability.crossedOutTextDecoration);
  } else if (!isWindowsTerminal) {
    unsupportedCaps.add(Capability.crossedOutTextDecoration);
  }

  if (isWin10OrNewer) {
    assumedCaps.add(Capability.faintTextDecoration);
  } else if (!isConEmu) {
    unsupportedCaps.add(Capability.faintTextDecoration);
  }

  // Blinking is not reliably supported
  unsupportedCaps.add(Capability.textBlinkTextDecoration);
}