broot/command/sel.rs
1/// compute a new selection index for the given list len,
2/// taking into account whether we should cycle or not
3#[must_use]
4pub fn move_sel(
5 selection: usize,
6 len: usize,
7 d: i32, // displacement
8 cycle: bool,
9) -> usize {
10 if len == 0 {
11 return 0;
12 }
13 let ns = (selection as i32) + d;
14 if ns < 0 {
15 if cycle { len - 1 } else { 0 }
16 } else if ns >= len as i32 {
17 if cycle { 0 } else { len - 1 }
18 } else {
19 ns as usize
20 }
21}