diff --git a/src/input.rs b/src/input.rs index 3dfafc6..4149b05 100644 --- a/src/input.rs +++ b/src/input.rs @@ -53,22 +53,47 @@ pub struct ModifierKeys { impl ModifierKeys { pub fn new() -> ModifierKeys { - ModifierKeys { alt: false, ctrl: false, shift: false } + ModifierKeys { + alt: false, + ctrl: false, + shift: false, + } + } +} + +pub fn backspace(buffer: &mut String, cursor_position: &mut usize, modifiers: &ModifierKeys) { + if modifiers.ctrl { + // Word backspace + // TODO: Clean up this messy expression + let buffer_chars: Vec = buffer.chars().collect(); + while !(buffer_chars[*cursor_position - 1] == ' ' + || buffer_chars[*cursor_position - 1] == '\n') + && *cursor_position > 1 + { + *cursor_position -= 1; + buffer.remove(*cursor_position); + } + // i shouldn't have to do this + *cursor_position -= 1; + buffer.remove(*cursor_position); + } else { + // Character backspace + buffer.remove(*cursor_position - 1); + *cursor_position -= 1; } } pub fn delete(buffer: &mut String, cursor_position: usize, modifiers: &ModifierKeys) { if modifiers.ctrl { loop { - let buffer_chars: Vec = buffer.chars() - .collect(); + let buffer_chars: Vec = buffer.chars().collect(); if cursor_position == buffer.len() { - break + break; } if !buffer_chars[cursor_position].is_whitespace() { buffer.remove(cursor_position); } else { - break + break; } } } else { diff --git a/src/main.rs b/src/main.rs index 326fbc2..3aa6a69 100644 --- a/src/main.rs +++ b/src/main.rs @@ -102,6 +102,17 @@ pub fn main() -> Result<(), String> { } } + // BACKSPACE key + Some(Keycode::Backspace) => { + if buffer.len() > 0 { + undo_timer = 0; + selection_anchor = None; + input::backspace(&mut buffer, &mut cursor_position, &modifier_keys); + + draw!(); + } + } + _ => (), }; @@ -158,20 +169,6 @@ pub fn main() -> Result<(), String> { draw!(); } - // BACKSPACE key - // Character backspace - Some(Keycode::Backspace) => { - if buffer.len() > 0 { - undo_timer = 0; - selection_anchor = None; - - buffer.remove(cursor_position - 1); - cursor_position -= 1; - - draw!(); - } - } - _ => (), } } @@ -220,28 +217,6 @@ pub fn main() -> Result<(), String> { draw!() } - // BACKSPACE key - // Word backspace - // TODO: Clean up this cursed expression - Some(Keycode::Backspace) => { - if buffer.len() > 0 { - undo_timer = 0; - selection_anchor = None; - - let buffer_chars: Vec = buffer.chars().collect(); - while !(buffer_chars[cursor_position - 1] == ' ' - || buffer_chars[cursor_position - 1] == '\n') - && cursor_position > 1 - { - buffer.remove(cursor_position - 1); - cursor_position -= 1; - } - buffer.remove(cursor_position - 1); - cursor_position -= 1; - - draw!() - } - } _ => (), } }