From bf515a3d3251c54d04cd8e2e9f422cdd3f789fb8 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 29 Jun 2024 17:11:09 +0900 Subject: Add --walker-path-sep=CHAR to use a different path separator This is needed when you run a Windows binary on WSL or zsh on Windows where forward slashes are expected. export FZF_DEFAULT_OPTS='--walker-path-sep /' Close #3859 --- src/options.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/options.go') diff --git a/src/options.go b/src/options.go index d32daf10..58b5782b 100644 --- a/src/options.go +++ b/src/options.go @@ -147,6 +147,7 @@ Usage: fzf [options] --walker-root=DIR Root directory from which to start walker (default: .) --walker-skip=DIRS Comma-separated list of directory names to skip (default: .git,node_modules) + --walker-path-sep=CHAR Path separator to use (default: / on Unix, \ on Windows) Shell integration --bash Print script to set up Bash shell integration @@ -489,6 +490,7 @@ type Options struct { WalkerOpts walkerOpts WalkerRoot string WalkerSkip []string + WalkerSep byte Version bool Help bool CPUProfile string @@ -592,6 +594,7 @@ func defaultOptions() *Options { WalkerOpts: walkerOpts{file: true, hidden: true, follow: true}, WalkerRoot: ".", WalkerSkip: []string{".git", "node_modules"}, + WalkerSep: os.PathSeparator, Help: false, Version: false} } @@ -1904,6 +1907,14 @@ func parseMarkerMultiLine(str string) (*[3]string, error) { return &result, nil } +func parsePathSep(str string) (byte, error) { + bytes := []byte(str) + if len(bytes) != 1 { + return os.PathSeparator, errors.New("invalid path separator (expected: single-byte character)") + } + return bytes[0], nil +} + func parseOptions(index *int, opts *Options, allArgs []string) error { var err error var historyMax int @@ -2479,6 +2490,14 @@ func parseOptions(index *int, opts *Options, allArgs []string) error { return err } opts.WalkerSkip = filterNonEmpty(strings.Split(str, ",")) + case "--walker-path-sep": + str, err := nextString(allArgs, &i, "path separator required") + if err != nil { + return err + } + if opts.WalkerSep, err = parsePathSep(str); err != nil { + return err + } case "--profile-cpu": if opts.CPUProfile, err = nextString(allArgs, &i, "file path required: cpu"); err != nil { return err @@ -2666,6 +2685,10 @@ func parseOptions(index *int, opts *Options, allArgs []string) error { opts.WalkerRoot = value } else if match, value := optString(arg, "--walker-skip="); match { opts.WalkerSkip = filterNonEmpty(strings.Split(value, ",")) + } else if match, value := optString(arg, "--walker-path-sep="); match { + if opts.WalkerSep, err = parsePathSep(value); err != nil { + return err + } } else if match, value := optString(arg, "--hscroll-off="); match { if opts.HscrollOff, err = atoi(value); err != nil { return err -- cgit v1.2.3