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