aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src/commands.rs')
-rw-r--r--helix-term/src/commands.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 574e1edf..6817bc5c 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -53,7 +53,10 @@ use crate::{
filter_picker_entry,
job::Callback,
keymap::ReverseKeymap,
- ui::{self, overlay::overlayed, FilePicker, Picker, Popup, Prompt, PromptEvent},
+ ui::{
+ self, editor::InsertEvent, overlay::overlayed, FilePicker, Picker, Popup, Prompt,
+ PromptEvent,
+ },
};
use crate::job::{self, Jobs};
@@ -4205,6 +4208,20 @@ pub fn completion(cx: &mut Context) {
let trigger_doc = doc.id();
let trigger_view = view.id;
+ // FIXME: The commands Context can only have a single callback
+ // which means it gets overwritten when executing keybindings
+ // with multiple commands or macros. This would mean that completion
+ // might be incorrectly applied when repeating the insertmode action
+ //
+ // TODO: to solve this either make cx.callback a Vec of callbacks or
+ // alternatively move `last_insert` to `helix_view::Editor`
+ cx.callback = Some(Box::new(
+ move |compositor: &mut Compositor, _cx: &mut compositor::Context| {
+ let ui = compositor.find::<ui::EditorView>().unwrap();
+ ui.last_insert.1.push(InsertEvent::RequestCompletion);
+ },
+ ));
+
cx.callback(
future,
move |editor, compositor, response: Option<lsp::CompletionResponse>| {