From 746e7a90ad3b36126564e9f5b751483c4b8869f1 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 17 Jan 2014 06:51:21 +0100 Subject: [PATCH] Add keybindings --- qutebrowser/app.py | 4 ++++ qutebrowser/commands.py | 3 +++ qutebrowser/keys.py | 23 +++++++++++++++++++++++ qutebrowser/widgets/statusbar.py | 4 ++++ 4 files changed, 34 insertions(+) create mode 100644 qutebrowser/keys.py diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 721a16682..ed2736fe5 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -1,6 +1,7 @@ import sys from PyQt5.QtWidgets import QWidget, QApplication from qutebrowser.widgets.mainwindow import MainWindow +from qutebrowser.keys import KeyParser import qutebrowser.commands as cmds def main(): @@ -8,11 +9,14 @@ def main(): mw = MainWindow() cp = cmds.CommandParser() + kp = KeyParser() + kp.set_cmd_text.connect(mw.status.cmd.set_cmd) mw.status.cmd.got_cmd.connect(cp.parse) mw.status.cmd.got_cmd.connect(mw.setFocus) cmds.cmd_dict['open'].signal.connect(mw.tabs.openurl) cmds.cmd_dict['tabopen'].signal.connect(mw.tabs.tabopen) cmds.cmd_dict['quit'].signal.connect(QApplication.closeAllWindows) # FIXME + kp.from_cmd_dict(cmds.cmd_dict, mw.tabs) mw.show() sys.exit(app.exec_()) diff --git a/qutebrowser/commands.py b/qutebrowser/commands.py index 304be3fcc..54bb39aa6 100644 --- a/qutebrowser/commands.py +++ b/qutebrowser/commands.py @@ -27,6 +27,7 @@ class CommandParser(QObject): class Command(QObject): nargs = 0 name = '' + key = None signal = None @classmethod @@ -48,6 +49,7 @@ class Command(QObject): class OpenCmd(Command): nargs = 1 name = 'open' + key = 'o' signal = pyqtSignal(str) def run(self, argv): @@ -56,6 +58,7 @@ class OpenCmd(Command): class TabOpenCmd(Command): nargs = 1 name = 'tabopen' + key = 'Shift+o' signal = pyqtSignal(str) def run(self, argv): diff --git a/qutebrowser/keys.py b/qutebrowser/keys.py new file mode 100644 index 000000000..37d60a360 --- /dev/null +++ b/qutebrowser/keys.py @@ -0,0 +1,23 @@ +from PyQt5.QtCore import QObject, Qt, pyqtSignal +from PyQt5.QtWidgets import QShortcut +from PyQt5.QtGui import QKeySequence + +class KeyParser(QObject): + set_cmd_text = pyqtSignal(str) + id_to_cmd = {} + + def from_cmd_dict(self, d, parent): + for cmd in d.values(): + if cmd.key is not None: + sc = QShortcut(parent) + sc.setKey(QKeySequence(cmd.key)) + sc.setContext(Qt.WidgetWithChildrenShortcut) + sc.activated.connect(self.handle) + self.id_to_cmd[sc.id()] = cmd + + def handle(self): + cmd = self.id_to_cmd[self.sender().id()] + text = ':' + cmd.name + if cmd.nargs and cmd.nargs != 0: + text += ' ' + self.set_cmd_text.emit(text) diff --git a/qutebrowser/widgets/statusbar.py b/qutebrowser/widgets/statusbar.py index e4bd97d20..5e8a2fd02 100644 --- a/qutebrowser/widgets/statusbar.py +++ b/qutebrowser/widgets/statusbar.py @@ -47,6 +47,10 @@ class StatusCommand(QLineEdit): self.setText('') self.got_cmd.emit(text) + def set_cmd(self, text): + self.setText(text) + self.setFocus() + class CmdValidator(QValidator): def validate(self, string, pos): if string.startswith(':'):