extract forward_delete into independent function

This commit is contained in:
Francis Chua 2023-11-09 18:38:45 +00:00 committed by sxyazi
parent a76664a6fa
commit 060ffd0411
No known key found for this signature in database

View file

@ -56,11 +56,17 @@ impl Input {
} }
match key { match key {
Key { code: KeyCode::Backspace, shift: false, ctrl: false, alt: false } => self.backspace(false), Key { code: KeyCode::Backspace, shift: false, ctrl: false, alt: false } => self.backspace(),
// Handle Emacs-style keybindings. // Handle Emacs-style keybindings.
Key { code: KeyCode::Char('a'), shift: false, ctrl: true, alt: false } => self.move_(isize::MIN), Key { code: KeyCode::Char('a'), shift: false, ctrl: true, alt: false } => {
Key { code: KeyCode::Char('e'), shift: false, ctrl: true, alt: false } => self.move_(isize::MAX), self.move_(isize::MIN)
Key { code: KeyCode::Char('d'), shift: false, ctrl: true, alt: false } => self.backspace(true), }
Key { code: KeyCode::Char('e'), shift: false, ctrl: true, alt: false } => {
self.move_(isize::MAX)
}
Key { code: KeyCode::Char('d'), shift: false, ctrl: true, alt: false } => {
self.forward_delete()
}
Key { code: KeyCode::Char('b'), shift: false, ctrl: false, alt: true } => self.backward(), Key { code: KeyCode::Char('b'), shift: false, ctrl: false, alt: true } => self.backward(),
Key { code: KeyCode::Char('f'), shift: false, ctrl: false, alt: true } => self.forward(false), Key { code: KeyCode::Char('f'), shift: false, ctrl: false, alt: true } => self.forward(false),
_ => false, _ => false,
@ -80,26 +86,29 @@ impl Input {
true true
} }
pub fn backspace(&mut self, forward_delete: bool) -> bool { pub fn forward_delete(&mut self) -> bool {
let snap = self.snaps.current_mut(); let snap = self.snaps.current_mut();
if forward_delete { // Return false when there is no character on the right to delete.
// Return false when there is no character on the right to delete. // Note that the cursor can be at index `snap.value.len()` when in
// Note that the cursor can be at index `snap.value.len()` when in // edit mode.
// edit mode. if snap.cursor > snap.value.len() - 1 {
if snap.cursor > snap.value.len() - 1 { return false;
return false;
} else {
snap.value.remove(snap.idx(snap.cursor).unwrap());
}
self.move_(0);
} else { } else {
if snap.cursor < 1 { snap.value.remove(snap.idx(snap.cursor).unwrap());
return false;
} else {
snap.value.remove(snap.idx(snap.cursor - 1).unwrap());
}
self.move_(-1);
} }
self.move_(0);
self.flush_value();
true
}
pub fn backspace(&mut self) -> bool {
let snap = self.snaps.current_mut();
if snap.cursor < 1 {
return false;
} else {
snap.value.remove(snap.idx(snap.cursor - 1).unwrap());
}
self.move_(-1);
self.flush_value(); self.flush_value();
true true