X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=lib%2Fpython%2Finit.py;h=9d20cd636a55c7a17bf0d9f8fcf65e44c7e7d5d2;hb=4c441cd4be6ccb740cafea910766622ebea6d306;hp=4b8192fba9dfa828ec594955f9046d3b9750f4bd;hpb=3cc5069d8bb4e6eefd2a31a637a5f17b9acce26f;p=dotfiles.git diff --git a/lib/python/init.py b/lib/python/init.py index 4b8192f..9d20cd6 100644 --- a/lib/python/init.py +++ b/lib/python/init.py @@ -122,6 +122,8 @@ def init(): # set displayhook and excepthook from pprint import pprint + from traceback import format_exception, print_exc + pager = os.environ.get("PAGER") or 'more' # if your pager is 'less', options '-F' and '-R' must be passed to it, @@ -135,49 +137,52 @@ def init(): class BasePager: def write(self, value): - self.stdin.write(value) + self.stdout.write(value) def pprint(self, value): pprint(value, - stream=ColoredFile(self.stdin, + stream=ColoredFile(self.stdout, '\033[1;3%sm' % stdout_color)) def close(self): - self.stdin.close() + self.stdout.close() try: from subprocess import Popen, PIPE except ImportError: class Pager(BasePager): def __init__(self): - self.pipe = Popen(pager, shell=True, stdin=PIPE) - self.stdin = self.pipe.stdin + self.stdout = os.popen(pager, 'w') + else: + class Pager(BasePager): + def __init__(self): + self.pipe = Popen(pager, shell=True, stdin=PIPE, + universal_newlines=True) + self.stdout = self.pipe.stdin def close(self): BasePager.close(self) self.pipe.wait() - else: - class Pager(BasePager): - def __init__(self): - self.stdin = os.popen(pager, 'w') def displayhook(value): if value is not None: builtins._ = value pager = Pager() - pager.pprint(value) + try: + pager.pprint(value) + except: + pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red + print_exc(file=pager) pager.close() sys.displayhook = displayhook - from traceback import format_exception - def excepthook(etype, evalue, etraceback): lines = format_exception(etype, evalue, etraceback) pager = Pager() + pager.stdout = ColoredFile(pager.stdout, '\033[31m') # red for line in lines: - pager.write( - '\033[31m' + line.rstrip('\n') + '\033[0m\n') # red, reset + pager.write(line) pager.close() sys.excepthook = excepthook