From 97685359be3244cedc64b10a3cab273aaa2988e4 Mon Sep 17 00:00:00 2001 From: Hubert Hirtz Date: Tue, 26 Oct 2021 18:41:19 +0200 Subject: Scroll up/down highlight by highlight --- ui/buffers.go | 30 ++++++++++++++++++++++++++++++ ui/ui.go | 8 ++++++++ 2 files changed, 38 insertions(+) (limited to 'ui') diff --git a/ui/buffers.go b/ui/buffers.go index 0c24248..c126408 100644 --- a/ui/buffers.go +++ b/ui/buffers.go @@ -374,6 +374,36 @@ func (bs *BufferList) ScrollDown(n int) { } } +func (bs *BufferList) ScrollUpHighlight() bool { + b := &bs.list[bs.current] + ymin := b.scrollAmt + bs.tlHeight + y := 0 + for i := len(b.lines) - 1; 0 <= i; i-- { + line := &b.lines[i] + if ymin <= y && line.Highlight { + b.scrollAmt = y - bs.tlHeight + 1 + return true + } + y += len(line.NewLines(bs.tlInnerWidth)) + 1 + } + return false +} + +func (bs *BufferList) ScrollDownHighlight() bool { + b := &bs.list[bs.current] + yLastHighlight := 0 + y := 0 + for i := len(b.lines) - 1; 0 <= i && y < b.scrollAmt; i-- { + line := &b.lines[i] + if line.Highlight { + yLastHighlight = y + } + y += len(line.NewLines(bs.tlInnerWidth)) + 1 + } + b.scrollAmt = yLastHighlight + return b.scrollAmt != 0 +} + func (bs *BufferList) IsAtTop() bool { b := &bs.list[bs.current] return b.isAtTop diff --git a/ui/ui.go b/ui/ui.go index 7291042..ef81827 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -132,6 +132,14 @@ func (ui *UI) ScrollDownBy(n int) { ui.bs.ScrollDown(n) } +func (ui *UI) ScrollUpHighlight() bool { + return ui.bs.ScrollUpHighlight() +} + +func (ui *UI) ScrollDownHighlight() bool { + return ui.bs.ScrollDownHighlight() +} + func (ui *UI) ScrollMemberUpBy(n int) { ui.memberOffset -= n if ui.memberOffset < 0 { -- cgit v1.2.3