From fad179475168dd4002a5e7e2107427b41c5b56ee Mon Sep 17 00:00:00 2001 From: Thomas Schollenberger Date: Tue, 14 Mar 2023 01:00:32 -0400 Subject: [PATCH 1/5] fix spaces and nbsps showing in inlay hints --- helix-term/src/ui/document.rs | 9 +++++++-- origin | 0 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 origin diff --git a/helix-term/src/ui/document.rs b/helix-term/src/ui/document.rs index 28a52f74d3f5..7f82d13171f7 100644 --- a/helix-term/src/ui/document.rs +++ b/helix-term/src/ui/document.rs @@ -287,9 +287,11 @@ pub fn render_text<'t>( style_span.0 }; + let virt = grapheme.is_virtual().clone(); renderer.draw_grapheme( grapheme.grapheme, grapheme_style, + virt, &mut last_line_indent_level, &mut is_in_indent_area, pos, @@ -392,6 +394,7 @@ impl<'a> TextRenderer<'a> { &mut self, grapheme: Grapheme, mut style: Style, + is_virtual: bool, last_indent_level: &mut usize, is_in_indent_area: &mut bool, position: Position, @@ -405,14 +408,16 @@ impl<'a> TextRenderer<'a> { } let width = grapheme.width(); + let space = if is_virtual { " " } else { &self.space }; + let nbsp = if is_virtual { " " } else { &self.nbsp }; let grapheme = match grapheme { Grapheme::Tab { width } => { let grapheme_tab_width = char_to_byte_idx(&self.tab, width); &self.tab[..grapheme_tab_width] } // TODO special rendering for other whitespaces? - Grapheme::Other { ref g } if g == " " => &self.space, - Grapheme::Other { ref g } if g == "\u{00A0}" => &self.nbsp, + Grapheme::Other { ref g } if g == " " => space, + Grapheme::Other { ref g } if g == "\u{00A0}" => nbsp, Grapheme::Other { ref g } => g, Grapheme::Newline => &self.newline, }; diff --git a/origin b/origin new file mode 100644 index 000000000000..e69de29bb2d1 From 4108d05e8d1ffea0443311afdfbbd99c45b1f6ea Mon Sep 17 00:00:00 2001 From: Thomas Schollenberger Date: Tue, 14 Mar 2023 02:22:07 -0400 Subject: [PATCH 2/5] remove origin --- origin | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 origin diff --git a/origin b/origin deleted file mode 100644 index e69de29bb2d1..000000000000 From 88a2a2c7c2a953780ff9f2462f819f61b0e702e2 Mon Sep 17 00:00:00 2001 From: Thomas Schollenberger Date: Tue, 14 Mar 2023 11:42:17 -0400 Subject: [PATCH 3/5] virtual tab + fix unneeded clone --- helix-term/src/ui/document.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/helix-term/src/ui/document.rs b/helix-term/src/ui/document.rs index 7f82d13171f7..6488fe19577f 100644 --- a/helix-term/src/ui/document.rs +++ b/helix-term/src/ui/document.rs @@ -287,7 +287,7 @@ pub fn render_text<'t>( style_span.0 }; - let virt = grapheme.is_virtual().clone(); + let virt = grapheme.is_virtual(); renderer.draw_grapheme( grapheme.grapheme, grapheme_style, @@ -315,6 +315,7 @@ pub struct TextRenderer<'a> { pub nbsp: String, pub space: String, pub tab: String, + pub virtual_tab: String, pub indent_width: u16, pub starting_indent: usize, pub draw_indent_guides: bool, @@ -344,6 +345,7 @@ impl<'a> TextRenderer<'a> { } else { " ".repeat(tab_width) }; + let virtual_tab = " ".repeat(tab_width); let newline = if ws_render.newline() == WhitespaceRenderValue::All { ws_chars.newline.into() } else { @@ -372,6 +374,7 @@ impl<'a> TextRenderer<'a> { nbsp, space, tab, + virtual_tab, whitespace_style: theme.get("ui.virtual.whitespace"), indent_width, starting_indent: col_offset / indent_width as usize @@ -412,8 +415,13 @@ impl<'a> TextRenderer<'a> { let nbsp = if is_virtual { " " } else { &self.nbsp }; let grapheme = match grapheme { Grapheme::Tab { width } => { - let grapheme_tab_width = char_to_byte_idx(&self.tab, width); - &self.tab[..grapheme_tab_width] + if !is_virtual { + let grapheme_tab_width = char_to_byte_idx(&self.tab, width); + &self.tab[..grapheme_tab_width] + } else { + let grapheme_tab_width = char_to_byte_idx(&self.virtual_tab, width); + &self.virtual_tab[..grapheme_tab_width] + } } // TODO special rendering for other whitespaces? Grapheme::Other { ref g } if g == " " => space, From 8b08bb49d83b053cd413dce045361a3b66200063 Mon Sep 17 00:00:00 2001 From: Thomas Schollenberger Date: Tue, 14 Mar 2023 20:01:25 -0400 Subject: [PATCH 4/5] update virtual tab determining location --- helix-term/src/ui/document.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/helix-term/src/ui/document.rs b/helix-term/src/ui/document.rs index 6488fe19577f..4f573b13265b 100644 --- a/helix-term/src/ui/document.rs +++ b/helix-term/src/ui/document.rs @@ -413,15 +413,15 @@ impl<'a> TextRenderer<'a> { let width = grapheme.width(); let space = if is_virtual { " " } else { &self.space }; let nbsp = if is_virtual { " " } else { &self.nbsp }; + let tab = if is_virtual { + &self.virtual_tab + } else { + &self.tab + }; let grapheme = match grapheme { Grapheme::Tab { width } => { - if !is_virtual { - let grapheme_tab_width = char_to_byte_idx(&self.tab, width); - &self.tab[..grapheme_tab_width] - } else { - let grapheme_tab_width = char_to_byte_idx(&self.virtual_tab, width); - &self.virtual_tab[..grapheme_tab_width] - } + let grapheme_tab_width = char_to_byte_idx(&tab, width); + &tab[..grapheme_tab_width] } // TODO special rendering for other whitespaces? Grapheme::Other { ref g } if g == " " => space, From 708bae8ce0ae8cad65394403ae4f3b25a8b0d24e Mon Sep 17 00:00:00 2001 From: Thomas Schollenberger Date: Wed, 15 Mar 2023 15:11:18 -0400 Subject: [PATCH 5/5] fix clippy lint --- helix-term/src/ui/document.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-term/src/ui/document.rs b/helix-term/src/ui/document.rs index 4f573b13265b..d417626491c9 100644 --- a/helix-term/src/ui/document.rs +++ b/helix-term/src/ui/document.rs @@ -420,7 +420,7 @@ impl<'a> TextRenderer<'a> { }; let grapheme = match grapheme { Grapheme::Tab { width } => { - let grapheme_tab_width = char_to_byte_idx(&tab, width); + let grapheme_tab_width = char_to_byte_idx(tab, width); &tab[..grapheme_tab_width] } // TODO special rendering for other whitespaces?