updateFromEvent method

bool updateFromEvent(
  1. Event event
)

Updates capabilities based on an event.

Returns true if any capability changed.

Implementation

bool updateFromEvent(Event event) {
  if (event is KittyGraphicsEvent) {
    if (!hasKittyGraphics) {
      hasKittyGraphics = true;
      return true;
    }
  } else if (event is KeyboardEnhancementsEvent) {
    if (keyboardEnhancementFlags != event.flags) {
      keyboardEnhancementFlags = event.flags;
      return true;
    }
  } else if (event is ModifyOtherKeysEvent) {
    if (modifyOtherKeysMode != event.mode) {
      modifyOtherKeysMode = event.mode;
      return true;
    }
  } else if (event is PrimaryDeviceAttributesEvent) {
    final attrsChanged =
        primaryAttributes.length != event.attrs.length ||
        primaryAttributes.asMap().entries.any(
          (entry) => entry.value != event.attrs[entry.key],
        );
    primaryAttributes = event.attrs;
    // Attribute 4 is Sixel.
    final oldSixel = hasSixel;
    hasSixel = event.attrs.contains(4);
    return attrsChanged || oldSixel != hasSixel;
  } else if (event is ForegroundColorEvent) {
    if (foregroundColor != event.color) {
      foregroundColor = event.color;
      return true;
    }
  } else if (event is BackgroundColorEvent) {
    if (backgroundColor != event.color) {
      backgroundColor = event.color;
      return true;
    }
  } else if (event is CursorColorEvent) {
    if (cursorColor != event.color) {
      cursorColor = event.color;
      return true;
    }
  } else if (event is ColorPaletteEvent) {
    if (event.color != null) {
      if (palette[event.index] != event.color) {
        palette[event.index] = event.color!;
        return true;
      }
    }
  } else if (event is SecondaryDeviceAttributesEvent) {
    final attrsChanged =
        secondaryAttributes.length != event.attrs.length ||
        secondaryAttributes.asMap().entries.any(
          (entry) => entry.value != event.attrs[entry.key],
        );
    secondaryAttributes = event.attrs;
    return attrsChanged;
  } else if (event is TertiaryDeviceAttributesEvent) {
    if (tertiaryAttributes != event.value) {
      tertiaryAttributes = event.value;
      return true;
    }
  } else if (event is TerminalVersionEvent) {
    var changed = false;
    if (terminalVersion != event.name) {
      terminalVersion = event.name;
      changed = true;
    }

    final normalized = event.name.toLowerCase();
    if (!hasKittyGraphics &&
        (normalized.contains('kitty') ||
            normalized.contains('ghostty') ||
            normalized.contains('wezterm'))) {
      hasKittyGraphics = true;
      changed = true;
    }
    if (!hasITerm2 && normalized.contains('iterm')) {
      hasITerm2 = true;
      changed = true;
    }

    return changed;
  } else if (event is DarkColorSchemeEvent) {
    if (darkColorScheme != true) {
      darkColorScheme = true;
      return true;
    }
  } else if (event is LightColorSchemeEvent) {
    if (darkColorScheme != false) {
      darkColorScheme = false;
      return true;
    }
  }
  return false;
}