##// END OF EJS Templates
Switch prompts for doctest_mode
Thomas Kluyver -
Show More
@@ -3219,6 +3219,11 b' class InteractiveShell(SingletonConfigurable):'
3219 self.restore_sys_module_state()
3219 self.restore_sys_module_state()
3220
3220
3221
3221
3222 # Overridden in terminal subclass to change prompts
3223 def switch_doctest_mode(self, mode):
3224 pass
3225
3226
3222 class InteractiveShellABC(with_metaclass(abc.ABCMeta, object)):
3227 class InteractiveShellABC(with_metaclass(abc.ABCMeta, object)):
3223 """An abstract base class for InteractiveShell."""
3228 """An abstract base class for InteractiveShell."""
3224
3229
@@ -469,8 +469,12 b' Defaulting color scheme to \'NoColor\'"""'
469
469
470 shell.magic('xmode ' + dstore.xmode)
470 shell.magic('xmode ' + dstore.xmode)
471
471
472 # mode here is the state before we switch; switch_doctest_mode takes
473 # the mode we're switching to.
474 shell.switch_doctest_mode(not mode)
475
472 # Store new mode and inform
476 # Store new mode and inform
473 dstore.mode = bool(1-int(mode))
477 dstore.mode = bool(not mode)
474 mode_label = ['OFF','ON'][dstore.mode]
478 mode_label = ['OFF','ON'][dstore.mode]
475 print('Doctest mode is:', mode_label)
479 print('Doctest mode is:', mode_label)
476
480
@@ -41,6 +41,23 b' class Prompts(object):'
41 (Token.OutPrompt, ']: '),
41 (Token.OutPrompt, ']: '),
42 ]
42 ]
43
43
44 class ClassicPrompts(Prompts):
45 def in_prompt_tokens(self, cli=None):
46 return [
47 (Token.Prompt, '>>> '),
48 ]
49
50 def continuation_prompt_tokens(self, cli=None, width=None):
51 return [
52 (Token.Prompt, '... ')
53 ]
54
55 def rewrite_prompt_tokens(self):
56 return []
57
58 def out_prompt_tokens(self):
59 return []
60
44 class RichPromptDisplayHook(DisplayHook):
61 class RichPromptDisplayHook(DisplayHook):
45 """Subclass of base display hook using coloured prompt"""
62 """Subclass of base display hook using coloured prompt"""
46 def write_output_prompt(self):
63 def write_output_prompt(self):
@@ -29,7 +29,7 b' from pygments.token import Token'
29 from .debugger import TerminalPdb, Pdb
29 from .debugger import TerminalPdb, Pdb
30 from .pt_inputhooks import get_inputhook_func
30 from .pt_inputhooks import get_inputhook_func
31 from .interactiveshell import get_default_editor, TerminalMagics
31 from .interactiveshell import get_default_editor, TerminalMagics
32 from .prompts import Prompts, RichPromptDisplayHook
32 from .prompts import Prompts, ClassicPrompts, RichPromptDisplayHook
33 from .ptutils import IPythonPTCompleter, IPythonPTLexer
33 from .ptutils import IPythonPTCompleter, IPythonPTLexer
34
34
35 _use_simple_prompt = 'IPY_TEST_SIMPLE_PROMPT' in os.environ or not sys.stdin.isatty()
35 _use_simple_prompt = 'IPY_TEST_SIMPLE_PROMPT' in os.environ or not sys.stdin.isatty()
@@ -105,6 +105,10 b' class TerminalInteractiveShell(InteractiveShell):'
105 def _prompts_default(self):
105 def _prompts_default(self):
106 return Prompts(self)
106 return Prompts(self)
107
107
108 @observe('prompts')
109 def _(self, change):
110 self._update_layout()
111
108 def _displayhook_class_default(self):
112 def _displayhook_class_default(self):
109 return RichPromptDisplayHook
113 return RichPromptDisplayHook
110
114
@@ -451,6 +455,16 b' class TerminalInteractiveShell(InteractiveShell):'
451 prompt = ''.join(s for t, s in tokens)
455 prompt = ''.join(s for t, s in tokens)
452 print(prompt, cmd, sep='')
456 print(prompt, cmd, sep='')
453
457
458 _prompts_before = None
459 def switch_doctest_mode(self, mode):
460 """Switch prompts to classic for %doctest_mode"""
461 if mode:
462 self._prompts_before = self.prompts
463 self.prompts = ClassicPrompts(self)
464 elif self._prompts_before:
465 self.prompts = self._prompts_before
466 self._prompts_before = None
467
454
468
455 if __name__ == '__main__':
469 if __name__ == '__main__':
456 TerminalInteractiveShell.instance().interact()
470 TerminalInteractiveShell.instance().interact()
General Comments 0
You need to be logged in to leave comments. Login now