magi-code 0.63.4

Repository-aware CLI coding agent for terminal work
Documentation
use ratatui::{buffer::Buffer, layout::Rect};

pub(super) fn find_text(buffer: &Buffer, needle: &str) -> Option<(u16, u16)> {
    find_text_in_area(buffer, buffer.area, needle)
}

pub(super) fn find_text_in_area(buffer: &Buffer, area: Rect, needle: &str) -> Option<(u16, u16)> {
    let needle = needle
        .chars()
        .map(|character| character.to_string())
        .collect::<Vec<_>>();
    for y in area.y..area.y + area.height {
        for x in area.x..area.x + area.width {
            if needle.iter().enumerate().all(|(offset, symbol)| {
                let x = x + offset as u16;
                x < area.x + area.width && buffer[(x, y)].symbol() == symbol
            }) {
                return Some((x, y));
            }
        }
    }
    None
}