diff --git a/cointop/search.go b/cointop/search.go index dd06844..cc3f7c4 100644 --- a/cointop/search.go +++ b/cointop/search.go @@ -93,6 +93,22 @@ func (ct *Cointop) Search(q string) error { ct.State.lastSearchQuery = q } + canSearchSymbol := true + canSearchName := true + if strings.HasPrefix(q, "s:") { + canSearchSymbol = true + canSearchName = false + q = q[2:] + log.Debug("Search, by keyword") + } + + if strings.HasPrefix(q, "n:") { + canSearchSymbol = false + canSearchName = true + q = q[2:] + log.Debug("Search, by name") + } + idx := -1 min := -1 var hasprefixidx []int @@ -107,16 +123,23 @@ func (ct *Cointop) Search(q string) error { coin := ct.State.allCoins[i] name := strings.ToLower(coin.Name) symbol := strings.ToLower(coin.Symbol) + // if query matches symbol, return immediately - if symbol == q { + if canSearchSymbol && symbol == q { ct.GoToGlobalIndex(i) return nil } + + if !canSearchName { + continue + } + // if query matches name, return immediately if name == q { ct.GoToGlobalIndex(i) return nil } + // store index with the smallest levenshtein dist := levenshtein.DamerauLevenshteinDistance(name, q) if min == -1 || dist <= min { @@ -131,15 +154,22 @@ func (ct *Cointop) Search(q string) error { } } } + + if !canSearchName { + return nil + } + // go to row if prefix match if len(hasprefixidx) > 0 && hasprefixidx[0] != -1 && min > 0 { ct.GoToGlobalIndex(hasprefixidx[0]) return nil } + // go to row if levenshtein distance is small enough if idx > -1 && min <= 6 { ct.GoToGlobalIndex(idx) return nil } + return nil } diff --git a/docs/content/faq.md b/docs/content/faq.md index 70055f1..9acbf5c 100644 --- a/docs/content/faq.md +++ b/docs/content/faq.md @@ -135,6 +135,8 @@ draft: false The default key to open search is /. Type the search query after the `/` in the field and hit Enter. Each search starts from the current cursor position. To search for the same term again, hit / then Enter. + The default behaviour will start to search by symbol first, then it will continues searching by name if there is no result. To search by only symbol, type the search query after `/s:`. To search by only name, type the search query after `/n:`. + ## How do I exit search? Press Esc to exit search.