Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/IPython/terminal/prompts.py: 37%

59 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-20 06:09 +0000

1"""Terminal input and output prompts.""" 

2 

3from pygments.token import Token 

4import sys 

5 

6from IPython.core.displayhook import DisplayHook 

7 

8from prompt_toolkit.formatted_text import fragment_list_width, PygmentsTokens 

9from prompt_toolkit.shortcuts import print_formatted_text 

10from prompt_toolkit.enums import EditingMode 

11 

12 

13class Prompts(object): 

14 def __init__(self, shell): 

15 self.shell = shell 

16 

17 def vi_mode(self): 

18 if (getattr(self.shell.pt_app, 'editing_mode', None) == EditingMode.VI 

19 and self.shell.prompt_includes_vi_mode): 

20 mode = str(self.shell.pt_app.app.vi_state.input_mode) 

21 if mode.startswith('InputMode.'): 

22 mode = mode[10:13].lower() 

23 elif mode.startswith('vi-'): 

24 mode = mode[3:6] 

25 return '['+mode+'] ' 

26 return '' 

27 

28 

29 def in_prompt_tokens(self): 

30 return [ 

31 (Token.Prompt, self.vi_mode() ), 

32 (Token.Prompt, 'In ['), 

33 (Token.PromptNum, str(self.shell.execution_count)), 

34 (Token.Prompt, ']: '), 

35 ] 

36 

37 def _width(self): 

38 return fragment_list_width(self.in_prompt_tokens()) 

39 

40 def continuation_prompt_tokens(self, width=None): 

41 if width is None: 

42 width = self._width() 

43 return [ 

44 (Token.Prompt, (' ' * (width - 5)) + '...: '), 

45 ] 

46 

47 def rewrite_prompt_tokens(self): 

48 width = self._width() 

49 return [ 

50 (Token.Prompt, ('-' * (width - 2)) + '> '), 

51 ] 

52 

53 def out_prompt_tokens(self): 

54 return [ 

55 (Token.OutPrompt, 'Out['), 

56 (Token.OutPromptNum, str(self.shell.execution_count)), 

57 (Token.OutPrompt, ']: '), 

58 ] 

59 

60class ClassicPrompts(Prompts): 

61 def in_prompt_tokens(self): 

62 return [ 

63 (Token.Prompt, '>>> '), 

64 ] 

65 

66 def continuation_prompt_tokens(self, width=None): 

67 return [ 

68 (Token.Prompt, '... ') 

69 ] 

70 

71 def rewrite_prompt_tokens(self): 

72 return [] 

73 

74 def out_prompt_tokens(self): 

75 return [] 

76 

77class RichPromptDisplayHook(DisplayHook): 

78 """Subclass of base display hook using coloured prompt""" 

79 def write_output_prompt(self): 

80 sys.stdout.write(self.shell.separate_out) 

81 # If we're not displaying a prompt, it effectively ends with a newline, 

82 # because the output will be left-aligned. 

83 self.prompt_end_newline = True 

84 

85 if self.do_full_cache: 

86 tokens = self.shell.prompts.out_prompt_tokens() 

87 prompt_txt = ''.join(s for t, s in tokens) 

88 if prompt_txt and not prompt_txt.endswith('\n'): 

89 # Ask for a newline before multiline output 

90 self.prompt_end_newline = False 

91 

92 if self.shell.pt_app: 

93 print_formatted_text(PygmentsTokens(tokens), 

94 style=self.shell.pt_app.app.style, end='', 

95 ) 

96 else: 

97 sys.stdout.write(prompt_txt) 

98 

99 def write_format_data(self, format_dict, md_dict=None) -> None: 

100 if self.shell.mime_renderers: 

101 

102 for mime, handler in self.shell.mime_renderers.items(): 

103 if mime in format_dict: 

104 handler(format_dict[mime], None) 

105 return 

106 

107 super().write_format_data(format_dict, md_dict) 

108