diff --git a/README.asciidoc b/README.asciidoc index bac1cbdfa..6cb8ae069 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -141,9 +141,9 @@ Contributors, sorted by the number of commits in descending order: * Joel Torstensson * Claude * Lamar Pavel +* Alexander Cogneau * Austin Anderson * Artur Shaik -* Alexander Cogneau * ZDarian * Peter Vilim * John ShaggyTwoDope Jenkins diff --git a/qutebrowser/completion/completer.py b/qutebrowser/completion/completer.py index 2df964658..befd2c01d 100644 --- a/qutebrowser/completion/completer.py +++ b/qutebrowser/completion/completer.py @@ -24,7 +24,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QTimer from qutebrowser.config import config from qutebrowser.commands import cmdexc, cmdutils, runners from qutebrowser.utils import usertypes, log, objreg, utils -from qutebrowser.completion.models import instances +from qutebrowser.completion.models import instances, sortfilter class Completer(QObject): @@ -153,7 +153,7 @@ class Completer(QObject): model = None else: model = instances.get(completion) - return model + return sortfilter.CompletionFilterModel(source=model, parent=self) def _filter_cmdline_parts(self, parts, cursor_part): """Filter a list of commandline parts to exclude flags. @@ -202,7 +202,8 @@ class Completer(QObject): "{}".format(parts, cursor_part)) if cursor_part == 0: # '|' or 'set|' - return instances.get(usertypes.Completion.command) + model = instances.get(usertypes.Completion.command) + return sortfilter.CompletionFilterModel(source=model, parent=self) # delegate completion to command try: completions = cmdutils.cmd_dict[parts[0]].completion diff --git a/qutebrowser/completion/models/base.py b/qutebrowser/completion/models/base.py index a35c7f063..3a0590bcd 100644 --- a/qutebrowser/completion/models/base.py +++ b/qutebrowser/completion/models/base.py @@ -43,9 +43,11 @@ class BaseCompletionModel(QStandardItemModel): Class Attributes: COLUMN_WIDTHS: The width percentages of the columns used in the completion view. + DUMB_SORT: the dumb sorting used by the model """ COLUMN_WIDTHS = (30, 70, 0) + DUMB_SORT = None def __init__(self, parent=None): super().__init__(parent) diff --git a/qutebrowser/completion/models/instances.py b/qutebrowser/completion/models/instances.py index 0fc683488..7db82c8b6 100644 --- a/qutebrowser/completion/models/instances.py +++ b/qutebrowser/completion/models/instances.py @@ -27,10 +27,9 @@ Module attributes: import functools -from PyQt5.QtCore import pyqtSlot, Qt +from PyQt5.QtCore import pyqtSlot from qutebrowser.completion.models import miscmodels, urlmodel, configmodel -from qutebrowser.completion.models.sortfilter import CompletionFilterModel from qutebrowser.utils import objreg, usertypes, log, debug from qutebrowser.config import configdata @@ -38,31 +37,17 @@ from qutebrowser.config import configdata _instances = {} -def _init_model(klass, *args, dumb_sort=None, **kwargs): - """Helper to initialize a model. - - Args: - klass: The class of the model to initialize. - *args: Arguments to pass to the model. - **kwargs: Keyword arguments to pass to the model. - dumb_sort: Passed to CompletionFilterModel. - """ - app = objreg.get('app') - return CompletionFilterModel(klass(*args, parent=app, **kwargs), - dumb_sort=dumb_sort, parent=app) - - def _init_command_completion(): """Initialize the command completion model.""" log.completion.debug("Initializing command completion.") - model = _init_model(miscmodels.CommandCompletionModel) + model = miscmodels.CommandCompletionModel() _instances[usertypes.Completion.command] = model def _init_helptopic_completion(): """Initialize the helptopic completion model.""" log.completion.debug("Initializing helptopic completion.") - model = _init_model(miscmodels.HelpCompletionModel) + model = miscmodels.HelpCompletionModel() _instances[usertypes.Completion.helptopic] = model @@ -70,25 +55,23 @@ def _init_url_completion(): """Initialize the URL completion model.""" log.completion.debug("Initializing URL completion.") with debug.log_time(log.completion, 'URL completion init'): - model = _init_model(urlmodel.UrlCompletionModel, - dumb_sort=Qt.DescendingOrder) + model = urlmodel.UrlCompletionModel() _instances[usertypes.Completion.url] = model def _init_setting_completions(): """Initialize setting completion models.""" log.completion.debug("Initializing setting completion.") - _instances[usertypes.Completion.section] = _init_model( - configmodel.SettingSectionCompletionModel) + _instances[usertypes.Completion.section] = ( + configmodel.SettingSectionCompletionModel()) _instances[usertypes.Completion.option] = {} _instances[usertypes.Completion.value] = {} for sectname in configdata.DATA: - model = _init_model(configmodel.SettingOptionCompletionModel, sectname) + model = configmodel.SettingOptionCompletionModel(sectname) _instances[usertypes.Completion.option][sectname] = model _instances[usertypes.Completion.value][sectname] = {} for opt in configdata.DATA[sectname].keys(): - model = _init_model(configmodel.SettingValueCompletionModel, - sectname, opt) + model = configmodel.SettingValueCompletionModel(sectname, opt) _instances[usertypes.Completion.value][sectname][opt] = model @@ -100,7 +83,7 @@ def init_quickmark_completions(): _instances[usertypes.Completion.quickmark_by_name].deleteLater() except KeyError: pass - model = _init_model(miscmodels.QuickmarkCompletionModel) + model = miscmodels.QuickmarkCompletionModel() _instances[usertypes.Completion.quickmark_by_name] = model @@ -112,7 +95,7 @@ def init_bookmark_completions(): _instances[usertypes.Completion.bookmark_by_url].deleteLater() except KeyError: pass - model = _init_model(miscmodels.BookmarkCompletionModel) + model = miscmodels.BookmarkCompletionModel() _instances[usertypes.Completion.bookmark_by_url] = model @@ -124,7 +107,7 @@ def init_session_completion(): _instances[usertypes.Completion.sessions].deleteLater() except KeyError: pass - model = _init_model(miscmodels.SessionCompletionModel) + model = miscmodels.SessionCompletionModel() _instances[usertypes.Completion.sessions] = model diff --git a/qutebrowser/completion/models/sortfilter.py b/qutebrowser/completion/models/sortfilter.py index 3c247a0a2..3312e3e7a 100644 --- a/qutebrowser/completion/models/sortfilter.py +++ b/qutebrowser/completion/models/sortfilter.py @@ -41,11 +41,13 @@ class CompletionFilterModel(QSortFilterProxyModel): _sort_order: The order to use for sorting if using dumb_sort. """ - def __init__(self, source, parent=None, *, dumb_sort=None): + def __init__(self, source, parent=None): super().__init__(parent) super().setSourceModel(source) self.srcmodel = source self.pattern = '' + + dumb_sort = self.srcmodel.DUMB_SORT if dumb_sort is None: # pylint: disable=invalid-name self.lessThan = self.intelligentLessThan diff --git a/qutebrowser/completion/models/urlmodel.py b/qutebrowser/completion/models/urlmodel.py index ca1ef31fe..9a2ffdfd2 100644 --- a/qutebrowser/completion/models/urlmodel.py +++ b/qutebrowser/completion/models/urlmodel.py @@ -41,6 +41,7 @@ class UrlCompletionModel(base.BaseCompletionModel): TIME_COLUMN = 2 COLUMN_WIDTHS = (40, 50, 10) + DUMB_SORT = Qt.DescendingOrder def __init__(self, parent=None): super().__init__(parent)