From f0e11a4e0eab2873bf4bbd26ef5d4f8239f183ff Mon Sep 17 00:00:00 2001 From: Johan Walles Date: Wed, 15 May 2024 20:28:14 +0200 Subject: [PATCH] WIP: Go to the line with the search hit Some warnings, we should at least be using scrollPosition.isVisible(). --- m/pager.go | 3 +++ m/pagermode-search.go | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/m/pager.go b/m/pager.go index 9f24c1d..a1ddceb 100644 --- a/m/pager.go +++ b/m/pager.go @@ -445,6 +445,9 @@ func (p *Pager) StartPaging(screen twin.Screen, chromaStyle *chroma.Style, chrom case twin.EventTerminalBackgroundDetected: // Do nothing, we don't care about background color updates + case eventGoToLine: + p.scrollPosition = NewScrollPositionFromLineNumber(event.lineNumber, "goToLine") + default: log.Warnf("Unhandled event type: %v", event) } diff --git a/m/pagermode-search.go b/m/pagermode-search.go index ae8f4a1..319d22d 100644 --- a/m/pagermode-search.go +++ b/m/pagermode-search.go @@ -18,6 +18,10 @@ const ( searchCommandDone ) +type eventGoToLine struct { + lineNumber linenumbers.LineNumber +} + type PagerModeSearch struct { pager *Pager @@ -83,7 +87,7 @@ func (m *PagerModeSearch) initSearcher() { case searchCommandSearch: found := m.searcherSearch() if found != nil { - FIXME: Tell the pager to scroll to this position + m.pager.screen.Events() <- eventGoToLine{*found} } case searchCommandDone: return