From 8914404d593d65dbe3953eebf42a89db8ae7d6c8 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Sat, 26 Dec 2015 16:27:53 +0100 Subject: [PATCH 01/10] allow to narrow down search by adding more words separated with space --- qutebrowser/completion/models/sortfilter.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 3312e3e7a..2b64c7603 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -27,7 +27,7 @@ from PyQt5.QtCore import QSortFilterProxyModel, QModelIndex, Qt from qutebrowser.utils import log, qtutils, debug from qutebrowser.completion.models import base as completion - +import re class CompletionFilterModel(QSortFilterProxyModel): @@ -69,6 +69,7 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val + self.patternRe = re.compile(val.casefold().replace(" ", ".*")); self.invalidateFilter() sortcol = 0 try: @@ -146,8 +147,11 @@ class CompletionFilterModel(QSortFilterProxyModel): data = self.srcmodel.data(idx) if not data: continue - elif self.pattern.casefold() in data.casefold(): - return True + else: + if self.patternRe.search(data.casefold()): + return True + else: + return False return False def intelligentLessThan(self, lindex, rindex): From f64a3451fa90c9839e8fc856cf65f86fabede04e Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Sat, 26 Dec 2015 17:15:46 +0100 Subject: [PATCH 02/10] fix lint errors --- qutebrowser/completion/models/sortfilter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 2b64c7603..bb108d5ff 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -46,6 +46,7 @@ class CompletionFilterModel(QSortFilterProxyModel): super().setSourceModel(source) self.srcmodel = source self.pattern = '' + self.patternre = None dumb_sort = self.srcmodel.DUMB_SORT if dumb_sort is None: @@ -69,7 +70,7 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - self.patternRe = re.compile(val.casefold().replace(" ", ".*")); + self.patternre = re.compile(val.casefold().replace(" ", ".*")) self.invalidateFilter() sortcol = 0 try: @@ -148,7 +149,7 @@ class CompletionFilterModel(QSortFilterProxyModel): if not data: continue else: - if self.patternRe.search(data.casefold()): + if self.patternre.search(data.casefold()): return True else: return False From 013df51fd2da330eeff1da56a6afe88f448a6ce6 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Sat, 26 Dec 2015 17:44:30 +0100 Subject: [PATCH 03/10] fix lint errors --- qutebrowser/completion/models/sortfilter.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index bb108d5ff..d930892b7 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -29,6 +29,7 @@ from qutebrowser.utils import log, qtutils, debug from qutebrowser.completion.models import base as completion import re + class CompletionFilterModel(QSortFilterProxyModel): """Subclass of QSortFilterProxyModel with custom sorting/filtering. @@ -149,10 +150,7 @@ class CompletionFilterModel(QSortFilterProxyModel): if not data: continue else: - if self.patternre.search(data.casefold()): - return True - else: - return False + return self.patternre.search(data.casefold()) == True return False def intelligentLessThan(self, lindex, rindex): From a6526885667ea629ac77c8fba7aab770d723381d Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Sat, 26 Dec 2015 18:04:01 +0100 Subject: [PATCH 04/10] fix lint errors --- qutebrowser/completion/models/sortfilter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index d930892b7..fdcd2818a 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -150,7 +150,7 @@ class CompletionFilterModel(QSortFilterProxyModel): if not data: continue else: - return self.patternre.search(data.casefold()) == True + return self.patternre.search(data.casefold()) return False def intelligentLessThan(self, lindex, rindex): From 1f3a8a60d8c691a77a30bf1023c9b59a88e9ba6b Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Sat, 26 Dec 2015 23:44:03 +0100 Subject: [PATCH 05/10] escape search string, explicit boolean test --- qutebrowser/completion/models/sortfilter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index fdcd2818a..bb45ce7c1 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -71,7 +71,7 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - self.patternre = re.compile(val.casefold().replace(" ", ".*")) + self.patternre = re.compile(re.escape(val.casefold()).replace("\ ", ".*")) self.invalidateFilter() sortcol = 0 try: @@ -149,8 +149,8 @@ class CompletionFilterModel(QSortFilterProxyModel): data = self.srcmodel.data(idx) if not data: continue - else: - return self.patternre.search(data.casefold()) + elif self.patternre.search(data.casefold()): + return True return False def intelligentLessThan(self, lindex, rindex): From 4caffccca65ece2ba213bdfa0d1a628c18c20af0 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Wed, 30 Dec 2015 15:32:40 +0100 Subject: [PATCH 06/10] fix lint, highlight properly --- qutebrowser/completion/completiondelegate.py | 4 ++-- qutebrowser/completion/models/sortfilter.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/qutebrowser/completion/completiondelegate.py b/qutebrowser/completion/completiondelegate.py index d07e7da16..7defbacd3 100644 --- a/qutebrowser/completion/completiondelegate.py +++ b/qutebrowser/completion/completiondelegate.py @@ -198,8 +198,8 @@ class CompletionItemDelegate(QStyledItemDelegate): columns_to_filter = index.model().srcmodel.columns_to_filter if index.column() in columns_to_filter and pattern: repl = r'\g<0>' - text = re.sub(re.escape(pattern), repl, self._opt.text, - flags=re.IGNORECASE) + text = re.sub(re.escape(pattern).replace(r'\ ', r'|'), + repl, self._opt.text, flags=re.IGNORECASE) self._doc.setHtml(text) else: self._doc.setPlainText(self._opt.text) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index bb45ce7c1..7b2d9bf6e 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -71,7 +71,8 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - self.patternre = re.compile(re.escape(val.casefold()).replace("\ ", ".*")) + self.patternre = re.compile(re.escape(val.casefold()) + .replace(r'\ ', r'.*')) self.invalidateFilter() sortcol = 0 try: From ed032ea1075cf969dd356209b6381ac20514e127 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Wed, 30 Dec 2015 15:54:50 +0100 Subject: [PATCH 07/10] fix lint --- qutebrowser/completion/models/sortfilter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 7b2d9bf6e..f3eb6288a 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -71,8 +71,8 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - self.patternre = re.compile(re.escape(val.casefold()) - .replace(r'\ ', r'.*')) + self.patternre = re.compile(re.escape( + val.casefold()).replace(r'\ ', r'.*')) self.invalidateFilter() sortcol = 0 try: From 382f7c6bf1712b91df16cac99550626ec1863096 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Wed, 30 Dec 2015 16:15:17 +0100 Subject: [PATCH 08/10] fix lint --- qutebrowser/completion/models/sortfilter.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index f3eb6288a..37dff0bd9 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -71,8 +71,10 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - self.patternre = re.compile(re.escape( - val.casefold()).replace(r'\ ', r'.*')) + val = val.casefold() + val = re.escape(val) + val = val.replace(r'\ ', r'.*') + self.patternre = re.compile(val) self.invalidateFilter() sortcol = 0 try: From ec8dc35a68c73382c70ce90de3dd94fd48fc252c Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Wed, 6 Jan 2016 07:38:55 +0100 Subject: [PATCH 09/10] rename patternre, use ignorecase in re instead of casefold --- qutebrowser/completion/models/sortfilter.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 37dff0bd9..26ba28712 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -47,7 +47,7 @@ class CompletionFilterModel(QSortFilterProxyModel): super().setSourceModel(source) self.srcmodel = source self.pattern = '' - self.patternre = None + self.pattern_re = None dumb_sort = self.srcmodel.DUMB_SORT if dumb_sort is None: @@ -71,10 +71,9 @@ class CompletionFilterModel(QSortFilterProxyModel): """ with debug.log_time(log.completion, 'Setting filter pattern'): self.pattern = val - val = val.casefold() val = re.escape(val) val = val.replace(r'\ ', r'.*') - self.patternre = re.compile(val) + self.pattern_re = re.compile(val, re.IGNORECASE) self.invalidateFilter() sortcol = 0 try: @@ -152,7 +151,7 @@ class CompletionFilterModel(QSortFilterProxyModel): data = self.srcmodel.data(idx) if not data: continue - elif self.patternre.search(data.casefold()): + elif self.pattern_re.search(data): return True return False From 20cdb45da5560281d7c5928e9719cea83a0d99e6 Mon Sep 17 00:00:00 2001 From: Milan Svoboda Date: Wed, 6 Jan 2016 21:52:56 +0100 Subject: [PATCH 10/10] use greedy highlighting --- qutebrowser/completion/completiondelegate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/completion/completiondelegate.py b/qutebrowser/completion/completiondelegate.py index 7defbacd3..ad992f794 100644 --- a/qutebrowser/completion/completiondelegate.py +++ b/qutebrowser/completion/completiondelegate.py @@ -198,7 +198,7 @@ class CompletionItemDelegate(QStyledItemDelegate): columns_to_filter = index.model().srcmodel.columns_to_filter if index.column() in columns_to_filter and pattern: repl = r'\g<0>' - text = re.sub(re.escape(pattern).replace(r'\ ', r'|'), + text = re.sub(re.escape(pattern).replace(r'\ ', r'.*'), repl, self._opt.text, flags=re.IGNORECASE) self._doc.setHtml(text) else: