diff --git a/src/actions.rs b/src/actions.rs index a64b48e..b37c8a7 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -33,6 +33,7 @@ pub fn load_actions() -> HashMap { ("page_down", page_down), ("goto_line_start", goto_line_start), ("goto_line_end", goto_line_end), + ("goto_first_nonwhitespace", goto_first_nonwhitespace), ("command_mode", command_mode), ("normal_mode", normal_mode), ("visual_mode", visual_mode), @@ -88,6 +89,10 @@ pub fn goto_line_end(state: &mut State) { state.cursor = state.buffer.cursor_at_line_end(state.cursor.line); } +pub fn goto_first_nonwhitespace(state: &mut State) { + state.cursor = state.buffer.cursor_at_first_nonwhitespace(state.cursor.line); +} + pub fn command_mode(state: &mut State) { state.mode = Mode::Command(Default::default()); } @@ -117,11 +122,13 @@ pub fn append_mode(state: &mut State) { } pub fn insert_at_line_start(state: &mut State) { - state.set_error("insert_at_line_start is unimplemented"); + goto_first_nonwhitespace(state); + insert_mode(state); } pub fn insert_at_line_end(state: &mut State) { - state.set_error("insert_at_line_end is unimplemented"); + goto_line_end(state); + insert_mode(state); } pub fn open_below(state: &mut State) { diff --git a/src/keybinds.rs b/src/keybinds.rs index eb0376a..4cd0ae7 100644 --- a/src/keybinds.rs +++ b/src/keybinds.rs @@ -53,6 +53,7 @@ impl Default for Keybinds { let goto_keys = &[ (Char('h'), goto_line_start as Action), (Char('l'), goto_line_end), + (Char('s'), goto_first_nonwhitespace), ]; let normalish_keys = [