diff options
author | A-Walrus | 2022-08-06 15:46:50 +0000 |
---|---|---|
committer | GitHub | 2022-08-06 15:46:50 +0000 |
commit | c00b8f7ad70e69d5365dc4d1247a8d47b53a8d2e (patch) | |
tree | 59b83486992fc54b837857ac853818d4039e6c85 | |
parent | fdd8bbf16bdbc19d2e814c463c1c327ee941eba9 (diff) |
Fix tab highlight when tab is partially visible (#3313)
* Fix tab highlight when tab is partially visible
* Make it style based, and not truncation based
Dealing with truncating is a mess, especially when it comes to wide
unicode graphemes. This way it should work no matter what.
* Inline style calculation into branches
-rw-r--r-- | helix-term/src/ui/editor.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 94ad8aea..6b316374 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -529,6 +529,8 @@ impl EditorView { (grapheme.as_ref(), width) }; + let cut_off_start = offset.col.saturating_sub(visual_x as usize); + if !out_of_bounds { // if we're offscreen just keep going until we hit a new line surface.set_string( @@ -541,7 +543,24 @@ impl EditorView { style }, ); + } else if cut_off_start != 0 && cut_off_start < width { + // partially on screen + let rect = Rect::new( + viewport.x as u16, + viewport.y + line, + (width - cut_off_start) as u16, + 1, + ); + surface.set_style( + rect, + if is_whitespace { + style.patch(whitespace_style) + } else { + style + }, + ); } + if is_in_indent_area && !(grapheme == " " || grapheme == "\t") { draw_indent_guides(visual_x, line, surface); is_in_indent_area = false; |