diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 292890f37..d8c197dab 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -56,7 +56,7 @@ import qutebrowser.keyinput.modes as modes import qutebrowser.utils.message as message from qutebrowser.widgets.mainwindow import MainWindow from qutebrowser.widgets.crash import CrashDialog -from qutebrowser.keyinput.normalmode import CommandKeyParser +from qutebrowser.keyinput.normalmode import NormalKeyParser from qutebrowser.keyinput.insertmode import InsertKeyParser from qutebrowser.keyinput.hintmode import HintKeyParser from qutebrowser.commands.parsers import CommandParser, SearchParser @@ -125,7 +125,7 @@ class QuteBrowser(QApplication): self.commandparser = CommandParser() self.searchparser = SearchParser() self._keyparsers = { - 'normal': CommandKeyParser(self), + 'normal': NormalKeyParser(self), 'hint': HintKeyParser(self), 'insert': InsertKeyParser(self), } diff --git a/qutebrowser/keyinput/keyparser.py b/qutebrowser/keyinput/keyparser.py index 9c1b0181f..a70d39a68 100644 --- a/qutebrowser/keyinput/keyparser.py +++ b/qutebrowser/keyinput/keyparser.py @@ -25,6 +25,9 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QObject, QTimer from PyQt5.QtGui import QKeySequence import qutebrowser.config.config as config +import qutebrowser.utils.message as message +from qutebrowser.commands.parsers import (CommandParser, ArgumentCountError, + NoSuchCommandError) class KeyParser(QObject): @@ -333,3 +336,39 @@ class KeyParser(QObject): "defined!") if section == self._confsectname: self.read_config() + + +class CommandKeyParser(KeyParser): + + """KeyChainParser for command bindings. + + Attributes: + commandparser: Commandparser instance. + """ + + def __init__(self, parent=None, supports_count=None, + supports_chains=False): + super().__init__(parent, supports_count=supports_count, + supports_chains=supports_chains) + self.commandparser = CommandParser() + + def _run_or_fill(self, cmdstr, count=None, ignore_exc=True): + """Run the command in cmdstr or fill the statusbar if args missing. + + Args: + cmdstr: The command string. + count: Optional command count. + ignore_exc: Ignore exceptions. + """ + try: + self.commandparser.run(cmdstr, count=count, ignore_exc=ignore_exc) + except NoSuchCommandError: + pass + except ArgumentCountError: + logging.debug('Filling statusbar with partial command {}'.format( + cmdstr)) + message.set_cmd_text(':{} '.format(cmdstr)) + + def execute(self, cmdstr, count=None): + """Handle a completed keychain.""" + self._run_or_fill(cmdstr, count, ignore_exc=False) diff --git a/qutebrowser/keyinput/normalmode.py b/qutebrowser/keyinput/normalmode.py index bf6207b4f..456d3b488 100644 --- a/qutebrowser/keyinput/normalmode.py +++ b/qutebrowser/keyinput/normalmode.py @@ -24,43 +24,17 @@ Module attributes: import logging import qutebrowser.utils.message as message -from qutebrowser.keyinput.keyparser import KeyParser -from qutebrowser.commands.parsers import (CommandParser, ArgumentCountError, - NoSuchCommandError) +from qutebrowser.keyinput.keyparser import CommandKeyParser STARTCHARS = ":/?" -class CommandKeyParser(KeyParser): - - """KeyChainParser for command bindings. - - Attributes: - commandparser: Commandparser instance. - """ +class NormalKeyParser(CommandKeyParser): def __init__(self, parent=None): super().__init__(parent, supports_count=True, supports_chains=True) - self.commandparser = CommandParser() self.read_config('keybind') - def _run_or_fill(self, cmdstr, count=None, ignore_exc=True): - """Run the command in cmdstr or fill the statusbar if args missing. - - Args: - cmdstr: The command string. - count: Optional command count. - ignore_exc: Ignore exceptions. - """ - try: - self.commandparser.run(cmdstr, count=count, ignore_exc=ignore_exc) - except NoSuchCommandError: - pass - except ArgumentCountError: - logging.debug('Filling statusbar with partial command {}'.format( - cmdstr)) - message.set_cmd_text(':{} '.format(cmdstr)) - def _handle_single_key(self, e): """Override _handle_single_key to abort if the key is a startchar. @@ -75,7 +49,3 @@ class CommandKeyParser(KeyParser): message.set_cmd_text(txt) return True return super()._handle_single_key(e) - - def execute(self, cmdstr, count=None): - """Handle a completed keychain.""" - self._run_or_fill(cmdstr, count, ignore_exc=False)