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