X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=lib%2Fpython%2Finit.py;h=d8b7c79b89ab8bead28dc330db52457019576765;hb=e5d4896a059de995e6f223312ba1d005bf78ed44;hp=1313c500d7b00518e14a6bf40e7ee5149a24f526;hpb=ec8bbed229d0fd6e3306bd1a947a141e313a0032;p=dotfiles.git diff --git a/lib/python/init.py b/lib/python/init.py index 1313c50..d8b7c79 100644 --- a/lib/python/init.py +++ b/lib/python/init.py @@ -36,6 +36,11 @@ def init(): or os.path.expanduser('~/.inputrc') readline.read_init_file(initfile) + #if 'libedit' in readline.__doc__: + # readline.parse_and_bind("bind ^I rl_complete") + #else: + # readline.parse_and_bind("tab: complete") + histfile = os.path.expanduser('~/.python_history') try: readline.read_history_file(histfile) @@ -43,15 +48,14 @@ def init(): pass # No such file def savehist(): - histfilesize = os.environ.get('HISTFILESIZE') \ - or os.environ.get('HISTSIZE') - if histfilesize: + histsize = os.environ.get('HISTSIZE') + if histsize: try: - histfilesize = int(histfilesize) + histsize = int(histsize) except ValueError: pass else: - readline.set_history_length(histfilesize) + readline.set_history_length(histsize) readline.write_history_file(histfile) import atexit @@ -108,6 +112,22 @@ def init(): sys.stdout = ColoredFile(sys.stdout, '\033[1;3%sm' % stdout_color) sys.stderr = ColoredFile(sys.stderr, '\033[31m') # red + def myinput(prompt=None): + save_stdout = sys.stdout + sys.stdout = sys.__stdout__ + result = builtin_input(prompt) + sys.stdout = save_stdout + return result + + try: + builtins.raw_input + except AttributeError: # PY3 + builtin_input = builtins.input + builtins.input = myinput + else: + builtin_input = builtins.raw_input + builtins.raw_input = myinput + break try: @@ -123,6 +143,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, @@ -136,47 +158,52 @@ def init(): class BasePager: def write(self, value): - self.stdin.write(value) + self.stdout.write(value) def pprint(self, value): - pprint(value, stream=self.stdin) + pprint(value, + 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 @@ -257,10 +284,6 @@ def init(): builtins.x = _Exit() - # In Python 2.5+ exit and quit are objects - if isinstance(builtins.exit, str): - builtins.exit = builtins.quit = x # noqa: x is defined as _Exit - # print conten of a file class _Cat: