summaryrefslogtreecommitdiff
path: root/src/ranked_match.cc
diff options
context:
space:
mode:
authorJohannes Altmanninger <aclopte@gmail.com>2022-11-12 12:37:35 +0100
committerJohannes Altmanninger <aclopte@gmail.com>2022-11-19 15:20:31 +0100
commit59b8b99577ce38bc2b3cad330c1108eeb4faa447 (patch)
tree090fc69c9bdae6823a3049379e6dc315d0927375 /src/ranked_match.cc
parent91d45a100a39345f06d9789ded9172fe60887c27 (diff)
Accept "cd dir/" again instead of using a subdirectory
Commit 69053d962 (Use menu behavior when completing change-directory, 2022-07-19) made ":cd dir/" actually run ":cd dir/first-subdir", which can be surprising. This is usually irrelevant because you rarely type the trailing slash. However it does happen after correcting an error with `<backspace>` and friends. For for example, :cd d<tab>/f<backspace> results in :cd dir/ We should probably fix user expectations here. Do this by adding "dir/" as valid completion. This requires us to allow empty candidates in "RankedMatch" but there's no harm in that. This means we need to filter out empty completions from shell-script-candidates elsewhere. Alternative fix: we could revert 69053d962. This would remove the convenient menu behavior but that wouldn't be a huge deal. Fixes #4775
Diffstat (limited to 'src/ranked_match.cc')
-rw-r--r--src/ranked_match.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/ranked_match.cc b/src/ranked_match.cc
index 2a44d831..873a0613 100644
--- a/src/ranked_match.cc
+++ b/src/ranked_match.cc
@@ -112,12 +112,13 @@ static Optional<SubseqRes> subsequence_match_smart_case(StringView str, StringVi
template<typename TestFunc>
RankedMatch::RankedMatch(StringView candidate, StringView query, TestFunc func)
{
- if (candidate.empty() or query.length() > candidate.length())
+ if (query.length() > candidate.length())
return;
if (query.empty())
{
m_candidate = candidate;
+ m_matches = true;
return;
}
@@ -129,6 +130,7 @@ RankedMatch::RankedMatch(StringView candidate, StringView query, TestFunc func)
return;
m_candidate = candidate;
+ m_matches = true;
m_max_index = res->max_index;
if (res->single_word)