diff options
author | Dmitry Sharshakov | 2021-08-29 07:23:36 +0000 |
---|---|---|
committer | Dmitry Sharshakov | 2021-08-29 07:23:36 +0000 |
commit | 2d42766a7118036dae4ca20f764f4909753a357d (patch) | |
tree | 57acce33b6cec400e34ada5dd28d69b0c5a70a71 /helix-term | |
parent | af657ef2ec49b93acb26c344be28ee67cb0cae51 (diff) |
wip: refactor parameters in UI start
Diffstat (limited to 'helix-term')
-rw-r--r-- | helix-term/src/ui/editor.rs | 84 |
1 files changed, 52 insertions, 32 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 25adc126..cdb68ef6 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -709,6 +709,54 @@ impl EditorView { ); } + fn request_parameter( + completions: Vec<String>, + config_name: String, + cxt: &mut commands::Context, + mut params: Vec<String>, + ) { + let noop = |_input: &str| Vec::new(); + let completer = match completions.get(0).map(|x| x.as_str()) { + Some("filename") => super::completers::filename, + Some("directory") => super::completers::directory, + Some(complete) => { + warn!("Unknown debug config autocompleter: {}", complete); + noop + } + None => noop, + }; + let prompt = Prompt::new( + "arg: ".to_owned(), + None, + completer, + move |cx: &mut crate::compositor::Context, input: &str, event: PromptEvent| { + if event != PromptEvent::Validate { + return; + } + + params.push(input.to_owned()); + + if params.len() < completions.len() { + todo!(); + // Self::request_parameter( + // completions.clone(), + // config_name.clone(), + // cxt, + // params.clone(), + // ); + } else { + commands::dap_start_impl( + cx.editor, + Some(&config_name), + None, + Some(params.iter().map(|x| x.as_str()).collect()), + ); + } + }, + ); + cxt.push_layer(Box::new(prompt)); + } + /// Handle events by looking them up in `self.keymaps`. Returns None /// if event was handled (a command was executed or a subkeymap was /// activated). Only KeymapResult::{NotFound, Cancelled} is returned @@ -735,38 +783,10 @@ impl EditorView { None => return None, }; let completions = cxt.editor.debug_config_completions.clone().unwrap(); - let noop = |_input: &str| Vec::new(); - let completer = match completions.get(i) { - Some(Some(completion)) => match completion.get(0).map(|x| x.as_str()) { - Some("filename") => super::completers::filename, - Some("directory") => super::completers::directory, - Some(complete) => { - warn!("Unknown debug config autocompleter: {}", complete); - noop - } - None => noop, - }, - _ => noop, - }; - let prompt = Prompt::new( - "arg:".to_owned(), - None, - completer, - move |cx: &mut crate::compositor::Context, - input: &str, - event: PromptEvent| { - if event != PromptEvent::Validate { - return; - } - commands::dap_start_impl( - cx.editor, - Some(&name), - None, - Some(vec![input]), - ); - }, - ); - cxt.push_layer(Box::new(prompt)); + let completion = completions.get(i).unwrap().clone(); + if !completion.is_empty() { + Self::request_parameter(completion, name, cxt, Vec::new()); + } } _ => return None, } |