From 52d1b4e62fd35e19d4f2c231fe48d463cb83d374 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Sat, 18 Dec 2010 03:48:32 +0000 Subject: #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. --- Misc/NEWS | 3 +++ Modules/readline.c | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index c486a59..37a2333 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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). diff --git a/Modules/readline.c b/Modules/readline.c index 466ec51..8337956 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -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) } -- cgit v0.12