yazi_widgets/input/commands/
casefy.rs

1use std::ops::Range;
2
3use anyhow::Result;
4use yazi_macro::{act, render, succ};
5use yazi_parser::input::CasefyOpt;
6use yazi_shared::data::Data;
7
8use crate::input::{Input, op::InputOp};
9
10impl Input {
11	pub fn casefy(&mut self, opt: CasefyOpt) -> Result<Data> {
12		let snap = self.snap_mut();
13		if !matches!(snap.op, InputOp::Select(_)) {
14			succ!();
15		}
16
17		let range = snap.op.range(snap.cursor, true).unwrap();
18		let Range { start, end } = snap.idx(range.start)..snap.idx(range.end);
19
20		let (start, end) = (start.unwrap(), end.unwrap());
21		let casefied = opt.transform(&snap.value[start..end]);
22
23		snap.value.replace_range(start..end, &casefied);
24		snap.op = InputOp::None;
25		snap.cursor = range.start;
26		self.snaps.tag(self.limit).then(|| self.flush_value());
27
28		act!(r#move, self)?;
29		succ!(render!());
30	}
31}