yazi_core/input/
op.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use std::ops::Range;

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum InputOp {
	#[default]
	None,
	Select(usize),
	Delete(bool, bool, usize), // cut, insert, start
	Yank(usize),
}

impl InputOp {
	#[inline]
	pub(super) fn start(&self) -> Option<usize> {
		match self {
			InputOp::None => None,
			InputOp::Select(s) => Some(*s),
			InputOp::Delete(.., s) => Some(*s),
			InputOp::Yank(s) => Some(*s),
		}
	}

	#[inline]
	pub(super) fn range(&self, cursor: usize, include: bool) -> Option<Range<usize>> {
		self
			.start()
			.map(|s| if s <= cursor { (s, cursor) } else { (cursor, s) })
			.map(|(s, e)| s..e + include as usize)
	}
}