From 2452633e322969424872a8f8ebef4b47007f0966 Mon Sep 17 00:00:00 2001 From: prod2 Date: Thu, 29 Dec 2022 19:01:34 +0100 Subject: [PATCH] multiple lines scrolling together horizontally --- renderer.nim | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/renderer.nim b/renderer.nim index 73db68c..4ae3f59 100644 --- a/renderer.nim +++ b/renderer.nim @@ -37,6 +37,15 @@ proc render*(textBuffer: TextBuffer, termBuffer: Buffer, prompt: string, scroll: termBuffer.redraw() return # nothing will fit anyways + const scrollOffset = 2 + # right scroll + if x - scroll.x >= maxTextLen - scrollOffset: + scroll.x = x - maxTextLen + scrollOffset + # left scroll + if x - scroll.x < 0: + scroll.x = x + # left scroll on backspace - TODO IMPLEMENT + for i in 0..lines.high(): let line = lines[i] if i == 0: @@ -44,23 +53,10 @@ proc render*(textBuffer: TextBuffer, termBuffer: Buffer, prompt: string, scroll: else: termBuffer.write(" ".repeat(promptLen)) - let lineLen = line.len() - if lineLen < maxTextLen - 1: - scroll.x = 0 - termBuffer.write(line) - else: - const scrollOffset = 2 - # horizontal scroll - # right scroll - if x - scroll.x >= maxTextLen - scrollOffset: - scroll.x = x - maxTextLen + scrollOffset - # left scroll - if x - scroll.x < 0: - scroll.x = x - # left scroll - # keep what's in range - let fromPos = scroll.x - let toPos = min(scroll.x+maxTextLen-2, line.high()) + # keep what's in range + let fromPos = scroll.x + let toPos = min(scroll.x+maxTextLen-2, line.high()) + if fromPos <= line.high(): termBuffer.write(line[fromPos..toPos]) termBuffer.newLine() termBuffer.setCursorPos(x + promptLen - scroll.x, y - scroll.y)