summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2016-10-18 01:11:04 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2016-10-18 01:13:57 +0900
commit0541c0dbcf96ff40bd80cb8359191dc0fa01d83d (patch)
treef94da19833c22b5bce88962719fb82dae58d2cd3
parent47b11cb8b48ae63399e7cc75e621a783ba217e15 (diff)
Use relative position instead of absolute distance for --tiebreak=end
Fix unintuitive result where `*fzf*/install` is ranked higher than `fzf/src/fzf/*fzf*-linux_386` on --tiebreak=end.
-rw-r--r--src/result.go12
-rw-r--r--test/test_go.rb2
2 files changed, 7 insertions, 7 deletions
diff --git a/src/result.go b/src/result.go
index bc1deb47..347cf599 100644
--- a/src/result.go
+++ b/src/result.go
@@ -57,7 +57,7 @@ func buildResult(item *Item, offsets []Offset, score int, trimLen int) *Result {
case byLength:
// If offsets is empty, trimLen will be 0, but we don't care
val = util.AsUint16(trimLen)
- case byBegin:
+ case byBegin, byEnd:
if validOffsetFound {
whitePrefixLen := 0
for idx := 0; idx < numChars; idx++ {
@@ -67,11 +67,11 @@ func buildResult(item *Item, offsets []Offset, score int, trimLen int) *Result {
break
}
}
- val = util.AsUint16(minBegin - whitePrefixLen)
- }
- case byEnd:
- if validOffsetFound {
- val = util.AsUint16(1 + numChars - maxEnd)
+ if criterion == byBegin {
+ val = util.AsUint16(minBegin - whitePrefixLen)
+ } else {
+ val = util.AsUint16(math.MaxUint16 - math.MaxUint16*(maxEnd-whitePrefixLen)/trimLen)
+ }
}
}
result.rank.points[idx] = val
diff --git a/test/test_go.rb b/test/test_go.rb
index ff4b173b..dd132d30 100644
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -604,8 +604,8 @@ class TestGoFZF < TestBase
], `#{FZF} -fo --tiebreak=end < #{tempname}`.split($/)
assert_equal [
- ' xxxxoxxx',
'xxxxxoxxx',
+ ' xxxxoxxx',
'xxxxoxxxx',
'xxxoxxxxxx',
'xxoxxxxxxx',