From dfe7d6c7efef2c4f703d6a22351262f377ebd20d Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 20 Jan 2014 14:04:29 +0100 Subject: [PATCH] Add some hacks for python features (exception, signals, ctrl+c) to work correctly --- qutebrowser/app.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index f9b1d990b..3d1ee530c 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -1,8 +1,9 @@ import sys import argparse import logging +import signal from PyQt5.QtWidgets import QWidget, QApplication -from PyQt5.QtCore import QUrl +from PyQt5.QtCore import QUrl, QTimer from qutebrowser.widgets.mainwindow import MainWindow from qutebrowser.commands.keys import KeyParser from qutebrowser.utils.config import Config @@ -35,6 +36,29 @@ class QuteBrowser(QApplication): self.init_cmds() self.mainwindow.show() + self.python_hacks() + + def python_hacks(self): + qapp = super(QApplication, self) + + ### Make python exceptions work + sys._excepthook = sys.excepthook + def exception_hook(exctype, value, traceback): + sys._excepthook(exctype, value, traceback) + # FIXME save open tabs here + qapp.exit(1) + sys.excepthook = exception_hook + + ### Quit on SIGINT + signal.signal(signal.SIGINT, lambda *args: + qapp.exit(128 + signal.SIGINT)) + + ### hack to make Ctrl+C work by passing control to the Python + ### interpreter once all 500ms (lambda to ignore args) + self.timer = QTimer() + self.timer.start(500) + self.timer.timeout.connect(lambda: None) + def parseopts(self): parser = argparse.ArgumentParser("usage: %(prog)s [options]") parser.add_argument('-l', '--log', dest='loglevel',