Paginated variables
This commit is contained in:
parent
3b87fce0ce
commit
890b51b568
3 changed files with 64 additions and 4 deletions
|
@ -4768,7 +4768,7 @@ fn dap_variables(cx: &mut Context) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let mut s = String::new();
|
let mut variables = Vec::new();
|
||||||
|
|
||||||
for scope in scopes.iter() {
|
for scope in scopes.iter() {
|
||||||
let response = block_on(debugger.variables(scope.variables_reference));
|
let response = block_on(debugger.variables(scope.variables_reference));
|
||||||
|
@ -4779,12 +4779,15 @@ fn dap_variables(cx: &mut Context) {
|
||||||
Some(data_type) => format!("{} ", data_type),
|
Some(data_type) => format!("{} ", data_type),
|
||||||
None => "".to_owned(),
|
None => "".to_owned(),
|
||||||
};
|
};
|
||||||
// s.push_str(&format!("{}{} = {}; ", prefix, var.name, var.value));
|
variables.push(format!("{}{} = {}\n", prefix, var.name, var.value));
|
||||||
s.push_str(&format!("{}{}; ", prefix, var.name,));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cx.editor.set_status(s);
|
|
||||||
|
if !variables.is_empty() {
|
||||||
|
cx.editor.variables = Some(variables);
|
||||||
|
cx.editor.variables_page = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -711,6 +711,30 @@ impl EditorView {
|
||||||
event: KeyEvent,
|
event: KeyEvent,
|
||||||
) -> Option<KeymapResult> {
|
) -> Option<KeymapResult> {
|
||||||
self.autoinfo = None;
|
self.autoinfo = None;
|
||||||
|
|
||||||
|
if cxt.editor.variables.is_some() {
|
||||||
|
match event {
|
||||||
|
KeyEvent {
|
||||||
|
code: KeyCode::Char('h'),
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
cxt.editor.variables_page = cxt.editor.variables_page.saturating_sub(1);
|
||||||
|
}
|
||||||
|
KeyEvent {
|
||||||
|
code: KeyCode::Char('l'),
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
cxt.editor.variables_page = cxt.editor.variables_page.saturating_add(1);
|
||||||
|
}
|
||||||
|
KeyEvent {
|
||||||
|
code: KeyCode::Esc, ..
|
||||||
|
} => {
|
||||||
|
cxt.editor.variables = None;
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
return None;
|
||||||
|
}
|
||||||
match self.keymaps.get_mut(&mode).unwrap().get(event) {
|
match self.keymaps.get_mut(&mode).unwrap().get(event) {
|
||||||
KeymapResult::Matched(command) => command.execute(cxt),
|
KeymapResult::Matched(command) => command.execute(cxt),
|
||||||
KeymapResult::Pending(node) => self.autoinfo = Some(node.into()),
|
KeymapResult::Pending(node) => self.autoinfo = Some(node.into()),
|
||||||
|
@ -1084,6 +1108,35 @@ impl Component for EditorView {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(ref vars) = cx.editor.variables {
|
||||||
|
let mut text = String::new();
|
||||||
|
let mut height = 0;
|
||||||
|
let mut max_len = 0;
|
||||||
|
|
||||||
|
let per_page = 15;
|
||||||
|
let num_vars = vars.len();
|
||||||
|
let start = (per_page * cx.editor.variables_page).min(num_vars);
|
||||||
|
let end = (start + per_page).min(num_vars);
|
||||||
|
for line in vars[start..end].to_vec() {
|
||||||
|
max_len = max_len.max(line.len() as u16);
|
||||||
|
height += 1;
|
||||||
|
text.push_str(&line);
|
||||||
|
}
|
||||||
|
|
||||||
|
if vars.len() > per_page {
|
||||||
|
text += "\nMove h, l";
|
||||||
|
height += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut info = Info {
|
||||||
|
height: 20.min(height + 2),
|
||||||
|
width: 70.min(max_len),
|
||||||
|
title: format!("{} variables", num_vars),
|
||||||
|
text: text + "\nExit Esc",
|
||||||
|
};
|
||||||
|
info.render(area, surface, cx);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(ref mut info) = self.autoinfo {
|
if let Some(ref mut info) = self.autoinfo {
|
||||||
info.render(area, surface, cx);
|
info.render(area, surface, cx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,8 @@ pub struct Editor {
|
||||||
|
|
||||||
pub debugger: Option<helix_dap::Client>,
|
pub debugger: Option<helix_dap::Client>,
|
||||||
pub debugger_events: SelectAll<UnboundedReceiverStream<helix_dap::Payload>>,
|
pub debugger_events: SelectAll<UnboundedReceiverStream<helix_dap::Payload>>,
|
||||||
|
pub variables: Option<Vec<String>>,
|
||||||
|
pub variables_page: usize,
|
||||||
|
|
||||||
pub clipboard_provider: Box<dyn ClipboardProvider>,
|
pub clipboard_provider: Box<dyn ClipboardProvider>,
|
||||||
|
|
||||||
|
@ -116,6 +118,8 @@ impl Editor {
|
||||||
language_servers,
|
language_servers,
|
||||||
debugger: None,
|
debugger: None,
|
||||||
debugger_events: SelectAll::new(),
|
debugger_events: SelectAll::new(),
|
||||||
|
variables: None,
|
||||||
|
variables_page: 0,
|
||||||
syn_loader: config_loader,
|
syn_loader: config_loader,
|
||||||
theme_loader: themes,
|
theme_loader: themes,
|
||||||
registers: Registers::default(),
|
registers: Registers::default(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue