Skip to main content

yazi_widgets/input/actor/
casefy.rs

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