diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 8b2aa7d69..44178bae3 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -45,6 +45,7 @@ import qutebrowser.resources from qutebrowser.completion.models import miscmodels from qutebrowser.commands import cmdutils, runners, cmdexc from qutebrowser.config import style, config, websettings, configexc +from qutebrowser.config.parsers import keyconf from qutebrowser.browser import (urlmarks, adblock, history, browsertab, downloads) from qutebrowser.browser.network import proxy @@ -423,6 +424,10 @@ def _init_modules(args, crash_handler): config.init(qApp) save_manager.init_autosave() + log.init.debug("Initializing keys...") + keyconf.init(qApp) + save_manager.init_autosave() + log.init.debug("Initializing sql...") sql.init() diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py index dd71f5333..0b1893fc0 100644 --- a/qutebrowser/config/config.py +++ b/qutebrowser/config/config.py @@ -249,7 +249,6 @@ def init(parent=None): parent: The parent to pass to QObjects which get initialized. """ _init_main_config(parent) - _init_key_config(parent) _init_misc() diff --git a/qutebrowser/config/parsers/keyconf.py b/qutebrowser/config/parsers/keyconf.py index 5a780a786..751eafb71 100644 --- a/qutebrowser/config/parsers/keyconf.py +++ b/qutebrowser/config/parsers/keyconf.py @@ -22,15 +22,46 @@ import collections import os.path import itertools +import sys from PyQt5.QtCore import pyqtSignal, QObject from qutebrowser.config import configdata, textwrapper from qutebrowser.commands import cmdutils, cmdexc -from qutebrowser.utils import log, utils, qtutils, message, usertypes +from qutebrowser.utils import (log, utils, qtutils, message, usertypes, objreg, + standarddir, error) from qutebrowser.completion.models import miscmodels +def init(parent=None): + """Read and save keybindings. + + Args: + parent: The parent to use for the KeyConfigParser. + """ + args = objreg.get('args') + try: + key_config = KeyConfigParser(standarddir.config(), 'keys.conf', + args.relaxed_config, parent=parent) + except (KeyConfigError, UnicodeDecodeError) as e: + log.init.exception(e) + errstr = "Error while reading key config:\n" + if e.lineno is not None: + errstr += "In line {}: ".format(e.lineno) + error.handle_fatal_exc(e, args, "Error while reading key config!", + pre_text=errstr) + # We didn't really initialize much so far, so we just quit hard. + sys.exit(usertypes.Exit.err_key_config) + else: + objreg.register('key-config', key_config) + save_manager = objreg.get('save-manager') + filename = os.path.join(standarddir.config(), 'keys.conf') + save_manager.add_saveable( + 'key-config', key_config.save, key_config.config_dirty, + config_opt=('general', 'auto-save-config'), filename=filename, + dirty=key_config.is_dirty) + + class KeyConfigError(Exception): """Raised on errors with the key config.