updateFromEvent method
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;
}