on master help sign in
Paginated variables
890b51bDmitry Sharshakov
helix-term/src/commands.rs+7−4
@@ -4768,7 +4768,7 @@ fn dap_variables(cx: &mut Context) {
4768 return;
4768 return;
4769 }
4769 }
4770 };
4770 };
4771− let mut s = String::new();
4771+ let mut variables = Vec::new();
4772
4772
4773 for scope in scopes.iter() {
4773 for scope in scopes.iter() {
4774 let response = block_on(debugger.variables(scope.variables_reference));
4774 let response = block_on(debugger.variables(scope.variables_reference));
@@ -4779,12 +4779,15 @@ fn dap_variables(cx: &mut Context) {
4779 Some(data_type) => format!("{} ", data_type),
4779 Some(data_type) => format!("{} ", data_type),
4780 None => "".to_owned(),
4780 None => "".to_owned(),
4781 };
4781 };
4782− // s.push_str(&format!("{}{} = {}; ", prefix, var.name, var.value));
4782+ variables.push(format!("{}{} = {}\n", prefix, var.name, var.value));
4783− s.push_str(&format!("{}{}; ", prefix, var.name,));
4784 }
4783 }
4785 }
4784 }
4786 }
4785 }
4787− cx.editor.set_status(s);
4786+
4787+ if !variables.is_empty() {
4788+ cx.editor.variables = Some(variables);
4789+ cx.editor.variables_page = 0;
4790+ }
4788 }
4791 }
4789}
4792}
4790
4793
helix-term/src/ui/editor.rs+53
@@ -711,6 +711,30 @@ impl EditorView {
711 event: KeyEvent,
711 event: KeyEvent,
712 ) -> Option<KeymapResult> {
712 ) -> Option<KeymapResult> {
713 self.autoinfo = None;
713 self.autoinfo = None;
714+
715+ if cxt.editor.variables.is_some() {
716+ match event {
717+ KeyEvent {
718+ code: KeyCode::Char('h'),
719+ ..
720+ } => {
721+ cxt.editor.variables_page = cxt.editor.variables_page.saturating_sub(1);
722+ }
723+ KeyEvent {
724+ code: KeyCode::Char('l'),
725+ ..
726+ } => {
727+ cxt.editor.variables_page = cxt.editor.variables_page.saturating_add(1);
728+ }
729+ KeyEvent {
730+ code: KeyCode::Esc, ..
731+ } => {
732+ cxt.editor.variables = None;
733+ }
734+ _ => {}
735+ }
736+ return None;
737+ }
714 match self.keymaps.get_mut(&mode).unwrap().get(event) {
738 match self.keymaps.get_mut(&mode).unwrap().get(event) {
715 KeymapResult::Matched(command) => command.execute(cxt),
739 KeymapResult::Matched(command) => command.execute(cxt),
716 KeymapResult::Pending(node) => self.autoinfo = Some(node.into()),
740 KeymapResult::Pending(node) => self.autoinfo = Some(node.into()),
@@ -1084,6 +1108,35 @@ impl Component for EditorView {
1084 );
1108 );
1085 }
1109 }
1086
1110
1111+ if let Some(ref vars) = cx.editor.variables {
1112+ let mut text = String::new();
1113+ let mut height = 0;
1114+ let mut max_len = 0;
1115+
1116+ let per_page = 15;
1117+ let num_vars = vars.len();
1118+ let start = (per_page * cx.editor.variables_page).min(num_vars);
1119+ let end = (start + per_page).min(num_vars);
1120+ for line in vars[start..end].to_vec() {
1121+ max_len = max_len.max(line.len() as u16);
1122+ height += 1;
1123+ text.push_str(&line);
1124+ }
1125+
1126+ if vars.len() > per_page {
1127+ text += "\nMove h, l";
1128+ height += 1;
1129+ }
1130+
1131+ let mut info = Info {
1132+ height: 20.min(height + 2),
1133+ width: 70.min(max_len),
1134+ title: format!("{} variables", num_vars),
1135+ text: text + "\nExit Esc",
1136+ };
1137+ info.render(area, surface, cx);
1138+ }
1139+
1087 if let Some(ref mut info) = self.autoinfo {
1140 if let Some(ref mut info) = self.autoinfo {
1088 info.render(area, surface, cx);
1141 info.render(area, surface, cx);
1089 }
1142 }
helix-view/src/editor.rs+4
@@ -76,6 +76,8 @@ pub struct Editor {
76
76
77 pub debugger: Option<helix_dap::Client>,
77 pub debugger: Option<helix_dap::Client>,
78 pub debugger_events: SelectAll<UnboundedReceiverStream<helix_dap::Payload>>,
78 pub debugger_events: SelectAll<UnboundedReceiverStream<helix_dap::Payload>>,
79+ pub variables: Option<Vec<String>>,
80+ pub variables_page: usize,
79
81
80 pub clipboard_provider: Box<dyn ClipboardProvider>,
82 pub clipboard_provider: Box<dyn ClipboardProvider>,
81
83
@@ -116,6 +118,8 @@ impl Editor {
116 language_servers,
118 language_servers,
117 debugger: None,
119 debugger: None,
118 debugger_events: SelectAll::new(),
120 debugger_events: SelectAll::new(),
121+ variables: None,
122+ variables_page: 0,
119 syn_loader: config_loader,
123 syn_loader: config_loader,
120 theme_loader: themes,
124 theme_loader: themes,
121 registers: Registers::default(),
125 registers: Registers::default(),