From fac3927a5a32023f1d4af96b68ebd93e53d1bd28 Mon Sep 17 00:00:00 2001 From: Aki Kareha Date: Wed, 25 Mar 2026 19:34:59 +0900 Subject: [PATCH] Add scroll --- internal/editor/editor.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/internal/editor/editor.go b/internal/editor/editor.go index 877664e..6cd931f 100644 --- a/internal/editor/editor.go +++ b/internal/editor/editor.go @@ -20,6 +20,7 @@ type Editor struct { kb *keyboard col, row int x, y int + vrow int lines []string head, tail string insert *strings.Builder @@ -39,6 +40,7 @@ func Init() *Editor { row: 0, x: 0, y: 0, + vrow: 0, lines: make([]string, 1), head: "", tail: "", @@ -69,7 +71,7 @@ func (ed *Editor) drawBuffer() { _, h := ed.scr.size() y := 0 - for i := 0; i < len(ed.lines); i++ { + for i := ed.vrow; i < len(ed.lines); i++ { var line string if ed.mode == modeInsert && i == ed.row { line = ed.head + ed.insert.String() + ed.tail @@ -105,7 +107,7 @@ func (ed *Editor) drawStatus() { } func (ed *Editor) updateCursor() { - w, _ := ed.scr.size() + w, h := ed.scr.size() var dy int switch ed.mode { @@ -125,8 +127,14 @@ func (ed *Editor) updateCursor() { dy = width / w } + if ed.row < ed.vrow { + ed.vrow = ed.row + } else if ed.vrow+h-2 <= ed.row { + ed.vrow = ed.row - (h - 2) + } + y := 0 - for i := 0; i < ed.row; i++ { + for i := ed.vrow; i < ed.row; i++ { var line string if ed.mode == modeInsert && i == ed.row { line = ed.head + ed.insert.String() + ed.tail @@ -145,10 +153,11 @@ func (ed *Editor) repaint() { console.Clear() console.HomeCursor() + ed.updateCursor() + ed.drawBuffer() ed.drawStatus() - ed.updateCursor() console.MoveCursor(ed.x, ed.y) console.ShowCursor()