]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve completion in IPython/Python 3.13
authorkobarity <kobarity@gmail.com>
Sun, 16 Feb 2025 10:07:04 +0000 (19:07 +0900)
committerEshel Yaron <me@eshelyaron.com>
Tue, 18 Feb 2025 21:33:40 +0000 (22:33 +0100)
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

index 221ef745ce1b6a10027a7a7fd802ca0dfa737371..26b3693b2a8edac169c38d8dff310c8de6a9ca74 100644 (file)
@@ -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)