Only consider the lengths of the relevant parts when --nth is set

This commit is contained in:
Junegunn Choi 2015-08-01 23:13:24 +09:00
parent 5e90f0a57b
commit dea60b11bc
2 changed files with 36 additions and 1 deletions

View File

@ -63,7 +63,16 @@ func (i *Item) Rank(cache bool) Rank {
var tiebreak uint16 var tiebreak uint16
switch rankTiebreak { switch rankTiebreak {
case byLength: case byLength:
tiebreak = uint16(len(*i.text)) // It is guaranteed that .transformed in not null in normal execution
if i.transformed != nil {
lenSum := 0
for _, token := range *i.transformed {
lenSum += len(*token.text)
}
tiebreak = uint16(lenSum)
} else {
tiebreak = uint16(len(*i.text))
}
case byBegin: case byBegin:
// We can't just look at i.offsets[0][0] because it can be an inverse term // We can't just look at i.offsets[0][0] because it can be an inverse term
tiebreak = uint16(minBegin) tiebreak = uint16(minBegin)

View File

@ -501,6 +501,32 @@ class TestGoFZF < TestBase
assert_equal input, `cat #{tempname} | #{FZF} -f"!z" -x --tiebreak end`.split($/) assert_equal input, `cat #{tempname} | #{FZF} -f"!z" -x --tiebreak end`.split($/)
end end
def test_tiebreak_length_with_nth
input = %w[
1:hell
123:hello
12345:he
1234567:h
]
writelines tempname, input
output = %w[
1:hell
12345:he
123:hello
1234567:h
]
assert_equal output, `cat #{tempname} | #{FZF} -fh`.split($/)
output = %w[
1234567:h
12345:he
1:hell
123:hello
]
assert_equal output, `cat #{tempname} | #{FZF} -fh -n2 -d:`.split($/)
end
def test_invalid_cache def test_invalid_cache
tmux.send_keys "(echo d; echo D; echo x) | #{fzf '-q d'}", :Enter tmux.send_keys "(echo d; echo D; echo x) | #{fzf '-q d'}", :Enter
tmux.until { |lines| lines[-2].include? '2/3' } tmux.until { |lines| lines[-2].include? '2/3' }