Compare commits

..

2 Commits

Author SHA1 Message Date
korin d01e06fbc0 idk 3 years ago
korin a27ec9d267 moved backspace functions 3 years ago
  1. 1
      TODO.org
  2. 47
      src/input.rs
  3. 56
      src/main.rs

@ -10,6 +10,7 @@
* [X] Start to end of document * [X] Start to end of document
* [ ] Confine to line unless CTRL is pressed * [ ] Confine to line unless CTRL is pressed
- [ ] Mouse input - [ ] Mouse input
- [ ] [[./src/main.rs::ConfigurableInput][Make keyboard input configurable instead of hardcoded]]
* Editing [2/7] * Editing [2/7]
- [X] Type text - [X] Type text

@ -16,6 +16,8 @@ mod keybinds {
Redo, Redo,
NewLines, NewLines,
DeleteLines, DeleteLines,
TabForward,
TabBackward,
} }
pub(super) enum Movement { pub(super) enum Movement {
@ -53,22 +55,57 @@ pub struct ModifierKeys {
impl ModifierKeys { impl ModifierKeys {
pub fn new() -> ModifierKeys { pub fn new() -> ModifierKeys {
ModifierKeys { alt: false, ctrl: false, shift: false } ModifierKeys {
alt: false,
ctrl: false,
shift: false,
}
}
}
pub fn tab(buffer: &mut String, cursor_position: &mut usize, modifiers: &ModifierKeys) {
if modifiers.shift {
println!("unimplemented back-tab");
} else {
// for _ in 0..4 {
buffer.insert_str(*cursor_position, " ");
*cursor_position += 4;
// }
}
}
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<char> = 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);
}
*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) { pub fn delete(buffer: &mut String, cursor_position: usize, modifiers: &ModifierKeys) {
if modifiers.ctrl { if modifiers.ctrl {
loop { loop {
let buffer_chars: Vec<char> = buffer.chars() let buffer_chars: Vec<char> = buffer.chars().collect();
.collect();
if cursor_position == buffer.len() { if cursor_position == buffer.len() {
break break;
} }
if !buffer_chars[cursor_position].is_whitespace() { if !buffer_chars[cursor_position].is_whitespace() {
buffer.remove(cursor_position); buffer.remove(cursor_position);
} else { } else {
break break;
} }
} }
} else { } else {

@ -64,7 +64,7 @@ pub fn main() -> Result<(), String> {
draw!(); draw!();
'mainloop: loop { 'mainloop: loop {
// TODO: Make this completely user-configurable instead of hardcoded // TODO: <<ConfigurableInput>>
for event in sdl_context.event_pump()?.poll_iter() { for event in sdl_context.event_pump()?.poll_iter() {
match event { match event {
Event::Window { win_event, .. } => { Event::Window { win_event, .. } => {
@ -102,6 +102,24 @@ 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!();
}
}
Some(Keycode::Tab) => {
undo_timer = 0;
input::tab(&mut buffer, &mut cursor_position, &modifier_keys);
draw!();
}
_ => (), _ => (),
}; };
@ -158,20 +176,6 @@ pub fn main() -> Result<(), String> {
draw!(); 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 +224,6 @@ pub fn main() -> Result<(), String> {
draw!() 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<char> = 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!()
}
}
_ => (), _ => (),
} }
} }

Loading…
Cancel
Save