handleMsg method

  1. @override
bool handleMsg(
  1. Msg msg,
  2. StartupProbeContext ctx
)
override

Handles terminal response messages during probing.

Implementation

@override
bool handleMsg(Msg msg, StartupProbeContext ctx) {
  if (!_active) return false;
  if (_done.isCompleted) return false;

  if (msg is! UvEventMsg) return false;
  final ev = msg.event;
  if (ev is! uvev.CursorPositionEvent) return false;

  final term = ctx.terminal;

  if (_stage == 0) {
    _startX = ev.x;
    _startY = ev.y;
    _stage = 1;

    term.write(probeEmoji);
    term.write(Ansi.requestExtendedCursorPosition);
    unawaited(term.flush());
    return true;
  }

  if (_stage == 1) {
    final sx = _startX;
    final sy = _startY;
    if (sx != null && sy != null && ev.y == sy) {
      final delta = ev.x - sx;
      if (delta == 1 || delta == 2) {
        uni_width.setEmojiPresentationWidth(delta);
      }
    }
    _done.complete();
    return true;
  }

  return false;
}