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