m/fzf
1
0
mirror of https://github.com/junegunn/fzf.git synced 2025-11-15 23:03:47 -05:00

Add $FZF_DEFAULT_OPTS_FILE (#3618)

For those who prefer to manage default options in a file.
If the file is not found, fzf will exit with an error.

We're not setting a default value for it because:

1. it's hard to find a default value that can be universally agreed upon
2. to avoid fzf having to check for the existence of the file even when it's not used
This commit is contained in:
Junegunn Choi
2024-02-29 09:49:33 +09:00
committed by GitHub
parent 3dd42f5aa2
commit 1833670fb9
5 changed files with 50 additions and 7 deletions

View File

@@ -126,8 +126,8 @@ const usage = `usage: fzf [options]
Environment variables
FZF_DEFAULT_COMMAND Default command to use when input is tty
FZF_DEFAULT_OPTS Default options
(e.g. '--layout=reverse --inline-info')
FZF_DEFAULT_OPTS Default options (e.g. '--layout=reverse --info=inline')
FZF_DEFAULT_OPTS_FILE Location of the file to read default options from
FZF_API_KEY X-API-Key header for HTTP server (--listen)
`
@@ -421,8 +421,10 @@ func help(code int) {
os.Exit(code)
}
var errorContext = ""
func errorExit(msg string) {
os.Stderr.WriteString(msg + "\n")
os.Stderr.WriteString(errorContext + msg + "\n")
os.Exit(exitError)
}
@@ -2167,13 +2169,36 @@ func ParseOptions() *Options {
}
}
// Options from Env var
words, _ := shellwords.Parse(os.Getenv("FZF_DEFAULT_OPTS"))
// 1. Options from $FZF_DEFAULT_OPTS_FILE
if path := os.Getenv("FZF_DEFAULT_OPTS_FILE"); path != "" {
bytes, err := os.ReadFile(path)
if err != nil {
errorContext = "$FZF_DEFAULT_OPTS_FILE: "
errorExit(err.Error())
}
words, parseErr := shellwords.Parse(string(bytes))
if parseErr != nil {
errorContext = path + ": "
errorExit(parseErr.Error())
}
if len(words) > 0 {
parseOptions(opts, words)
}
}
// 2. Options from $FZF_DEFAULT_OPTS string
words, parseErr := shellwords.Parse(os.Getenv("FZF_DEFAULT_OPTS"))
errorContext = "$FZF_DEFAULT_OPTS: "
if parseErr != nil {
errorExit(parseErr.Error())
}
if len(words) > 0 {
parseOptions(opts, words)
}
// Options from command-line arguments
// 3. Options from command-line arguments
errorContext = ""
parseOptions(opts, os.Args[1:])
postProcessOptions(opts)