Split NormalKeyParser from CommandKeyParser
This commit is contained in:
parent
0def82fe8c
commit
8cca182734
@ -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),
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user