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)
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)