yazi_widgets/input/actor/
replace.rs1use anyhow::Result;
2use yazi_macro::{render, succ};
3use yazi_shared::{data::Data, replace_cow};
4
5use crate::input::{Input, InputMode, op::InputOp};
6
7impl Input {
8 pub fn replace(&mut self, _: ()) -> Result<Data> {
9 let snap = self.snap_mut();
10 if snap.mode == InputMode::Normal {
11 snap.op = InputOp::None;
12 snap.mode = InputMode::Replace;
13 render!();
14 }
15 succ!();
16 }
17
18 pub fn replace_str(&mut self, s: &str) -> Result<Data> {
19 let s = replace_cow(replace_cow(s, "\r", " "), "\n", " ");
20
21 let snap = self.snap_mut();
22 snap.mode = InputMode::Normal;
23
24 let start = snap.idx(snap.cursor).unwrap();
25 let mut it = snap.value[start..].char_indices();
26 match (it.next(), it.next()) {
27 (None, _) => {}
28 (Some(_), None) => snap.value.replace_range(start..snap.len(), &s),
29 (Some(_), Some((len, _))) => snap.value.replace_range(start..start + len, &s),
30 }
31
32 self.snaps.tag(self.limit).then(|| self.flush_type());
33 succ!(render!());
34 }
35}