Support editing breakpoint condition with right click
This commit is contained in:
parent
1befbd076c
commit
3b0ec750ff
2 changed files with 97 additions and 60 deletions
|
@ -1,6 +1,8 @@
|
||||||
use super::{align_view, Align, Context, Editor};
|
use super::{align_view, Align, Context, Editor};
|
||||||
use crate::{
|
use crate::{
|
||||||
commands,
|
commands,
|
||||||
|
compositor::Compositor,
|
||||||
|
job::Callback,
|
||||||
ui::{FilePicker, Picker, Prompt, PromptEvent},
|
ui::{FilePicker, Picker, Prompt, PromptEvent},
|
||||||
};
|
};
|
||||||
use helix_core::Selection;
|
use helix_core::Selection;
|
||||||
|
@ -479,12 +481,17 @@ pub fn dap_terminate(cx: &mut Context) {
|
||||||
|
|
||||||
pub fn dap_edit_condition(cx: &mut Context) {
|
pub fn dap_edit_condition(cx: &mut Context) {
|
||||||
if let Some((pos, mut bp)) = commands::cmd::get_breakpoint_at_current_line(cx.editor) {
|
if let Some((pos, mut bp)) = commands::cmd::get_breakpoint_at_current_line(cx.editor) {
|
||||||
|
let callback = Box::pin(async move {
|
||||||
|
let call: Callback =
|
||||||
|
Box::new(move |_editor: &mut Editor, compositor: &mut Compositor| {
|
||||||
let condition = bp.condition.clone();
|
let condition = bp.condition.clone();
|
||||||
let prompt = Prompt::new(
|
let prompt = Prompt::new(
|
||||||
"condition: ".into(),
|
"condition: ".into(),
|
||||||
None,
|
None,
|
||||||
|_input: &str| Vec::new(),
|
|_input: &str| Vec::new(),
|
||||||
move |cx: &mut crate::compositor::Context, input: &str, event: PromptEvent| {
|
move |cx: &mut crate::compositor::Context,
|
||||||
|
input: &str,
|
||||||
|
event: PromptEvent| {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -493,13 +500,15 @@ pub fn dap_edit_condition(cx: &mut Context) {
|
||||||
let path = match doc.path() {
|
let path = match doc.path() {
|
||||||
Some(path) => path.to_path_buf(),
|
Some(path) => path.to_path_buf(),
|
||||||
None => {
|
None => {
|
||||||
cx.editor
|
cx.editor.set_status(
|
||||||
.set_status("Can't edit breakpoint: document has no path".to_owned());
|
"Can't edit breakpoint: document has no path".to_owned(),
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let breakpoints = cx.editor.breakpoints.entry(path.clone()).or_default();
|
let breakpoints =
|
||||||
|
cx.editor.breakpoints.entry(path.clone()).or_default();
|
||||||
breakpoints.remove(pos);
|
breakpoints.remove(pos);
|
||||||
bp.condition = match input {
|
bp.condition = match input {
|
||||||
"" => None,
|
"" => None,
|
||||||
|
@ -540,8 +549,11 @@ pub fn dap_edit_condition(cx: &mut Context) {
|
||||||
},
|
},
|
||||||
condition,
|
condition,
|
||||||
);
|
);
|
||||||
|
compositor.push(Box::new(prompt));
|
||||||
cx.push_layer(Box::new(prompt));
|
});
|
||||||
|
Ok(call)
|
||||||
|
});
|
||||||
|
cx.jobs.callback(callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1073,6 +1073,31 @@ impl EditorView {
|
||||||
EventResult::Consumed(None)
|
EventResult::Consumed(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MouseEvent {
|
||||||
|
kind: MouseEventKind::Up(MouseButton::Right),
|
||||||
|
row,
|
||||||
|
column,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
let result = cxt.editor.tree.views().find_map(|(view, _focus)| {
|
||||||
|
view.gutter_coords_at_screen_coords(row, column)
|
||||||
|
.map(|coords| (coords.0, coords.1, view.id))
|
||||||
|
});
|
||||||
|
|
||||||
|
if let Some((line, _, view_id)) = result {
|
||||||
|
cxt.editor.tree.focus = view_id;
|
||||||
|
|
||||||
|
let doc = &mut cxt.editor.documents[cxt.editor.tree.get(view_id).doc];
|
||||||
|
if let Ok(pos) = doc.text().try_line_to_char(line) {
|
||||||
|
doc.set_selection(view_id, Selection::point(pos));
|
||||||
|
commands::Command::dap_edit_condition.execute(cxt);
|
||||||
|
|
||||||
|
return EventResult::Consumed(None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EventResult::Ignored
|
||||||
|
}
|
||||||
|
|
||||||
MouseEvent {
|
MouseEvent {
|
||||||
kind: MouseEventKind::Up(MouseButton::Middle),
|
kind: MouseEventKind::Up(MouseButton::Middle),
|
||||||
row,
|
row,
|
||||||
|
|
Loading…
Add table
Reference in a new issue