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