call method

  1. @override
String? call(
  1. TerminalKeyboardEvent event
)
override

Implementation

@override
String? call(TerminalKeyboardEvent event) {
  if (event.type == TerminalKeyEventType.release) {
    return null;
  }
  if (!event.ctrl || event.alt) {
    return null;
  }

  final key = event.key;
  if (!event.shift &&
      key.index >= TerminalKey.keyA.index &&
      key.index <= TerminalKey.keyZ.index) {
    final input = key.index - TerminalKey.keyA.index + 1;
    return String.fromCharCode(input);
  }

  final text = event.text;
  final textCodePoint = switch (text?.runes.toList(growable: false)) {
    [final codePoint] => codePoint,
    _ => null,
  };
  final control = switch ((key, textCodePoint)) {
    (TerminalKey.space, _) || (_, 0x20) => 0x00,
    (TerminalKey.bracketLeft, _) || (_, 0x5B) => 0x1B,
    (TerminalKey.backslash, _) || (TerminalKey.intlBackslash, _) => 0x1C,
    (_, 0x5C) => 0x1C,
    (TerminalKey.bracketRight, _) || (_, 0x5D) => 0x1D,
    (TerminalKey.digit6, _) || (_, 0x5E) => 0x1E,
    (TerminalKey.slash, _) ||
    (TerminalKey.minus, _) ||
    (_, 0x2F) ||
    (_, 0x5F) =>
      0x1F,
    _ => null,
  };
  if (control == null) return null;
  return String.fromCharCode(control);
}