mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-17 21:43:50 -07:00
@@ -28,7 +28,8 @@ const usage = `usage: fzf [options]
|
||||
Search result
|
||||
+s, --no-sort Do not sort the result
|
||||
--tac Reverse the order of the input
|
||||
(e.g. 'history | fzf --tac --no-sort')
|
||||
--tiebreak=CRI Sort criterion when the scores are tied;
|
||||
[length|begin|end|index] (default: length)
|
||||
|
||||
Interface
|
||||
-m, --multi Enable multi-select with tab/shift-tab
|
||||
@@ -50,7 +51,6 @@ const usage = `usage: fzf [options]
|
||||
--expect=KEYS Comma-separated list of keys to complete fzf
|
||||
--toggle-sort=KEY Key to toggle sort
|
||||
--sync Synchronous search for multi-staged filtering
|
||||
(e.g. 'fzf --multi | fzf --sync')
|
||||
|
||||
Environment variables
|
||||
FZF_DEFAULT_COMMAND Default command to use when input is tty
|
||||
@@ -78,6 +78,16 @@ const (
|
||||
CaseRespect
|
||||
)
|
||||
|
||||
// Sort criteria
|
||||
type tiebreak int
|
||||
|
||||
const (
|
||||
byLength tiebreak = iota
|
||||
byBegin
|
||||
byEnd
|
||||
byIndex
|
||||
)
|
||||
|
||||
// Options stores the values of command-line options
|
||||
type Options struct {
|
||||
Mode Mode
|
||||
@@ -87,6 +97,7 @@ type Options struct {
|
||||
Delimiter *regexp.Regexp
|
||||
Sort int
|
||||
Tac bool
|
||||
Tiebreak tiebreak
|
||||
Multi bool
|
||||
Ansi bool
|
||||
Mouse bool
|
||||
@@ -116,6 +127,7 @@ func defaultOptions() *Options {
|
||||
Delimiter: nil,
|
||||
Sort: 1000,
|
||||
Tac: false,
|
||||
Tiebreak: byLength,
|
||||
Multi: false,
|
||||
Ansi: false,
|
||||
Mouse: true,
|
||||
@@ -238,6 +250,22 @@ func parseKeyChords(str string, message string) []int {
|
||||
return chords
|
||||
}
|
||||
|
||||
func parseTiebreak(str string) tiebreak {
|
||||
switch strings.ToLower(str) {
|
||||
case "length":
|
||||
return byLength
|
||||
case "index":
|
||||
return byIndex
|
||||
case "begin":
|
||||
return byBegin
|
||||
case "end":
|
||||
return byEnd
|
||||
default:
|
||||
errorExit("invalid sort criterion: " + str)
|
||||
}
|
||||
return byLength
|
||||
}
|
||||
|
||||
func checkToggleSort(str string) int {
|
||||
keys := parseKeyChords(str, "key name required")
|
||||
if len(keys) != 1 {
|
||||
@@ -265,6 +293,8 @@ func parseOptions(opts *Options, allArgs []string) {
|
||||
opts.Filter = &filter
|
||||
case "--expect":
|
||||
opts.Expect = parseKeyChords(nextString(allArgs, &i, "key names required"), "key names required")
|
||||
case "--tiebreak":
|
||||
opts.Tiebreak = parseTiebreak(nextString(allArgs, &i, "sort criterion required"))
|
||||
case "--toggle-sort":
|
||||
opts.ToggleSort = checkToggleSort(nextString(allArgs, &i, "key name required"))
|
||||
case "-d", "--delimiter":
|
||||
@@ -352,6 +382,8 @@ func parseOptions(opts *Options, allArgs []string) {
|
||||
opts.ToggleSort = checkToggleSort(value)
|
||||
} else if match, value := optString(arg, "--expect="); match {
|
||||
opts.Expect = parseKeyChords(value, "key names required")
|
||||
} else if match, value := optString(arg, "--tiebreak="); match {
|
||||
opts.Tiebreak = parseTiebreak(value)
|
||||
} else {
|
||||
errorExit("unknown option: " + arg)
|
||||
}
|
||||
|
Reference in New Issue
Block a user