From 36dbc76a97d1a1cc2f75e0abedc17187e2951e6c 2016-06-01 11:14:10 From: Thomas Kluyver Date: 2016-06-01 11:14:10 Subject: [PATCH] Use new prompt machinery to generate Out prompts --- diff --git a/IPython/core/displayhook.py b/IPython/core/displayhook.py index 269ae18..41d03d2 100644 --- a/IPython/core/displayhook.py +++ b/IPython/core/displayhook.py @@ -113,7 +113,7 @@ class DisplayHook(Configurable): """ # Use write, not print which adds an extra space. sys.stdout.write(self.shell.separate_out) - outprompt = self.shell.prompt_manager.render('out') + outprompt = 'Out[{}]: '.format(self.shell.execution_count) if self.do_full_cache: sys.stdout.write(outprompt) diff --git a/IPython/terminal/prompts.py b/IPython/terminal/prompts.py index f39707b..fdfc9f9 100644 --- a/IPython/terminal/prompts.py +++ b/IPython/terminal/prompts.py @@ -1,4 +1,7 @@ from pygments.token import Token +import sys + +from IPython.core.displayhook import DisplayHook class Prompts(object): def __init__(self, shell): @@ -34,3 +37,14 @@ class Prompts(object): (Token.OutPromptNum, str(self.shell.execution_count)), (Token.OutPrompt, ']: '), ] + +class RichPromptDisplayHook(DisplayHook): + """Subclass of base display hook using coloured prompt""" + def write_output_prompt(self): + sys.stdout.write(self.shell.separate_out) + if self.do_full_cache: + tokens = self.shell.prompts.out_prompt_tokens() + if self.shell.pt_cli: + self.shell.pt_cli.print_tokens(tokens) + else: + print(*(s for t, s in tokens), sep='') diff --git a/IPython/terminal/ptshell.py b/IPython/terminal/ptshell.py index fcc64e8..40d802b 100644 --- a/IPython/terminal/ptshell.py +++ b/IPython/terminal/ptshell.py @@ -29,7 +29,7 @@ from pygments.token import Token from .debugger import TerminalPdb, Pdb from .pt_inputhooks import get_inputhook_func from .interactiveshell import get_default_editor, TerminalMagics -from .prompts import Prompts +from .prompts import Prompts, RichPromptDisplayHook from .ptutils import IPythonPTCompleter, IPythonPTLexer _use_simple_prompt = 'IPY_TEST_SIMPLE_PROMPT' in os.environ or not sys.stdin.isatty() @@ -104,7 +104,10 @@ class TerminalInteractiveShell(InteractiveShell): def _prompts_default(self): return Prompts(self) - + + def _displayhook_class_default(self): + return RichPromptDisplayHook + term_title = Bool(True, help="Automatically set the terminal title" ).tag(config=True) @@ -228,6 +231,8 @@ class TerminalInteractiveShell(InteractiveShell): style_overrides = { Token.Prompt: '#009900', Token.PromptNum: '#00ff00 bold', + Token.OutPrompt: '#990000', + Token.OutPromptNum: '#ff0000 bold', } if name == 'default': style_cls = get_style_by_name('default')