From 6e2fa6d48dfc1b6c49f45a8c4b9cc5bbdced3bfe Mon Sep 17 00:00:00 2001 From: saucoide Date: Sat, 13 Jul 2024 11:43:34 +0200 Subject: [PATCH 1/3] Toggle helper instead of nesting instances when using key bindings Adds a flag to check if the helper is active, interrupting it instead of opening a new instance if so --- Lib/_pyrepl/commands.py | 11 +++++++++-- Lib/_pyrepl/reader.py | 3 ++- Lib/test/test_pyrepl/support.py | 1 + Lib/test/test_pyrepl/test_reader.py | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Lib/_pyrepl/commands.py b/Lib/_pyrepl/commands.py index c3fce91013b001..5b6fe9074d57e0 100644 --- a/Lib/_pyrepl/commands.py +++ b/Lib/_pyrepl/commands.py @@ -435,9 +435,16 @@ def do(self) -> None: class help(Command): def do(self) -> None: import _sitebuiltins + import signal - with self.reader.suspend(): - self.reader.msg = _sitebuiltins._Helper()() # type: ignore[assignment, call-arg] + if self.reader.help_mode: + self.reader.help_mode = False + signal.raise_signal(signal.SIGINT) + else: + self.reader.help_mode = True + with self.reader.suspend(): + self.reader.msg = _sitebuiltins._Helper()() # type: ignore[assignment, call-arg] + self.reader.help_mode = False class invalid_key(Command): diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py index 63ae661968408e..36dc407d1c6d36 100644 --- a/Lib/_pyrepl/reader.py +++ b/Lib/_pyrepl/reader.py @@ -230,6 +230,7 @@ class Reader: dirty: bool = False finished: bool = False paste_mode: bool = False + help_mode: bool = False in_bracketed_paste: bool = False commands: dict[str, type[Command]] = field(default_factory=make_default_commands) last_command: type[Command] | None = None @@ -646,7 +647,7 @@ def suspend(self) -> SimpleContextManager: self.restore() yield finally: - for arg in ("msg", "ps1", "ps2", "ps3", "ps4", "paste_mode"): + for arg in ("msg", "ps1", "ps2", "ps3", "ps4", "paste_mode", "help_mode"): setattr(self, arg, prev_state[arg]) self.prepare() diff --git a/Lib/test/test_pyrepl/support.py b/Lib/test/test_pyrepl/support.py index 70e12286f7d781..ef84533159d1ad 100644 --- a/Lib/test/test_pyrepl/support.py +++ b/Lib/test/test_pyrepl/support.py @@ -43,6 +43,7 @@ def prepare_reader(console: Console, **kwargs): reader = ReadlineAlikeReader(console=console, config=config) reader.more_lines = partial(more_lines, namespace=None) reader.paste_mode = True # Avoid extra indents + reader.help_mode = False def get_prompt(lineno, cursor_on_line) -> str: return "" diff --git a/Lib/test/test_pyrepl/test_reader.py b/Lib/test/test_pyrepl/test_reader.py index 986bc36d9a1070..47fb1ee22e7a0a 100644 --- a/Lib/test/test_pyrepl/test_reader.py +++ b/Lib/test/test_pyrepl/test_reader.py @@ -138,6 +138,20 @@ def test_up_arrow_after_ctrl_r(self): reader, _ = handle_all_events(events) self.assert_screen_equals(reader, "") + def test_help_toggles_instead_of_nesting(self): + + events = [ + Event(evt="key", data="f1", raw=bytearray(b"")), + ] + + no_paste_reader = functools.partial( + prepare_reader, + paste_mode=False, + help_mode=True, + ) + reader, _ = handle_all_events(events, prepare_reader=no_paste_reader) + self.assertFalse(reader.help_mode) + def test_newline_within_block_trailing_whitespace(self): # fmt: off code = ( From b9e538eb743ab5f201f040dc4e1c23049114f4c6 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Tue, 21 Jan 2025 19:46:29 +0000 Subject: [PATCH 2/3] Add NEWS entry --- .../next/Library/2025-01-21-19-46-20.gh-issue-121584.O3lEdm.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2025-01-21-19-46-20.gh-issue-121584.O3lEdm.rst diff --git a/Misc/NEWS.d/next/Library/2025-01-21-19-46-20.gh-issue-121584.O3lEdm.rst b/Misc/NEWS.d/next/Library/2025-01-21-19-46-20.gh-issue-121584.O3lEdm.rst new file mode 100644 index 00000000000000..99a138abf93175 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-01-21-19-46-20.gh-issue-121584.O3lEdm.rst @@ -0,0 +1,2 @@ +Toggle helper instead of nesting instances when using key bindings in the +new REPL. From 1901ba83f3d0624b5b6f995d87722707cfb2ad63 Mon Sep 17 00:00:00 2001 From: saucoide Date: Sat, 25 Jan 2025 12:52:52 +0100 Subject: [PATCH 3/3] change sigint by raising a keyboard interrupt --- Lib/_pyrepl/commands.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Lib/_pyrepl/commands.py b/Lib/_pyrepl/commands.py index 6202d4726b7aaa..0b8f1686a568b1 100644 --- a/Lib/_pyrepl/commands.py +++ b/Lib/_pyrepl/commands.py @@ -435,11 +435,9 @@ def do(self) -> None: class help(Command): def do(self) -> None: import _sitebuiltins - import signal - if self.reader.help_mode: self.reader.help_mode = False - signal.raise_signal(signal.SIGINT) + raise KeyboardInterrupt else: self.reader.help_mode = True with self.reader.suspend(): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy