diff options
author | louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13 <louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13> | 2010-08-04 23:54:02 +0000 |
---|---|---|
committer | louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13 <louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13> | 2010-08-04 23:54:02 +0000 |
commit | 94153c490b3ec2dc029a90d179b3cde335060294 (patch) | |
tree | dba7ea26831c5d7f30d806dffa65366c8f36642a | |
parent | 567491ba439b5ae1b1f82f3796287d80e2ef653d (diff) | |
download | poezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.gz poezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.bz2 poezio-94153c490b3ec2dc029a90d179b3cde335060294.tar.xz poezio-94153c490b3ec2dc029a90d179b3cde335060294.zip |
fixes the sys.excepthook thread bug, and fix the traceback on joining a room with non-ascii chars
-rw-r--r-- | src/common.py | 1 | ||||
-rw-r--r-- | src/gui.py | 4 | ||||
-rw-r--r-- | src/poezio.py | 32 | ||||
-rw-r--r-- | src/user.py | 4 |
4 files changed, 35 insertions, 6 deletions
diff --git a/src/common.py b/src/common.py index c0bb97e7..bd79b788 100644 --- a/src/common.py +++ b/src/common.py @@ -45,6 +45,7 @@ import sys import select import errno import time +import traceback import xmpp @@ -141,6 +141,7 @@ class Gui(object): """ main loop waiting for the user to press a key """ + self.refresh_window() while True: doupdate() char=read_char(stdscr) @@ -163,7 +164,7 @@ class Gui(object): returns the room that has this name """ for room in self.rooms: - if room.name == name: + if room.name.decode('utf-8') == name: return room return None @@ -449,6 +450,7 @@ class Gui(object): from_room = stanza.getFrom().getStripped() room = self.get_room_by_name(from_room) if not room: + # common.debug(':(:(:(:(\n') return else: msg = None diff --git a/src/poezio.py b/src/poezio.py index a73924d8..83eba23c 100644 --- a/src/poezio.py +++ b/src/poezio.py @@ -21,9 +21,28 @@ Starting point of poezio. Launches both the Connection and Gui """ +import threading import sys -import traceback -import curses + +def installThreadExcepthook(): + """ + Workaround for sys.excepthook thread bug + See http://bugs.python.org/issue1230540 + Python, you made me sad :( + """ + init_old = threading.Thread.__init__ + def init(self, *args, **kwargs): + init_old(self, *args, **kwargs) + run_old = self.run + def run_with_except_hook(*args, **kw): + try: + run_old(*args, **kw) + except (KeyboardInterrupt, SystemExit): + raise + except: + sys.excepthook(*sys.exc_info()) + self.run = run_with_except_hook + threading.Thread.__init__ = init class MyStdErr(object): def __init__(self, fd): @@ -52,11 +71,14 @@ def exception_handler(type_, value, trace): curses.endwin() curses.echo() traceback.print_exception(type_, value, trace, None, sys.stderr) - sys.exit(2) + import os # used to quit the program even from a thread + os.abort() sys.excepthook = exception_handler -import common +import sys +import curses +import signal from connection import Connection from multiuserchat import MultiUserChat @@ -64,7 +86,6 @@ from config import config from gui import Gui from curses import initscr -import signal signal.signal(signal.SIGINT, signal.SIG_IGN) # ignore ctrl-c def main(): @@ -80,4 +101,5 @@ def main(): gui.main_loop(stdscr) if __name__ == '__main__': + installThreadExcepthook() main() diff --git a/src/user.py b/src/user.py index ce43aefa..ae369de0 100644 --- a/src/user.py +++ b/src/user.py @@ -19,6 +19,7 @@ from random import randrange from config import config from datetime import timedelta, datetime +import curses class User(object): """ @@ -29,6 +30,9 @@ class User(object): self.update(affiliation, show, status, role) self.change_nick(nick) self.color = randrange(2, 10) # assign a random color + # if randrange(1) == 0: + # self.color = 16 + # self.color |= curses.A_BOLD def update(self, affiliation, show, status, role): self.affiliation = affiliation |