Add some hacks for python features (exception, signals, ctrl+c) to work correctly

This commit is contained in:
Florian Bruhin 2014-01-20 14:04:29 +01:00
parent e73d06c252
commit dfe7d6c7ef

View File

@ -1,8 +1,9 @@
import sys import sys
import argparse import argparse
import logging import logging
import signal
from PyQt5.QtWidgets import QWidget, QApplication 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.widgets.mainwindow import MainWindow
from qutebrowser.commands.keys import KeyParser from qutebrowser.commands.keys import KeyParser
from qutebrowser.utils.config import Config from qutebrowser.utils.config import Config
@ -35,6 +36,29 @@ class QuteBrowser(QApplication):
self.init_cmds() self.init_cmds()
self.mainwindow.show() 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): def parseopts(self):
parser = argparse.ArgumentParser("usage: %(prog)s [options]") parser = argparse.ArgumentParser("usage: %(prog)s [options]")
parser.add_argument('-l', '--log', dest='loglevel', parser.add_argument('-l', '--log', dest='loglevel',