X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=lib%2Fpython%2Finit.py;h=1313c500d7b00518e14a6bf40e7ee5149a24f526;hb=ec8bbed229d0fd6e3306bd1a947a141e313a0032;hp=15bcb32596c22a22b8768f215dc208a7117db1bd;hpb=86f5aae3b239280df0db5304b6e0092b1ad2124b;p=dotfiles.git diff --git a/lib/python/init.py b/lib/python/init.py index 15bcb32..1313c50 100644 --- a/lib/python/init.py +++ b/lib/python/init.py @@ -9,7 +9,10 @@ def init(): - import __builtin__ + try: + import __builtin__ as builtins + except ImportError: + import builtins import os import sys @@ -33,7 +36,7 @@ def init(): or os.path.expanduser('~/.inputrc') readline.read_init_file(initfile) - histfile = os.path.expanduser('~/.python-history') + histfile = os.path.expanduser('~/.python_history') try: readline.read_history_file(histfile) except IOError: @@ -114,16 +117,28 @@ def init(): else: try: locale.setlocale(locale.LC_ALL, '') - except (ImportError, locale.Error): pass # no locale support or unsupported locale - # set displayhook + # set displayhook and excepthook from pprint import pprint + pager = os.environ.get("PAGER") or 'more' - class BasePPrintPager: - def pipe(self, value): + # if your pager is 'less', options '-F' and '-R' must be passed to it, + # and option '-X' is very much recommended + if pager == 'less': + less = os.environ.get("LESS") or '' + for opt in 'X', 'R', 'F': + if opt not in less: + less = opt + less + os.environ["LESS"] = less + + class BasePager: + def write(self, value): + self.stdin.write(value) + + def pprint(self, value): pprint(value, stream=self.stdin) def close(self): @@ -132,36 +147,48 @@ def init(): try: from subprocess import Popen, PIPE except ImportError: - class PPrintPager(BasePPrintPager): + class Pager(BasePager): def __init__(self): self.pipe = Popen(pager, shell=True, stdin=PIPE) self.stdin = self.pipe.stdin def close(self): - BasePPrintPager.close(self) + BasePager.close(self) self.pipe.wait() else: - class PPrintPager(BasePPrintPager): + class Pager(BasePager): def __init__(self): self.stdin = os.popen(pager, 'w') - pager = os.environ.get("PAGER") or 'more' def displayhook(value): if value is not None: - __builtin__._ = value - pprint_pager = PPrintPager() - pprint_pager.pipe(value) - pprint_pager.close() + builtins._ = value + pager = Pager() + pager.pprint(value) + pager.close() sys.displayhook = displayhook - from traceback import print_exception + from traceback import format_exception def excepthook(etype, evalue, etraceback): - print_exception(etype, evalue, etraceback) + lines = format_exception(etype, evalue, etraceback) + pager = Pager() + for line in lines: + pager.write( + '\033[31m' + line.rstrip('\n') + '\033[0m\n') # red, reset + pager.close() sys.excepthook = excepthook + #try: + # import cgitb + #except ImportError: + # pass + #else: + # # cgitb.enable() overrides sys.excepthook + # cgitb.enable(format='text') + # From Thomas Heller: # https://mail.python.org/pipermail/python-list/2001-April/099020.html @@ -205,8 +232,8 @@ def init(): path = os.path.expanduser(os.path.expandvars(path or '~')) os.chdir(path) - __builtin__.ls = DirLister() - __builtin__.cd = DirChanger() + builtins.ls = DirLister() + builtins.cd = DirChanger() # print working directory @@ -217,7 +244,7 @@ def init(): def __call__(self): return repr(self) - __builtin__.pwd = Pwd() + builtins.pwd = Pwd() # exit REPL with 'exit', 'quit' or simple 'x' @@ -228,11 +255,11 @@ def init(): def __call__(self, msg=None): sys.exit(msg) - __builtin__.x = _Exit() + builtins.x = _Exit() # In Python 2.5+ exit and quit are objects - if isinstance(__builtin__.exit, str): - __builtin__.exit = __builtin__.quit = x # noqa: x is defined as _Exit + if isinstance(builtins.exit, str): + builtins.exit = builtins.quit = x # noqa: x is defined as _Exit # print conten of a file @@ -244,9 +271,9 @@ def init(): fp = open(filename, 'rU') text = fp.read() fp.close() - print text + print(text) - __builtin__.cat = _Cat() + builtins.cat = _Cat() # call shell @@ -258,7 +285,7 @@ def init(): def __call__(self, cmdline): os.system(cmdline) - __builtin__.sh = _Sh() + builtins.sh = _Sh() # paginate a file @@ -269,7 +296,7 @@ def init(): def __call__(self, filename): os.system("%s '%s'" % (pager, filename.replace("'", '"\'"'))) - __builtin__.pager = _Pager() + builtins.pager = _Pager() # edit a file @@ -282,7 +309,7 @@ def init(): or os.environ.get("EDITOR") or 'vi' os.system("%s '%s'" % (editor, filename.replace("'", '"\'"'))) - __builtin__.edit = __builtin__.editor = _Editor() + builtins.edit = builtins.editor = _Editor() init()