aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
authorDmitry Sharshakov2021-08-29 07:23:36 +0000
committerDmitry Sharshakov2021-08-29 07:23:36 +0000
commit2d42766a7118036dae4ca20f764f4909753a357d (patch)
tree57acce33b6cec400e34ada5dd28d69b0c5a70a71 /helix-term/src
parentaf657ef2ec49b93acb26c344be28ee67cb0cae51 (diff)
wip: refactor parameters in UI start
Diffstat (limited to 'helix-term/src')
-rw-r--r--helix-term/src/ui/editor.rs84
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,
}