From: kobarity Date: Sun, 16 Feb 2025 10:07:04 +0000 (+0900) Subject: Improve completion in IPython/Python 3.13 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c5e530d7afe3a4ce577006b351c7e9a4aa2fe33a;p=emacs.git 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) --- 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)