detect method
Performs the capability detection process
Implementation
@override
Future<void> detect() async {
final terminfo = await Terminfo.tryGet();
if (terminfo == null) return;
// -------------------------
// Colors
// -------------------------
final colors = terminfo.numerics['colors'];
if (colors != null) {
if (colors >= 16) supportedCaps.add(Capability.standardColors);
if (colors >= 256) supportedCaps.add(Capability.extendedColors);
// trueColors cannot be inferred from terminfo
}
final keys = <String>{}
..addAll(terminfo.booleans)
..addAll(terminfo.strings.keys)
..addAll(terminfo.numerics.keys);
// -------------------------
// Mouse support
// -------------------------
if (keys.contains('km') ||
keys.contains('kmous') ||
keys.contains('smkx') || // keypad enable often needed for mouse
keys.contains('xenl')) {
supportedCaps.add(Capability.mouse);
}
// -------------------------
// Text decorations
// -------------------------
if (keys.contains('blink') ||
keys.contains('smpch') ||
keys.contains('blink')) {
supportedCaps.add(Capability.textBlinkTextDecoration);
}
if (keys.contains('bold') || keys.contains('intense')) {
supportedCaps.add(Capability.intenseTextDecoration);
}
if (keys.contains('faint')) {
supportedCaps.add(Capability.faintTextDecoration);
}
if (keys.contains('sitm')) {
supportedCaps.add(Capability.italicTextDecoration);
}
if (keys.contains('smul')) {
supportedCaps.add(Capability.underlineTextDecoration);
}
if (keys.contains('smulx')) {
supportedCaps.add(Capability.doubleUnderlineTextDecoration);
}
if (keys.contains('crossout')) {
supportedCaps.add(Capability.crossedOutTextDecoration);
}
if (keys.contains('blink') || keys.contains('smpch')) {
supportedCaps.add(Capability.textBlinkTextDecoration);
}
}