@@ -1,6 +1,7 @@
11use crate::{
22 commands,
3− compositor::{Component, Context, EventResult},
3+ compositor::{Component, Compositor, Context, EventResult},
4+ job::Callback,
45 key,
56 keymap::{KeymapResult, Keymaps},
67 ui::{Completion, ProgressSpinners},
@@ -709,12 +710,11 @@ impl EditorView {
709710 );
710711 }
711712
712− fn request_parameter(
713+ fn debug_parameter_prompt(
713714 completions: Vec<String>,
714715 config_name: String,
715− cxt: &mut commands::Context,
716716 mut params: Vec<String>,
717− ) {
717+ ) -> Prompt {
718718 let noop = |_input: &str| Vec::new();
719719 let completer = match completions.get(0).map(|x| x.as_str()) {
720720 Some("filename") => super::completers::filename,
@@ -725,7 +725,7 @@ impl EditorView {
725725 }
726726 None => noop,
727727 };
728− let prompt = Prompt::new(
728+ Prompt::new(
729729 "arg: ".to_owned(),
730730 None,
731731 completer,
@@ -737,13 +737,19 @@ impl EditorView {
737737 params.push(input.to_owned());
738738
739739 if params.len() < completions.len() {
740− todo!();
741− // Self::request_parameter(
742− // completions.clone(),
743− // config_name.clone(),
744− // cxt,
745− // params.clone(),
746− // );
740+ let completions = completions.clone();
741+ let config_name = config_name.clone();
742+ let params = params.clone();
743+ let callback = Box::pin(async move {
744+ let call: Callback =
745+ Box::new(move |_editor: &mut Editor, compositor: &mut Compositor| {
746+ let prompt =
747+ Self::debug_parameter_prompt(completions, config_name, params);
748+ compositor.push(Box::new(prompt));
749+ });
750+ Ok(call)
751+ });
752+ cx.jobs.callback(callback);
747753 } else {
748754 commands::dap_start_impl(
749755 cx.editor,
@@ -753,8 +759,7 @@ impl EditorView {
753759 );
754760 }
755761 },
756− );
757− cxt.push_layer(Box::new(prompt));
762+ )
758763 }
759764
760765 /// Handle events by looking them up in `self.keymaps`. Returns None
@@ -785,7 +790,8 @@ impl EditorView {
785790 let completions = cxt.editor.debug_config_completions.clone().unwrap();
786791 let completion = completions.get(i).unwrap().clone();
787792 if !completion.is_empty() {
788− Self::request_parameter(completion, name, cxt, Vec::new());
793+ let prompt = Self::debug_parameter_prompt(completion, name, Vec::new());
794+ cxt.push_layer(Box::new(prompt));
789795 }
790796 }
791797 _ => return None,