From 10f28027dc08813936eb739aa5d8abf4b703915b Mon Sep 17 00:00:00 2001 From: sloumdrone Date: Wed, 18 Dec 2019 22:17:52 -0800 Subject: [PATCH] Working search --- client.go | 29 ++++++++++++++++------------- page.go | 12 ++++++++++-- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/client.go b/client.go index c6a916b..8be1973 100644 --- a/client.go +++ b/client.go @@ -90,9 +90,8 @@ func (c *client) Draw() { var re *regexp.Regexp if c.Options["theme"] == "inverse" { screen.WriteString("\033[7m") - } else if c.Options["theme"] == "color" { - re = regexp.MustCompile(`\033\[(?:\d*;?)+[A-Za-z]`) } + re = regexp.MustCompile(`\033\[(?:\d*;?)+[A-Za-z]`) if c.BookMarks.IsOpen { bm := c.BookMarks.Render(c.Width, c.Height) bmWidth := len([]rune(bm[0])) @@ -137,12 +136,12 @@ func (c *client) Draw() { for i := 0; i < c.Height-3; i++ { if i < len(pageContent) { extra := 0 - if c.Options["theme"] == "color" { - escapes := re.FindAllString(pageContent[i], -1) - for _, esc := range escapes { - extra += len(esc) - } + // if c.Options["theme"] == "color" { + escapes := re.FindAllString(pageContent[i], -1) + for _, esc := range escapes { + extra += len(esc) } + // } screen.WriteString(fmt.Sprintf("%-*.*s", c.Width+extra, c.Width+extra, pageContent[i])) screen.WriteString("\n") } else { @@ -270,7 +269,10 @@ func (c *client) TakeControlInput() { c.SetMessage(err.Error(), true) c.DrawMessage() } - c.NextSearchItem(0) + err = c.NextSearchItem(0) + if err != nil { + c.Draw() + } case ':', ' ': // Process a command c.ClearMessage() @@ -1105,20 +1107,21 @@ func (c *client) NextSearchItem(dir int) error { return fmt.Errorf("The search is over before it has begun") } c.PageState.History[c.PageState.Position].SearchIndex += dir - if c.PageState.History[c.PageState.Position].SearchIndex < 0 { + page.SearchIndex += dir + if page.SearchIndex < 0 { c.PageState.History[c.PageState.Position].SearchIndex = 0 + page.SearchIndex = 0 } - if page.SearchIndex+dir >= len(page.FoundLinkLines) { + if page.SearchIndex >= len(page.FoundLinkLines) { c.PageState.History[c.PageState.Position].SearchIndex = len(page.FoundLinkLines) - 1 return fmt.Errorf("The search path goes no further") - } else if page.SearchIndex+dir < 0 { + } else if page.SearchIndex < 0 { c.PageState.History[c.PageState.Position].SearchIndex = 0 return fmt.Errorf("You are at the beginning of the search path") } - index := c.PageState.History[c.PageState.Position].SearchIndex - diff := c.PageState.History[c.PageState.Position].FoundLinkLines[index] - page.ScrollPosition + diff := page.FoundLinkLines[page.SearchIndex] - page.ScrollPosition c.ScrollForSearch(diff) c.Draw() return nil diff --git a/page.go b/page.go index f287607..10d23b0 100644 --- a/page.go +++ b/page.go @@ -128,7 +128,11 @@ func (p *Page) HighlightFoundText() { if found < 0 { continue } - ln = strings.ReplaceAll(ln, p.SearchTerm, fmt.Sprintf("\033[7m%s\033[0m", p.SearchTerm)) + format := "\033[7m%s\033[27m" + if bombadillo.Options["theme"] == "inverse" { + format = "\033[27m%s\033[7m" + } + ln = strings.ReplaceAll(ln, p.SearchTerm, fmt.Sprintf(format, p.SearchTerm)) p.WrappedContent[i] = ln } } @@ -140,12 +144,16 @@ func (p *Page) FindText() { if s == "" { return } + format := "\033[7m%s\033[27m" + if bombadillo.Options["theme"] == "inverse" { + format = "\033[27m%s\033[7m" + } for i, ln := range p.WrappedContent { found := strings.Index(ln, s) if found < 0 { continue } - ln = strings.ReplaceAll(ln, s, fmt.Sprintf("\033[7m%s\033[0m", s)) + ln = strings.ReplaceAll(ln, s, fmt.Sprintf(format, s)) p.WrappedContent[i] = ln p.FoundLinkLines = append(p.FoundLinkLines, i) }