aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui
diff options
context:
space:
mode:
authorFilip Dutescu2023-03-29 03:52:19 +0000
committerGitHub2023-03-29 03:52:19 +0000
commitd59b80514e15d26f280a9b0dbd18afac08578638 (patch)
treee660c1c765404925f29465e4fb303e7b6fea2165 /helix-term/src/ui
parentbbcdcd04a5f6c02c14d73d6bd0f53099b1fcb765 (diff)
feat(debug): highlight current line (#5957)
Add new theme highlight keys, for setting the colour of the breakpoint character and the current line at which execution has been paused at. The two new keys are `ui.highlight.frameline` and `ui.debug.breakpoint`. Highlight according to those keys, both the line at which debugging is paused at and the breakpoint indicator. Add an indicator for the current line at which execution is paused at, themed by the `ui.debug.active` theme scope. Update various themes to showcase how the new functionality works. Better icons are dependent on #2869, and as such will be handled in the future, once it lands. Closes: #5952 Signed-off-by: Filip Dutescu <filip.dutescu@gmail.com>
Diffstat (limited to 'helix-term/src/ui')
-rw-r--r--helix-term/src/ui/editor.rs52
1 files changed, 18 insertions, 34 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 4cac0fa8..d4b141a0 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -93,40 +93,6 @@ impl EditorView {
let mut line_decorations: Vec<Box<dyn LineDecoration>> = Vec::new();
let mut translated_positions: Vec<TranslatedPosition> = Vec::new();
- // DAP: Highlight current stack frame position
- let stack_frame = editor.debugger.as_ref().and_then(|debugger| {
- if let (Some(frame), Some(thread_id)) = (debugger.active_frame, debugger.thread_id) {
- debugger
- .stack_frames
- .get(&thread_id)
- .and_then(|bt| bt.get(frame))
- } else {
- None
- }
- });
- if let Some(frame) = stack_frame {
- if doc.path().is_some()
- && frame
- .source
- .as_ref()
- .and_then(|source| source.path.as_ref())
- == doc.path()
- {
- let line = frame.line - 1; // convert to 0-indexing
- let style = theme.get("ui.highlight");
- let line_decoration = move |renderer: &mut TextRenderer, pos: LinePos| {
- if pos.doc_line != line {
- return;
- }
- renderer
- .surface
- .set_style(Rect::new(area.x, pos.visual_line, area.width, 1), style);
- };
-
- line_decorations.push(Box::new(line_decoration));
- }
- }
-
if is_focused && config.cursorline {
line_decorations.push(Self::cursorline_decorator(doc, view, theme))
}
@@ -135,6 +101,23 @@ impl EditorView {
Self::highlight_cursorcolumn(doc, view, surface, theme, inner, &text_annotations);
}
+ // Set DAP highlights, if needed.
+ if let Some(frame) = editor.current_stack_frame() {
+ let dap_line = frame.line.saturating_sub(1) as usize;
+ let style = theme.get("ui.highlight.frameline");
+ let line_decoration = move |renderer: &mut TextRenderer, pos: LinePos| {
+ if pos.doc_line != dap_line {
+ return;
+ }
+ renderer.surface.set_style(
+ Rect::new(inner.x, inner.y + pos.visual_line, inner.width, 1),
+ style,
+ );
+ };
+
+ line_decorations.push(Box::new(line_decoration));
+ }
+
let mut highlights =
Self::doc_syntax_highlights(doc, view.offset.anchor, inner.height, theme);
let overlay_highlights = Self::overlay_syntax_highlights(
@@ -422,6 +405,7 @@ impl EditorView {
let primary_selection_scope = theme
.find_scope_index_exact("ui.selection.primary")
.unwrap_or(selection_scope);
+
let base_cursor_scope = theme
.find_scope_index_exact("ui.cursor")
.unwrap_or(selection_scope);