yazi_widgets/input/actor/
casefy.rs1use 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}