diff --git a/IPython/terminal/interactiveshell.py b/IPython/terminal/interactiveshell.py index 532287f..5af2ffa 100644 --- a/IPython/terminal/interactiveshell.py +++ b/IPython/terminal/interactiveshell.py @@ -3,6 +3,7 @@ import asyncio import os import sys +import inspect from warnings import warn from typing import Union as UnionType, Optional @@ -66,8 +67,8 @@ from .shortcuts.auto_suggest import ( PTK3 = ptk_version.startswith('3.') -class _NoStyle(Style): pass - +class _NoStyle(Style): + pass _style_overrides_light_bg = { @@ -84,6 +85,20 @@ _style_overrides_linux = { Token.OutPromptNum: '#ansired bold', } + +def _backward_compat_continuation_prompt_tokens(method, width: int, *, lineno: int): + """ + Sagemath use custom prompt and we broke them in 8.19. + """ + sig = inspect.signature(method) + if "lineno" in inspect.signature(method).parameters or any( + [p.kind == p.VAR_KEYWORD for p in sig.parameters.values()] + ): + return method(width, lineno=lineno) + else: + return method(width) + + def get_default_editor(): try: return os.environ['EDITOR'] @@ -764,7 +779,9 @@ class TerminalInteractiveShell(InteractiveShell): "message": get_message, "prompt_continuation": ( lambda width, lineno, is_soft_wrap: PygmentsTokens( - self.prompts.continuation_prompt_tokens(width, lineno=lineno) + _backward_compat_continuation_prompt_tokens( + self.prompts.continuation_prompt_tokens, width, lineno=lineno + ) ) ), "multiline": True, diff --git a/docs/source/config/details.rst b/docs/source/config/details.rst index 6ba9855..2e7e5be 100644 --- a/docs/source/config/details.rst +++ b/docs/source/config/details.rst @@ -34,7 +34,7 @@ which defines the defaults. The required interface is like this: :class:`~.TerminalInteractiveShell` instance. .. method:: in_prompt_tokens(cli=None) - continuation_prompt_tokens(self, cli=None, width=None) + continuation_prompt_tokens(self, width=None) rewrite_prompt_tokens() out_prompt_tokens()