Show More
@@ -588,6 +588,17 b' class TerminalInteractiveShell(InteractiveShell):' | |||||
588 | help="Display the current vi mode (when using vi editing mode)." |
|
588 | help="Display the current vi mode (when using vi editing mode)." | |
589 | ).tag(config=True) |
|
589 | ).tag(config=True) | |
590 |
|
590 | |||
|
591 | prompt_line_number_format = Unicode( | |||
|
592 | "", | |||
|
593 | help="The format for line numbering, will be passed `line` (int, 1 based)" | |||
|
594 | " the current line number and `rel_line` the relative line number." | |||
|
595 | " for example to display both you can use the following template string :" | |||
|
596 | " c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '" | |||
|
597 | " This will display the current line number, with leading space and a width of at least 4" | |||
|
598 | " character, as well as the relative line number 0 padded and always with a + or - sign." | |||
|
599 | " Note that when using Emacs mode the prompt of the first line may not update.", | |||
|
600 | ).tag(config=True) | |||
|
601 | ||||
591 | @observe('term_title') |
|
602 | @observe('term_title') | |
592 | def init_term_title(self, change=None): |
|
603 | def init_term_title(self, change=None): | |
593 | # Enable or disable the terminal title. |
|
604 | # Enable or disable the terminal title. |
@@ -25,11 +25,20 b' class Prompts(object):' | |||||
25 | return '['+mode+'] ' |
|
25 | return '['+mode+'] ' | |
26 | return '' |
|
26 | return '' | |
27 |
|
27 | |||
|
28 | def current_line(self) -> int: | |||
|
29 | if self.shell.pt_app is not None: | |||
|
30 | return self.shell.pt_app.default_buffer.document.cursor_position_row or 0 | |||
|
31 | return 0 | |||
28 |
|
32 | |||
29 | def in_prompt_tokens(self): |
|
33 | def in_prompt_tokens(self): | |
30 | return [ |
|
34 | return [ | |
31 | (Token.Prompt, self.vi_mode()), |
|
35 | (Token.Prompt, self.vi_mode()), | |
32 | (Token.Prompt, "1 | "), |
|
36 | ( | |
|
37 | Token.Prompt, | |||
|
38 | self.shell.prompt_line_number_format.format( | |||
|
39 | line=1, rel_line=-self.current_line() | |||
|
40 | ), | |||
|
41 | ), | |||
33 | (Token.Prompt, "In ["), |
|
42 | (Token.Prompt, "In ["), | |
34 | (Token.PromptNum, str(self.shell.execution_count)), |
|
43 | (Token.PromptNum, str(self.shell.execution_count)), | |
35 | (Token.Prompt, ']: '), |
|
44 | (Token.Prompt, ']: '), | |
@@ -41,7 +50,12 b' class Prompts(object):' | |||||
41 | def continuation_prompt_tokens(self, width=None, *, lineno=None): |
|
50 | def continuation_prompt_tokens(self, width=None, *, lineno=None): | |
42 | if width is None: |
|
51 | if width is None: | |
43 | width = self._width() |
|
52 | width = self._width() | |
44 | prefix = " " * len(self.vi_mode()) + str(lineno + 1) + " | " |
|
53 | line = lineno + 1 if lineno is not None else 0 | |
|
54 | prefix = " " * len( | |||
|
55 | self.vi_mode() | |||
|
56 | ) + self.shell.prompt_line_number_format.format( | |||
|
57 | line=line, rel_line=line - self.current_line() - 1 | |||
|
58 | ) | |||
45 | return [ |
|
59 | return [ | |
46 | ( |
|
60 | ( | |
47 | Token.Prompt, |
|
61 | Token.Prompt, |
General Comments 0
You need to be logged in to leave comments.
Login now