yazi_widgets/input/commands/
replace.rs

1use 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}