From c5e530d7afe3a4ce577006b351c7e9a4aa2fe33a Mon Sep 17 00:00:00 2001 From: kobarity Date: Sun, 16 Feb 2025 19:07:04 +0900 Subject: [PATCH] Improve completion in IPython/Python 3.13 IPython/Python 3.13 indirectly imports rlcompleter, and the completer is set up to reference rlcompleter.__main__. However, this rlcompleter.__main__ is different from the __main__ in the REPL execution. Therefore, this completer cannot correctly complete the REPL globals. To address this issue, we override rlcompleter.__main__ with __main__ only in the case of IPython. * lisp/progmodes/python.el (python-shell-completion-native-setup): Modify __PYTHON_EL_native_completion_setup(). (Bug#76205) (cherry picked from commit a75f4449fa2aceab54f28c5ef46f82225376c2a4) --- lisp/progmodes/python.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 221ef745ce1..26b3693b2a8 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -4530,6 +4530,13 @@ def __PYTHON_EL_native_completion_setup(): if not is_ipython: readline.set_completer(new_completer) else: + # Ensure that rlcompleter.__main__ and __main__ are identical. + # (Bug#76205) + import sys + try: + sys.modules['rlcompleter'].__main__ = sys.modules['__main__'] + except KeyError: + pass # Try both initializations to cope with all IPython versions. # This works fine for IPython 3.x but not for earlier: readline.set_completer(new_completer) -- 2.39.5