#9907: call rl_initialize early when using editline on OSX

editline rl_initialize apparently discards any mappings done before it
is called, which makes tab revert to file completion instead of inserting
a tab.  So now on OSX we call rl_initialize first if we are using
readline, and then re-read the users .editrc (if any) afterward so they
can still override our defaults.

Patch by Ned Deily, modified by Ronald Oussoren.
This commit is contained in:
R. David Murray 2010-12-18 03:48:32 +00:00
parent c539a2a88e
commit 52d1b4e62f
2 changed files with 18 additions and 2 deletions

View File

@ -20,6 +20,9 @@ Core and Builtins
Library
-------
- Issue $9907: Fix tab handling on OSX when using editline by calling
rl_initialize first, then setting our custom defaults, then reading .editrc.
- Issue #4188: Avoid creating dummy thread objects when logging operations
from the threading module (with the internal verbose flag activated).

View File

@ -889,6 +889,14 @@ setup_readline(void)
Py_FatalError("not enough memory to save locale");
#endif
#ifdef __APPLE__
/* the libedit readline emulation resets key bindings etc
* when calling rl_initialize. So call it upfront
*/
if (using_libedit_emulation)
rl_initialize();
#endif /* __APPLE__ */
using_history();
rl_readline_name = "python";
@ -920,8 +928,13 @@ setup_readline(void)
* XXX: A bug in the readline-2.2 library causes a memory leak
* inside this function. Nothing we can do about it.
*/
rl_initialize();
#ifdef __APPLE__
if (using_libedit_emulation)
rl_read_init_file(NULL);
else
#endif /* __APPLE__ */
rl_initialize();
RESTORE_LOCALE(saved_locale)
}