From 243a76002c93b474cf8401b37670a43803a0a2d2 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Fri, 24 Jan 2025 00:54:53 +0900 Subject: Option to prioritize file name matches (#4192) * 'pathname' is a new tiebreak option for prioritizing matches occurring in the file name of the path. * `--scheme=path` will automatically set `--tiebreak=pathname,length`. * fzf will automatically choose `path` scheme when the input is a TTY device, where fzf would start its built-in walker or run `$FZF_DEFAULT_COMMAND` which is usually a command for listing files. Close #4191 --- src/result.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/result.go') diff --git a/src/result.go b/src/result.go index 10e0c6d6..28d42e7d 100644 --- a/src/result.go +++ b/src/result.go @@ -69,6 +69,21 @@ func buildResult(item *Item, offsets []Offset, score int) Result { } case byLength: val = item.TrimLength() + case byPathname: + if validOffsetFound { + // lastDelim := strings.LastIndexByte(item.text.ToString(), '/') + lastDelim := -1 + s := item.text.ToString() + for i := len(s) - 1; i >= 0; i-- { + if s[i] == '/' || s[i] == '\\' { + lastDelim = i + break + } + } + if lastDelim <= minBegin { + val = util.AsUint16(minBegin - lastDelim) + } + } case byBegin, byEnd: if validOffsetFound { whitePrefixLen := 0 -- cgit v1.2.3