minor improvements

pull/58/head
Simon Let 6 years ago
parent a12862032a
commit daad6a80d7
  1. 49
      cmd/cli/main.go

@ -8,6 +8,7 @@ import (
"fmt"
"io/ioutil"
"log"
"math"
"net/http"
"os"
"sort"
@ -236,7 +237,7 @@ type item struct {
cmdLine string
pwd string
pwdTilde string
hits int
hits float64
}
func (i item) less(i2 item) bool {
@ -254,33 +255,64 @@ func (i item) key() string {
// return i.cmdLine == i2.cmdLine && i.pwd == i2.pwd
// }
// proper match for path is when whole directory is matched
// proper match for command is when term matches word delimeted by whitespace
func properMatch(str, term, padChar string) bool {
if strings.Contains(padChar+str+padChar, padChar+term+padChar) {
return true
}
return false
}
// newItemFromRecordForQuery creates new item from record based on given query
// returns error if the query doesn't match the record
func newItemFromRecordForQuery(record records.EnrichedRecord, query query) (item, error) {
// TODO: use color to highlight matches
hits := 0
const properMatchScore = 0.3
const actualPwdScore = 0.9
hits := 0.0
cmd := record.CmdLine
pwdTilde := strings.Replace(record.Pwd, record.Home, "~", 1)
pwdDisp := leftCutPadString(pwdTilde, 25)
pwdRawDisp := leftCutPadString(record.Pwd, 25)
var useRawPwd bool
for _, term := range query.terms {
alreadyHit := false
if strings.Contains(record.CmdLine, term) {
if alreadyHit == false {
hits++
}
alreadyHit = true
if properMatch(cmd, term, " ") {
hits += properMatchScore
}
cmd = strings.ReplaceAll(cmd, term, highlightMatch(term))
// NO continue
}
if strings.Contains(pwdTilde, term) {
if alreadyHit == false {
hits++
}
alreadyHit = true
if properMatch(pwdTilde, term, " ") {
hits += properMatchScore
}
pwdDisp = strings.ReplaceAll(pwdDisp, term, highlightMatch(term))
useRawPwd = false
continue
continue // IMPORTANT
}
if strings.Contains(record.Pwd, term) {
if alreadyHit == false {
hits++
}
alreadyHit = true
if properMatch(pwdTilde, term, " ") {
hits += properMatchScore
}
pwdRawDisp = strings.ReplaceAll(pwdRawDisp, term, highlightMatch(term))
useRawPwd = true
continue
continue // IMPORTANT
}
// if strings.Contains(record.GitOriginRemote, term) {
// hits++
@ -288,22 +320,22 @@ func newItemFromRecordForQuery(record records.EnrichedRecord, query query) (item
}
// actual pwd matches
if record.Pwd == query.pwd {
hits++
hits += actualPwdScore
pwdDisp = highlightMatchAlternative(pwdDisp)
pwdRawDisp = highlightMatchAlternative(pwdRawDisp)
// pwdRawDisp = highlightMatchAlternative(pwdRawDisp)
useRawPwd = false
}
if hits == 0 {
return item{}, errors.New("no match for given record and query")
}
display := " "
display := ""
// pwd := leftCutPadString("<"+pwdTilde+">", 20)
if useRawPwd {
display += pwdRawDisp
} else {
display += pwdDisp
}
hitsDisp := " " + rightCutPadString(strconv.Itoa(hits), 2)
hitsDisp := " " + rightCutPadString(strconv.Itoa(int(math.Floor(hits))), 2)
display += hitsDisp
// cmd := "<" + strings.ReplaceAll(record.CmdLine, "\n", ";") + ">"
cmd = strings.ReplaceAll(cmd, "\n", ";")
@ -326,7 +358,6 @@ func newItemFromRecordForQuery(record records.EnrichedRecord, query query) (item
}
func doHighlightString(str string, minLength int) string {
str = "> " + string(str[2:])
if len(str) < minLength {
str = str + strings.Repeat(" ", minLength-len(str))
}

Loading…
Cancel
Save