Compare commits

..

No commits in common. 'd01e06fbc0addd0510aaf5fa5fed5c804b37b2f7' and 'b02c1deb79ced20138f60dd58a919b1dd367ce89' have entirely different histories.

  1. 1
      TODO.org
  2. 47
      src/input.rs
  3. 56
      src/main.rs

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

@ -16,8 +16,6 @@ mod keybinds {
Redo,
NewLines,
DeleteLines,
TabForward,
TabBackward,
}
pub(super) enum Movement {
@ -55,57 +53,22 @@ pub struct ModifierKeys {
impl ModifierKeys {
pub fn new() -> ModifierKeys {
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;
ModifierKeys { alt: false, ctrl: false, shift: false }
}
}
pub fn delete(buffer: &mut String, cursor_position: usize, modifiers: &ModifierKeys) {
if modifiers.ctrl {
loop {
let buffer_chars: Vec<char> = buffer.chars().collect();
let buffer_chars: Vec<char> = 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 {

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