--- configure.old 2016-08-01 06:10:47.000000000 +0200 +++ configure 2016-08-01 06:11:48.000000000 +0200 @@ -12967,9 +12967,9 @@ py_cv_lib_readline=no $as_echo_n "checking how to link readline libs... " >&6; } for py_libtermcap in "" ncursesw ncurses curses termcap; do if test -z "$py_libtermcap"; then - READLINE_LIBS="-lreadline" + READLINE_LIBS="-ledit" else - READLINE_LIBS="-lreadline -l$py_libtermcap" + READLINE_LIBS="-ledit -l$py_libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13013,13 +13013,13 @@ $as_echo "#define HAVE_LIBREADLINE 1" >> fi # check for readline 2.1 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_callback_handler_install in -lreadline" >&5 -$as_echo_n "checking for rl_callback_handler_install in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_callback_handler_install in -ledit" >&5 +$as_echo_n "checking for rl_callback_handler_install in -ledit... " >&6; } if ${ac_cv_lib_readline_rl_callback_handler_install+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13059,7 +13059,7 @@ fi # check for readline 2.2 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : have_readline=yes @@ -13072,7 +13072,7 @@ if test $have_readline = yes then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | @@ -13085,7 +13085,7 @@ rm -f conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | @@ -13099,13 +13099,13 @@ rm -f conftest* fi # check for readline 4.0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -lreadline" >&5 -$as_echo_n "checking for rl_pre_input_hook in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_pre_input_hook in -ledit" >&5 +$as_echo_n "checking for rl_pre_input_hook in -ledit... " >&6; } if ${ac_cv_lib_readline_rl_pre_input_hook+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13143,13 +13143,13 @@ fi # also in 4.0 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -lreadline" >&5 -$as_echo_n "checking for rl_completion_display_matches_hook in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_display_matches_hook in -ledit" >&5 +$as_echo_n "checking for rl_completion_display_matches_hook in -ledit... " >&6; } if ${ac_cv_lib_readline_rl_completion_display_matches_hook+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13187,13 +13187,13 @@ fi # check for readline 4.2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -lreadline" >&5 -$as_echo_n "checking for rl_completion_matches in -lreadline... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rl_completion_matches in -ledit" >&5 +$as_echo_n "checking for rl_completion_matches in -ledit... " >&6; } if ${ac_cv_lib_readline_rl_completion_matches+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-lreadline $READLINE_LIBS $LIBS" +LIBS="-ledit $READLINE_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13233,7 +13233,7 @@ fi # also in readline 4.2 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : have_readline=yes @@ -13246,7 +13246,7 @@ if test $have_readline = yes then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | --- setup.py.old 2016-08-01 06:11:23.000000000 +0200 +++ setup.py 2016-08-01 06:11:48.000000000 +0200 @@ -602,7 +602,7 @@ class PyBuildExt(build_ext): exts.append( Extension('audioop', ['audioop.c']) ) # readline - do_readline = self.compiler.find_library_file(lib_dirs, 'readline') + do_readline = self.compiler.find_library_file(lib_dirs, 'edit') readline_termcap_library = "" curses_library = "" # Determine if readline is already linked against curses or tinfo. @@ -658,7 +658,7 @@ class PyBuildExt(build_ext): else: readline_extra_link_args = () - readline_libs = ['readline'] + readline_libs = ['edit'] if readline_termcap_library: pass # Issue 7384: Already linked against curses or tinfo. elif curses_library: --- Modules/readline.c.old 2014-10-12 08:52:03.000000000 +0200 +++ Modules/readline.c 2016-08-01 06:11:48.000000000 +0200 @@ -28,8 +28,7 @@ /* GNU readline definitions */ #undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */ -#include -#include +#include #ifdef HAVE_RL_COMPLETION_MATCHES #define completion_matches(x, y) \ @@ -575,14 +574,13 @@ get_history_item(PyObject *self, PyObjec * difference. */ int length = _py_get_history_length(); - idx --; /* * Apple's readline emulation crashes when * the index is out of range, therefore * test for that and fail gracefully. */ - if (idx < 0 || idx >= length) { + if (idx < 1 || idx > length) { Py_RETURN_NONE; } } @@ -1003,7 +1001,6 @@ readline_until_enter_or_signal(char *pro PyEval_SaveThread(); #endif if (s < 0) { - rl_free_line_state(); rl_cleanup_after_signal(); rl_callback_handler_remove(); *signal = 1; @@ -1102,15 +1099,6 @@ call_readline(FILE *sys_stdin, FILE *sys const char *line; int length = _py_get_history_length(); if (length > 0) -#ifdef __APPLE__ - if (using_libedit_emulation) { - /* - * Libedit's emulation uses 0-based indexes, - * the real readline uses 1-based indexes. - */ - line = (const char *)history_get(length - 1)->line; - } else -#endif /* __APPLE__ */ line = (const char *)history_get(length)->line; else line = "";