diff options
author | toofar <toofar@spalge.com> | 2023-12-21 12:28:22 +1300 |
---|---|---|
committer | toofar <toofar@spalge.com> | 2023-12-21 12:28:22 +1300 |
commit | fe1faa14b91253db99e9b4451ffb1a479feff1db (patch) | |
tree | a45b0486a844433b62480f8f56c032f2f863aa25 | |
parent | 04af4c657d3725fd2d3b556d9b88b44d3ada0be1 (diff) | |
parent | a0d1dd0f10bc72c9741370eaf1e4f75713ca5d42 (diff) | |
download | qutebrowser-fe1faa14b91253db99e9b4451ffb1a479feff1db.tar.gz qutebrowser-fe1faa14b91253db99e9b4451ffb1a479feff1db.zip |
Merge pull request #7955 from arza-zara/search_any_order
A few more completions will now match search terms in any order:
`:quickmark-*`, `:bookmark-*`, `:tab-take` and `:tab-select` (for the quick
and bookmark categories).
-rw-r--r-- | qutebrowser/completion/models/listcategory.py | 8 | ||||
-rw-r--r-- | tests/unit/completion/test_listcategory.py | 5 |
2 files changed, 10 insertions, 3 deletions
diff --git a/qutebrowser/completion/models/listcategory.py b/qutebrowser/completion/models/listcategory.py index edf24f5a4..e46f18c69 100644 --- a/qutebrowser/completion/models/listcategory.py +++ b/qutebrowser/completion/models/listcategory.py @@ -48,9 +48,11 @@ class ListCategory(QSortFilterProxyModel): log.completion.warning(f"Trimming {len(val)}-char pattern to 5000") val = val[:5000] self._pattern = val - val = re.sub(r' +', r' ', val) # See #1919 - val = re.escape(val) - val = val.replace(r'\ ', '.*') + + # Positive lookahead per search term. This means that all search terms must + # be matched but they can be matched anywhere in the string, so they can be + # in any order. For example "foo bar" -> "(?=.*foo)(?=.*bar)" + val = '(?=.*' + ')(?=.*'.join(map(re.escape, val.split())) + ')' rx = QRegularExpression(val, QRegularExpression.PatternOption.CaseInsensitiveOption) qtutils.ensure_valid(rx) self.setFilterRegularExpression(rx) diff --git a/tests/unit/completion/test_listcategory.py b/tests/unit/completion/test_listcategory.py index b91f391bb..80bcb5c39 100644 --- a/tests/unit/completion/test_listcategory.py +++ b/tests/unit/completion/test_listcategory.py @@ -32,6 +32,11 @@ from qutebrowser.completion.models import listcategory [('foo', 'bar'), ('bar', 'foo'), ('bar', 'bar')], [('foo', 'bar'), ('bar', 'foo')], [('foo', 'bar'), ('bar', 'foo')]), + + ('foo bar', + [('foobar', ''), ('barfoo', ''), ('foobaz', '')], + [('barfoo', ''), ('foobar', '')], + [('foobar', ''), ('barfoo', '')]), ]) def test_set_pattern(pattern, before, after, after_nosort, model_validator): """Validate the filtering and sorting results of set_pattern.""" |