From 59f9bb28dd145d04de0b042580b49dfa13de3ae5 Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Wed, 20 May 2015 16:58:42 +0100 Subject: Only replace double-slashes in find mode if they precede our flags This fixes #1673 --- content_scripts/vimium_frontend.coffee | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 7e0416aa..30606b26 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -718,21 +718,19 @@ updateFindModeQuery = -> # character. here we grep for the relevant escape sequences. findModeQuery.isRegex = settings.get 'regexFindMode' hasNoIgnoreCaseFlag = false - findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /\\./g, (match) -> - switch (match) - when "\\r" - findModeQuery.isRegex = true - return "" - when "\\R" - findModeQuery.isRegex = false - return "" - when "\\I" - hasNoIgnoreCaseFlag = true - return "" - when "\\\\" - return "\\" - else - return match + findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /(\\{1,2})([rRI])/g, (match, slashes, flag) -> + if slashes.length == 2 + # The escape code is double-escaped (ie. \\r rather than \r). Strip the extra slash. + "\\#{flag}" + else + switch (match) + when "\\r" + findModeQuery.isRegex = true + when "\\R" + findModeQuery.isRegex = false + when "\\I" + hasNoIgnoreCaseFlag = true + "" # default to 'smartcase' mode, unless noIgnoreCase is explicitly specified findModeQuery.ignoreCase = !hasNoIgnoreCaseFlag && !Utils.hasUpperCase(findModeQuery.parsedQuery) -- cgit v1.2.3 From e6878dabc61cd97e2ae4bba1ae157961faf007b8 Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Wed, 20 May 2015 17:50:44 +0100 Subject: Ensure that slashes are grouped in pairs in order for find mode queries This ensures that \\\r is interpreted as {escaped-\}{escaped-r} rather than \{escaped-\}r. --- content_scripts/vimium_frontend.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 30606b26..fbe26faa 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -718,7 +718,8 @@ updateFindModeQuery = -> # character. here we grep for the relevant escape sequences. findModeQuery.isRegex = settings.get 'regexFindMode' hasNoIgnoreCaseFlag = false - findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /(\\{1,2})([rRI])/g, (match, slashes, flag) -> + findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /(\\{1,2})([rRI]?)/g, (match, slashes, flag) -> + return match if flag == "" if slashes.length == 2 # The escape code is double-escaped (ie. \\r rather than \r). Strip the extra slash. "\\#{flag}" -- cgit v1.2.3 From 71b4d21af502bfbb914740c59fc9fb5d0f4957b0 Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Wed, 20 May 2015 18:23:34 +0100 Subject: Only modify find mode regexps if it's a flag we want to match --- content_scripts/vimium_frontend.coffee | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index fbe26faa..41fb772b 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -719,19 +719,15 @@ updateFindModeQuery = -> findModeQuery.isRegex = settings.get 'regexFindMode' hasNoIgnoreCaseFlag = false findModeQuery.parsedQuery = findModeQuery.rawQuery.replace /(\\{1,2})([rRI]?)/g, (match, slashes, flag) -> - return match if flag == "" - if slashes.length == 2 - # The escape code is double-escaped (ie. \\r rather than \r). Strip the extra slash. - "\\#{flag}" - else - switch (match) - when "\\r" - findModeQuery.isRegex = true - when "\\R" - findModeQuery.isRegex = false - when "\\I" - hasNoIgnoreCaseFlag = true - "" + return match if flag == "" or slashes.length != 1 + switch (flag) + when "r" + findModeQuery.isRegex = true + when "R" + findModeQuery.isRegex = false + when "I" + hasNoIgnoreCaseFlag = true + "" # default to 'smartcase' mode, unless noIgnoreCase is explicitly specified findModeQuery.ignoreCase = !hasNoIgnoreCaseFlag && !Utils.hasUpperCase(findModeQuery.parsedQuery) -- cgit v1.2.3