yazi_widgets/input/commands/
backward.rs1use 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}