From 77699f1473ff7e4905a36a284c0d373649021d63 Mon Sep 17 00:00:00 2001 From: jyn Date: Wed, 25 Sep 2024 11:07:53 -0400 Subject: [PATCH] add `append_character_interactive` command this behaves like regular append with respect to selections: the newly inserted text will be selected when the command finishes, unlike when using `insert_char_interactive`. --- helix-term/src/commands.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 995ca9e2a..a118dcc5c 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -398,6 +398,7 @@ pub fn doc(&self) -> &str { insert_tab, "Insert tab char", insert_newline, "Insert newline char", insert_char_interactive, "Insert an interactively-chosen char", + append_char_interactive, "Append an interactively-chosen char", delete_char_backward, "Delete previous char", delete_char_forward, "Delete next char", delete_word_backward, "Delete previous word", @@ -3820,7 +3821,20 @@ fn insert_tab_impl(cx: &mut Context, count: usize) { doc.apply(&transaction, view.id); } + pub fn append_char_interactive(cx: &mut Context) { + // Save the current mode, so we can restore it later. + let mode = cx.editor.mode; + append_mode(cx); + insert_selection_interactive(cx, mode); + } + pub fn insert_char_interactive(cx: &mut Context) { + let mode = cx.editor.mode; + insert_mode(cx); + insert_selection_interactive(cx, mode); + } + + fn insert_selection_interactive(cx: &mut Context, old_mode: Mode) { let count = cx.count(); // need to wait for next key @@ -3845,6 +3859,8 @@ pub fn insert_char_interactive(cx: &mut Context) { key!(Tab) => insert_tab_impl(cx, count), _ => (), }; + // Restore the old mode. + cx.editor.mode = old_mode; }); }