diff options
author | Hubert Hirtz <hubert@hirtz.pm> | 2021-10-26 18:41:19 +0200 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-10-26 18:41:19 +0200 |
commit | 97685359be3244cedc64b10a3cab273aaa2988e4 (patch) | |
tree | 072f818c632eaece4041b44605d7b0e217d9583a /ui | |
parent | timeline drawing: fix off-by-one error (diff) |
Scroll up/down highlight by highlight
Diffstat (limited to 'ui')
-rw-r--r-- | ui/buffers.go | 30 | ||||
-rw-r--r-- | ui/ui.go | 8 |
2 files changed, 38 insertions, 0 deletions
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 @@ -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 { |