diff --git a/CHANGELOG.md b/CHANGELOG.md index e6cf9ef..c78821e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,10 @@ Also, fzf now offers three "style presets" for easier customization, which can b ``` - Added `toggle-multi-line` action - Added `toggle-hscroll` action +- A single-character delimiter is now treated as a plain string delimiter rather than a regular expression delimiter, even if it's a regular expression meta-character. + - This means you can just write `--delimiter '|'` instead of escaping it as `--delimiter '\|'` +- Bug fixes +- Bug fixes in fish scripts (thanks to @bitraid) 0.57.0 ------ diff --git a/src/options.go b/src/options.go index 404958c..ac4a1ac 100644 --- a/src/options.go +++ b/src/options.go @@ -755,18 +755,23 @@ func delimiterRegexp(str string) Delimiter { // Special handling of \t str = strings.ReplaceAll(str, "\\t", "\t") - // 1. Pattern does not contain any special character + // 1. Pattern is a single character + if len([]rune(str)) == 1 { + return Delimiter{str: &str} + } + + // 2. Pattern does not contain any special character if regexp.QuoteMeta(str) == str { return Delimiter{str: &str} } rx, e := regexp.Compile(str) - // 2. Pattern is not a valid regular expression + // 3. Pattern is not a valid regular expression if e != nil { return Delimiter{str: &str} } - // 3. Pattern as regular expression. Slow. + // 4. Pattern as regular expression. Slow. return Delimiter{regex: rx} } diff --git a/src/options_test.go b/src/options_test.go index 5def73d..40d2920 100644 --- a/src/options_test.go +++ b/src/options_test.go @@ -9,9 +9,13 @@ import ( ) func TestDelimiterRegex(t *testing.T) { - // Valid regex + // Valid regex, but a single character -> string delim := delimiterRegexp(".") - if delim.regex == nil || delim.str != nil { + if delim.regex != nil || *delim.str != "." { + t.Error(delim) + } + delim = delimiterRegexp("|") + if delim.regex != nil || *delim.str != "|" { t.Error(delim) } // Broken regex -> string