setSearchHighlights method
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();
}