diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2022-08-28 22:16:57 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2022-08-28 22:22:39 +0900 |
commit | 6fb41a202a97ad3f2437f6e5aee8890268560412 (patch) | |
tree | 5c4d9002481b8314b458bf6ef0812eac04cd40a7 /src/options.go | |
parent | 4bef330ce15d3ae80959415c24aba4700f5cbe35 (diff) |
Add --scheme=[default|path|history] option to choose scoring scheme
Close #2909
Close #2930
Diffstat (limited to 'src/options.go')
-rw-r--r-- | src/options.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/options.go b/src/options.go index 46bda82c..41782fa4 100644 --- a/src/options.go +++ b/src/options.go @@ -21,9 +21,9 @@ const usage = `usage: fzf [options] -x, --extended Extended-search mode (enabled by default; +x or --no-extended to disable) -e, --exact Enable Exact-match - --algo=TYPE Fuzzy matching algorithm: [v1|v2] (default: v2) -i Case-insensitive match (default: smart-case match) +i Case-sensitive match + --scheme=SCHEME Scoring scheme [default|path|history] --literal Do not normalize latin script letters before matching -n, --nth=N[,..] Comma-separated list of field index expressions for limiting search scope. Each can be a non-zero @@ -194,6 +194,7 @@ func (a previewOpts) sameContentLayout(b previewOpts) bool { type Options struct { Fuzzy bool FuzzyAlgo algo.Algo + Scheme string Extended bool Phony bool Case Case @@ -259,6 +260,7 @@ func defaultOptions() *Options { return &Options{ Fuzzy: true, FuzzyAlgo: algo.FuzzyMatchV2, + Scheme: "default", Extended: true, Phony: false, Case: CaseSmart, @@ -441,6 +443,15 @@ func parseAlgo(str string) algo.Algo { return algo.FuzzyMatchV2 } +func processScheme(opts *Options) { + if !algo.Init(opts.Scheme) { + errorExit("invalid scoring scheme (expected: default|path|history)") + } + if opts.Scheme == "history" { + opts.Criteria = []criterion{byScore} + } +} + func parseBorder(str string, optional bool) tui.BorderShape { switch str { case "rounded": @@ -1345,6 +1356,8 @@ func parseOptions(opts *Options, allArgs []string) { opts.Normalize = true case "--algo": opts.FuzzyAlgo = parseAlgo(nextString(allArgs, &i, "algorithm required (v1|v2)")) + case "--scheme": + opts.Scheme = strings.ToLower(nextString(allArgs, &i, "scoring scheme required (default|path|history)")) case "--expect": for k, v := range parseKeyChords(nextString(allArgs, &i, "key names required"), "key names required") { opts.Expect[k] = v @@ -1551,6 +1564,8 @@ func parseOptions(opts *Options, allArgs []string) { default: if match, value := optString(arg, "--algo="); match { opts.FuzzyAlgo = parseAlgo(value) + } else if match, value := optString(arg, "--scheme="); match { + opts.Scheme = strings.ToLower(value) } else if match, value := optString(arg, "-q", "--query="); match { opts.Query = value } else if match, value := optString(arg, "-f", "--filter="); match { @@ -1752,6 +1767,10 @@ func postProcessOptions(opts *Options) { theme.Cursor = boldify(theme.Cursor) theme.Spinner = boldify(theme.Spinner) } + + if opts.Scheme != "default" { + processScheme(opts) + } } func expectsArbitraryString(opt string) bool { |