jjj 0.2.0

A modal interface for Jujutsu.
use std::ops::Range;

pub fn compute_sliding_window(
    item_length: usize,
    selection: usize,
    viewport_y: usize,
    viewport_height: usize,
    viewport_margin: usize,
) -> (usize, Range<usize>) {
    let computed_y = if item_length < viewport_height {
        0
    } else if selection < viewport_y + viewport_margin {
        selection.saturating_sub(viewport_margin)
    } else if viewport_y + viewport_height - viewport_margin - 1 < selection {
        selection + viewport_margin - viewport_height + 1
    } else {
        viewport_y
    };

    (
        computed_y,
        computed_y..usize::min(item_length, computed_y + viewport_height),
    )
}