setSearchHighlights method

void setSearchHighlights(
  1. Buffer buffer,
  2. List<BufferRangeLine> ranges, {
  3. int currentIndex = 0,
})

Replaces all terminal search highlights in one controller update.

The supplied ranges are tracked with buffer anchors, so they remain attached to their matched text as the buffer is edited or reflowed.

Implementation

void setSearchHighlights(
  Buffer buffer,
  List<BufferRangeLine> ranges, {
  int currentIndex = 0,
}) {
  _disposeSearchHighlights();

  for (final range in ranges) {
    final normalized = range.normalized;
    if (normalized.begin.y < 0 ||
        normalized.begin.y >= buffer.lines.length ||
        normalized.end.y < 0 ||
        normalized.end.y >= buffer.lines.length) {
      continue;
    }

    _searchHighlights.add(
      TerminalSearchHighlight(
        p1: buffer.createAnchorFromOffset(normalized.begin),
        p2: buffer.createAnchorFromOffset(normalized.end),
      ),
    );
  }

  _currentSearchHighlight = switch (_searchHighlights.isEmpty) {
    true => -1,
    false => currentIndex.clamp(0, _searchHighlights.length - 1),
  };
  notifyListeners();
}