detect method

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

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