Refactor init

This commit is contained in:
Florian Bruhin 2014-09-28 00:18:57 +02:00
parent c9d5928dce
commit 86fdf981e3
2 changed files with 95 additions and 98 deletions

View File

@ -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)

View File

@ -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)