Refactor init
This commit is contained in:
parent
c9d5928dce
commit
86fdf981e3
@ -42,10 +42,10 @@ from qutebrowser.config import (style, config, websettings, iniparsers,
|
|||||||
from qutebrowser.network import qutescheme, proxy
|
from qutebrowser.network import qutescheme, proxy
|
||||||
from qutebrowser.browser import quickmarks, cookies, downloads, cache, hints
|
from qutebrowser.browser import quickmarks, cookies, downloads, cache, hints
|
||||||
from qutebrowser.widgets import mainwindow, console, crash
|
from qutebrowser.widgets import mainwindow, console, crash
|
||||||
from qutebrowser.keyinput import modeparsers, keyparser, modeman
|
from qutebrowser.keyinput import modeman
|
||||||
from qutebrowser.utils import (log, version, message, utilcmds, readline,
|
from qutebrowser.utils import (log, version, message, utilcmds, readline,
|
||||||
utils, qtutils, urlutils, debug, objreg)
|
utils, qtutils, urlutils, debug, objreg,
|
||||||
from qutebrowser.utils import usertypes as utypes
|
usertypes)
|
||||||
|
|
||||||
|
|
||||||
class Application(QApplication):
|
class Application(QApplication):
|
||||||
@ -67,38 +67,88 @@ class Application(QApplication):
|
|||||||
Args:
|
Args:
|
||||||
Argument namespace from argparse.
|
Argument namespace from argparse.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-statements
|
|
||||||
if args.debug:
|
|
||||||
# We don't enable this earlier because some imports trigger
|
|
||||||
# warnings (which are not our fault).
|
|
||||||
warnings.simplefilter('default')
|
|
||||||
qt_args = qtutils.get_args(args)
|
|
||||||
log.init.debug("Qt arguments: {}, based on {}".format(qt_args, args))
|
|
||||||
super().__init__(qt_args)
|
|
||||||
self._quit_status = {
|
self._quit_status = {
|
||||||
'crash': True,
|
'crash': True,
|
||||||
'tabs': False,
|
'tabs': False,
|
||||||
'main': False,
|
'main': False,
|
||||||
}
|
}
|
||||||
objreg.register('app', self)
|
|
||||||
self._shutting_down = False
|
self._shutting_down = False
|
||||||
self._crashdlg = None
|
self._crashdlg = None
|
||||||
self._crashlogfile = None
|
self._crashlogfile = None
|
||||||
|
self._commandrunner = None
|
||||||
|
|
||||||
|
if args.debug:
|
||||||
|
# We don't enable this earlier because some imports trigger
|
||||||
|
# warnings (which are not our fault).
|
||||||
|
warnings.simplefilter('default')
|
||||||
|
|
||||||
|
qt_args = qtutils.get_args(args)
|
||||||
|
log.init.debug("Qt arguments: {}, based on {}".format(qt_args, args))
|
||||||
|
super().__init__(qt_args)
|
||||||
sys.excepthook = self._exception_hook
|
sys.excepthook = self._exception_hook
|
||||||
|
|
||||||
self._args = args
|
self._args = args
|
||||||
objreg.register('args', args)
|
objreg.register('args', args)
|
||||||
|
QTimer.singleShot(0, self._process_init_args)
|
||||||
|
|
||||||
|
objreg.register('app', self)
|
||||||
|
|
||||||
|
if self._args.version:
|
||||||
|
print(version.version())
|
||||||
|
print()
|
||||||
|
print()
|
||||||
|
print(qutebrowser.__copyright__)
|
||||||
|
print()
|
||||||
|
print(version.GPL_BOILERPLATE.strip())
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
log.init.debug("Starting init...")
|
log.init.debug("Starting init...")
|
||||||
self._init_misc()
|
self.setQuitOnLastWindowClosed(False)
|
||||||
|
self.setOrganizationName("qutebrowser")
|
||||||
|
self.setApplicationName("qutebrowser")
|
||||||
|
self.setApplicationVersion(qutebrowser.__version__)
|
||||||
utils.actute_warning()
|
utils.actute_warning()
|
||||||
|
self._init_modules()
|
||||||
|
|
||||||
|
log.init.debug("Initializing eventfilter...")
|
||||||
|
mode_manager = objreg.get('mode-manager')
|
||||||
|
self.installEventFilter(mode_manager)
|
||||||
|
|
||||||
|
log.init.debug("Connecting signals...")
|
||||||
|
self._connect_signals()
|
||||||
|
modeman.enter(usertypes.KeyMode.normal, 'init')
|
||||||
|
|
||||||
|
log.init.debug("Showing mainwindow...")
|
||||||
|
if not args.nowindow:
|
||||||
|
objreg.get('main-window').show()
|
||||||
|
|
||||||
|
log.init.debug("Applying python hacks...")
|
||||||
|
self._python_hacks()
|
||||||
|
|
||||||
|
log.init.debug("Init done!")
|
||||||
|
|
||||||
|
if self._crashdlg is not None:
|
||||||
|
self._crashdlg.raise_()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return utils.get_repr(self)
|
||||||
|
|
||||||
|
def _init_modules(self):
|
||||||
|
"""Initialize all 'modules' which need to be initialized."""
|
||||||
|
log.init.debug("Initializing message-bridge...")
|
||||||
|
message_bridge = message.MessageBridge(self)
|
||||||
|
objreg.register('message-bridge', message_bridge)
|
||||||
|
|
||||||
|
log.init.debug("Initializing readline-bridge...")
|
||||||
|
readline_bridge = readline.ReadlineBridge()
|
||||||
|
objreg.register('readline-bridge', readline_bridge)
|
||||||
|
|
||||||
log.init.debug("Initializing config...")
|
log.init.debug("Initializing config...")
|
||||||
self._init_config()
|
self._init_config()
|
||||||
log.init.debug("Initializing crashlog...")
|
log.init.debug("Initializing crashlog...")
|
||||||
self._handle_segfault()
|
self._handle_segfault()
|
||||||
log.init.debug("Initializing modes...")
|
log.init.debug("Initializing modes...")
|
||||||
self._init_modes()
|
modeman.init()
|
||||||
mode_manager = objreg.get('mode-manager')
|
|
||||||
log.init.debug("Initializing websettings...")
|
log.init.debug("Initializing websettings...")
|
||||||
websettings.init()
|
websettings.init()
|
||||||
log.init.debug("Initializing quickmarks...")
|
log.init.debug("Initializing quickmarks...")
|
||||||
@ -129,28 +179,6 @@ class Application(QApplication):
|
|||||||
log.init.debug("Initializing debug console...")
|
log.init.debug("Initializing debug console...")
|
||||||
debug_console = console.ConsoleWidget()
|
debug_console = console.ConsoleWidget()
|
||||||
objreg.register('debug-console', debug_console)
|
objreg.register('debug-console', debug_console)
|
||||||
log.init.debug("Initializing eventfilter...")
|
|
||||||
self.installEventFilter(mode_manager)
|
|
||||||
self.setQuitOnLastWindowClosed(False)
|
|
||||||
|
|
||||||
log.init.debug("Connecting signals...")
|
|
||||||
self._connect_signals()
|
|
||||||
modeman.enter(utypes.KeyMode.normal, 'init')
|
|
||||||
|
|
||||||
log.init.debug("Showing mainwindow...")
|
|
||||||
if not args.nowindow:
|
|
||||||
main_window.show()
|
|
||||||
log.init.debug("Applying python hacks...")
|
|
||||||
self._python_hacks()
|
|
||||||
QTimer.singleShot(0, self._process_init_args)
|
|
||||||
|
|
||||||
log.init.debug("Init done!")
|
|
||||||
|
|
||||||
if self._crashdlg is not None:
|
|
||||||
self._crashdlg.raise_()
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return utils.get_repr(self)
|
|
||||||
|
|
||||||
def _init_config(self):
|
def _init_config(self):
|
||||||
"""Inizialize and read the config."""
|
"""Inizialize and read the config."""
|
||||||
@ -205,65 +233,6 @@ class Application(QApplication):
|
|||||||
confdir, 'cmd_history', ('completion', 'history-length'))
|
confdir, 'cmd_history', ('completion', 'history-length'))
|
||||||
objreg.register('command-history', command_history)
|
objreg.register('command-history', command_history)
|
||||||
|
|
||||||
def _init_modes(self):
|
|
||||||
"""Inizialize the mode manager and the keyparsers."""
|
|
||||||
keyparsers = {
|
|
||||||
utypes.KeyMode.normal:
|
|
||||||
modeparsers.NormalKeyParser(self),
|
|
||||||
utypes.KeyMode.hint:
|
|
||||||
modeparsers.HintKeyParser(self),
|
|
||||||
utypes.KeyMode.insert:
|
|
||||||
keyparser.PassthroughKeyParser('insert', self),
|
|
||||||
utypes.KeyMode.passthrough:
|
|
||||||
keyparser.PassthroughKeyParser('passthrough', self),
|
|
||||||
utypes.KeyMode.command:
|
|
||||||
keyparser.PassthroughKeyParser('command', self),
|
|
||||||
utypes.KeyMode.prompt:
|
|
||||||
keyparser.PassthroughKeyParser('prompt', self, warn=False),
|
|
||||||
utypes.KeyMode.yesno:
|
|
||||||
modeparsers.PromptKeyParser(self),
|
|
||||||
}
|
|
||||||
objreg.register('keyparsers', keyparsers)
|
|
||||||
mode_manager = modeman.ModeManager(self)
|
|
||||||
objreg.register('mode-manager', mode_manager)
|
|
||||||
mode_manager.register(utypes.KeyMode.normal,
|
|
||||||
keyparsers[utypes.KeyMode.normal].handle)
|
|
||||||
mode_manager.register(utypes.KeyMode.hint,
|
|
||||||
keyparsers[utypes.KeyMode.hint].handle)
|
|
||||||
mode_manager.register(utypes.KeyMode.insert,
|
|
||||||
keyparsers[utypes.KeyMode.insert].handle,
|
|
||||||
passthrough=True)
|
|
||||||
mode_manager.register(
|
|
||||||
utypes.KeyMode.passthrough,
|
|
||||||
keyparsers[utypes.KeyMode.passthrough].handle,
|
|
||||||
passthrough=True)
|
|
||||||
mode_manager.register(utypes.KeyMode.command,
|
|
||||||
keyparsers[utypes.KeyMode.command].handle,
|
|
||||||
passthrough=True)
|
|
||||||
mode_manager.register(utypes.KeyMode.prompt,
|
|
||||||
keyparsers[utypes.KeyMode.prompt].handle,
|
|
||||||
passthrough=True)
|
|
||||||
mode_manager.register(utypes.KeyMode.yesno,
|
|
||||||
keyparsers[utypes.KeyMode.yesno].handle)
|
|
||||||
|
|
||||||
def _init_misc(self):
|
|
||||||
"""Initialize misc things."""
|
|
||||||
if self._args.version:
|
|
||||||
print(version.version())
|
|
||||||
print()
|
|
||||||
print()
|
|
||||||
print(qutebrowser.__copyright__)
|
|
||||||
print()
|
|
||||||
print(version.GPL_BOILERPLATE.strip())
|
|
||||||
sys.exit(0)
|
|
||||||
self.setOrganizationName("qutebrowser")
|
|
||||||
self.setApplicationName("qutebrowser")
|
|
||||||
self.setApplicationVersion(qutebrowser.__version__)
|
|
||||||
message_bridge = message.MessageBridge(self)
|
|
||||||
objreg.register('message-bridge', message_bridge)
|
|
||||||
readline_bridge = readline.ReadlineBridge()
|
|
||||||
objreg.register('readline-bridge', readline_bridge)
|
|
||||||
|
|
||||||
def _handle_segfault(self):
|
def _handle_segfault(self):
|
||||||
"""Handle a segfault from a previous run."""
|
"""Handle a segfault from a previous run."""
|
||||||
# FIXME If an empty logfile exists, we log to stdout instead, which is
|
# FIXME If an empty logfile exists, we log to stdout instead, which is
|
||||||
@ -359,7 +328,7 @@ class Application(QApplication):
|
|||||||
"""
|
"""
|
||||||
signal.signal(signal.SIGINT, self.interrupt)
|
signal.signal(signal.SIGINT, self.interrupt)
|
||||||
signal.signal(signal.SIGTERM, self.interrupt)
|
signal.signal(signal.SIGTERM, self.interrupt)
|
||||||
timer = utypes.Timer(self, 'python_hacks')
|
timer = usertypes.Timer(self, 'python_hacks')
|
||||||
timer.start(500)
|
timer.start(500)
|
||||||
timer.timeout.connect(lambda: None)
|
timer.timeout.connect(lambda: None)
|
||||||
objreg.register('python-hack-timer', timer)
|
objreg.register('python-hack-timer', timer)
|
||||||
@ -401,7 +370,7 @@ class Application(QApplication):
|
|||||||
cmd.got_search_rev.connect(search_runner.search_rev)
|
cmd.got_search_rev.connect(search_runner.search_rev)
|
||||||
cmd.returnPressed.connect(tabs.setFocus)
|
cmd.returnPressed.connect(tabs.setFocus)
|
||||||
search_runner.do_search.connect(tabs.search)
|
search_runner.do_search.connect(tabs.search)
|
||||||
kp[utypes.KeyMode.normal].keystring_updated.connect(
|
kp[usertypes.KeyMode.normal].keystring_updated.connect(
|
||||||
status.keystring.setText)
|
status.keystring.setText)
|
||||||
tabs.got_cmd.connect(self._commandrunner.run_safely)
|
tabs.got_cmd.connect(self._commandrunner.run_safely)
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ from PyQt5.QtGui import QWindow
|
|||||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QEvent
|
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QEvent
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
|
||||||
|
from qutebrowser.keyinput import modeparsers, keyparser
|
||||||
from qutebrowser.config import config
|
from qutebrowser.config import config
|
||||||
from qutebrowser.commands import cmdexc, cmdutils
|
from qutebrowser.commands import cmdexc, cmdutils
|
||||||
from qutebrowser.utils import usertypes, log, objreg, utils
|
from qutebrowser.utils import usertypes, log, objreg, utils
|
||||||
@ -42,6 +43,33 @@ class NotInModeError(Exception):
|
|||||||
"""Exception raised when we want to leave a mode we're not in."""
|
"""Exception raised when we want to leave a mode we're not in."""
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
"""Inizialize the mode manager and the keyparsers."""
|
||||||
|
KM = usertypes.KeyMode # pylint: disable=invalid-name
|
||||||
|
modeman = ModeManager(objreg.get('app'))
|
||||||
|
objreg.register('mode-manager', modeman)
|
||||||
|
keyparsers = {
|
||||||
|
KM.normal: modeparsers.NormalKeyParser(modeman),
|
||||||
|
KM.hint: modeparsers.HintKeyParser(modeman),
|
||||||
|
KM.insert: keyparser.PassthroughKeyParser('insert', modeman),
|
||||||
|
KM.passthrough: keyparser.PassthroughKeyParser('passthrough', modeman),
|
||||||
|
KM.command: keyparser.PassthroughKeyParser('command', modeman),
|
||||||
|
KM.prompt: keyparser.PassthroughKeyParser('prompt', modeman,
|
||||||
|
warn=False),
|
||||||
|
KM.yesno: modeparsers.PromptKeyParser(modeman),
|
||||||
|
}
|
||||||
|
objreg.register('keyparsers', keyparsers)
|
||||||
|
modeman.register(KM.normal, keyparsers[KM.normal].handle)
|
||||||
|
modeman.register(KM.hint, keyparsers[KM.hint].handle)
|
||||||
|
modeman.register(KM.insert, keyparsers[KM.insert].handle, passthrough=True)
|
||||||
|
modeman.register(KM.passthrough, keyparsers[KM.passthrough].handle,
|
||||||
|
passthrough=True)
|
||||||
|
modeman.register(KM.command, keyparsers[KM.command].handle,
|
||||||
|
passthrough=True)
|
||||||
|
modeman.register(KM.prompt, keyparsers[KM.prompt].handle, passthrough=True)
|
||||||
|
modeman.register(KM.yesno, keyparsers[KM.yesno].handle)
|
||||||
|
|
||||||
|
|
||||||
def enter(mode, reason=None):
|
def enter(mode, reason=None):
|
||||||
"""Enter the mode 'mode'."""
|
"""Enter the mode 'mode'."""
|
||||||
objreg.get('mode-manager').enter(mode, reason)
|
objreg.get('mode-manager').enter(mode, reason)
|
||||||
|
Loading…
Reference in New Issue
Block a user