yazi_widgets/input/commands/
backward.rs

1use anyhow::Result;
2use yazi_macro::{act, succ};
3use yazi_parser::input::BackwardOpt;
4use yazi_shared::{CharKind, data::Data};
5
6use crate::input::Input;
7
8impl Input {
9	pub fn backward(&mut self, opt: BackwardOpt) -> Result<Data> {
10		let snap = self.snap();
11		if snap.cursor == 0 {
12			return act!(r#move, self);
13		}
14
15		let idx = snap.idx(snap.cursor).unwrap_or(snap.len());
16		let mut it = snap.value[..idx].chars().rev().enumerate();
17		let mut prev = CharKind::new(it.next().unwrap().1);
18		for (i, c) in it {
19			let k = CharKind::new(c);
20			if prev != CharKind::Space && prev.vary(k, opt.far) {
21				return act!(r#move, self, -(i as isize));
22			}
23			prev = k;
24		}
25
26		if prev != CharKind::Space {
27			act!(r#move, self, -(snap.len() as isize))?;
28		}
29		succ!();
30	}
31}