summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2017-08-10 12:40:53 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2017-08-10 12:40:53 +0900
commit6b18b144cf0a608433009515cddef74737bfce56 (patch)
tree33bf23b8eb698717dad678cfcedc6841f9870c59
parent6d53089cc1857255be7f7a33c139128c092d6f9b (diff)
downloadfzf-6b18b144cf0a608433009515cddef74737bfce56.tar.gz
Fix escaping of meta characters after ' or ! prefix
https://github.com/junegunn/fzf/issues/444#issuecomment-321432803
-rw-r--r--src/pattern.go8
-rw-r--r--test/test_go.rb10
2 files changed, 13 insertions, 5 deletions
diff --git a/src/pattern.go b/src/pattern.go
index c98f8ddc..00e3a3a6 100644
--- a/src/pattern.go
+++ b/src/pattern.go
@@ -182,7 +182,9 @@ func parseTerms(fuzzy bool, caseMode Case, normalize bool, str string) []termSet
}
}
- if strings.HasPrefix(text, "'") {
+ if _escapedPrefixRegex.MatchString(text) {
+ text = text[1:]
+ } else if strings.HasPrefix(text, "'") {
// Flip exactness
if fuzzy && !inv {
typ = termExact
@@ -200,10 +202,6 @@ func parseTerms(fuzzy bool, caseMode Case, normalize bool, str string) []termSet
text = text[1:]
}
- if _escapedPrefixRegex.MatchString(text) {
- text = text[1:]
- }
-
if len(text) > 0 {
if switchSet {
sets = append(sets, set)
diff --git a/test/test_go.rb b/test/test_go.rb
index 3460f56b..f8bd6b0c 100644
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -1400,6 +1400,16 @@ class TestGoFZF < TestBase
assert_equal [], `#{FZF} -f"'br" < #{tempname}`.lines.map(&:chomp)
assert_equal ["foo'bar"], `#{FZF} -f"\\'br" < #{tempname}`.lines.map(&:chomp)
end
+
+ def test_escaped_meta_characters_only_on_relevant_positions
+ input = <<~EOF
+ \\^
+ ^
+ EOF
+ writelines tempname, input.lines.map(&:chomp)
+ assert_equal %w[^ \\^], `#{FZF} -f"\\^" < #{tempname}`.lines.map(&:chomp)
+ assert_equal %w[\\^], `#{FZF} -f"'\\^" < #{tempname}`.lines.map(&:chomp)
+ end
end
module TestShell