##// END OF EJS Templates
No newline after output prompt
Thomas Kluyver -
Show More
@@ -1,82 +1,83 b''
1 1 """Terminal input and output prompts."""
2 2
3 3 from pygments.token import Token
4 4 import sys
5 5
6 6 from IPython.core.displayhook import DisplayHook
7 7
8 8 from prompt_toolkit.formatted_text import fragment_list_width, PygmentsTokens
9 9 from prompt_toolkit.shortcuts import print_formatted_text
10 10
11 11
12 12 class Prompts(object):
13 13 def __init__(self, shell):
14 14 self.shell = shell
15 15
16 16 def in_prompt_tokens(self):
17 17 return [
18 18 (Token.Prompt, 'In ['),
19 19 (Token.PromptNum, str(self.shell.execution_count)),
20 20 (Token.Prompt, ']: '),
21 21 ]
22 22
23 23 def _width(self):
24 24 return fragment_list_width(self.in_prompt_tokens())
25 25
26 26 def continuation_prompt_tokens(self, width=None):
27 27 if width is None:
28 28 width = self._width()
29 29 return [
30 30 (Token.Prompt, (' ' * (width - 5)) + '...: '),
31 31 ]
32 32
33 33 def rewrite_prompt_tokens(self):
34 34 width = self._width()
35 35 return [
36 36 (Token.Prompt, ('-' * (width - 2)) + '> '),
37 37 ]
38 38
39 39 def out_prompt_tokens(self):
40 40 return [
41 41 (Token.OutPrompt, 'Out['),
42 42 (Token.OutPromptNum, str(self.shell.execution_count)),
43 43 (Token.OutPrompt, ']: '),
44 44 ]
45 45
46 46 class ClassicPrompts(Prompts):
47 47 def in_prompt_tokens(self):
48 48 return [
49 49 (Token.Prompt, '>>> '),
50 50 ]
51 51
52 52 def continuation_prompt_tokens(self, width=None):
53 53 return [
54 54 (Token.Prompt, '... ')
55 55 ]
56 56
57 57 def rewrite_prompt_tokens(self):
58 58 return []
59 59
60 60 def out_prompt_tokens(self):
61 61 return []
62 62
63 63 class RichPromptDisplayHook(DisplayHook):
64 64 """Subclass of base display hook using coloured prompt"""
65 65 def write_output_prompt(self):
66 66 sys.stdout.write(self.shell.separate_out)
67 67 # If we're not displaying a prompt, it effectively ends with a newline,
68 68 # because the output will be left-aligned.
69 69 self.prompt_end_newline = True
70 70
71 71 if self.do_full_cache:
72 72 tokens = self.shell.prompts.out_prompt_tokens()
73 73 prompt_txt = ''.join(s for t, s in tokens)
74 74 if prompt_txt and not prompt_txt.endswith('\n'):
75 75 # Ask for a newline before multiline output
76 76 self.prompt_end_newline = False
77 77
78 78 if self.shell.pt_app:
79 print_formatted_text(
80 PygmentsTokens(tokens), style=self.shell.pt_app.app.style)
79 print_formatted_text(PygmentsTokens(tokens),
80 style=self.shell.pt_app.app.style, end='',
81 )
81 82 else:
82 83 sys.stdout.write(prompt_txt)
General Comments 0
You need to be logged in to leave comments. Login now