diff --git a/build.sh b/build.sh index 1f37224..5c37d07 100755 --- a/build.sh +++ b/build.sh @@ -28,4 +28,6 @@ fi go build -trimpath -ldflags="-s -w -X main.versionString=${VERSION}" -o "${BINARY}" # Alternative build line, if you want to attach to the running process in the Go debugger: +# +# -gcflags='-N -l' disables optimizations and inlining, which makes debugging easier. # go build -ldflags="-X main.versionString=${VERSION}" -gcflags='-N -l' -o "${BINARY}" diff --git a/m/pagermode-search.go b/m/pagermode-search.go index 319d22d..a11ef3e 100644 --- a/m/pagermode-search.go +++ b/m/pagermode-search.go @@ -27,12 +27,12 @@ type PagerModeSearch struct { pattern *regexp.Regexp startLine linenumbers.LineNumber - lock *sync.Mutex + lock sync.Mutex searcher chan searchCommand } -func (m PagerModeSearch) drawFooter(_ string, _ string) { +func (m *PagerModeSearch) drawFooter(_ string, _ string) { width, height := m.pager.screen.Size() pos := 0 @@ -52,7 +52,7 @@ func (m PagerModeSearch) drawFooter(_ string, _ string) { } } -func (m PagerModeSearch) searcherSearch() *linenumbers.LineNumber { +func (m *PagerModeSearch) searcherSearch() *linenumbers.LineNumber { // Search to the end for position := m.startLine; ; position = position.NonWrappingAdd(1) { line := m.pager.reader.GetLine(position) @@ -78,7 +78,6 @@ func (m PagerModeSearch) searcherSearch() *linenumbers.LineNumber { } func (m *PagerModeSearch) initSearcher() { - m.lock = &sync.Mutex{} m.searcher = make(chan searchCommand, 1) go func() { @@ -177,9 +176,10 @@ func removeLastChar(s string) string { return s[:len(s)-size] } -func (m PagerModeSearch) onKey(key twin.KeyCode) { +func (m *PagerModeSearch) onKey(key twin.KeyCode) { switch key { case twin.KeyEscape, twin.KeyEnter: + m.searcher <- searchCommandDone //nolint:gosimple // The linter's advice is just wrong here m.pager.mode = PagerModeViewing{pager: m.pager} @@ -192,6 +192,7 @@ func (m PagerModeSearch) onKey(key twin.KeyCode) { m.updateSearchPattern() case twin.KeyUp, twin.KeyDown, twin.KeyPgUp, twin.KeyPgDown: + m.searcher <- searchCommandDone //nolint:gosimple // The linter's advice is just wrong here m.pager.mode = PagerModeViewing{pager: m.pager} m.pager.mode.onKey(key) @@ -201,7 +202,7 @@ func (m PagerModeSearch) onKey(key twin.KeyCode) { } } -func (m PagerModeSearch) onRune(char rune) { +func (m *PagerModeSearch) onRune(char rune) { m.pager.searchString = m.pager.searchString + string(char) m.updateSearchPattern() } diff --git a/m/pagermode-viewing.go b/m/pagermode-viewing.go index 3e76da0..9be2e2a 100644 --- a/m/pagermode-viewing.go +++ b/m/pagermode-viewing.go @@ -144,7 +144,7 @@ func (m PagerModeViewing) onRune(char rune) { p.handleScrolledDown() case '/': - p.mode = PagerModeSearch{pager: p} + p.mode = &PagerModeSearch{pager: p} p.TargetLineNumber = nil p.searchString = "" p.searchPattern = nil diff --git a/m/search_test.go b/m/search_test.go index 0e5ded9..1fe2906 100644 --- a/m/search_test.go +++ b/m/search_test.go @@ -13,7 +13,7 @@ func modeName(pager *Pager) string { return "Viewing" case PagerModeNotFound: return "NotFound" - case PagerModeSearch: + case *PagerModeSearch: return "Search" case *PagerModeGotoLine: return "GotoLine" @@ -116,7 +116,7 @@ func Test152(t *testing.T) { // Search for the first not-visible hit pager.searchString = "abcde" - searchMode := PagerModeSearch{pager: pager} + searchMode := &PagerModeSearch{pager: pager} pager.mode = searchMode // Scroll to the next search hit