@@ -709,6 +709,54 @@ impl EditorView {
709709 );
710710 }
711711
712+ fn request_parameter(
713+ completions: Vec<String>,
714+ config_name: String,
715+ cxt: &mut commands::Context,
716+ mut params: Vec<String>,
717+ ) {
718+ let noop = |_input: &str| Vec::new();
719+ let completer = match completions.get(0).map(|x| x.as_str()) {
720+ Some("filename") => super::completers::filename,
721+ Some("directory") => super::completers::directory,
722+ Some(complete) => {
723+ warn!("Unknown debug config autocompleter: {}", complete);
724+ noop
725+ }
726+ None => noop,
727+ };
728+ let prompt = Prompt::new(
729+ "arg: ".to_owned(),
730+ None,
731+ completer,
732+ move |cx: &mut crate::compositor::Context, input: &str, event: PromptEvent| {
733+ if event != PromptEvent::Validate {
734+ return;
735+ }
736+
737+ params.push(input.to_owned());
738+
739+ if params.len() < completions.len() {
740+ todo!();
741+ // Self::request_parameter(
742+ // completions.clone(),
743+ // config_name.clone(),
744+ // cxt,
745+ // params.clone(),
746+ // );
747+ } else {
748+ commands::dap_start_impl(
749+ cx.editor,
750+ Some(&config_name),
751+ None,
752+ Some(params.iter().map(|x| x.as_str()).collect()),
753+ );
754+ }
755+ },
756+ );
757+ cxt.push_layer(Box::new(prompt));
758+ }
759+
712760 /// Handle events by looking them up in `self.keymaps`. Returns None
713761 /// if event was handled (a command was executed or a subkeymap was
714762 /// activated). Only KeymapResult::{NotFound, Cancelled} is returned
@@ -735,38 +783,10 @@ impl EditorView {
735783 None => return None,
736784 };
737785 let completions = cxt.editor.debug_config_completions.clone().unwrap();
738− let noop = |_input: &str| Vec::new();
739− let completer = match completions.get(i) {
740− Some(Some(completion)) => match completion.get(0).map(|x| x.as_str()) {
741− Some("filename") => super::completers::filename,
742− Some("directory") => super::completers::directory,
743− Some(complete) => {
744− warn!("Unknown debug config autocompleter: {}", complete);
745− noop
746− }
747− None => noop,
748− },
749− _ => noop,
750− };
751− let prompt = Prompt::new(
752− "arg:".to_owned(),
753− None,
754− completer,
755− move |cx: &mut crate::compositor::Context,
756− input: &str,
757− event: PromptEvent| {
758− if event != PromptEvent::Validate {
759− return;
760− }
761− commands::dap_start_impl(
762− cx.editor,
763− Some(&name),
764− None,
765− Some(vec![input]),
766− );
767− },
768− );
769− cxt.push_layer(Box::new(prompt));
786+ let completion = completions.get(i).unwrap().clone();
787+ if !completion.is_empty() {
788+ Self::request_parameter(completion, name, cxt, Vec::new());
789+ }
770790 }
771791 _ => return None,
772792 }