aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-04-09 09:48:56 +0000
committerBlaž Hrastnik2021-04-09 10:29:01 +0000
commit978f5114d82b51f2327c08faf2bf692181bf2408 (patch)
treed802464b79bee0eaf57cf933e664cc8f30d54570 /helix-term
parentd692390d10cdbf7ac98128688de2f7fa0ba9bc06 (diff)
Horizontal scrolling! It only took a year to get around to it.
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/ui/editor.rs16
1 files changed, 9 insertions, 7 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 5426e014..d32f7864 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -189,18 +189,20 @@ impl EditorView {
} else if grapheme == "\t" {
visual_x += (tab_width as u16);
} else {
- if visual_x >= viewport.width {
- // if we're offscreen just keep going until we hit a new line
- // TODO: will need tweaking when we also take into account
- // horizontal scrolling
- continue;
- }
+ let out_of_bounds = visual_x < view.first_col as u16
+ || visual_x >= viewport.width + view.first_col as u16;
// Cow will prevent allocations if span contained in a single slice
// which should really be the majority case
let grapheme = Cow::from(grapheme);
let width = grapheme_width(&grapheme) as u16;
+ if out_of_bounds {
+ // if we're offscreen just keep going until we hit a new line
+ visual_x += width;
+ continue;
+ }
+
// ugh,interleave highlight spans with diagnostic spans
let is_diagnostic = doc.diagnostics.iter().any(|diagnostic| {
diagnostic.range.start <= char_index
@@ -214,7 +216,7 @@ impl EditorView {
};
surface.set_string(
- viewport.x + visual_x,
+ viewport.x + visual_x - view.first_col as u16,
viewport.y + line,
grapheme,
style,